zurzeit stecken mein Projektpartner und ich bei der Ansteuerung für unseren Schrittmotor fest. Zunächst mal unser Setup:
Schrittmotor ST5918L4508 von Nanotec
Schrittmotorendstufe SMCI47-S-2 von Nanotec
Arduino Mega 2560
Wir bekommen den Motor zwar über die normale Stepperbibliothek des Arduino angesteuert, kommen jedoch nicht auf die gewünschte Umdrehungsfrequenz von 3000 u/min, da die I/Os eine begrenzte Schaltfrequenz haben. Bevor die Frage nach der Belastbarkeit des Motors auftaucht, ja der Motor kann laut Datenblatt die 3000 1/min.
Bisher haben wir es über die normale Stepperbibliothek, tone() und das Prinzip von blinkwithoutdelay ausprobiert.
Als letztes hatten wir es mit accelStepper probiert. Allerdings hatten wir selbst mit dieser Bibliothek Probleme (Beispiel Sketch SpeedControl), da unser Motor sich nicht mit der gewünschten Drehzahl gedreht hat und/oder bei der Ansteuerung Probleme gemacht hat und teilweise nach rechts und links gesprungen ist.
Mal ein Beispiel aus dem Sketch:
#include <AccelStepper.h>
AccelStepper stepper(1, 8, 9); // pin 8 = step, pin 9 = direction
Dabei haben wir Pin 9 aber nicht belegt oder ihn auch mal auf digitalWrite (9, HIGH) geschrieben, was aber nichts geändert hat. Pin 8 ist unsere Verbindung zur Endstufe und sollte uns das Taktsignal liefern.
Auch mit dem Befehl "stepper.setAcceleration()" konnten wir den Motor nicht besser ansteuern, dabei hatten wir die Beschleunigung auf 100 Steps/s und setSpeed auf 1000 Steps/s.
Unseren Motor betreiben wir im Vollschritt bei 1,8°, also 200 Schritte für eine Umdrehung.
3000 1/min wären 50 Ups, also 10000 Schritte/s.
Mit der Software von Nanotec konnten wir den Motor bereits auf die Drehzahl bringen.
Wie habt Ihr den Motor geschaltet. Die Halbwicklungen in serie oder paralell? Mit welcher Spannung versorgt Ihr den Treiber? Welchen Motorstrom habt ihr eingestellt?
Wie steuert Ihr den Treiber SMCI47-S-2 an. Laut Datenblatt hat der eine RS485 Schnittstelle und keine direkten STEP und DIR Eingänge.
Der Treiber kannn mit der verwendeten Bibliothek nicht angesteuert werden!!
Die Motorwicklungen sind parallel geschaltet. Den Treiber versorgen wir mit einer 48V 10A Spannungsquelle, wobei der Phasenstrom des Motors auf 6,3A begrenzt wird.
Bei der Parametrierung der Endstufe mithilfe Nanotec PRO GUI können die die Eingänge der Endstufe eingestellt werden. Dabei kann dem Eingang 6 der Takt und der Eingang 5 mit Richtung parametriert werden. Die RS485 Schnittstelle ist lediglich zum parametrieren der Endstufe gedacht (Phasenstrom begrenzen und festlegen der I/Os).
Die Schnittstelle kann den Treiber bzw Motor auch ansteuern. Wie Du geschrieben hast habt ihr es über PC bereits gemacht. Seit ihr sicher keinen Fehler in den Einstellungen gemacht zu haben?
Laut Drehmomentdiagramm ist es besser den Motor mit den Wicklungen in Serie und 3,22 A zu betreiben. So hat er ein größeres Drehmoment bei 3000RPM.
Wie habt ich den Arduino an die Eingänge angeschlossen?
Die Endstufe haben wir laut dem technischen Support von nanotec richtig programmiert. Zusätzlich hatten wir den taktrichtungsmodus ausprobiert.
Den Motor in Serie zu beschalten wäre später das Feintuning, prinzipiell ist das auch möglich.
Wir hatten den arduino bisher nur an den Takt Eingang (Eingang 6) der Endstufe gelegt. Den Richtungs Eingang (Eingang 5) hatten wir nicht belegt, da es ja theoretisch so ein LOW Signal liefert.
Momentan bekommen wir den Motor zwar mit der AccelStepper angesteuert, allerdings nur bis zu einer gewissen (sehr geringen) Drehzahl.
Leider muss es der Mega sein, aber danke für den Tipp!
Wenn es ein Mega sein soll, dann vermute ich, daß der noch mehr machen soll als nur den Schrittmotor ansteuern. Wenn es nur mit dem Motor alleine schon einen Engpaß gibt, wirds später nur noch enger. Ich würde gleich einen geeigneteren Controller für den Motor nehmen, und dann ausprobieren, was sonst noch draufpaßt. Den Mega kann man ja für alles andere weiterbenutzen.
Den Mega brauchen wir aufgrund der Anzahl der Pins, allerdings lässt sich der Motor auch mit alleinstehendem Code nicht schnell genug ansteuern, Engpässe sollten nicht das Problem sein. Die Ansteuerung muss aber leider über einen Controller laufen, da wir die Drehfrequenz über eine HTML Seite übermitteln.
da wir die Drehfrequenz über eine HTML Seite übermitteln.
Schrittmotoren werden zum positionieren verwendet.
Der Schrittmotor spielt seine Stärken bei langsamer Bewegung, und im Stand aus.
Das Drehmoment deines Motors, ist bei 3000U/min so weit im Keller, dass er gerade noch so laufen mag. Antreiben kann man damit so gut wie nix mehr.
Für solche Drehzahlen, verwendet man eher Bürstenmotoren mit Encoder.
Bei noch höheren Drehzahlen BLDC
Stimmt leider so auch nicht, mit dem Laptop kann man die Endstufe direkt Steuern, da macht der Motor 3000 u/min auch mit Getriebe.
Aber um zum eigentlichen Problem zurück zu kommen:
Unser Motor schafft nicht mehr als ca. 300 u/min wenn wir ihn mit dem Arduino ansteuern, auch wenn wir mit der Geschwindigkeit in der AccelStepper Bibliothek höher gehen.