Forum: Mikrocontroller und Digitale Elektronik BLDC Motorsteuerung mit FOC SVPWM und HAllsensorik


von Peter S. (peter_s37)


Lesenswert?

Hallo liebe Mikrokontrollerprogrammierer da draussen.
Ich bastle gerade an einer Motorsteuerung für bürstenlose Motoren auf 
Basis eines AVR32UC3C und hänge da gerade an einem Problem.
Ich verwende 3 Hallsensoren um die Rotorposition in 6 Sektoren zu 
teilen. Innerhalb eines Sektors wird die Position durch Interpolation 
"geschätzt".
Mein Startvorgang sieht so aus das ich den Winkel "Teta" für ein paar ms 
konstant vorgebe und in die SVPWM schicke um den Rotor auszurichten. 
Danach erhöhe ich Teta künstlich (Open Loop) um den Rotor mit einer 
bestimmten Geschwindigkeit in Drehung zu versetzen. Soweit funktioniert 
es ganz gut und ich bekomme am Ausgang die zu erwartenden "Popokurven" 
der Raumzeigermodulation. Mein Problem liegt nun bei dem Sprung in die 
"Closed Loop". In diesem Betriebszustand wird der Winkel nicht 
vorgegeben sondern gemessen und die Drehmoment- und -Fluxregelung der 
FOC setzt ein, welche Strommessung von 2 Phasen als Basis hat.
Wie muss der Übergang zwischen openloop- und closedloop- Betrieb 
aussehen? Im openloop läuft er brav - mit vorgegebenen Werten für Ud, Uq 
und Winkel produziert die inverse Park-, Clarke- und 
SVPWM-Transformation die erwarteten Popokurven. Die berechneten Sektoren 
eilen den tatsächlichen - um ca. 2 Sektoren voraus.
Aber sobald auf closedloop umgeschaltet wird, werden Ud und Uq aus Ia 
und Ib mittels Clarke- und Park und durch Vergleich mit Sollwerten von 
Flux(=0) und Torque(=?). Wilde Regelschwingungen sind zu beobachten und 
der Motor steckt sofort fest.
Wie muss der Sollwert für Torque aussehen, damit nach dem Umschalten ein 
harmonischer Übergang in den closedloop erfolgt?
Kann man ihn aus der Drehzahl gewinnen? Wenn ja, wie?
Welche anderen Strategien sind möglich?

von Horst H. (horst_h44)


Lesenswert?

Für eine gute Regelung ist eine genaue Positionserfassung, z.B. mit 
einem 1-Chip Encoder wie dem iC-MH8 auf einer kleinen Platine - statt 
mit drei Hallsensoren, einfach zu machen. Hier die Beschreibung der 
Lösung: http://www.gb97816.homepage.t-online.de/mh8_2.htm mit 
Layout-Daten und das deutsche Datenblatt vom iC-MH8 ist hier: 
http://www.ichaus.biz/product/iC-MH8 .

von Peter S. (peter_s37)


Lesenswert?

Danke, das mit der alternativen Positionserkennung hab ich mir auch 
schon überlegt aber ich denke nicht das dies der Grund meines Problems 
ist. Mein Problem liegt in der "Closed Loop".

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


Lesenswert?

Aber du hast doch schon die Werte der Hallsensoren, die dir bei einem 
Flankenwechsel eindeutig den vorhandenen Drehwinkel angeben. Ein Timer, 
der davon zurückgesetzt wird, ermöglicht es dir dann, auch jeden 
Zwischenwinkel zu errechnen. Je nach Drehzahl sind absolute Drehgeber 
dafür auch einfach zu langsam oder zu zeitaufwendig abzufragen. Mein Rat 
wäre also, dich immer nach den Sensoren zu richten und gar nicht zu 
versuchen, aus Ia und Ib was zu ermitteln.
Was möchtest du mit dem Closed Loop Betrieb denn erreichen? Wenn du 
Drehzahlen konstant halten möchtest, ist die Ist-Drehzahl einfach aus 
den Sensoren zu ermitteln und dein Stellwert ist die PWM Breite.
Zum Starten des Motors tut es übrigens auch die klassische 
Blockkommutierung. Nach einigen erfolgreichen Sensorwechseln schaltest 
du dann auf SVPWM um. Siehe auch AVR447.

von Peter S. (peter_s37)


Lesenswert?

Ja, genau so läuft es bereits mit der Winkelmessung aber ich benötige 
die gemessenen Ströme um auf ein bestimtes Moment hin zu regeln. 
Drehzahlregler soll dann erst in einem weiteren Schritt realisiert 
werden.
Eine Frage noch bezüglich dem gemessenen Winkel: Mit welchem Wert wird 
in der Park bzw. Invers Park gerechnet...  Teta oder Teta + 90°??  Der 
Raumzeiger soll ja immer um 90° voreilen um maximales Moment zu 
erziehlen oder?

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.