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?
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.
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ß
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).
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
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!