Forum: Mikrocontroller und Digitale Elektronik Motor Regelung - PMSM


von Ti H. (tihnk)


Lesenswert?

Hallo Forum,

es geht um eine Drehzahlregelung eines PMSM (Surface Mounted Permanent 
Magnet Machine). Den Winkel und die Drehzahl berechne ich über Hall 
Signale (Die Regelung ist in VHDL geschrieben). Die Hall Signale habe 
ich mit den verketteten BEMF Spannungen des Motors übereingestimmt: 
HallA = alligned to BEMF A usw. Die Hall Sequenz ist erfasst und zeigt 
keine Auffälligkeiten. Ich rechne einen Offset auf meine berechneten 
Winkel zur erzeugung des Drehmoments (Veränderungen des Offsets 
eleminiert nicht den Fehler).

Das Problem ist, dass meine Drehzahlregelung nur funktioniert, wenn ich 
die Phasenströme Ia, Ib mit negativem Vorzeichen einlese. (Das 
entspricht demnach einer Phasendrehung des Strom um pi). (Den Strom 
rechnene ich positiv vom Inverter zum Motor -> so wird es auch in meinem 
FPGA übergeben)

Wenn ich das nicht mache, wird mein Motor instabil.

Hat jemand mal das gleiche Problem gehabt, oder hat eine Idee woran es 
liegen kann?

: Verschoben durch Admin
von Andreas T. (skycurve)


Lesenswert?

Das ganze wird bestimmt mit 3x synchronized PWM gefahren oder?
Zu welchem Zeitpunkt der PWM werden die Ströme gemessen?

von Ti H. (tihnk)


Lesenswert?

Danke für die Antwort.

Synchronized PWM verwendende ich nicht. Ich habe auch keine Erfahrungen 
damit. Die PWM erzeuge ich durch den Vergleich mit einem einfachen 
Träger Signal (Symmetrisches Dreieck, Stichwort: Sinus-Träger 
Modulation).

Die Ströme werden kontinuierlich über eine SPI Schnittstelle eingelesen 
und sind nicht mit dem Träger Signal synchronisiert (kein Interrupt oder 
ähnliches)(Das es dadurch Strommessfehler geben kann, ist mir allerdings 
bewusst, wegen einlesen im Schaltzeitpunkt usw., glaube aber nicht, dass 
dies das Problem sein kann). Die Ein- und Augänge der Regelung sind 
allerdings fest auf die Regelungsfrequenz getaktet.

von Andreas T. (skycurve)


Lesenswert?

Es wird bei dir wahrscheinlich auch so sein, dass die Ströme genau dann 
gemessen werden, wenn alle drei PWM Channel auf Low sind.
Wenn man asynchron zur PWM misst, kommt normalerweise nichts sinnvolles 
raus. Du sagst ja, dass die Regelung funktioniert wenn du die Ströme 
invertierst.

Ich hatte bei mir damals auch den Fehler, die Ströme nicht invertiert zu 
haben, weil ich nicht dran gedacht hatte, dass die ADCs immer dann 
getriggert wurden, wenn alle drei PWM auf Low waren.
Dann misst man ja nicht direkt den Strom den man reingeschickt hat, 
sondern umgekehrt.

Damit das funktioniert, müssen deine PWM Channel so aussehen:
http://andromeda.fei.tuke.sk/freescale/Beans/PWMMC/center_align.png

Dann misst man genau in der Mitte der LOW oder der HIGH Phase (je nach 
dem wo deine Mess-Shunts liegen) und dreht die Vorzeichen um.

Gruß

: Bearbeitet durch User
von Ti H. (tihnk)


Lesenswert?

Hallo Andreas, folgende Fragen/Bemerkung:


Andreas T. schrieb:
> Ich hatte bei mir damals auch den Fehler, die Ströme nicht invertiert zu
> haben, weil ich nicht dran gedacht hatte, dass die ADCs immer dann
> getriggert wurden, wenn alle drei PWM auf Low waren.
> Dann misst man ja nicht direkt den Strom den man reingeschickt hat,
> sondern umgekehrt.

1.) Also hast Du die Ströme dann invertiert eingelesen und es dabei 
belassen?

2.) Ist es aber nicht so, dass die Ströme eingeprägt sind. Sie müssten 
also in jeder Halbwelle das gleiche Vorzeichen haben. Da die Halbwelle 
wesentlich größer als die PWM Periode ist, dürfe das Vorzeichen des 
Stroms nicht von dem Schaltzustand abhängen (vielleicht am 
Nulldurchgang). Der einzige Unterschied besteht darin, dass man den 
Stromripple unterschiedlich abtastet. Siehe zur Verdeutlichung:
https://mediatum.ub.tum.de/doc/1108592/1108592.pdf
Fig. 7.5 auf Seite 45.


-> Ich sollte noch bemerken, dass der Mess-Shunt am Ausgang der 
Halbbrücke liegt, also zwichen Halbbrücken Mittelpunkt und Motorklemme 
(direkte Messung des Phasenstroms).

: Bearbeitet durch User
von Andreas T. (skycurve)


Lesenswert?

Ti H. schrieb:
> Mess-Shunt am Ausgang der Halbbrücke

Dann sollte es egal sein, ob du die Ströme in der Mitte der HIGH oder in 
der Mitte der LOW Phase misst.

In der PDF steht auf s.48 auch das "1. Synchrones Abtasten" an den 
Spitzen des Dreiecks. Wenn ich das richtig sehe, ist das genau die Mitte 
der HIGH- und der Low-phase.

s.49, "2. Integration über eine PWM Periode" funktioniert nur dann, wenn 
man tatsächlich einen Hardware Integrator am Shunt, also ein 
RC-LowPassFilter hat und seinen Ausgang misst.
Dazu muss aber die Zeitkonstante des LPFs richtig gewählt werden, sonst 
integriert man auch die negative Halbwelle in den Kondensator.
Dann kann man auch asynchron messen. Allerdings finde ich diese Methode 
nicht so schön, weil man die Ströme nur phasenverschoben misst.
Dadurch hängt man dann auch von der aktuellen Drehzahl ab.

Wenn man dagegen schön an den Spitzen der PWM misst, ist man quasi am 
weitesten entfernt von den Rippleströmen.

Ich messe die Ia und Ib Ströme immer an der unteren Spitze des Dreiecks 
und drehe die Vorzeichen um.

Das mit dem Vorzeichen kann man sich vllt so vorstellen:
Wenn alle PWM Channel gerade auf LOW sind, ist der Motor sozusagen 
kurzgeschlossen über die unteren FETs der drei Halbbrücken.
Genau hier misst man die Ströme. Und das sind die Ströme des Motors im 
Freilauf und nicht die, die man reingeschickt hat.
Das gleiche gilt auch wenn man in der HIGH-Phase misst.

Hier hatte ich den selben Fehler, wenn du diesen Beitrag und vllt noch 
ein paar oberhalb lies
Beitrag "Re: SVPWM Ansteuerung eines BLDC"

Tec Nologic und Gonzo sind die absoluten Spezialisten auf diesem Gebiet 
und haben mir sehr viel geholfen :)

Gruß
Andreas

: Bearbeitet durch User
von Ti H. (tihnk)


Lesenswert?

Ich habe nun das eigentliche Problem gefunden.

1.) Die Ströme dürfen nicht invertiert werden (wie angenommen).
2.) Das Problem lag an dem Gate-Treiber: In meinem Fall habe ich zwei 
Signale für den Treiber der Halbbrücke. Ein Enable Signal und ein PWM 
Signal. Ich habe angenommen, dass ein High Signal des PWM Signals den 
oberen IGBT ansteuert, also auf High setzt. In Wirklichkeit hat das High 
Signal aber den unteren IGBT auf High gesetzt.

@Andreas: Wenn das bei Euch nicht das gleiche Problem ist, würde ich den 
Träger Sollwertvergleich in deinem Modulator nochmals überprüfen, ob der 
kleiner größer Vergleich stimmt. Ich danke trotzdem für Deine Ideen!

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.