Forum: FPGA, VHDL & Co. Feldorientierte Regelung mit FPGA - Nios II


von Peter M. (geehoofer)


Lesenswert?

Hi Leute,

befasse mich momentan mit der Feldorientierten Regelung um einen 
permanenterregten Synchromotor zu regeln. Ich wende diese Regelung an 
einem FPGA Board an mit einer Leistungsplatine und implementiere diese 
Regelung in C (nios ii).

Ich hänge momentan den Regelkreis komplett zu schließen.
Und zwar messe ich mit 2 der ingesamt 3 Phasenströme (Ist-Wwerte) und 
wende daraufhin die Clark und Park Transformationen an damit ich Id und 
Iq (ist) bekomme. die zwei werte differenziere ich dann mit meinen Id* 
und Iq* (soll ströme). Die Differenz geht durch einen PI-Regler. Da 
meine Einheit die aus dem PI-Regler kommt Ampere ist wollte ich wissen, 
wie ich daraus eine Spannung bzw Volt bekomme. Da ich ja im nächsten 
schritt die Inverse Park Transfomation verwende und in dieser 
Transformation mit der Spannung gerechnet wird.

Vielen Dank für eure Hilfe

von Duke Scarring (Gast)


Lesenswert?

Peter Maier schrieb:
> kommt Ampere ist wollte ich wissen,
> wie ich daraus eine Spannung bzw Volt bekomme.
Hmm. Komplexe Transformationen und Regelkreise sind kein Problem aber 
bei R = U / I scheitert es? Merkwürdig.

Duke

von Peter M. (geehoofer)


Lesenswert?

der PI regler ist doch eigentlich dimensionslos. ich denke man muss den 
Regler als eine V/A einheit betrachten... frage ist ob man die einheiten 
im code auch irgendwie implementieren muss?


PI_Regler_1.Error = shall_i_dq.Im - curr_i_dq.Im;
.....
......
PI_Regler_1.y = PI_Regler_1.y_p + PI_Regler_1.y_i
u_dq.Im = PI_Regler_1.y

von Duke Scarring (Gast)


Lesenswert?

Peter Maier schrieb:
> der PI regler ist doch eigentlich dimensionslos. ich denke man muss den
> Regler als eine V/A einheit betrachten... frage ist ob man die einheiten
> im code auch irgendwie implementieren muss?
Nein, muß man nicht. Aber Du mußt wissen, was Du eigentlich regeln 
willst: Drehzahl, abgegebene Leistung, konstanter Strom...

Duke

von Matthias Malits (Gast)


Lesenswert?

Hallo.

Soweit ich es mir richtig gemerkt habe - bitte korrigiert mich, wenn ich 
mich irre -  beginnt man zunächst mit der Regelung der Spulenströme, 
damit zu hohe Ströme verhindert werden. Dafür kann man auch 
Zweipunktregler nehmen und ein gewisses Toleranzband einstellen (je 
kleiner desto öfter muss geschaltet werden) und eine Begrenzung auf 
Nennstrom einbauen.

Die Park/Clarke-Transformation dient ja nur dem Umrechnen von den drei 
Strangströmen zu einem Raumzeiger (2 Parameter).
Da es sich um eine PSM handelt, ist eine der Komponenten immer 0, da es 
sich um ein rotorfestes Bezugssystem handelt. Die Komponente, die 0 ist 
- keine Ahnung, ob es d oder q war... sagen wir d - ist der fixe 
Flusszeiger vom permanenterregten Rotor. D.h es bleibt nur die Stärke 
der i_q-Komponente über zur Regelung (Drehmoment = i x fluss). Diese 
steht im rechten Winkel zum permanenten Fluss, da so das Drehmoment 
maximal ist.

Die i_q-Komponente wird wieder ins statorfeste Koordinatensystem (alpha, 
beta) umgerechnet. Den Winkel von Rotor zu Stator weiß man vom Sensor. 
Die alpha,beta-Ströme werden dann wieder umgerechnet in die 3-Phasen.

Muss jetzt zB die Drehzahl geregelt werden, kann man das mithilfe eines 
überlagerten PI-Regler machen.

LG

von J. S. (engineer) Benutzerseite


Lesenswert?

Das ganze ist wohl weniger ein FPGA-Thema, als ein Modell-Thema. Soweit 
ich das überblicke, hast Du hier mehrere Regelkreise: Im Innersten ist 
es der sich autark einstellende Strom nach Massgabe der Ansteuerung und 
Belastung (Modell?) und darum herum die Reglung des Spulenstroms und 
zwar a) auf Strommaximum und b) der Vorgabe. Du brauchst also einen 
Sollstrom oder ein Sollfeld, auf das der Motor träge reagiert. Damit 
hättest du aber aus Deiner Sicht noch keinen geschlossenen Regelkreis. 
Den zu schliessen, hieße, den angedeuteten Regler um die Vorgabe herum 
zu bauen.

Ob da NIOS das richtige ist ... (?)

Ich habe das mal für Schrittmotoren gemacht, dort aber die SV und 
Regelung im FPGA:
http://www.google.com/patents/US20110133682

Das ist schnell genug, um die Elektronik zu modellieren und zu 
antizipieren (und eben passend anzusteuern).

Wenn Du jetzt im threadthema "feldorientiert" schreibst, würde ich 
sagen, dass Deine innerste Regelgösse wohl das Feld sein soll (?). Und 
damit hättest Du gfs ein Recherpowerproblem.

von Bana (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe eigentlich nur eine kurze Frage und glaube das die hier gut 
reinpasst.

Habe gerade auch ein Verständnisproblem bezüglich Strom zu Spannung.
Anbei ein Bild der das besser Verdeutlicht.

Ich messe ja meine Phasenströme und transformiere die drei Ströme in das 
Statorfeste Koordinatensystem (KS). Danach ins Rotor-KS und erhalte die 
Ströme in d und q Richtung.

Nun möchte ich den Strom Id und Iq mit einem PI Regler regeln.

In den ganzen Bildern die ich so finde, schicken die ein Strom rein und 
bekommen eine Spannung raus. Aus dieser bilden die dann die notwendigen 
Strangspannungen die für die Raumzeigermodulation notwendig sind und 
daraus das PWM Ausgangssignal.

Meine Frage ist nun also: Der Parameter Kp ist doch dimensionslos oder? 
Wie aber komme ich von einem Strom zur Spannung? Einfach wie oben 
erwähnt mit dem Widerstand?

Da ich hier keine Antwort gefunden habe, bin ich anders vorgegangen aber 
dennoch würde ich das gerne verstehen.

Ich habe einfach die Werte Normiert, sodass meine Soll, Ist und 
Stellgröße zwischen 0 und 1 liegt.

Grüße

Bana

von MCUA (Gast)


Lesenswert?

>Das ganze ist wohl weniger ein FPGA-Thema, als ein Modell-Thema.
Ja, Für sowas reicht norm. schon ein schnellerer uC (evtl mit DSP) aus.

von IUnknown (Gast)


Lesenswert?

Bana schrieb:
> Meine Frage ist nun also: Der Parameter Kp ist doch dimensionslos oder?
> Wie aber komme ich von einem Strom zur Spannung? Einfach wie oben
> erwähnt mit dem Widerstand?

Kp ist dimensionslos. Systemtheoretisch betrachtet ist der gesamte 
Regler dimensionslos. Physikalisch hast du mit dem Motor allerdings ein 
System welches als Eingang einen Spannungsvektor und als Ausgang einen 
Stromvektor hat. Daher musst du in deiner Schleife die Einheiten dazu 
passend wählen. Bei Auslegung der Schleife werden solche Faktoren 
allerdings oft in Kp absorbiert, die Einheit dabei stillschweigend 
ignoriert weil sie keinen Mehrwert hat.

Bana schrieb:
> Ich habe einfach die Werte Normiert, sodass meine Soll, Ist und
> Stellgröße zwischen 0 und 1 liegt.

Da musst du natürlich aufpassen was dein Umrichter für Eingangswerte 
erwartet. Einfach normieren verändert die Verstärkung.

Peter M. schrieb:
> frage ist ob man die einheiten
> im code auch irgendwie implementieren muss?

Nein. Im Modell kommen sie vor allerdings nicht mehr in der numerischen 
Implementierung. Solange deine Reglerkonstanten richtig sind passt das.

Jürgen S. schrieb:
> Wenn Du jetzt im threadthema "feldorientiert" schreibst, würde ich
> sagen, dass Deine innerste Regelgösse wohl das Feld sein soll (?). Und
> damit hättest Du gfs ein Recherpowerproblem.

Das rechenaufwändigste ist die Park-Transformation. Mit ein paar 
Lookuptables kann das sogar ein AVR erledigen.

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.