BLDC Motorsteuerung mit FOC SVPWM und HAllsensorik

OP #2970617
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?
(Firma: matzetronics) #2971064
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.
OP #2971509
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.