Hallo zusammen,
ich bin gerade dabei mir die Funktionsweise der FOC und vor allem der
Raumzeigermodulation zu Gemüte zu führen. Das meiste ist auch relativ
klar. Es hakt aber leider bei der Zuordnung zu den
PWM-/Compare-Registern.
Ich habe meine alpha- und beta-Komponenten, ich hab den Sektor bestimmt
und ich hab die Einschaltzeiten der Grundvektoren, zwischen denen mein
Referenzspannungszeiger liegt, errechnet.
So, wie die Amplitude der Teilspannungen auf meine
Gesamt-(Zwischenkreis-)spannung bezogen ist, sind die Schaltzeiten der
Grundvektoren ja auf meine PWM Periodendauer bezogen. Ist ok.
Aber wie mache ich jetzt die Zuordnung zu meinen drei
PWM-Vergleichswerten?Ich hab grad leider irgendwie nen Brett vorm Kopf.
Zwei errechnete Schaltzeiten, irgendwo soll noch der 0-Vektor rein und
ich hab drei PWM-Register. Wie kommt das alles zusammen?
Ich würd mich freuen, wenn mir da einer ein bißchen auf die Sprünge
helfen könnte!
VG,
Mike
Ich werd nicht so ganz schlau aus dem, was Du schreibst. Ausgehend von
den d/q-Stromreglern drehst Du mit dem Rotorwinkel auf alpha, beta und
dann per rück-Clarke auf U,V,W. Aber das hast Du ja verstanden. Die U,
V, W skalierst Du halt um auf die PWM-Werte, wobei das einzig
verbliebene Stück magic die zero sequence modulation oder midpoint shift
des SVPWM ist. Hier ist es sehr schön beschrieben:
http://microchip.wikidot.com/mct5001:start (der ZSM-Viewer funktioniert
seit einer Weile nicht mehr).
- Martin
Hi Martin und vielen Dank für deine Antwort!
Entschuldige, falls ich mein Problem nicht verständlich genug
beschrieben habe. Liegt vielleicht ein bißchen dadran, daß ich selbst
nicht so recht weiß, wo mein Problem ist :P .
Aber ich glaube deine Antwort hat mir schon geholfen, sofern ich das
richtig verstanden habe:
nachdem ich aus u_alpha und u_beta per Rücktransformation U_a, U_b und
U_c (U-V-W, X-Y-Z, wie-auch-immer) gewonnen habe, stellen diese
Spannungen bezogen auf die Zwischenkreisspannung auch meinen
Compare-Wert bezogen auf meinen Timer-Maximalwert dar?
So hab ich die ganze Literatur, die ich bisher gewälzt habe, irgendwie
icht verstanden :/ .
Ich versuche mein Problem nochmal verständlicher zu formulieren:
Angenommen ich hätte keine alpha-beta-Komponenten. Nur meinen
Referenzspannungsvektor und den dazugehörigen Winkel. Dann ergeben sich
daraus ja die Anteile an den entsprechenden Sektor angrenzenden
Grundvektoren.
Beispielwerte: Sektor 2 (zwischen 60° und 120°), 0,1 * 60°-Vektor (011),
0,6 * 120°-Vektor (010).
Wie ist jetzt der Zusammenhang zwischen der relativen Länge meiner
beiden Grundvektoren und meinen drei PWM-Compare-Werten in Abhängigkeit
vom Sektor?
Lies noch mal hier
http://microchip.wikidot.com/mct5001:which-zsm-is-best
das Beispiel ab Gleichung (1) durch. Dort wird Deine Frage beantwortet.
Du musst bedenken, dass Du keine absoluten Spannungen stellst, da der
Motor keinen Potentialbezug zu einer Masse hat, sondern nur an den drei
Phasen hängt. Rechne das Beispiel durch, dann sollte es klar werden.
Konkret skalierst Du die U-V-W-Werte (Spannungen) mit einem Faktor, um
auf Deinen PWM-Range zu kommen (z.B. 512), dann gibt es noch einen
Offset (1). Natürlich in Wirklichkeit noch einen Bereichscheck und einen
Maximalwert, wenn Du die Ströme in den lowside-Schaltern misst.
Um die Sektoren mussst Du Dich gar nicht kümmern. Das ist nur für die
Modellierung von SVPWM nötig, Du stellst einfach die PWM-Einheit auf
symmetrisches center-aligned PWM ein und gut ist.
- Martin
Ok, danke. Ich lese es mir durch und versuch es nochmal zu verstehen.
Ich werde aber wiederkommen. Entweder, um zu verkünden, daß ich's
geschnall habe oder um weiter zu jammern ;) .
Danke nochmal!
Martin schrieb:> Lies noch mal hier> http://microchip.wikidot.com/mct5001:which-zsm-is-best> das Beispiel ab Gleichung (1) durch. Dort wird Deine Frage beantwortet.> Du musst bedenken, dass Du keine absoluten Spannungen stellst, da der> Motor keinen Potentialbezug zu einer Masse hat, sondern nur an den drei> Phasen hängt. Rechne das Beispiel durch, dann sollte es klar werden.> Konkret skalierst Du die U-V-W-Werte (Spannungen) mit einem Faktor, um> auf Deinen PWM-Range zu kommen (z.B. 512), dann gibt es noch einen> Offset (1).
Hi nochmal,
ok, ich glaub das hab ich auch verstanden. Das funktioniert aber nur,
wenn ich durch Rücktransformation die drei Einzelspannungen hab.
@PWM: ist auf Center-aligned (symmetrisch) eingestellt.
Aber wie würde das in diesem von mir beschriebenen Fall gemacht werden:
Mike schrieb:> Angenommen ich hätte keine alpha-beta-Komponenten. Nur meinen> Referenzspannungsvektor und den dazugehörigen Winkel. Dann ergeben sich> daraus ja die Anteile an den entsprechenden Sektor angrenzenden> Grundvektoren.> Beispielwerte: Sektor 2 (zwischen 60° und 120°), 0,1 * 60°-Vektor (011),> 0,6 * 120°-Vektor (010).> Wie ist jetzt der Zusammenhang zwischen der relativen Länge meiner> beiden Grundvektoren und meinen drei PWM-Compare-Werten in Abhängigkeit> vom Sektor?
In den ganzen Dokumenten, die ich durch habe, wird immer t1, t2 und t0
ausgerechnet, womit die Einschaltdauern der Grundvektoren und des
0-Vektors beschrieben werden. Natürlich kann ich jetzt die relative
Einschaltdauer auf meine PWM-Periodendauer beziehen. ABER: mir ist
leider immer noch nicht klar, wie diese Zeiten auf die einzelnen
Brückenzweige/Compare-Register zu beziehen wären. Das muß doch irgendwie
vom Sektor abhängig sein!
Ich kann ja wohl nicht sagen Compare-Wert_1 = t1, Compare-Wert_2 = t2
und Compare-Wert_3 = t0. Dann würden sich ja meine Pulsmuster alle 60°
wiederholen, wenn der Sektor da nicht mit reinspielen würde, oder?!
Wie funktioniert die Zuordnung von diesen drei Schaltzeiten zu den
Brückenzweigen?
Also mal schauen, ob ich mich nicht selber verheddere...
Die beiden PI-Stromregler für D- und Q-Strom haben als Eingang einen
Strom (den Regelfehler) und am Ausgang eine Spannung in V. Nehmen wir
mal an, UD = 100 V und UQ = 0 V. Mit Phi = 0 ergibt die
Park-Clarke-Rücktransformation Spannungen von V = 100 V, U = -50 V und W
= - 50 V.
Nehmen wir an, die Busspannung sei 400 V und der PWM-Zähler würde bis
400 zählen. Mit 20 kHz PWM (lahme IGBTs) würde der Zähler also mit 8 MHz
zählen.
Wenn Du das U-Register auf 0 setzt, sind die lowside-IGBTs immer an und
die Ausgangsspannung ist 0. Wenn das Register auf 400 steht, sind die
highside-Schalter immer an und die Ausgangsspannung ist 400 V. Wenn das
Register auf 200 steht, ist am Ausgang ein PWM mit 50% und Mittelwert
200 V.
Legen wir die Mittelpunktsspannung (also der Sternpunkt des Motors)
vorerst auf 200 V fest (also kein midpoint shift). Dann würdest Du am
U-Anschluss der IGBT-Brücke 200 + 100 = 300 V sehen wollen und an V und
W jeweils 200 - 50 = 150 V. In die U, V und W-Register würdest Du also
300, 150 und 150 schreiben. Wenn Du Dir die resultierende Schaltsequenz
anschaust, stellst Du fest, dass der Spannungsvektor, den der Motor
sieht, genau den Sektorwerten entspricht, die Du wahrscheinlich
berechnet hast.
Um den verfügbaren Spannungshub zu erhöhen, verschiebt man jetzt noch
den Mittelpunkt, so dass die Phasenspannungen gleich viel Abstand nach
oben und unten haben (Gleichung 1 wie oben). Also
Mitte = 200 V - (max(u,v,w) + min(u,v,w))/2 = 200 V - (100 V - 50 V)/2
= 200 V - 25 V = 175 V. Damit würde man ins U-PWM-Register 100+175 =275
und in die V- und W-Register -50+175 = 125 laden.
Der Motor würde von U nach V und von U nach W jeweils 275 - 125 = 150 V
sehen und von V nach W 0, was genau dem entspricht, was wir wollten.
Alles klar?
- Martin
Hi,
also vorweg: ich weiß wirklich wirklich zu schätzen, daß du dir so viel
Mühe gibst, mir das beizubiegen. Das ist wirklich nett!
Darum hoffe ich, daß du nicht sauer wirst, weil du glauben könntest, daß
ich mich absichtlich doof stelle :) .
Deine Beschreibung ist wirklich gut und nachvollziehbar. Sie bezieht
sich aber leider immer noch nicht ganz auf meine eigentliche Frage.
Mike schrieb:>> Wie ist jetzt der Zusammenhang zwischen der relativen Länge meiner>> beiden Grundvektoren und meinen drei PWM-Compare-Werten in Abhängigkeit>> vom Sektor?
Zum Beispiel hier:
http://cache.nxp.com/files/dsp/doc/app_note/AN3301.pdf
ab Seite 22.
Da wird es so gemacht, daß man mit den Grundvektorlängen (dort t_1 und
t_2 genannt) die absoluten Schaltzeiten t1, t2 und t3 berechnet werden
(Eqn. 46 - 48).
Es wird zwar auch eine inverse Clarke gemacht, aber nur, um dann per
Fallunterscheidung auf den Sektor zu kommen (spart den arctan).
Mit den Schaltzeiten t1, t2, t3 und dem Sektor wird dann entschieden,
welcher Wert in die PWM-Register geladen werden muß (Tabelle 4, Seite
24). Und genau DEN Zusammenhang versteh ich nicht. Die Zuordnung der
Schaltzeiten zu den PWM-Registern in Abhängigkeit vom Sektor. Genau das,
was in der Tabelle 4, S. 24 dargestellt ist.
Kein Sorge... ich frag mich schon die ganze Zeit selbst, ob das denn
wirklich so schwer sein kann XD .
Dieses Kapitel scheint mir also übermässig kompliziert zu sein. Wozu
diese Sektor-Rechnerei wirklich gut sein soll, ist mir nicht ganz klar.
Im allgemeinen (SVM-) Fall mag das ja nötig sein, aber bei PWM (SVPWM)
ergeben sich die Sektoren von alleine, wenn man die Spannungen richtig
setzt.
Aber wenn Du die Zeiten und die dazugehörigen Vektoren hast, kannst Du
doch die Kurvenformen aufmalen und die Registerwerte ablesen. Ich habe
eine kleine Skizze gemacht:
Fall 1: Spannung = 0, also nur Nullvektoren. Um das Gleichgewicht im
Kosmos zu wahren, verteilen wir die halbe halbe auf O000 und O111.
PWM-Register a,b,c also 200 (PWM-Periode 400).
Fall 2: U60 während 50% der Zeit. Links dran 25% O000 und rechts 25%
O111. Registerwerte a,b 300 und c 100.
Fall 3: U60 während 25% und U120 25% (Sektor II). Links und rechts
Nullvektoren dran, also PWM a=200, b=300, c=100
So in etwa dürfte das Tabelle 4 machen. Wie genau das aber funktioniert
ist mir grad zu mühsam zum herausfinden. Gehirnjogging macht Spass, aber
man kann sich lohnendere Ziele aussuchen.
Warum man zuerst die Zeiten berechnen will und danach per
Fallunterscheidungen die Zeiten dem PWM zuordnen soll, ist mir nicht
klar. Das wird sicher funktionieren, aber wozu das Theater? Per inversem
P/C die Spannungen berechnen, umskalieren auf PWM-Werte und fertig. Der
zeitliche Ablauf über die Sektoren ergibt sich von alleine richtig.
Hi,
also erst nochmal vielen Dank, daß du dir nochmal die Mühe gemacht hast.
Ich hab das Gefühl, daß du Recht hast und daß ich da gedanklich
irgendwie falsch unterwegs war. Auf die Idee mir das einfach mal auf zu
malen, bin ich irgendwie nicht gekommen. Wäre vielleicht mal gut gewesen
;) .
Das mit der Rücktransformation, ohne sich dabei um Winkel und Sektoren
kümmern zu müssen, ist wirklich eine charmant einfache Methode :) .
Ich bin aber leider immer wieder in der Literatur und auch in
Beispielimplementationen darüber gestolpert, wie Leute es eben so
gemacht haben, daß der absolute Winkel des Referenzspannungszeiger
bestimmt wurde (arctan). Dann wußte man des Sektor, konnte dann mit der
Amplitude Referenzspannungszeiger die Längen des benachbarten
Grundvektoren errechnen und schließlich dann wieder per
Fallunterscheidung die errechneten Zeiten auf die PWM-Register beziehen.
Schön fand ich das auch nicht ;) . Zumal ich es ja auch nicht
verstanden hatte :P (aufmalen?!).
Ich fand übrigens den Abschnitt in dem von dir verlinkten Wiki genial,
wo aus dem Hexagon ein Würfel gemacht wird. Hat das ganze zwar nicht
einfacher gemacht, aber es war ziemlich interessant!
Grüße und danke!