Hallo liebe Forengemeinde, Es gibt viele Threads zur Rampenberechnung an Schrittmotoren bei Positionieranwendungen. Nun würden mich eure Erfahrungen interessieren, wie man aus einem Schrittmotor die beste Dynamik herauskitzeln kann. Dazu sind mir folgende Dinge eingefallen, welche man in beliebiger kombination realisieren kann. 1. Beschleunigung 1.1 lineare geschwindigkeitsrampe 1.2 stetig, differenzierbare geschwindigkeitsrampe 2. Schrittbetrieb 2.1 Vollschrittbetrieb 2.2 Halbschrittbetrieb 2.3 Mikroschrittbetrieb 2.4 beschleunigen mit Mikroschrittbetrieb, mit steigender Geschwindigkeit weniger Stützstellen bis hin zum Vollschrittbetrieb. 3. Phasenstrom 3.1 konstante Amplitude. 3.2 reduzierte Amplitude für sanfteres anfahren. Macht es Sinn, bei hohen Geschwindigkeiten vom Mikroschritt in den Voll- oder Halbschrittbetrieb überzugehen oder lässt sich dadurch keine höhere Endgeschwindigkeit erzielen? Die Idee mit dem reduzieren der Amplitude für sanfteres anfahren aus der Ruhelage habe ich eigentlich schon wieder verworfen, da in diesem Moment die größte Kraft benötigt wird (würde evtl. bei reinem Vollschrittbetrieb nützlich sein). Mich würde interessieren, welche Algorithmen Ihr bereits realisiert habt und welche eurer Meinung nach sinnvoll sind, oder auch nicht. VG ihoid PS: Ich habe zwar eine Hardware auf welcher ich evtl. verschiedene Möglichkeiten ausprobieren möchte, die Fragestellung ist jedoch aus Interesse allgemeingültig.
Servus, folgenden Algorithmus habe ich schon mal in den stm32f103 implementiert: http://www.atmel.com/images/doc8017.pdf http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time (siehe auch den PIC code an). Das erschlägt schon mal deinen ersten Punkt. Zu2: Ein Hybrid Schrittmotor hat auch die Eigenschaften eines Reluktanzmotors. Bei langsamer Geschwindigkeit führt dies zum schwankenden Drehmoment und somit zu einen unruhigen Lauf (Resonanz) beim Vollschritt. In vielen Datenblätter zu den Schrittmotoren kriegt man immer Drehzahl/-Drehmoment Diagramme in Voll-/Halbschritt in Abhängigkeit der Spannung gezeigt. Interessant wäre es auch im Mikroschritt zu wissen (möglich erreichbare Drehzahl). Wobei alle Hersteller unterschiedliche Decay Modus besitzen... Zu3: Eine "reduzierte Amplitude" für das Anfahren halte ich für schwachsinnig. Außer du überdimensioniert den Motor. > Macht es Sinn, bei hohen Geschwindigkeiten vom Mikroschritt in den Voll- > oder Halbschrittbetrieb überzugehen oder lässt sich dadurch keine höhere > Endgeschwindigkeit erzielen? Ich würde sagen: Jain. Man muss erstmal das programmiertechnisch so umsetzen, dass man keine Schrittverluste bekommt. Viele Stepperdriver wie z.B. von Toshiba, Allegro, geben einen Impuls bei sin=0 und cos=1... Siehe auch die o.g. Gedankengänge: -Wie verhält sich das Drehmoment bei hohen Geschwindigkeiten beim Mikrostep vs Fullstep -bei verschiedenen Decay Modus? -Ist eher ein Umschalten des Decay Modus sinnvoll (Toshiba)? Die Ansteuerung durch FPGA und/oder 32-Bitter ist heutzutage kein großer Akt. Vielen Leuten reicht 16 fach Mikrostep aus. Bei 128 oder 256 muss man ein wenig Kopfrechnen bei 3 oder 4 Achsen. Hoffe auch auf ein wenig auf Resonanz :) mfg
Hier habe ich mal das DDS-Prinzip auf eine Schrittmotorsteuerung angewandt: https://github.com/ChrisMicro/stepperMotor/blob/master/stepperMotor.ino D.h. das ganze läuft mit konstanter Abtastfrequenz und schaltet quasi automatisch die Schrittweite.
ChrisMicro schrieb: > Hier habe ich mal das DDS-Prinzip auf eine Schrittmotorsteuerung > angewandt: Schön kurz und gut für Anfänger! Vor allem, wenn die Kommentare erläutern, was da so passiert.
Miche L. schrieb: > Ich habe zwar eine Hardware auf welcher ich evtl. verschiedene > Möglichkeiten ausprobieren möchte, die Fragestellung ist jedoch aus > Interesse allgemeingültig Interessant - hast Du Antworten dazu? Oder versuchst Du Deine Hausaufgaben lösen zu lassen?
Die beste Dynamik aus einem Stepper Holst du raus wenn du ihn wie einen Servomotor (permanent erregte Synchronmaschine) ansteuerst dazu brauchst du jedoch die Rotorposition, sei es durch Selfsensing oder durch einen Positionssensor. Beides eher Aufwendig. Eine recht gute jedoch einfachere Lösung ist eine Trajektorie zur Zielposition mit limitiert Beschleunigung und limitierter Höchstgeschwindigkeit zu berechnen. Damit hast du die Möglichkeit für jeden Reglerdurchlauf neue Sollwerte zu berechnen was die Vibrationen des Schrittmotors minimiert. Um die maximal Mögliche Geschwindigkeit zu erreichen ist es vorteilhaft den Stromregler statt für jede Spule einzeln zu berechnen mit Raumzeigern zu Arbeiten. Damit hat man nicht das Problem das der Regler den schnellen Strom änderungen bei hohen Drehzahlen nicht folgen kann. Somit ist die Drehzahl nur mehr durch die Versorgungsspannung und die thermischen Verluste limitiert.
> Die beste Dynamik aus einem Stepper Holst du raus wenn du ihn wie einen > Servomotor (permanent erregte Synchronmaschine) ansteuerst dazu brauchst > du jedoch die Rotorposition, sei es durch Selfsensing oder durch einen > Positionssensor. Beides eher Aufwendig. Ansteuern oder eher schon regeln?! Mit Servomotor, sin-/cos Ansteuerung ist mir schon klar. Einen Encoder haben viele Stepper, aber bei einer Regelung mit Spiel im Getriebe/Aufbau fängt der schlechte Regler an zu oszillieren. >Selfsensing Woher hast diesen Begriff? > Eine recht gute jedoch einfachere Lösung ist eine Trajektorie zur > Zielposition mit limitiert Beschleunigung und limitierter > Höchstgeschwindigkeit zu berechnen. Ja, das ist jetzt eine Gretchenfrage: -Welche Trajektorie ist für eine bestimmte Masse und Geschwindikeit/Beschleunigung die Richtige? > Damit hast du die Möglichkeit für > jeden Reglerdurchlauf neue Sollwerte zu berechnen was die Vibrationen > des Schrittmotors minimiert. Jetzt sind wir wieder beim regeln und nicht steuern. Da muss du etwas ausholen, damit man dir folgen kann. Normallerweise, legt man die Rampe möglichst steil aus, damit die Vibrationen geringfügig das Sagen haben. > Um die maximal Mögliche Geschwindigkeit zu > erreichen ist es vorteilhaft den Stromregler statt für jede Spule > einzeln zu berechnen mit Raumzeigern zu Arbeiten. Damit hat man nicht > das Problem das der Regler den schnellen Strom änderungen bei hohen > Drehzahlen nicht folgen kann. Somit ist die Drehzahl nur mehr durch die > Versorgungsspannung und die thermischen Verluste limitiert. Wie berechnen man den "Stromregler" bei einen Stepper? Gibt es dazu Formeln? Der Rest hört sich erstmal abgespaced an. Nach einer Flasche Wodka gehe ich auch immer ab. Viel geschrieben ohne, dass man irgendetwas nachvollziehen kann: Hier Stichwort "Raumzeiger". Mein Oszilloskop kennt zwar keine Raumzeiger aber geht ab wie eine Rakete ohne eine Wissenschaft daraus zu machen. mfg
aSma>> schrieb: > Der Rest hört sich erstmal abgespaced an. Ist er auch, Bergi verwechselt Drehstrommotor mit Schrittmotor, er hat wohl an der FH nur gelernt dass beides elektrische Maschinen sind. Ein Schrittmotor mit Microstepcontroller macht den ganzen Raumzeigerkram selbst. Lineare Beschleunigungsrampe reicht eigentlich, allerdings würde ich die Steps nicht per DDS zu festen Zeiten generieren, das ergibt unruhigen Motorlauf, sondern die Zeiten berechnen zu denen steps stattfinden sollen und den Timer von step zu step (meist der anderen Achse) umprogrammieren.
>Lineare Beschleunigungsrampe reicht eigentlich, allerdings würde ich die >Steps nicht per DDS zu festen Zeiten generieren, das ergibt unruhigen >Motorlauf, sondern die Zeiten berechnen zu denen steps stattfinden >sollen und den Timer von step zu step (meist der anderen Achse) >umprogrammieren. Mein DDS-Programm war eher ein Experiment, ob das Ganze praktisch funktioniert. Bei den gegebenen Einstellungen lief man Schrittmotor ziemlich "smooth". Wenn man es etwas umfangreicher und detailiert will, kann man sich auch die Firmware der RAMPS ansehen: https://github.com/MarlinFirmware/Marlin/blob/RC/Marlin/stepper.cpp
Ich meine wie einen Servomotor regeln. Der Positionssensor sollte spielfrei am Motor montiert sein. Unter Selfsensing versteht man die Ermittlung der Rotorposition ohne zusätzlichem Sensor. Im Fall eines Schrittmotors bei niedrigen Drehzahlen durch die Induktivität der Spulen. Aufgrund der ausgeprägten Polung von Schrittmotoren verändert sich diese. Bei höhere Drehzahlen ermittelt man die Position durch die Rückinduzierten Spannungen. Ein Schrittmotor ist eine 2-Phasige Drehstrom Maschine und lässt sich auch so Regeln. Man berechnet die Winkel zwischen dem Stromsollwertzeiger (Phase A ist die x-komponente, Phase B ist die y-Komponente) und dem Stromistzeiger und regelt mit diesem Fehler den Winkel des voreilenden Spannungszeigers. Das gleiche macht man auch mit der Amplitude der Ströme. Das nennt man eine Raumzeigerregelung und es ist eine Transformation die nicht vom Motor oder sonst was selbst erledigt wird. Es ist ein anderer Regeleransatz.
>Unter Selfsensing versteht man die Ermittlung der Rotorposition ohne >zusätzlichem Sensor. Falls der Motor keine Schritte verliert, ergibt sich entspricht die Rotorposition der Schrittzahl. Das Selfsensing wäre in dem Fall der Wert des Schrittzaehlers.
ChrisMicro schrieb: >>Lineare Beschleunigungsrampe reicht eigentlich, allerdings würde ich die >>Steps nicht per DDS zu festen Zeiten generieren, das ergibt unruhigen >>Motorlauf, sondern die Zeiten berechnen zu denen steps stattfinden >>sollen und den Timer von step zu step (meist der anderen Achse) >>umprogrammieren. > > Mein DDS-Programm war eher ein Experiment, ob das Ganze praktisch > funktioniert. Bei den gegebenen Einstellungen lief man Schrittmotor > ziemlich "smooth". > > Wenn man es etwas umfangreicher und detailiert will, kann man sich auch > die Firmware der RAMPS ansehen: > > https://github.com/MarlinFirmware/Marlin/blob/RC/Marlin/stepper.cpp Die arbeiten mit einem Timer von 2 MHz und setzen den Counter nach der Berechnung der Rampe immer entsprechend, so wie Marwin sagt. Habe diese Ansteuerung nämlich kürzlich ergänzt um bei der Bewegung einen Laser für Platinenbelichtung anzusteuern. (Dabei hat sich leider gezeigt, dass je nach Geschwindigkeit, Auflösung und Laserpattern die Dichte der Interrupts zu hoch wird und die Ansteuerung ins Stottern kommt. Letzten Endes habe ich einen externen Lasercontroller gemacht, der das Bitpattern streamt während der Laserschlitten mit konstanter Geschwindigkeit fährt. Die Marlin-Steuerung gibt nur noch einen Sync-Impuls aus.)
Hallo zusammen, ich habe gerade mit einem Kollegen ein Schrittmotortreiber für die Industrie gefertigt. Total sind es zwei Leiterplatten mit einem PIC32MX. Die Motorentreiber sind mit einem A3981 (Bipolar) und 4 MosFet's (Unipolar) aufgebaut. Die Haupteingangsspannung lässt sich ein- und ausschalten und der Strom (Total) wird auch überprüft (bis 48V / 3A). Zusätzlich lassen sich die Wicklungswiderstände messen (bis ungefähr 100 ohm) und auch die einzelnen Spulenströme. Dazu haben wir noch einen LIN Treiber und eine SD-Karte für spätere Anwendungen eingebaut. LIN Treiber funktioniert bereits von 1'200 - 200'000 baud. Kommuniziert wird mit dem Gerät über RS232 oder USB2.0. Dies haben wir für einen Kunden entwickelt und es kommt nun noch die Stand-alone Lösung mit Display und Joystick. Fand das ganze schon sehr interessant, da du mit den Motoren schon viel spielen kannst. Schrittarten sind bei uns Vollschritt, Halbschritt, Halbschritt mit Stromkompensation, Microstepping (1/8 & 1/16). Die Rampen Beschleunigung und Brems sind wahlweise mit je 50 Parametern definierbar, soll bedeuten Anzahl Schritte mit einer bestimmten Frequenz mal 50. Die Ströme, Beschleunigung, Brems, Run und Halte können auch definiert werden. Bei Fragen einfach melden. Beste Grüsse Alain
Ah dazu haben wir noch je 8 Eingänge und Ausgänge (source- sink- Betrieb) aufgebaut, welche auch Funktionen haben wie zum Beispiel Frequenz- oder PWM- Messung oder RUN Signal, etc.
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.