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.
Magnus M. schrieb: > Man munkelt dass es noch eine Servo-Welt jenseits des Modellbauhorizonts > geben soll. Da war der TO aber noch nicht.
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
Du erstellst einfach eine Geschwindigkeits Rampe. http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time
@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
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.