Forum: Analoge Elektronik und Schaltungstechnik Motorcontroller FOC - besser in eine Richtung


von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Hi,

Ich habe einen Motor Controller mit FOC und ich versuche zu verstehen, 
warum der Motor in eine Richtung besser dreht als in die andere, wie man 
auf dem Bild oben entnehmen kann. In eine Richtung entstehen starke Id 
und Iq Spitzen, was sich durch ein Rumpeln am Motor bemerkbar macht. 
Wenn ich zwei Phasen tausche, dann dreht der Motor in die andere 
Richtung schlechter, es liegt also nicht am Motor und auch nicht am 
Drehgeber.

Was mir natürlich als erstes in den Sinn kam, ist der Offset-Winkel des 
Drehgebers und dies scheint in der Tat einen enormen Einfluss zu haben. 
Ich kalibriere diesen Winkel, indem ich eine Spannung in vd-Richtung 
einspeise, der Motor richtet sich also mit der d-Achse an und somit ist 
der Offset Winkel 0 rad. Wenn ich den Manuell ein bisschen verschiebe, 
dann bekomme ich es hin, dass der Motor in beide Richtungen gleich gut 
dreht, ABER das Drehmoment ist nicht mehr so stark (in beide Richtungen) 
wie vorher. Ich frage mich also, warum der Controller gerade im max 
Torque/Amp. Betrieb solche Probleme bereitet.

Jemand eine Idee, was da sonst noch los sein könnte?

: Verschoben durch Moderator
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

wie viel Strom nimmst du zum Ausrichten des Rotors mit Vd? Der wird sich 
aller Wahrscheinlichkeit nach nicht sauber ausrichten, sei es wegen 
eines Rastmomentes oder wegen externer Drehmomente.

Wenn du den Winkel jetzt hindängelst das er in beide Richtungen das 
selbe Verhalten zeigt hast du den korrekten Winkel getroffen. Das der 
Antrieb jetzt mit nur einem Iq Strom nicht so viel Moment produziert wie 
mit einem verdrehten Winkel und damit einem Iq und einem wahrscheinlich 
negativen Id ist recht logisch wenn dein Antrieb eine IPM ist. Also ein 
signifikanter Teil des Moments aus der Reluktanz kommt.

Grundsätzlich ist der Winkeloffset bei dem beide Richtungen gleich gut 
gehen ist der richtigere. Der Controller muss jetzt eine Regelstategie 
wie MTPA(maximum torque per amp.) unterstützen oder du stellst einen 
Drehzahl abhängigen Id ein, wenn du darauf Zugriff hast.

von Bert S. (kautschuck)


Lesenswert?

Hoi Alexander,

Danke für deine Antwort. Zum Ausrichten nehme ich 1A, das sollte bei 
einem kleineren 50W Motor PMSM reichen.

Ich kann Id sowie Iq einstellen, jedoch dachte ich, im MTPA stellt man 
Id=0 ein, erst beim Field Weakening nimmt man einen negativen Id, um 
höhere Drehzahlen zu erreichen?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Id = 0 ist nur für Oberflächen Magnete am Rotor richtig. Sobald die 
Magnete ein bisschen vergraben sind hast du reluktanz Moment das 
proportional zu -Id*Iq ist.

von Bert S. (kautschuck)


Lesenswert?

Hmm ok, nimmt man da einen Feed Forward Term oder sollte man da irgend 
einen Observer mit Regler implementieren?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

www.ti.com/lit/an/spracf3/spracf3.pdf
Ein feedforward reicht. Siehe Beschreibung von Ti

von Bert S. (kautschuck)


Lesenswert?

Tiptop, vielen Dank für dein Hilfe

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Gerne

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ich habe das nun schon eine Weile gefixt, jedoch habe ich nun ein 
anderes Problem, zumindest scheint es so. Wenn ich einen Iq Strom 
vorgebe, dann wird in eine Richtung der Id Strom sehr groß, in die 
andere Richtung ist es kein Problem.

Es kann hier nicht am elektrischen Offset Winkel liegen, diesen habe ich 
schon x-fach um versucht zu tunen (Durchswipen), jedoch hat sich das 
Problem nie beseitigt.

Das ganze tritt auch erst ab einer gewissen Geschwindigkeit auf, so 
2800rpm. Bei beiden Richtungen wird aber der Iq Strom negativ, jemand 
eine Idee, warum?

Grüsse Bert

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

Hast du zu den Id/Iq Kurven auch Vd/Vq? Ich würde vermuten dass die 
Strom Regler nicht korrekt arbeiten.

von rogerz (Gast)


Angehängte Dateien:

Lesenswert?

Alex B. schrieb:
> www.ti.com/lit/an/spracf3/spracf3.pdf

... in besagtem Paper steht, daß Ld größer Lq sein muß, damit ein 
positives Reluktanzmoment erzeugt wird (bei Id < 0 und Iq > 0)

Ist es nicht genau andersrum - also Lq > Ld - oder mach ich einen 
Denkfehler?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Druckfehler. Wobei das ganze Maschinen abhängig ist. Es gibt auch 
Maschinen bei denen Ld>Lq ist. Dann bist du aber bei Synchronen 
Reluktanz Maschinen und nicht bei PMSM.

von rogerz (Gast)


Lesenswert?

... danke für die Bestätigung!

Druckfehler! ... kein Denkfehler! :-)

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Jop die Formel stimmt ja. Und die Leute bei to sind auch nur Menschen

von rogerz (Gast)


Lesenswert?

... der Widerspruch zum Text hat mich halt etwas verunsichert.
So stimmt die Welt wieder.

von Steffen W. (derwarze)


Lesenswert?

Was oft nicht beachtet wird. Es lässt sich beim BLDC Motor, besonders 
wenn er Sensoren hat, die Drehrichtung nicht einfach durch Umpolen der 
Phasen ändern. Dabei entstehen Effekte wie Du sie beobachtet hast. Die 
Drehrichtungsumkehr muss vom Kommutierungsprogramm gemacht werden.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ok, ich konnte das mit dem loggen von Vq und Vd jetzt noch umbauen. Wie 
man sieht, wie man sieht, bleibt Vd für beide Iq negativ, während Vq 
entsprechend ändert.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Steffen W. schrieb:
> Was oft nicht beachtet wird. Es lässt sich beim BLDC Motor, besonders
> wenn er Sensoren hat, die Drehrichtung nicht einfach durch Umpolen der
> Phasen ändern. Dabei entstehen Effekte wie Du sie beobachtet hast. Die
> Drehrichtungsumkehr muss vom Kommutierungsprogramm gemacht werden.

Denkst du das ist hier das Problem? Für mich sieht es irgendwie eher 
aus, als würde Vd nicht korrekt geregelt. Wenn ich aber den Motor 
festhalte (Bild), dann kann er Id null regeln.

: Bearbeitet durch User
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Das ist doch schon mal aufschlussreich. Deine Regler arbeiten also ganz 
gut wenn der Motor sich nicht dreht. Und wenn der Motor im Leerlauf ist 
arbeiten sie nicht sauber.

Bei der 1. Messung war der Motor am Ende bei Leerlaufdrehzahl? Bzw. War 
Vq am Spannungsmaximum?

Hast du die Stromregler entkoppelt und die Gegenspannung vorgesteuert? 
Falls nicht lies dir mal durch wie man die Stromregler für PMSM auslegt 
und aufbaut.

von Bert S. (kautschuck)


Lesenswert?

Alex B. schrieb:
> Bei der 1. Messung war der Motor am Ende bei Leerlaufdrehzahl? Bzw. War
> Vq am Spannungsmaximum?

Genau, der Motor war am Spannungsmaximum und Leerlaufdrehzahl. Aber in 
beiden Richtungen war das der Fall, wobei aber nur in eine Richtung Id 
Probleme macht.

Alex B. schrieb:
> Hast du die Stromregler entkoppelt und die Gegenspannung vorgesteuert?
> Falls nicht lies dir mal durch wie man die Stromregler für PMSM auslegt
> und aufbaut.

Das hingegen habe ich nicht. Ich werde mir das mal noch anschauen, 
danke. Hast du evtl. ein Paper das diese Thema gerade abdeckt?

Grüsse Bert

: Bearbeitet durch User
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ich verweise da gern auf TIs "Teaching old motors new tricks"
https://training.ti.com/teaching-old-motors-new-tricks-part-3-space-vector-modulation-field-weakening-d-q-axis-decoupling?context=1137615-31562-31459

Für dich ist speziell das d-q axis decoupling interessant.

Gruß

Alex

von Bert S. (kautschuck)


Lesenswert?

Danke, ich schau mir das mal an und versuche es zu implementieren.

von motorlegastheniker (Gast)


Lesenswert?

Bert S. schrieb:
> Wenn ich zwei Phasen tausche, dann dreht der Motor in die andere
> Richtung schlechter, es liegt also nicht am Motor und auch nicht am
> Drehgeber.

Wenn du Mal die Phasen lässt, wie sie sind, stattdessen für Iq einen 
negativen Wert vorgibst?
Phasen tauschen kann dir elektrisch einen gehörigen Fehlwinkel 
bescheren.

Bert S. schrieb:
> Ich kalibriere diesen Winkel, indem ich eine Spannung in vd-Richtung
> einspeise, der Motor richtet sich also mit der d-Achse an und somit ist
> der Offset Winkel 0 rad.

Wenn dein Motor einen Kamelhöcker-förmigen Verlauf der BEMF aufweist, 
was auf das Feld  der Magnete schließen lässt, weißt du denn in welchem 
der beiden Kamelhöcker dein Motor hängt?

Zum Kalibrieren des Offsets zwischen Motor und Geber daher Vorwärts und 
Rückwärts eine Ganzzahl an Umdrehungen drehen, während du den Offset 
zwischen elektrischem Vorsteuerwinkel und gemessenen Winkel 
aufsummierst. Der elektrische Vorsteuerwinkel muss dazu mehrere 
Umdrehungen erfassen können und vor der Differenzbildung durch die 
Polpaarzahl geteilt werden. Modulo 360 nicht vergessen, aber das geht 
auch indem man den mechanischen Winkel auf ein int16_t abbildet. Die 
Summe dann durch die Anzahl der Rotationen teilen und das ist dein 
Offset in elektrisch.
Achtung, je Richtung dem Motor ½ Umdrehung zum einpendeln gönnen, da 
also noch nicht summieren.

von motorlegastheniker (Gast)


Lesenswert?

motorlegastheniker schrieb:
> . Die Summe dann durch die Anzahl der Rotationen teilen und das ist dein
> Offset in elektrisch.

Offset in mechanischem Winkel natürlich. Sorry.

von Bert S. (kautschuck)


Lesenswert?

motorlegastheniker schrieb:
> Wenn du Mal die Phasen lässt, wie sie sind, stattdessen für Iq einen
> negativen Wert vorgibst?
> Phasen tauschen kann dir elektrisch einen gehörigen Fehlwinkel
> bescheren.

Also nach dem Phasentauschen wird natürlich der elektrische Winkel neu 
berechnet.

von Bert S. (kautschuck)


Lesenswert?

motorlegastheniker schrieb:
> Wenn dein Motor einen Kamelhöcker-förmigen Verlauf der BEMF aufweist,
> was auf das Feld  der Magnete schließen lässt, weißt du denn in welchem
> der beiden Kamelhöcker dein Motor hängt?
>
> Zum Kalibrieren des Offsets zwischen Motor und Geber daher Vorwärts und
> Rückwärts eine Ganzzahl an Umdrehungen drehen, während du den Offset
> zwischen elektrischem Vorsteuerwinkel und gemessenen Winkel
> aufsummierst. Der elektrische Vorsteuerwinkel muss dazu mehrere
> Umdrehungen erfassen können und vor der Differenzbildung durch die
> Polpaarzahl geteilt werden. Modulo 360 nicht vergessen, aber das geht
> auch indem man den mechanischen Winkel auf ein int16_t abbildet. Die
> Summe dann durch die Anzahl der Rotationen teilen und das ist dein
> Offset in elektrisch.
> Achtung, je Richtung dem Motor ½ Umdrehung zum einpendeln gönnen, da
> also noch nicht summieren.

Ok, dass muss ich auch nochmal probieren, aber ich habe auch versucht 
den Winkel zu tunen, indem ich über einen Schieber den Offset direkt 
verändern kann (+- 45° mechanischer Winekl), konnte aber keine Position 
finden, wo der Motor gut in die "schlechte" Richtung dreht.

Auch würde der Motor bei schlechtem elektrischen Offset Winkel wohl Id 
nicht gleich gut in beide Richtungen im Stillstehen unterdrücken können, 
oder?

: Bearbeitet durch User
von motorlegastheniker (Gast)


Lesenswert?

Bert S. schrieb:
> Auch würde der Motor bei schlechtem elektrischen Offset Winkel wohl Id
> nicht gleich gut in beide Richtungen im Stillstehen unterdrücken können,
> oder?

Da hast du recht, die Kamelhöcker sind nie gleich groß und zudem auch je 
elektrischer Umdrehung noch unterschiedlich. Durch Drehen in beide 
Richtungen bekommt man das aber ziemlich gut rausgemittelt.

Bert S. schrieb:
> konnte aber keine Position finden, wo der Motor gut in die "schlechte"
> Richtung dreht.

Was passiert denn, wenn du die gute Richtung lässt und die Richtung 
deines q-Vektors umdrehst? Wenn du einen darüber gelegten 
Geschwindigkeitsregler hast, muss der eben positive als auch negative 
Geschwindigkeit verarbeiten können.

Übrigens. Wenn du zwei Phasen tauscht, ist die elektrische Drehrichtung 
umgedreht. Dein Sensorsignal musst du dann aber auch dazu umdrehen, es 
empfiehlt sich, beides aufeinander abzustimmen. Abhängig von gewünschter 
mechanischer Richtung musst du halt die Drehzahlvorgabe positiv oder 
negativ einspeisen.

von motorlegastheniker (Gast)


Lesenswert?

Noch was zu dem hier

Bert S. schrieb:
> Id nicht gleich gut in beide Richtungen im Stillstehen unterdrücken
> können

Ich hatte mal in einer Applikation einen Drehzahlregler, der aus Sicht 
der gewünschten Drehrichtung kein negatives Moment aufbringen sollte, 
also nach unten auf 0 begrenzt. Im Feldschwächbereich ist durch 
Fehlerwinkel ein gewollter großer D-Anteil zu einem tatsächlichen das so 
großen D-Anteil und kleinem Q-Anteil, Q positiv, geworden. Beim Eintritt 
in die tiefe Feldschwächung (am Phasenstromlimit) gab es dann einen 
Drehzahlabflug nach oben :(

von Bert S. (kautschuck)


Lesenswert?

Alex B. schrieb:
> Für dich ist speziell das d-q axis decoupling interessant.

Habe das mal noch implementiert, aber leider auch keine Besserung.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

motorlegastheniker schrieb:
> Was passiert denn, wenn du die gute Richtung lässt und die Richtung
> deines q-Vektors umdrehst? Wenn du einen darüber gelegten
> Geschwindigkeitsregler hast, muss der eben positive als auch negative
> Geschwindigkeit verarbeiten können.

Der Geschwindigkeitsregler kann positive und negative Geschwindigkeiten. 
Id bleibt auch unterdrückt in eine Richtung, bis etwa 3000 rpm, dann 
kommt es zur Resonanz und der Motor schwingt.

motorlegastheniker schrieb:
> Übrigens. Wenn du zwei Phasen tauscht, ist die elektrische Drehrichtung
> umgedreht. Dein Sensorsignal musst du dann aber auch dazu umdrehen, es
> empfiehlt sich, beides aufeinander abzustimmen. Abhängig von gewünschter
> mechanischer Richtung musst du halt die Drehzahlvorgabe positiv oder
> negativ einspeisen.

Genau, das mache ich auch so.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Welche Filter hast du auf der Strommessung? Kompensiert du den aus der 
Gruppenlaufzeit resultierenden Winkel Fehler deiner Strommessung?

von minifloat (Gast)


Lesenswert?

Bert S. schrieb:
> Alex B. schrieb:
>> Hast du die Stromregler entkoppelt und die Gegenspannung vorgesteuert?
>> Falls nicht lies dir mal durch wie man die Stromregler für PMSM auslegt
>> und aufbaut.
>
> Das hingegen habe ich nicht. Ich werde mir das mal noch anschauen,
> danke. Hast du evtl. ein Paper das diese Thema gerade abdeckt?

Gegenspannung vorsteuern kann man machen, ist aber nicht unbedingt gut 
für Dynamik, da bei positiven Lastsprüngen mit einem Drehzahleinbruch 
die Vorsteuerung zurückgenommen wird und der qRegler noch mehr nachlegen 
muss. Der Winkel der Vorsteuerspannung stimmt bei Nutzung von 
Reluktanzmoment bei kleinen Drehzahlen nicht ganz, in der Feldschwächung 
ist das dann nochmal ne andere Hausnummer. Oder sehe ich das falsch?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Deshalb steuert man basierend auf den Sollwerten vor. Wenn die istwerte 
als Grundlage für die Vorsteuerung genommen werden entstehen ganz leicht 
mitkopplungen wie die die du mit dem Lastsprung beschrieben hast. Man 
sollte aber allzu massive sollwertsprünge in der Drehzahl unterbinden. 
Da man die Stromspitzen nicht in den Griff bekommt. Das kommt sehr stark 
auf die Applikation an. Bei einem Umrichter der in Positionsregelung von 
einer Bahnplanung die Sollwerte für Drehzahl und Drehmoment erhältlich 
kann man diese sofort durch Steuern und dann kann der Regler anfangen 
fragen zustellen.

von Bert S. (kautschuck)


Lesenswert?

Alex B. schrieb:
> Welche Filter hast du auf der Strommessung? Kompensiert du den aus der
> Gruppenlaufzeit resultierenden Winkel Fehler deiner Strommessung?

Ein normales Averaging. Habe auch schon versucht dort mal ein 
künstliches Delay einzuführen, jedoch hat auch das keine Veränderung 
gebracht.

von Bert S. (kautschuck)


Lesenswert?

Ich habe noch herausgefunden, dass der Motor Delta connected ist, muss 
ich da bei FOC etwas berücksichtigen?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ich meinte in Hardware!

Delta musst du nicht beachten.

von Bert S. (kautschuck)


Lesenswert?

Ich verwende einen INA240 mit einem TP Filter (Tau=20kHz)

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Mit den 400kHz Bandbreite des INA bist du bei ca. 10us Gruppenlaufzeit. 
Bei deinen 3000rpm reden wir von 50Hz und Mal 8 Pole angenommen bist du 
bei 200Hz elektrisch. Was bei 10us weniger als 1° ist. Das sollte also 
kein Problem sein.

Wie Samplest du die Stromsignale? Vor allem wie lang? Kommt es ggf zu 
Störungen darauf bei hoher Aussteuerung der Brücke?

von Bert S. (kautschuck)


Lesenswert?

Alex B. schrieb:
> Wie Samplest du die Stromsignale? Vor allem wie lang? Kommt es ggf zu
> Störungen darauf bei hoher Aussteuerung der Brücke?

Ich verwende den DMA mit einem circular buffer, wobei die Buffer Grösse 
für ia und ib 20 Samples ist. Diese average ich dann. Die Messung ist 
auf 3 cycles eingestellt für ein sample, also die minimale hold Zeit. 
Der ADC läuft mit 25MHz, also brauchen die 20 Samples 2.4us.

Störungen kann ich sonst keine erkennen. Ich habe auch schon auf 300 
Samples erhöht, um zu sehen, ob es einen unterschied macht. Aber es 
scheint kein Problem zu sein.

: Bearbeitet durch User
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ok was ist mit deinem Geber? Was verwendest du da? Hat der ggf ein 
problem?

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.