Forum: Mikrocontroller und Digitale Elektronik Ansteuerung einer PMSM (BLDC) als Servo, Positionsregelung


von Dino H. (hdino)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bastle zur Zeit an einem Servo auf PMSM-Basis zum Antrieb eines 
Gimbals und suche dazu eine passende Ansteuerung. Im Netz findet man ja 
sehr viel zur Regelung von Brushless Motoren, allerdings bezieht sich 
das fast immer auf den Betrieb mit mehreren Umdrehungen, was sich 
vielleicht nicht direkt übertragen lässt.

Mein Versuchsaufbau besteht momentan im Wesentlichen aus dem Brushless 
Motor (GB2208 von T-Motor, 12N14P) und einem optischen Encoder mit 500 
CPR, der durch Flankenauswertung auf 2000 Ticks pro Umdrehung kommt. Der 
Motor wird über drei TC4452 versorgt, die mit den PWM-Ausgängen eines 
STM32F103 verbunden sind (Details: 
http://www.olliw.eu/2013/storm32bgc/). Beim Motor nehme ich an, dass er 
nach dLRK-Schema gewickelt ist (vgl. 
http://www.bavaria-direct.co.za/scheme/common/). Die Phasenströme kann 
ich aktuell leider nicht messen.

Vom Motor habe ich einmal die Gegen-EMK mit dem Oszi angeschaut, was 
einen recht guten Sinus ergab. Nun wird allgemein empfohlen, den Motor 
in diesem Fall auch mit sinusförmigen Strömen anzusteuern. Daher habe 
ich dem Motor testweise mal folgende Spannungen vorgegeben, womit sich 
ein guter Rundlauf einstellt:

(Den Faktor 0.5 habe ich eingefügt, um den möglichen Wertebereich auf 
die Größe 1 zu normieren, wobei -0.5 einem PWM-Tastgrad von 0% und +0.5 
einem Tastgrad von 100% entspricht.)

Nun sind die Anforderungen an ein Servo ja nicht unbedingt der perfekte 
Rundlauf, sondern eher Haltemoment und Positioniergeschwindigkeit 
(Dynamik). Daher habe ich mir mal die Spannungen über den drei 
Spulenpaaren angeschaut:

[siehe Plot spulenspannungen.png]

Dabei ist mir aufgefallen, dass der verfügbare Wertebereich nicht 
vollständig abgedeckt wird, d.h. die Amplituden haben den Wert +/- 
sqrt(3)/2 = +/-0.866, obwohl +/-1 möglich ist. Nehmen wir z.B. den Fall 
phi=0, für den sich folgende Außenleiterspannungen ergeben:

Damit ergeben sich folgende Spulenspannungen:

Diese können nun mit dem Faktor 2/sqrt(3) auf die größtmögliche 
Amplitude skaliert werden:

Um diese Spulenspannungen zu erreichen, sind folgende 
Außenleiterspannungen nötig:

Nun habe ich einmal (L1, L2, L3) und (L1*, L2*, L3*) an den Motor 
angelegt. In beiden Fällen liegt der "Rastpunkt" an der gleichen Stelle, 
soweit alles in Ordnung. Dann habe ich einmal die Haltemomente bestimmt, 
also wie viel Drehmoment nötig ist, bis der Motor in den nächsten Sektor 
springt. (Darf man in diesem Fall auch von Kippmoment sprechen?) Im Fall 
von (L1, L2, L3) waren dazu etwa 16 mNm erforderlich, mit den skalierten 
Größen waren es dann rund 20 mNm, also doch deutlich mehr.

Für ein Servo ist der zweite Fall also wahrscheinlich der 
interessantere. Man könnte nun die allgemeinen Spulenspannungen mit dem 
Faktor 2/sqrt(3) skalieren und passende Funktionen für die 
Außenleiterspannungen suchen. Leider gibt es dafür im allgemeinen Fall 
unendlich viele Lösungen. Eine Möglichkeit habe ich mal angehängt 
(aussenleiterspannungen_bsp.png).

Ich vermute mal, dass diese nicht wirklich optimal ist. Zum einen sind 
die Steigungen nicht stetig, zum anderen befindet sich das 
3-Phasen-System nicht mehr im Gleichgewicht, wie man an der 
eingezeichneten Summe sehen kann. Oder stellt das beides gar kein 
Problem dar?

Was mich nun interessieren würde: Was haltet ihr von diesem Ansatz? Gibt 
es vielleicht bessere Strategien? Oder würde es sich lohnen, den Strom 
zu messen und FOC zu machen?

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Alles korrekt beobachtet. Richtig, der Mittelpunkt muss nicht auf GND 
sein, und bleiben. Man kann den zu maximalen Ausnutzung der Endstufe, 
resp des Supplies auch asymmetrisch bewegen. Dh man erreicht mit weniger 
Speisung eine hoehere Drehzahl, oder mehr Drehmoment. Was wichtig ist, 
dass die Spulen-Spannungen und -Stroeme betragsmaessig jeweils gleich 
sind.

Wie hoch sollte man die Spulen im Langsam-Dreh-Modus, resp im Stillstand 
bestromen ? Das ist eine Frage des Drehmomentes, das benoetigt wird. 
Also eine Frage des Systemes. Zur Minimierung der Verlustleistung, 
sicher nicht maximal. Ich wuerd mal die Amplituden bei Winkelfehler Null 
zurueckfahren. Aber wie gesagt, eine Frage des Systems. Ist die Strecke 
schon integrierend, ist bei Winkelfehler Null schon ein Drehmoment 
noetig ?

von MaxK (Gast)


Lesenswert?

Dieser Fred ist ja schon etwas älter aber falls von Interesse es gibt 
fertige und auch preiswerte Lösungen wie hier:
https://www.youtube.com/watch?v=tYWHw7w_MXE
für genau die Fragestellung des TO.
Auch open-source gibt's was für STM32, habe ich aber selbst noch nicht 
in Betrieb (Aber geplant)
https://github.com/pekkaroi/bldc-drive

Gruß
Max

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.