Forum: Mikrocontroller und Digitale Elektronik FOC für den PMSM ohne Motordaten


von K. C. (crickcrack)


Lesenswert?

Guten Tag zusammen,

Ich habe folgendes Problem;

Ich habe einen PMSM motor (EPS servolenkung Motor) leider mit keine 
Eigenschaften. Ich habe den Motor erst ohne Regler einfach mit konstante 
PWM signal getestet und bis zum maximum Drehzahl (Leerlauf) gedreht. Es 
hat gut funktioniert. Also jetzt weiß ich nur wie schnell der Motor sich 
dreht aber mehr nicht. Dann weiter habe ich mit einem einfachen PI 
Regler (Feldorientierte Regelung) vorbereitet um die Regler Parameter 
mit Experiment zu bestimmen. Der Motor dreht sich mit dem Regler auch 
aber zu laut. Ich habe Regler parameter viel mal geändert aber hab 
keinen Erfolg Motor ist immer zu laut.

Meine Frage ist, wie kann ich in dem Fall für den Motor Regler Parameter 
bestimmen ohne Motor Eigenschaften. Was kann ich machen dass der Motor 
sich leise dreht wie ohne Regler Fall.

Vielen Dank im Voraus und entschuldigung wegen meine schlechte 
Deutschkenntnisse.

von C. K. (Gast)


Lesenswert?

Übrigens,

der Motorlagesensor ist ein Drehgeber (5000 Strichzahl) mit zwei Kanäle 
(A und B)...

von Joachim B. (jojo84)


Lesenswert?

Ich habe auch mal eine Drehzahlregelung programmiert. Da habe ich die 
Reglerparameter auch durch "ausprobieren" ermittelt. Da gab es aber das 
"Problem", daß ich keinen Drehzahlsensor hatte :) ... Ich vermute dein 
Problem liegt vielleicht wo anders. Wie ist dein Regler aufgebaut? Bei 
einer Drehzahlregelung hast du ja im Prinzip eine unterlagerte 
Stromregelung (Drehmomentregelung). Wenn du jetzt konstant auf einen 
hohen Strom regelst, dann brummt der Motor schonmal tüchtig :) . 
Überläufe von Integratoren sind ein beliebtes Problem. Und was ist an 
dem Motor laut? Wie klingt er?

Gruß

von K. C. (crickcrack)


Lesenswert?

Hallo Joachim,

zuerst vielen Dank für deine Antwort. Ich mache momentan kein 
Drehzahlregler sonder nur Stromregler. Mein Sollwert ist konstant z.B. 
2A. Der Motor dreht sich sehr schnell obwohl ich sehr niedrige Strom 
sollwert vorgebe (also normalerweise ich erwarte dass der Motor erst 
langsam sich drehen wird und danach schneller).

mit dem "zu laut drehen" meinte ich dass man richtig geräusche hört und 
merkt man dass der Stator und Rotor nicht einander synchron sind. Ich 
habe den Test ohne Integral Anteil probiert aber kein Erfolg wieder zu 
laut. Wie kann ich schritt zu schritt das Problem bestimmen! Was muss 
ich den messen um den Fehler genau zu verstehen .

vielen Dank!

von Florian V. (Gast)


Lesenswert?

Das der Motor im Leerlauf auch bei kleinem Strom sehr schnell dreht, ist 
vollkommen normal, die Verluste im Motor sind sehr klein. Und das macht 
das Einstellen der Regelung knifflig, die Eigendämpfung ist sehr niedrig 
etc etc...
Läuft der Motor unter Last denn bereits sauber? Hier würde ich eher 
ansetzen, denn nur unter Last sind die Strom-/Spannungskurven schön 
"lehrbuchmäßig".

von Joachim B. (jojo84)


Lesenswert?

Moin,

eigentlich solltest du bei einer PMSM genau sagen können, wie schnell 
sie dreht. Nämlich so schnell, wie dein angelegtes Statorfeld.
Dass du erstmal mit einem "einfachen" Stromregler anfängst ist gut. Die 
Drehzahl solltest du zu Anfang erstmal steuern, nicht regeln. Das 
funktioniert bei PMSM bis zu einem gewissen Punkt ganz gut. Ich vermute, 
daß deine komischen Geräusche daher kommen, daß dein Läufer ab und zu 
"aus dem Tritt" kommt, als nicht ganz richtig von dem Drehfeld 
mitgenommen wird. Das kann wirklich sehr verrückt klingen ;) ...!
Ich habe den Stromregler damal mit einer normalen Asynchronmaschine 
eingestellt. Da brauchst du dir keine Gedanken über das Hochrampen der 
Drehzahl zu machen.
Als mein Stromregler dann ordentlich lief habe ich eine Rampe für die 
Drehzahl implementiert. Danach lief es auch problemlos mit der PMSM. 
Versuch das mal so. Wenn du keine Asynchronmaschine zur Verfügung hast, 
dann brauchst du trotzdem eine Drehzahlrampe :) ...

Gruß

von Tecnologic (Gast)


Lesenswert?

C. K. schrieb:
> mit dem "zu laut drehen" meinte ich dass man richtig geräusche hört und
> merkt man dass der Stator und Rotor nicht einander synchron sind. Ich
> habe den Test ohne Integral Anteil probiert aber kein Erfolg wieder zu
> laut. Wie kann ich schritt zu schritt das Problem bestimmen! Was muss
> ich den messen um den Fehler genau zu verstehen .

Moin,

Dein Problem schein nicht an deinem Regler ansich zuliegen. Wenn du FOC 
betreibst, was für einen Winkel hast du zwischen Rotor und Stator Feld? 
das sollten immer 90° sein, dann liefert der Motor maximales Drehmoment 
für die eingeprägte Spannung. Als nächstes solltest du nicht 2A Strom 
vorgeben sondern nur 100mA oder weniger. Das hört sich für mich so an 
das du den Motor im Leerlauf, dazu bekommen willst 2A zu ziehen, und das 
wird nicht gehen. Du musst schon einen Sollwert nehmen den der Motor 
auch erreichen kann.

MfG

Tec

von K. C. (crickcrack)


Lesenswert?

Hallo nochmal,

Danke für alle hilfreiche Antworte. Also 2A war nur ein Beispiel. ich 
habe den Test mit sehr niedrigem sollwert auch gemacht. Ich habe 3 
Phasenströme gemessen und hab gemerkt dass der Motorströme am Anfang 
rauschen. Also U,V,W Ströme rauschen zwischen +/- 0.5A obwohl ich den 
Motor kein Signal schicke. Ich vermute mal dass der Regler anfang 
versucht (wegen dem Rauschen) den Strom immer null halten (wenn sollwert 
null ist) und damit gibt ein große Spannung werte raus. Ich habe Kp 
bisschen erhöht und Ki niedrig gemacht und damit der Motor dreht sich 
überhaupt nicht mehr aber macht ein große Geräusche (wie ein Vuvuzela).

Also muss ich Geschwindigkeitsregler machen mit unterlagertem 
Stormregler obwohl ich nicht genau den stromregler parameter 
festgestellt habe.

Übrigens habe ich keine Daten vom Motor (polpaarzahl, indüktivität, 
wiederstand ...)

Danke,

von Joachim B. (jojo84)


Lesenswert?

Nun bleib mal ruhig. Was soll denn die Tatsache überhaupt, daß dein 
Stromregler im Stillstand überhaupt irgendwas macht? Um den Motor zum 
Stillstand zu bringen kannst du ja unter anderem den Stromsollwert zu 0 
machen, oder den Drehzahlsollwert. Die Drehzahl auf 0 zu bringen, den 
Stromregler aber weiterlaufen zu lassen ist... diplomatisch ausgedrückt: 
nicht gut.
Versuch doch wenigstens mal so, wie dir vorgeschlagen wurde: Stromregler 
auf xxx A einstellen und die Drehzahl hochrampen. Das kann ruhig 5 
Sekunden dauern, egal.
Außerdem macht es Sinn dir mal die Sprungantwort von deinem Regler an zu 
gucken. Dafür kannst du eine ohmsche, aber besser induktive Last nehmen. 
Ich hab damals im 500ms-Takt Regler an und wieder aus gemacht. Damit 
kannst du deine Reglerparameter so grob in die richtige Richtung 
bringen. Pack das Problem doch mal an der Wurzel. Wenn dein Regler Unfug 
macht, dann ist die Polpaarzahl erstmal vollkommen Hupe...
Ach ja, die Polpaarzahl: das ist gar nicht so schwierig. Du könntest 
z.B. ein Scope an die Statorwicklungen anschließen, den Motor von Hand 
drehen, und dann guckst du dir an, wieviele Perioden du pro Umdrehung 
misst. Und wenn dir das zu einfach ist: Lass den Motor mit dem 
Stromregler bei Festgelegter Drehzahl drehen (siehste, Stromregler muß 
erstmal laufen). Nimm bei deiner Rechnung einfach mal an, die 
Polpaarzahl sei 2. Wenn du jetzt auf z.B. 3000 u/min hochrampst kannst 
du dann mal die Drehzahl messen. Wenn die passt, dann passt deine 
Polpaarzahl im Code auch. Wenn nicht, dann nicht! Ist die eingestellte 
Drehzahl 3000 (PPZ 2), und die gemessene 1500, dann ist die PPZ... 
hmmmmmm  ;)

Gruß

Edit: ach ja, der Widerstand deines Motors ist recht leicht zu 
errechnen. Leg eine Gleichspannung über eine der Wicklungen an und miss 
den Strom. Mit R = U / I kriegst du den Widerstand raus. Oder miss ihn 
einfach mit deinem Multimeter ;) ...

von K. C. (crickcrack)


Lesenswert?

Also ich glaube dass ich einige Sachen gut formulieren, in das Thema gut 
klar zukommen:

- Ich gebe kein Drehzahl als Sollwerte, ich habe nur PI Stromregler 
also:
Iq_soll-Iq_ist --> PI Regler --> Uq_soll, Ud_soll --> Clark-Park Trans 
--> SVPWM Modulation --> Brückentreiber --> Motor

- Erster Test: Kein Regler, eingang -> konstante 3 Phasen sinus Verlauf 
--> PWM Modulation --> Brückentreiber --> Motor  (offene Kreis und der 
Motor dreht sich, ich kann Sinus amplitude erhöhen und periode kürzen 
damit Motor dreht sich schneller) Ergebniss --> Funktioniert sehr gut 
fast bis zum 6000°/s...

- Zweite Test: mit Stromregler --> eingang konstant Iq_soll=0, 
Id_soll=0:
Die Schleife ist gleich und Ergebniss --> Motor dreht sich nicht aber 
peepst oder macht kracht zu laut...

- Dritte Test: mit Stromregler --> eingang konstant Iq_soll=0.1A Kp=0.3, 
Ti=4000 Ergebniss --> Der Motor dreht sich sehr schnell und gleichzeitig 
ist der zu laut wieder...

Da sind einzige Teste die ich bis jetzt gemacht habe. Ohne 
Drehzahlregler wie kann ich Drehzahl hochrampen test machen , das habe 
ich nicht ganz verstanden. Ich möchte ab jetzt ganz sauber und logic 
weiter gehen und nur mit Stromregler den Motor leise drehen. Wenn es 
nötig kann ich auch irgenwie Last aufhängen dass der Motor nicht mehr im 
Leerlauf dreht.

Was ist Ihre meinung, wie kann ich mein Problem mit Erfolg lösen!!!

vielen Dank nochmal an Alle...

von Joachim B. (jojo84)


Lesenswert?

Also ich kann nur beschreiben, wie ich das gelöst habe. Das muß keine 
Musterlösung sein. Wenn es andere Leute gibt, die der Meinung sind, daß 
ihr Vorgehen besser ist, lasse ich mich gern belehren :)

Mit "hochrampen" ist einfach gemeint, daß du die Frequenz deines 
Drehfeldes von 0 auf xxx "langsam" erhöhen sollst. Wenn dein Drehfeld 
die ganze Zeit mit voller Drehzahl dreht ist ja klar, daß der Läufer 
nicht wirklich mitkommt. Der muß ja erstmal beschleunigt werden. Darum 
habe ich einen konstante Strom eingeprägt und dann die Frequenz des 
Drehfeldes von 0 auf xxx Schrittweise erhöht.
Die Theorie dahinter: eine Umdrehung geht von 0 bis 2*pi. Und deinen 
Drehwinkel lässt du dann ja von 0 bis 2*pi hochzählen und dann wieder 
von vorne. Die Drehfrequenz hängt dann davon ab, wie groß die Schritte 
sind, in denen du den Winkel hochzählst (Beispiel 0,1 ergibt dann eben 
knapp 63 Schritte), und wie oft pro Zeiteinheit du das machst. Wie oft 
du das machst ist oft durch die Interruptfrequenz (z.B. 16kHz) 
festgelegt. Wenn du also 16000-mal pro Sekunde deinen Winkel um 0,1 
hochzählst ergibt sich eine Drehzahl von 16000 / 63 = 253 Hz. Ja, und da 
hab ich dann die Schrittweite (also das beispielhafte 0,1) von 0 bis xxx 
erhöht. Und wie schnell diese Erhöhung stattfindet ergibt den Verlauf 
deiner Beschleinigung.

Du kannst eine PMSM nicht einfach an eine feste Frequenz legen. Eine 
Asynchronmaschine kann das, eine SYNCHRONmaschine aber nicht (zumindest 
nicht offiziell ;) )!

Mach ich eigentlich grad deine Abschluß/Projekt-Arbeit hier?

von K. C. (crickcrack)


Lesenswert?

Hallo Joachim,

Ich habe vom Motor Polpaarzahl, Wiederstand und Indüktivität ungefähr 
bestimmt. Also habe ich immer noch Problem mit dem Regler. Der Regler 
Arbeitet im Frequenzbereich 8kHz. Wie du beschrieben hast, habe ich die 
Drehfeld frequenz vom 0 bis max  langsam erhöht. In der Simulation siehe 
ich dass die PWM Signal vom 0 bis zum max. Werte sich langsam erhöht und 
die frequenz auch. Da alles ist wie ich erwartet habe ganz ok. Aber im 
realen Test leider ist das nicht so. Obwohl ich Anfang Iq_soll=0 gebe, 
der Motor macht nur kracht(oder peepst).

Ich verstehe das nicht. Ich habe die phasenströme wieder gemessen, die 
rauschen zwischen -/+ ~0.4A und Ausgang Spannung des Reglers bleibt 
nicht mehr null. Also hast du dafür eine erklärung wo ich da Fehler 
mache.

von Joachim B. (jojo84)


Lesenswert?

Sorry, bei deiner Beschreibung kann das fast alles sein, was das 
Verhalten des Motors verursacht.
Du mußt allerdings den d-Strom auf 0 regeln und den q-Strom auf xxx 
(zumindest war das bei mir so ;) ...).
Du solltest überprüfen:
- Inhalt deines Integrators (I-Anteil)
- Überläufe des Integrators
- Wertebereich des Integrators (Begrenzungen)
- Wertebereich des P-Anteils (Eingangsgrößte * Kp)
- Wertebereich des Summation von P- und I-Anteil (Begrenzungen)

Bedenke: der I-Anteil muß negativ werden können, das was aus deinem 
Regler rauskommt aber (normalerweise) nicht. Deine PWM-Register können 
ja nur Werte von 0-xxx aufnehmen. Das bildet dann auch die Grenzen für 
deine Regler-Größen.
Debuggen ohne etwas zu sehen ist äußerst ineffizient. Darum sollst du 
bitte irgendwie deine Reglergrößen sichtbar machen. Ausgabe auf serielle 
Schnittstelle, über JTAG, wie auch immer... oder nimm zur Not ein Scope!

Klemm eine Drossel anstatt des Motors an und dann gibst du Sprünge auf 
des Teil und guckst dir mit dem Scope die Stromverläufe und das 
Einschwingverhalten an. Reglerparameter anpassen und fertig. 
Sprungantwort Sprungantwort ist das Zauberwort! Wenn du das 
"automatisiert" laufen lässt wird es einfach:
Pseudocode:
Endlosschleife
{
      1A Strom-Sollwert
      500 ms warten
      0A Strom-Sollwert
      500 ms warten
}

In der Schleife änderst du dann "von außen" per JTAG oder sonstwie dein 
Kp und Ki...

von K. C. (crickcrack)


Lesenswert?

Hallo,

Du hast recht Joachim. Ich habe heute kurze Zeit paar Test gemacht und 
habe ich folgende Ergebnisse:

- Zuerst wollte ich Amfang des Programs auf jeden fall den Motor leise 
halten. Dafür habe ich wie folgendes gemacht
   if iq_ist < 1A
      out=0;
   else
      out=iq_ist;
   end
  Das habe ich für D-Regler und Q-Regler gemacht. Der Motor bleibt damit 
ganz ruhig.

- Danach wollte ich nur mit D-Regler test machen (Regler parameter 
bestimmen wenigstens nicht mehr peepst), deshalb habe ich Q-Regler wie 
oben geschrieben null gehalten und D-Regler normal startet. Der Motor 
machte trotztem so viel kracht. Ich habe Ki von 400 zu 1000 erhöht und 
Kp verkleinert. Damit der Motor hat aufgehört zu peepsen. Also ich habe 
Ud Uq spannung Werte vom Regler ausgang beobachtet und gesehen im normal 
Fall die beide Werte sind siemlich groß. Aber mit den neuen Parametern 
Ud war siemlich klein und damit der Motor bleibte ruhig.

- Diesmal habe ich Q-Regler auch ganz normal startet und zuerst I anteil 
weggelassen. Nur mit P Anteil verschiedene test gemacht. Das Problem ist 
hier aber dass der Regler versucht siemlich schnell die Rauschende 
Phasenströme zu regeln. Damit habe ich bis jetzt keine Erfolg aber heute 
mache ich weitere Teste und wie du geschrieben hast, werde ich versuchen 
die Wertebereiche Kp und Ki zu begrenzen damit die Ausgang des Reglers 
(Uq) anfang nicht mehr zu groß rauskommt...

Kann das sein dass der Regler im geringeren Frequenzbereich gibt höhere 
Spannung raus und damit der Motor saugt amfang zu viel Strom. naturlich 
der Rotor kann auch nicht mehr den Stator folgen!

von Joachim B. (jojo84)


Lesenswert?

> Kann das sein dass der Regler im geringeren Frequenzbereich gibt höhere
> Spannung raus und damit der Motor saugt amfang zu viel Strom. naturlich
> der Rotor kann auch nicht mehr den Stator folgen!

Der Zusammenhang stimmt noch nicht ganz. Bei geringer Frequenz kann der 
Rotor dem Drehfeld wesentlich besser folgen, als bei hohen Frequenzen. 
Das hat "erstmal" mit dem Strom weniger zu tun. Das Moment, also "wie 
kräftig" er dem Drehfeld folgt, das hängt vom Strom ab. Bei hohen 
Frequenzen brauchst du dann (allgemein gesagt) auch mehr Strom, damit 
der Läufer nicht den Anschluß verpasst :) . So, und wieviel Spannung 
letztendlich aus dem Regler rauskommt, das hängt ja von deinem 
Stromregler ab. Da sollte ja eigentlich immer so eine Spannung 
rauskommen, daß der eingestellte Strom fließt. Dafür ist der Regler ja 
da. Und wenn das funktioniert wird der Motor auch bei geringer Frequenz 
nicht beliebig viel Strom ziehen.

> - Diesmal habe ich Q-Regler auch ganz normal startet und zuerst I anteil
> weggelassen. Nur mit P Anteil verschiedene test gemacht. Das Problem ist
> hier aber dass der Regler versucht siemlich schnell die Rauschende
> Phasenströme zu regeln. Damit habe ich bis jetzt keine Erfolg aber heute

Auf rauschende Werte zu Regeln ist schwierig. Deine 
Regler-Eingangsgrößen sollten einigermaßen "geglättet" sein. Natürlich 
nicht zu stark, da dein Regler sonst zu langsam wird. Aber du wirst 
sehen, daß ein PT1-Glied (Tiefpass) hier Wunder bewirkt... Dann noch den 
größten und kleinsten Messwert verwerfen, und schon ist die Welt in 
Ordnung :) .

Gruß

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.