Forum: Analoge Elektronik und Schaltungstechnik FOC: Id negativ und oszilliert


von Jan (janhein)


Angehängte Dateien:

Lesenswert?

Moin zusammen,

momentan versuche ich einen einfachen BLDC-Motor (siehe Bild im Anhang) 
sensorlos mit FOC zum Laufen zu bringen. Ziel ist vor allem, dass ich 
das Thema FOC genauer verstehe. Dazu habe ich mir eine Platine in KiCAD 
entworfen und produzieren lassen. Ich mache die Strommessung in den 
Phasen mit einem INA240. Als Mikrocontroller habe ich so ein 
BluePill-Board (stm32f103c8t6) genutzt. Die SW habe ich mir selbst 
zusammen programmiert nachdem ich diversen Kram gelesen habe. ;) Die 
notwendigen Clark-/Park-Transformationen und der SMO zur 
Winkelbestimmung scheinen auch zu laufen. Id/Iq-Stromregler und der 
Drehzahlregler arbeiten auch. Zumindest läuft der Motor Closed-Loop 
sauber, solange die Drehzahl nicht zu hoch wird. Danach scheint die 
Rechenkapazität vom Controller nicht mehr ausreichend zu sein. 
Schwierigkeiten habe ich momentan beim Verständnis von Id. Normalerweise 
soll das ja auf 0 geregelt werden, wenn man nicht im Feldschwächebetrieb 
unterwegs ist. Sobald ich das mache, stockt der Motor aber und bleibt 
stehen. Entweder muss ich momentan Id-Soll = Id-Ist setzen, damit der 
Regler nicht arbeitet oder Id auf einen negativen Wert setzen. Id-Ist 
oszilliert auch merkwürdig. Einen Verlauf dazu habe ich mal angehängt. 
Die y-Achse muss ignoriert werden. Das ist nur ein Skalierungsthema. 
Merkwürdige Sprünge im Winkel sind auch nicht real. Die serielle 
Schnittstelle liefert nur abschnittsweise Daten.

Hat jemand eine Idee woher die Oszillationen von Id kommen und warum der 
Wert negativ ist? Habe ich in meiner SW evtl. was vermurkst oder liegt 
das am Motor? Vielleicht hat ja auch jemand eine gute Quelle zum 
Nachlesen.

von Achim M. (minifloat)


Lesenswert?

Jan schrieb:
> BLDC-Motor (siehe Bild im Anhang) sensorlos mit FOC

Weil die BEMF des BLDC eher trapezförmig ist (oder sonstiger komischer 
Spaß) ist innerhalb einer elektrischen Umdrehung zweimal zuwenig 
Zwischenkreisspannung übrig, um noch genug Iq zu stellen. Daher zwei 
negative  Peaks von Id innerhalb einer elektrischen Umdrehung.

Dann lässt sich sehen, dass die Regler fast ein bisschen zu zackig 
arbeiten, wobei, naja das kommt auf die Anwendung an.

Jan schrieb:
> warum der Wert negativ ist?

Feld Schwächung. Nicht Feldstärkung ;)

mfg mf

: Bearbeitet durch User
von Jan (janhein)


Lesenswert?

Jut, das Oszillieren erschließt sich mir damit. Bei einer sinusförmigen 
BEMF würde das also nicht auftreten, oder?
Wenn ich dich richtig verstanden habe, ist der Id-Strom negativ, da hier 
eine Feldschwächung aktiv ist. Aber warum ist das so bzw. warum brauche 
ich das, damit der Motor in diesem Betriebspunkt sauber läuft? Die 
Drehzahl ist hier nicht besonders hoch.

von Achim M. (minifloat)


Lesenswert?

Jan schrieb:
> Bei einer sinusförmigen BEMF würde das also nicht auftreten, oder?

Wenn man den Modulator, vor PWM, nicht in Übersteuerung fährt, dann ja.

Jan schrieb:
> Die Drehzahl ist hier nicht besonders hoch

Wie hoch ist die Zwischenkreisspannung gewesen und wie hoch war die 
Drehzahl?

1400kv heißt, dass bei 1400rpm 1V aus dem Motor raus kommt. Regler 
falsch parametriert?

Hast du die Möglichkeit, Id und Iq manuell vorzugeben?

Jan schrieb:
> warum brauche ich das

Der Motor gibt beim Drehen die BEMF aus. Um Drehmoment zu stellen, muss 
ein q-Strom gestellt werden. Das heißt, der Umrichter muss für positives 
Drehmoment eine leicht höhere Spannung (Vektoraddition!) als die BEMF 
ausgeben. Bei BEMF = Uzk wäre dafür überhaupt keine Spannungsreserve 
mehr verfügbar.

Daher schwächt man ab dem Punkt BEMF = Uzk das Feld des Rotors mit 
negativem d-Strom, damit weniger BEMF rauskommt und für q-Strom wieder 
Spannungsreserve da ist.

Die BEMF geht in d-Richtung, daher regelt man im Grunddrehzahlbereich 
den d-Strom auf 0. Oder leicht positiv, um je nach Magnetkonfiguration 
am Rotor Reluktanzmoment raus zu kitzeln.

mfg mf

: Bearbeitet durch User
von Jan (janhein)


Lesenswert?

Die Zwischenkreisspannung habe ich auf 12V eingestellt und die Drehzahl 
lag bei 2000 U/min.
Die Clarke/Park-Transformationen und entsprechende Inverse habe ich 
umgesetzt. Ich habe jeweils einen Regler für Iq und Id. So kann ich 
dafür auch Sollwerte vorgeben. Das meinst du wahrscheinlich mit 
manueller Vorgabe, oder?

Iq kommt bei mir aus dem Drehzahlregler. Id habe ich zuerst einfach gar 
nicht geregelt und Ud einfach auf 0 gesetzt. Nach der 
Park-Transformation purzelt dann das negative Id raus. Später habe ich 
dann Id einfach auf einen negativen Wert geregelt, damit der Motor 
weiterläuft.

Meinst du, dass die BEMF-Spannung schon größer als 12V ist und deswegen 
ein negatives Id gestellt werden muss? Das würde mir sehr groß 
vorkommen. Vielleicht messe ich die BEMF mal, wenn ich einen 
Akkuschrauber am Motor montiere. Bisher habe ich den Motor nur per Hand 
gedreht und die BEMF gemessen.

von Achim M. (minifloat)


Lesenswert?

Jan schrieb:
> Die Clarke/Park-Transformationen und entsprechende Inverse habe ich
> umgesetzt.

Die Inversen sind jeweils im Vorwärtspfad, das ist dir klar oder?
Was für eine Modulation benutzt du?
Misst du die Ströme einzeln und ergeben die auch in Summe ca. 0?

Jan schrieb:
> Id habe ich zuerst einfach gar nicht geregelt und Ud einfach auf 0
> gesetzt. Nach der Park-Transformation purzelt dann das negative Id raus.

Da stimmt was nicht. Id muss für Grunddrehzahlbereich auf 0 geregelt 
sein. Die Spannung Ud am Reglerausgang ergibt sich von allein, die 
regelt der d-Stromregler nach.

Ist dir klar, dass der Ausgang der Regler U ist, der Eingang I_error?
Ich ahne dass du das richtige meinst aber es unglücklich beschreibst ;)

Jan schrieb:
> Meinst du, dass die BEMF-Spannung schon größer als 12V ist und deswegen
> ein negatives Id gestellt werden muss

Nein, das kommt mir auch komisch vor.

Jan schrieb:
> Vielleicht messe ich die BEMF mal, wenn ich einen Akkuschrauber am Motor
> montiere.

Mit Oszi kannst du die Spannung und die Drehzahl erfassen. Klingt nach 
einem Plan.

mfg mf

: Bearbeitet durch User
von Jan (janhein)



Lesenswert?

Gut möglich, dass ich hier was unglücklich beschreibe. Bin da auch nur 
motivierter Laie... ;)

Hier ist mal mein Programmablauf skizziert. Ich hoffe daraus müssten 
deine Fragen beantwortet werden.

============================
Strom messen (Inline per Shunt und INA240 in allen drei Phasen)
Clarke
Sliding Mode Observer zur Winkelbestimmung
Drehzahlberechnung
Drehzahlregler (Solldrehzahl war hier 2000 U/min; Ausgang Iq_Soll)
Id_Soll = Id_Ist oder Id_Soll negativ vorgeben
Park
PI-Regler (Id_Soll - Id_Ist bzq. Iq_Soll - Iq_Ist als Eingang; Ausgang 
ist dann Ud und Uq)
Park Inverse (Ud und Uq als Eingang, Ualpha und Ubeta als Ausgang)
Clarke Inverse (Ualpha und Ubeta als Eingang; Ua, Ub, Uc als Ausgang)
SVPWM (Ua, Ub, Uc als Eingang; neue Tastverhältnisse als Ausgang)
============================

Habe mal ein Bild der BEMF bei 2000 U/min angehängt (Motor hat 7 
Polpaare).
Ein Bild der Ströme und der Summe hängt auch an. Eine Phase zeigt immer 
etwas weniger Strom an, was sich auf der Summe auch zeigt. Wenn der 
Motor Open-Loop läuft und ich Ud und Uq manuell vorgebe ist das aber 
reduziert.

Außerdem hängen noch Bilder Open-Loop an. Uq steht da auf 0, Ud ist 
positiv, der Winkel läuft halt gesteuert weiter. Ein Bild zeigt Ua, Ub, 
Uc und die gemessenen Ströme Ia, Ib und Ic. Die anderen die Ergebnisse 
nach Clarke und Park.

: Bearbeitet durch User
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.