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.
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
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.