Forum: Mikrocontroller und Digitale Elektronik Schrittmotor Beschleunigungsrampe etwas anders


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo zusammen,

ich krieg das nicht wirklich in mein Hirn...

ich möchte einen Schrittmotor ansteuern, aber anders als gewöhnlich geht 
es mir nicht um absolute Positionierung, sondern nur um Drehzahlen. In 
unregelmäßigen Abständen wird eine Soll-Drehzahl vorgegeben (vor- oder 
rückwärts, aber das sollte am Prinzip nix ändern), und abhängig von der 
aktuellen Geschwindigkeit (welche umgekehrt proportional zur letzten 
Clock-Zykluszeit sein sollte) muss beschleunigt oder gebremst werden. 
Knifflig wird das ganze, wenn mitten in einer Beschleunigungsphase eine 
neue Soll-Drehzahl vorgegeben wird.

Ich lese nun seit Stunden die AVR446 (Application note zu "Linear speed 
control of stepper motors") aber ich bin nicht in der Lage dies auf 
meine Bedürfnisse umzusetzen.

Der wesentliche Teil scheint mir die Berechnung der Beschleunigungsrampe 
zu sein: c[n] = c[0] * (sqrt(n+1) - sqrt(n))(wobei c[n] der n-te Counter 
ist)

Was ich nicht auf die Reihe kriege: wenn ich in so einer Rampe bin,  und 
eine neue Soll-Drehzahl habe (der einfachheit halber mal noch höher als 
die letzte Soll-Drehzahl, auf welche gerade beschleunigt wird) dann 
müsste ich doch mitten in die Rampe mit einer neune Rampen-Berechnung 
einsteigen können, und im wesentlichen dieselben Werte für c[n] 
bekommen. Tu ich aber nicht....

grummel kann mir jemand einen Tipp geben, wie man das mathematisch 
ausdrücken kann?

Es geht übrigens nicht darum, dass ich auf meinem uC keine sqrt() 
berechnen will, das ist eine andere Baustelle. Zuerst will ich die 
Theorie in meine Kopf kriegen...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Meinst du nicht, das ein PID Regler da günstiger ist? Wenn du gerade bei 
Atmel bist, schau doch mal AVR221 an.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Matthias Sch. schrieb:
> Meinst du nicht, das ein PID Regler da günstiger ist? Wenn du gerade bei
> Atmel bist, schau doch mal AVR221 an.

Sorry, aber ich glaub grad nicht dass ein PID-Regler eine 
Beschleunigungsrampe ersetzen kann...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Michael Reinelt schrieb:
> Sorry, aber ich glaub grad nicht dass ein PID-Regler eine
> Beschleunigungsrampe ersetzen kann..

Du hast dich da schon ein bisschen rein verbohrt?

Michael Reinelt schrieb:
> In
> unregelmäßigen Abständen wird eine Soll-Drehzahl vorgegeben (vor- oder
> rückwärts, aber das sollte am Prinzip nix ändern), und abhängig von der
> aktuellen Geschwindigkeit (welche umgekehrt proportional zur letzten
> Clock-Zykluszeit sein sollte) muss beschleunigt oder gebremst werden.

Das ist nämlich genau der Job, den so ein Regler macht.
Stellgrösse ist deine Soll-Drehzahl und die Ist-Grösse ist die aktuelle 
Drehzahl.

von Werner (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Meinst du nicht, das ein PID Regler da günstiger ist?

Es geht darum, eine Geschwindigkeitsrampe mit einer bestimmten 
Beschleunigung zu fahren und nicht um das möglichst schnelle Erreichen 
einer neuen Geschwindigkeit. Wie willst du das mit einem PID-Regler 
realisieren, zumal man dafür gar keinen Regler braucht, weil die 
Schrittmotorgeschwindigkeit direkt über die Schrittfrequenz gesteuert 
wird.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Matthias Sch. schrieb:
> Du hast dich da schon ein bisschen rein verbohrt?

Kann schon sein :-)

Nichtsdestotrotz: Der Schrittmotor und seine "Umgebung" hat aufgrund der 
diverser Trägheitsmomente nun mal eine maximale Beschleunigung, über der 
er Schritte (und drehmoment) verliert. Diese Maximalbeschleunigung gibt 
eine Rampe vor, der man idealerweise folgen sollte. Da hilft kein 
PID-Regler...

von Kein Name (Gast)


Lesenswert?

Hast du schon mal einen Blick in das Grbl geworfen?
https://github.com/grbl/grbl/blob/master/stepper.c

Diese Holzhammermethode sieht zwar nicht so elegant aus, wie die 
Beschleunigungsgleichung, funktioniert aber mit beliebig 
zusammengesetzten Segmenten.

von Helmut S. (helmuts)


Lesenswert?

Wenn du nur Geschindigkeiten verstellst, dann brauchst du überhaupt 
keine Wurzel ziehen. Du beschleuigst oder bremst immer mit konstanter 
Beschleunigung. Dazu musst du nur bei jedem Interrupt einen konstanten 
Wert zum Geschwindigkeitswert dazuzählen(abziehen). Der Wert der 
Geschwindigkeit wird bei jedem Interrupt zum Wegwert dazugezählt. Der 
Wegwert bestimmt die Ansteuerung des Schrittmotors.

von Max D. (max_d)


Lesenswert?

Wenn du einen neuen Wert kriegst wirfst du die alte Rampe weg und 
berechnest deine neue ab der von der alten Rampe erreichten 
Geschwindigkeit...
Das sollte eigtl. ganz gut passen da deine Rampe ja darauf ausgelegt ist 
den Schrittmotor immer "kurz vor Schlupf" zu fahren...

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

die Sache ist furchtbar trivial, man braucht weder Rampen noch irgendwas 
überhaupt berechnen. Ich führe eine Variable, die die aktuelle Drehzahl 
angibt, diese wird entsprechend an die Motorsteuerung ausgegeben, und 
eine Variable, die die Solldrehzahl angibt. Alle 10ms (Beispiel) wird 
die aktuelle mit der Solldrehzahl verglichen, und sind sie nicht gleich, 
so wird die aktuelle Drehzahl je nach Unterschied um einen bestimmten 
Betrag erhöht oder eniedrigt. Der Betrag bestimmt die Beschleunigung, 
wurde einmal berechnet und kann in mehreren Stufen eingestellt werden.

Hat man also 200 U/min und erhöht auf 300, so wird also alle 10 ms die 
aktuelle Drehzahl um z.B. 2 erhöht (und der Motor entsprechend 
angesteuert), folglich läuft die aktuelle Drehzahl hoch mit 2 U/s pro 10 
ms oder 200 U/s², bis die gewünschten 300 erreicht sind. Funktioniert so 
seit 20 Jahren problemlos, der Motor läuft auch weich hoch wenn man zum 
Start einfach eine Drehzahl eingibt. Nix mit Rampe berechnen oder 
Wurzelziehen oder noch komplizierteren Algorithmen. Natürlich müssen 
alle Werte den Bedürfnissen angepasst werden.

Aus der Sichtweise eines Theoretikers ist das natürlich ein völlig 
indiskutables Verfahren, wer das fürs Studium braucht, gleich wieder 
vergessen.

Gruss Reinhard

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.