Hallo.
Ich habe einen funktionierenden Servo-Controller und möchte zusätzlich
noch Stepper ansteuern können.
Ich hatte mir dabei gedacht, dass ich einfach die Soll-Position der
Positionssteuerung nehme und per Interrupt als Step-Up/Down an einen
Stepper-Treiber ausgebe.
Wie kann ich allerdings sicherstellen, dass ich die max. Frequenz des
Stepper Motors nicht überschreite?
Pepe schrieb:> Wie kann ich allerdings sicherstellen, dass ich die max. Frequenz des> Stepper Motors nicht überschreite?
Durch die 50Hz Frequenz beim Servosignal ?
Pepe schrieb:> Bitte? Ich steh' am Schlauch...
Wenn es ein Analog Servo ist, kommt alle 20ms ein Impuls.
Das ist für mich 50Hz.
Wenn dieser Impuls 1ms lang ist, steuerst du deinen Stepper so lange
nach links, bis der Endanschlag erreicht ist. Dann ist Ruhe.
Wenn es (Beispiel) 1,75ms ist, geht dein Stepper 3/4 nach Rechts.
Wie schnell du den Stepper ansteuerst, ist deine Sache.
Die Zeit von der Ruhestellung bis zum Vollanschlag kann 5ms dauern,
aber auch 5 Stunden, bleibt dir überlassen.
Servos sind auch nicht alle gleich schnell.
Marc V. schrieb:> Pepe schrieb:> Wie kann ich allerdings sicherstellen, dass ich die max. Frequenz des> Stepper Motors nicht überschreite?>> Durch die 50Hz Frequenz beim Servosignal ?
Man munkelt dass es noch eine Servo-Welt jenseits des Modellbauhorizonts
geben soll.
Pepe schrieb:> Ich habe einen funktionierenden Servo-Controller
Da das Wort "Servo für recht unterschiedliche Geräte benutzt wird,
solltest Du genauer beschreiben, was Du darunter verstehst.
Am besten mit Link.
Ich bin nicht in der Modellbauwelt unterwegs, sondern in der
Antriebstechnik.
Sprich ein klassischer Achscontroller mit angeschlossenem Motortreiber.
In der Firmware läuft (derzeit) eine Bahnsteuerung, welche die Position
des Motors vorgibt und die nachgelagerte Regelung sorgt dafür, dass die
Achse an die entsprechende Position fährt.
Jetzt möchte die Lageregelung des Motors (DC/BLDC oder was auch immer)
durch eine Ansteuerung eines Steppers ersetzen.
Ich stelle mir vor, dass ich die Positionsänderung der Bahnsteuerung
verwende, um die Schritte für den Steppertreiber zu erzeugen.
So weit dürfte dies auch funktionieren, wenn ich langsam genug fahre.
Sollte aber mal die Geschwindigkeit höher werden, kann es auch
vorkommen, dass ich pro Takt der Bahnsteuerung 2 oder mehr Schritte
machen müsste. Die Positionen der Bahnsteuerung werden derzeit mit 1KHz
berechnet.
Wie "verteile" ich nun die Schritte für den Stepper auf die "Takte der
Bahnsteuerung", damit ich nicht die max. Freq. des Steppers
überschreite?
Pepe schrieb:> Sollte aber mal die Geschwindigkeit höher werden, kann es auch> vorkommen, dass ich pro Takt der Bahnsteuerung 2 oder mehr Schritte> machen müsste. Die Positionen der Bahnsteuerung werden derzeit mit 1KHz> berechnet.
Kommt wiederum auf dein Motor an.
Üblich ist von 200 U/min bis 1200 U/min.
Bei 200 Schritte/Umdrehung sind es von 660 Schritte/s bis
4000 Schritte/s oder 0,66 Schritte/ms bis 4 Schritte/ms.
Muss man halt ausrechnen.
Vielleicht hilft dir das, wenn es unbedingt ein Stepper sein mus:
http://www.daycounter.com/Calculators/Stepper-Motor-Calculator.phtml
@Marc Vesely:
Sorry, habe ich vergessen: Ich muss positionieren, die tatsächliche
Drehzahl ist bei mir zweitrangig. Eben bis auf die max. Frequenz, weil
ich ja nicht möchte, dass mir Schritte verloren gehen.
Um jetzt Dein Beispiel zu nehmen: Meine Firmware berechnet alle 1ms die
Position neu. Bei den angenommenen 4000 Schritten/s, bedeutet dies bei
max. Geschwindigkeit, dass ich pro 1ms Takt vier Schritte fahren muss,
damit ich der Bahnsteuerung folgen kann.
Derzeit hab ich aber auch noch keine Ahnung, welchen Stepper ich
ansteuern muss. D.h. ich kann nicht einfach per weiteren Timer eine
Frequenz von z.B. 4KHz für einen IRQ erzeugen, in dem ich dann die 4
einzelnen Steps an den Steppertreiber schicke.
Pepe schrieb:> Sorry, habe ich vergessen: Ich muss positionieren, die tatsächliche> Drehzahl ist bei mir zweitrangig. Eben bis auf die max. Frequenz, weil> ich ja nicht möchte, dass mir Schritte verloren gehen.
Positionieren kannst du beim Schrittmotor mit "Schritte zählen"
übersetzen. Solange du sicher stellst, dass die Referenz stimmt und
niemand sich verzählt, sollte das beherrschbar sein.
Meist gehen die Schritte beim Schrittmotor nicht wegen einer
Überschreitung der max. Frequenz - die gibt es nämlich in dem Sinne gar
nicht - verloren, sondern wegen zu hohem Anspruch an das Drehmoment.
Pepe schrieb:> In der Firmware läuft (derzeit) eine Bahnsteuerung, welche die Position> des Motors vorgibt und die nachgelagerte Regelung sorgt dafür, dass die> Achse an die entsprechende Position fährt.
Das ist eine Beschreibung ohne Kenntnis der tatsächlichen Funktion. In
der Regel ist die Motoransteuerung eine Konstantstromregelung. Diese
bekommt ihren Sollwert von einer übergeordneten
Geschwindigkeitsregelung, diese wiederum bekommt den Sollwert der
Geschwindigkeit von der übergeordneten Lageregelung.
Funktionskonform wäre es, den Geschwindigkeits-Sollwert umzusetzen in
entsprechende Schritte/sec für den Stepper. Aber ein Steppermotor
braucht auch völlig andere Leistungsendstufen als ein Servomotor. Mit
ein bisschen Firmware-Hacking ist das nicht getan.
Georg
Pepe schrieb:> Sorry, habe ich vergessen: Ich muss positionieren, die tatsächliche> Drehzahl ist bei mir zweitrangig. Eben bis auf die max. Frequenz, weil> ich ja nicht möchte, dass mir Schritte verloren gehen.
Schritte werden gezählt, da kann nichts verloren gehen.
> Um jetzt Dein Beispiel zu nehmen: Meine Firmware berechnet alle 1ms die> Position neu. Bei den angenommenen 4000 Schritten/s, bedeutet dies bei> max. Geschwindigkeit, dass ich pro 1ms Takt vier Schritte fahren muss,> damit ich der Bahnsteuerung folgen kann.
Aber nur wenn 1KHz bedeutet, dass jede ms 1/1000 Umdrehung erfolgen
muss, was höchstwahrscheinlich nicht der Fall ist.
Ansonsten kriegst du jede ms die Soll-Position, die wird mit der
Ist-Position verglichen und nur falls nötig, wird die Position
korrigiert.
Wie du die Steppern ansteuerst, ist eine ganz andere Sache.
Wie gesagt, das muss sehr genau berechnet werden.
Wie soll denn überhaupt die Schnittstelle zwischen deinem vorhandenen
Servocontroller und dem Schrittmotor sein? Du wirst ja wohl nicht
erwarten, dass du den Motor direkt an den Controller anschließen
kannst?! Kann der Controller über digitale oder analoge I/Os etwas
ausgeben? Z.B. Takt-/Richtungssignale oder einen analogen
Drehzahlsollwert?
Hat der Schrittmotor bzw. die Achse mit dem Schrittmotor einen Encoder,
so dass du auf dem Controller eine Lageregelung machen könntest? Sonst
fällt analog als Schnittstelle schon mal raus. Und für Takt-/Richtung
dürfte der Lageregeltakt von 1kHz zu langsam sein, wenn du nicht langsam
und ruckelig in Voll- oder Halbschritt fahren willst.
Nachtrag: Wenn du eine programmierbare Schrittmotorsteuerung [1]
verwendest, bei der die Strecke pro "Schritt" aus deinem Controller
einstellbar ist, kann das gehen. Die Beschleunigungs-Rampe für den
Schrittmotor muss dann in der Schrittmotorsteuerung berechnet werden.
Mit freundlichen Grüßen
Thorsten Ostermann
[1]
http://www.mechapro.de/shop/Schrittmotor-Endstufen/Einzelachsen/LAM-DS3044-Programmierbare-5-6A-Mikroschritt-Endstufe::243.html