Hallo,
ich versuche seit Wochen die Feldorientierte Regelung zu verstehen.Dazu
habe ich die Raumzeigermodulation implementiert und habe diese auf einem
PMSM getestet und funktioniert endlich. Der Motor dreht sehr ruhig,
ruhiger als mit Blockkommutation wenn ich im Open Loop einen konstanten
Ud, Uq vorgebe. Jetzt möchte ich den Regelkreis mit der Strommessung
vervollständigen.
Umrichter Aufbau siehe Anhang.
Die Messung der Ia, Ib Phasenströme erfolgt im Nullzeiger 000, bzw. wenn
alle Low Side FETs leitend sind. Die abfallende Spannungen am R1 und R2
werden mit einem nichtinvertierenden OPV verstärkt und am uC gemessen.
Nun verstehe ich eine Sache nicht. Ia, Ib können wie ich weiss, negativ
werden. Wie messe ich dann die negative Ströme?
Gruss,
Jan
Jan Dijkstra schrieb:> wenn> alle Low Side FETs leitend sind.
In einer richtigen FOC werden nie alle Lowsides gleichzeitig leiten.
Genauso wie nie alle Highsides gleichzeitig leiten. Da gibt es also noch
Nachholbedarf.
Jan Dijkstra schrieb:> Ia, Ib können wie ich weiss, negativ> werden.
Nö. Wie soll das auch gehen? Du müsstest schon die Motorspeisung
umpolen.
Zum Verständnis poste ich mal ein Bild aus AVR447, die den Zustand der
Ströme in den 3 Wicklungen bei zwei Durchläufen aller Sektoren zeigt.
Unten die Hallsensoren.
Matthias S. schrieb:> Jan Dijkstra schrieb:>> wenn>> alle Low Side FETs leitend sind.>> In einer richtigen FOC werden nie alle Lowsides gleichzeitig leiten.> Genauso wie nie alle Highsides gleichzeitig leiten. Da gibt es also noch> Nachholbedarf.
Doch, doch. Wenn alle Low Side FETs leitend sind, sind die High Side
FETs natürlich sperrend.
> Jan Dijkstra schrieb:>> Ia, Ib können wie ich weiss, negativ>> werden.> Nö. Wie soll das auch gehen?
Laut der Formel Ia + Ib + Ic = 0. Angenommen, wenn Ia positiv und
betragsmäßig größte ist, müssen Ib und Ic negativ sein. Das ist der Fall
im Sektor 1, denke ich.
Die Frage ist, wie viel Blindleistung gezogen wird. Da ein Motor dran
hängt, ist ein gewisser Magnetisierungsstrom notwendig, weshalb der
Wechselrichter nicht mit cos(phi)=1 läuft.
Ergo gibt es eine Phasenverschiebung zwischen Strom und Spannung, so
dass der Low Side FET leitend ist, der Strom aber negativ ist, also von
Source nach Drain fließt. Der am Shunt gemessene Strom ist natürlich
auch negativ.
Wie man das Problem lösen kann:
Bau einen Offset in deine OP Schaltung ein. Der Offset liegt bei 3,3V/2
und entspricht 0A. Alles >3,3V/2 ist ein positiver Strom, alles <3,3V/2
ist ein negativer Strom.
BTW:
Wenn du sowohl in 000 als auch in 111 die Strommessung durchführst,
kannst du deinen Phasenverlust aufgrund der Totzeiten in der Schaltung
(Sampling & Computation delay) reduzieren, falls eine schnelle Regelung
benötigt wird.
Gruß,
Jan Dijkstra schrieb:> Doch, doch. Wenn alle Low Side FETs leitend sind, sind die High Side> FETs natürlich sperrend.
Wie soll das gehen? Wenn alle Lowside FET gleichzeitig leiten, schliesst
du alle Spulen gegen Masse kurz. Durch Kurzschlusstrom bremst du damit
den Motor durch die Gegen-EMK. Der Zustand kommt real nicht vor.
Genauso wenig wie den 000 Zustand gibts den 111 Zustand bei einer
korrekten Ansteuerung nicht. Auch beim 111 Zustand würdest du einfach
nur alle Spulen kurzschliessen.
Lies dich bitte mal da ein, z.B. bei Freescale, Microchip oder auch TI
und schau dir nochmal die o.a. Grafik an. Es gibt keinen Zustand, bei
dem alle Phasen low sind und auch keine, bei denen alle high sind.
Mit den Nullzuständen (000 und 111) wird der Betrag des Raumzeigers
beeinflusst. Je länger man 000 bzw 111 anwendet, desto kürzer wird der
Zeiger.
Die Länge des Zeigers hat wiederum Auswirkung auf die Ausnutzung der
Zwischenkreisspannung. Je kleiner der Betrag ist, desto geringer die
Phasenspannungen. Das ist Äquivalent zum Modulationsgrad bei Sinus PWM.
Ich bin kein Antriebstechniker, weiß also nicht, ob mit maximalem
Modulationsgrad gefahren wird (bei hohem Modulationsgrad steigen die
Oberwellen an). Bei Sinus PWM habe ich einen Modulationsgrad von ca 0.9
im Kopf.
Vielleicht mag ein Antriebstechniker ja Stellung beziehen, und mich
diesbezüglich aufklären.
Gruß,
Matthias S. schrieb:> Wie soll das gehen? Wenn alle Lowside FET gleichzeitig leiten, schliesst> du alle Spulen gegen Masse kurz. Durch Kurzschlusstrom bremst du damit> den Motor durch die Gegen-EMK.
Na, erstmal flie0t der Strom weiter. Ist ja eine Induktivität. Erst wenn
sich die Energie in der Spule an den Spulenwiderständen aufgebraucht hat
und sich die Stromrichtung umkehrt fängt das Bremsen an. Temporär kann
also dieser Zustand Sinn machen
MfG Klaus
Klaus schrieb:> Temporär kann> also dieser Zustand Sinn machen
Wozu denn? Ziel der FOC ist es doch, den Motor drehen zu lassen und
nicht, Energie zu verbraten.
Lest doch bitte mal in der Literatur erst was über Blockkommutation und
dann über SVM, FOC oder FOR. In keiner Antriebsart ausser beim Bremsen
werden alle Highsides oder alle Lowsides gleichzeitig durchgeschaltet.
Die einzige Anwendung dafür ist der Bremsbetrieb.
Jan Dijkstra schrieb:> Jetzt möchte ich den Regelkreis mit der Strommessung> vervollständigen.
Wenn dieser Regelkreis allerdings die Geschwindigkeit des Motors regeln
soll, ist es statt einer Strommessung hilfreicher, die Geschwindigkeit
des Motors zu messen, die bei der FOR sowieso im Kontroller vorliegt.
Eine Strommessung ist sinnvoller für Energiebilanz und Fehlererkennung.
Matthias S. schrieb:> Lest doch bitte mal in der Literatur erst
Vielleicht könntest du die Referenz sowie die genaue Textstelle nennen,
in der wir das nachlesen können.
Bis jetzt sind wir 3 Leute hier im Thread, die der Ansicht sind, dass
die Nullvektoren bei der Raumzeigermodulation angewendet werden.
Raumzeigermodulation ist lediglich das Modulationsverfahren für den 3
Phasenumrichter. Ob am Ausgang ein Motor oder ein Generator oder
irgendeine andere 3 phasige Last hängt, ist erstmal nebensächlich.
In meiner Literatur (z.B. die im Anhang) werden die Nullvektoren
angewandt.
Zur Bildung des Referenzzeigers werden die zwei spannungsführenden
Zeiger U1 und U2 verwendet, und die Zeit innerhalb einer Schaltperiode
umfasst die Zeiten T1, T2 und T0. In der Zeit T0 besteht 000 oder 111.
Matthias:
Sprichst du wirklich von Raumzeigermodulation, oder vielleicht doch eher
von Blockkommutierung?
Blockkommutierung ist kein PWM Verfahren.
Edit:
Aus spra588:
"The rest of the period is spent applying the null vector"
Gruß,
Al3ko -. schrieb:> Matthias:> Sprichst du wirklich von Raumzeigermodulation, oder vielleicht doch eher> von Blockkommutierung?
Sowohl als auch. Und auch bei der Blockkommutierung werden zu keinem
Zeitpunkt alle Lowsides gleichzeitig angeschaltet. Übrigens wird auch
dort PWM angewandt, um die Motordrehzahl/Leistung zu steuern.
Literatur:
Application Note AVR447 Sinusoidal driving of three-phase
permanent magnet motor
Application Note AVR444 Sensorless control of 3-phase
brushless DC motors
Application Note AVR495: AC Induction Motor Control with AT90PWM
Freescale Semi AN3234: Washing Motor Drive
Mir wird aber bei dem Studium von AVR495 klar, worin der Irrtum des TE
besteht. Die Zustände 111 und 000 werden als mögliche Konfiguration der
3 Endstufen erwähnt in Fig. 3-2 (Sektor 0 und Sektor 7). Allerdings ist
beim Weiterlesen (Fig. 3-3 und Table 3-2) klar, das diese Zustände nicht
zum Antrieb benutzt werden, lediglich Sektor 1 bis 6 werden dafür
herangezogen, wie auch in allen anderen AppNotes.
Das gleiche passiert in meinem FU, der hier beschrieben wird:
https://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR
Wenn man sich dort die Kontrolltabelle (in VFDTables.h) ansieht, bemerkt
man, das es keinen 0,0,0 und auch keinen 255,255,255 Zustand gibt, und
zwar unabhängig davon, ob man 'Pure Sine' oder 'Motor Waves' wählt.
Hier sieht man eine Animation der Wellenformen:
http://www.zum.de/dwu/depotan/apem112.htm
Alexander schrieb:> Wie man das Problem lösen kann:> Bau einen Offset in deine OP Schaltung ein. Der Offset liegt bei 3,3V/2> und entspricht 0A. Alles >3,3V/2 ist ein positiver Strom, alles <3,3V/2> ist ein negativer Strom.
Ich habe mich gefragt, wozu der 3.3V am nichtinvertierenden Eingang
dienen soll. Jetzt macht es Sinn.
> BTW:> Wenn du sowohl in 000 als auch in 111 die Strommessung durchführst,> kannst du deinen Phasenverlust aufgrund der Totzeiten in der Schaltung> (Sampling & Computation delay) reduzieren, falls eine schnelle Regelung> benötigt wird.
Wie man auf dem angehängten Bild sieht, kann ich die Ströme nur im
Zeiger 111 mit den am Low Side angebrachten Shunts messen.
Matthias S. schrieb:> Klaus schrieb:>> Temporär kann>> also dieser Zustand Sinn machen>> Wozu denn? Ziel der FOC ist es doch, den Motor drehen zu lassen und> nicht, Energie zu verbraten.
Der Strom, der die Spule aufgeladen hat, muss ja weiterfließen. Dafür
muss man die Low Side Fets gegen Masse kurzschließen.
> Lest doch bitte mal in der Literatur erst was über Blockkommutation und> dann über SVM, FOC oder FOR. In keiner Antriebsart ausser beim Bremsen> werden alle Highsides oder alle Lowsides gleichzeitig durchgeschaltet.> Die einzige Anwendung dafür ist der Bremsbetrieb.>> Jan Dijkstra schrieb:>> Jetzt möchte ich den Regelkreis mit der Strommessung>> vervollständigen.> Wenn dieser Regelkreis allerdings die Geschwindigkeit des Motors regeln> soll, ist es statt einer Strommessung hilfreicher, die Geschwindigkeit> des Motors zu messen, die bei der FOR sowieso im Kontroller vorliegt.> Eine Strommessung ist sinnvoller für Energiebilanz und Fehlererkennung.
Als Kaskadenregelung ist dieser Prinzip im Regelungstechnik bekannt. Der
FOC dient ja innerer Stromregler, der mit einer sehr hohen Regelfrequenz
läuft.
Außen kommt der Drehzahlregler mit relativ niedrig ausgelegten
Regelfrequenz im Einsatz.
Matthias S. schrieb:> Sowohl als auch. Und auch bei der Blockkommutierung werden zu keinem> Zeitpunkt alle Lowsides gleichzeitig angeschaltet. Übrigens wird auch> dort PWM angewandt, um die Motordrehzahl/Leistung zu steuern.>> Literatur:> Application Note AVR447 Sinusoidal driving of three-phase> permanent magnet motor> Application Note AVR444 Sensorless control of 3-phase> brushless DC motors> Application Note AVR495: AC Induction Motor Control with AT90PWM> Freescale Semi AN3234: Washing Motor Drive>> Mir wird aber bei dem Studium von AVR495 klar, worin der Irrtum des TE> besteht. Die Zustände 111 und 000 werden als mögliche Konfiguration der> 3 Endstufen erwähnt in Fig. 3-2 (Sektor 0 und Sektor 7). Allerdings ist> beim Weiterlesen (Fig. 3-3 und Table 3-2) klar, das diese Zustände nicht> zum Antrieb benutzt werden, lediglich Sektor 1 bis 6 werden dafür> herangezogen, wie auch in allen anderen AppNotes.> Das gleiche passiert in meinem FU, der hier beschrieben wird:> https://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR>> Wenn man sich dort die Kontrolltabelle (in VFDTables.h) ansieht, bemerkt> man, das es keinen 0,0,0 und auch keinen 255,255,255 Zustand gibt, und> zwar unabhängig davon, ob man 'Pure Sine' oder 'Motor Waves' wählt.>> Hier sieht man eine Animation der Wellenformen:> http://www.zum.de/dwu/depotan/apem112.htm
Du hast deine eigene Applikation nicht verstanden!
Wie fährt dein Frequenzumrichter eine Maschine bei 10Hz? Doch nicht bei
voller Spannung? Sondern bei 15% oder so, jenach VFDTable. Wie machst du
jetzt den 15% langen Spannungsvektor am Ausgang? PWM ja? Was macht diese
PWM bei einem Sinus von 15% symetrisch um 50%? richtig Dutys von 35% bis
65%. Wenn jetzt eine sychrone drei phasige PWM auf jeder Phase einen
Duty von unter 100% macht werden alle 3 low sides gleich zeitig
eingeschaltet.... QED. Und das auch bei deiner Applikation, wenn du mir
nicht glaubst schnapp dir n Scope in miss nach.
Gruß
Alex
Da viele sogar Tec auf meine Frage geantwortet haben, möchte ich noch
eine paar Fragen stellen.
Mein Motor hat 3 Hall Sensoren und leider keinen Resolver. Pro
elektrische Umdrehung bekomme ich 6 Inkremente. Daraus wird ein Winkel
mit Interpolation gebildet. Später möchte ich für die Winkelschätzung
einen Sliding Mode Observer einsetzen.
Meine Frage ist nun, wie bestimmt man den korrekten Startwinkel mittels
Hallsensoren? Die Zustände der Hallsensoren haben selbe Reihenfolge
(Gegen Uhrzeigersinn 462315) wie der Spannungszeiger (siehe Anhang).
Kann man davon ausgehen, dass der Winkel beim Hallzustand [100] 0 Grad
beträgt? und bei [110] 60 Grad.
Gruss,
Jan
Jan Dijkstra schrieb:> Kann man davon ausgehen, dass der Winkel beim Hallzustand [100] 0 Grad> beträgt? und bei [110] 60 Grad
Leider hängt das vom Motor ab. Bei großen Marken wie Maxxon oder
Faulhaber steht das im Datenblatt. Bei einem Chinesischen Motor solltest
du das aus messen. Also einen Id einstellen bei dem der Motor sicher
folgt und dann die Winkel der Zustandsänderung von den Halls in eine
Tabelle eintragen. Es gibt auch Motoren bei denen die Halls nur 60°
auseinander sind dann haste alle 30° eine Zustandsänderung. Ab und an
sind die auch ungleichmäßig eingebaut. Also jenach Motor musst du
entscheiden wieviel Aufwand du da reinsteckst.
Gruß
Alex