Forum: Mikrocontroller und Digitale Elektronik Positionierung mit BLDC Motor


von Mach F. (machfax)


Lesenswert?

Hallo

Ich arbeite mit einem Eval Board von TI RDK-BLDC.
Dabei funktioniert die Geschwindigkeitsregelung super. Ich muss jetzt 
aber noch zusätzlich eine Positionsregelung realisieren. Ich habe jetzt 
vom Quadraturencoder die aktuelle Position (IST) und die gewünschte 
Sollposition gebe ich über UART ein.
Der PI Regler für die Position funktioniert, nur wie muss ich diesen 
jetzt mit dem PI Regler vom Speed verknüpfen?
Ich stehe da gerade an und weiss nicht wie ich vorgehen soll, denn der 
Ausgang des PI Reglers muss bei Regelabweichung = 0 den Motor sofort auf 
null fahren. Ich komme infach nicht weiter.

Danke für jeglichen Input.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

prinzipiell ist das trivial, wenn die Positionsabweichung 0 ist, muss 
die Geschwindigkeit 0 sein - der Teufel steckt im Detail, hauptsächlich 
im zeitlichen Verhalten, Verzögerungen bewirken Überschwingen. Also 
erstens muss alles möglichst schnell funktionieren, und möglicherweise 
brauchst du auch noch einen D-Anteil. Mit den richtigen PID-Parametern 
lässt sich präzise auf 0 fahren. Da wird man viel experimentieren 
müssen, langsames Verfahren in der Nähe des Ziels hilft zunächst mal.

Gruss Reinhard

von Mach F. (machfax)


Lesenswert?

Ok vielen Dank

Das heisst ich muss die Regelabweichung als Soll-Speed nehmen und dem PI 
vom Speed Regler einspeisen?

Gruss

von Mach F. (machfax)


Lesenswert?

Kann ich nicht den Ausgang vom PI(D) vom Positionieren direkt auf den 
Speed geben und den PI für den Speed rauswerfen?
Danke & Gruss

von Reinhard Kern (Gast)


Lesenswert?

Dominik Eugster schrieb:
> den PI für den Speed rauswerfen?

Du meinst, als Steuergrösse für Speed? Das macht genau genommen 
garkeinen Unterschied aus, jedenfalls nicht im mathematischen Sinn - 2 
hintereinandergeschaltete PID-Regler ergeben wieder einen PID-Regler. Da 
das aber heute alles Algorithmen sind und keine Ansammlung von OpAmps 
fällt das nicht weiter auf. Man kann sogar noch einen Schritt weiter 
gehen und den Positionsregler direkt auf den Strom wirken lassen, wenn 
man einen DC-Motor verwendet. Strom -> Drehmoment -> Beschleunigung -> 
Drehzahl -> Weg, daher kann man alles "in einem Aufwasch" regeln. 
Allerdings wird die Sache dadurch nicht übersichtlicher. Ausserdem 
braucht man oft Zwischengrössen, z.B. die Geschwindigkeit als 
vorgegebene Vorschubgeschwindigkeit, damit das Werkzeug optimal 
arbeitet. Aber, wie gesagt, ist eh alles bloss Software.

Gruss Reinhard

von Mach F. (machfax)


Lesenswert?

Hallo

Vielen Dank für die Inputs.
Zum obigen Post:
Ich muss ja eine stabile Geschwindigkeit haben, somit benötige ich mal 
sicher SOLL Geschw. und IST Geschw., die über einen PI(D) Regler 
geregelt wird, damit der Motor die Geschwindigkeit auch hält bei 
Laständerung.

Damit ich jetzt aber punktgenau anfahren kann, benötige ich die SOLL und 
IST Position vom Weggeber und muss diese auch PID regeln. Der Ausgang 
des Positionsreglers kann ich jetzt ja als Sollgeschwindigkeit beim 
Geschwindigkeitsregler einspeisen. Wenn ich das nicht mache, und den 
Ausgang vom Positionsregler direkt auch den Motor gebe, läuft mir die 
Geschwindigkeit ja oben weg. Ich könnte den Ausgang jetzt begrenzen aber 
dann ist die Geschwindigkeit bei Laständerung unterschiedlich. Verstehe 
ich das jetzt wieder falsch?

Ich sehe nicht, wie ich die Geschwindigkeit stabil halten kann nur mit 
einem PID Regler der die Position anfährt.

Bitte um HILFE. Vielen Dank!

von Karl H. (kbuchegg)


Lesenswert?

Dominik Eugster schrieb:

> Ich sehe nicht, wie ich die Geschwindigkeit stabil halten kann nur mit
> einem PID Regler der die Position anfährt.

Ich auch nicht.
Ich gebe aber zu bedenken, dass bis jetzt hier ja noch niemand wusste, 
dass die stabile Einhaltung einer Geschwindigkeit ein Muss für dich ist. 
Oftmals ist das ja nicht der Fall, dass diese Forderung besteht. Der 
'Schlitten' (oder was auch immer) fährt so schnell er kann eine Position 
an.

von Mach F. (machfax)


Lesenswert?

Ja wenn ich aber die Geschwindigkeit halten muss und die Position genau 
anfahren muss, kommt doch nur dieses Blockschaltbild zum Einsatz und 
nicht 1 einzelner Regler, oder?

http://de.wikipedia.org/wiki/Lageregelung

von Mach F. (machfax)


Lesenswert?

Hallo

Nochmals einen Nachtrag bezüglich PID Positionsregelung:
Hat jemand eine Idee wie ich die Differenz zwischen Soll und Ist der 
aktuellen EncoderPosition begrenzen soll?
Ich meine, wenn ich Soll = 100'000 und Ist = 0 habe wird mein PID ERROR 
so gross, dass das nicht mehr gut regelbar ist. Aber ich könnte zum 
Beispiel den Positions PID erst einschalten, wenn ich eine gewisse 
Position vor der Zielposition bin. Aber wie soll das aussehen, wenn die 
Geschwindigkeit und Rampe unterschiedlich gross ist? Soll ich 
entsprechend der Bremsrampe und der aktuellen Geschwindigkeit 
zurückrechnen, wo ich anfangen soll zu Bremsen, damit ich sicher vor dem 
Target Punkt zum Stehen komme? Danach könnte ich kurz vor der Target 
Position den Positions PID aktivieren undc damit den restlichen Weg bis 
zum Zielpunkt fahren.

Vielen Danke und Gruss

von Harald M. (mare_crisium)


Lesenswert?

Dominik,

was Du vorhast, heisst im Fachjargon "Kaskadenregelung"; wenn Du mit dem 
Suchbegriff im Internet guckst, findest Du jede Menge Anregungen.

Ciao,

Harald.

von Mach F. (machfax)


Lesenswert?

Hallo

Ok, vielen Dank. Aber wie komme ich auf die Position, an welcher ich die 
Bremsrampe einleiten soll?

Ich habe die aktuelle Position in Counts, die aktuelle Geschwindigkeit 
in U/min, die Bremsrampe in Anzahl U/min /s und die Target Position. Wie 
komme ich jetzt auf den Punkt, an welchem ich die Bremsrampe einleiten 
muss? (mal ohne PID Positionsregler), dieen werde ich danach zuschakten. 
Wenn dieser Punkt stimmt, und ich dann die Bremsrampe einleite, müsste 
die angefahrene Position schon recht genau stimmen.

Danke

von Mach F. (machfax)


Lesenswert?

Ich habe jetzt den Punkt flgendermassen berechnet:

TestPunkt = ((g_ulMeasuredSpeed (U/min)*g_ulMeasuredSpeed)*(Encoder 
Counts / U /60 (wegen min->s))) / UI_PARAM_DECEL (U/min / s);

Punkt wo Bremsung eingeleitet werden muss = Target-Position - TestPunkt

Funktioniert nicht schlecht, aber stimmt das auch?

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.