Forum: Mikrocontroller und Digitale Elektronik Schrittmotor Algorithmus


von Miche L. (ihoid)


Lesenswert?

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.

von aSma>> (Gast)


Lesenswert?

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

von ChrisMicro (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

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?

von Bergi84 (Gast)


Lesenswert?

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.

von aSma>> (Gast)


Lesenswert?

> 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

von MaWin (Gast)


Lesenswert?

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.

von ChrisMicro (Gast)


Lesenswert?

>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

von Bergi84 (Gast)


Lesenswert?

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.

von ChrisMicro (Gast)


Lesenswert?

>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.

von Conny G. (conny_g)


Lesenswert?

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.)

von Alain S. (Firma: REFAST GmbH) (alainstaub)


Angehängte Dateien:

Lesenswert?

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

von Alain S. (Firma: REFAST GmbH) (alainstaub)


Lesenswert?

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
Noch kein Account? Hier anmelden.