Forum: Analoge Elektronik und Schaltungstechnik Strommessung bei High-Speed Motor


von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Hi,

Ich habe hier eine Steuerung, welche Probleme mit einem 8uH Ls Motor 
hat, welcher bis 90krpm kann. Nun verwendet man normalerweise ja 
Induktivitäten in den Motorphasen, mit diesen klappt es auch ohne 
Probleme mit dieser Steuerung aber ohne scheint man ziemlich Chancenlos.

Nun habe ich gesehen, dass es z.B mit der VESC möglich sein soll, 0.65uH 
Motoren mit 60krpm zum laufen zu bringen 
(Beitrag "Motor mit 0.65uH?"), aber wie das gehen 
soll sehe ich nicht, das ist ja eigentlich ein Kurzschluss.

Da mich das aber neugierig gemacht hat, möchte ich versuchen, den Motor 
auch ohne Induktivitäten in den Phasen auf die 90krpm zu bringen mit 
sensorless FOC.

Aktuell benutzt die Steuerung 75kHz PWM und FOC mit 25kHz, was 
eigentlich so bis 60krpm klappt, jedoch wird der Motor massiv wärmer, 
als wenn keine Induktivitäten verwendet, ich nehme an, dass die 
Stromripple zu massiv höheren Verlusten im Motor führen, oder liege ich 
da falsch?

Wenn man mal an die Strommessungen schaut (türkis was in den ADC geht 
und gelb ist während dem ADC sampeln), dann verzehrt es mir den Strom 
massiv bei höheren Drehzahlen (was auch gleich mit höherem Strom 
einhergeht).

Nun zur Frage: Kommen diese Verzerrungen einfach vom Stromripple, 
welcher stark durch die kleine Induktivität geprägt ist (was genau 
steckt überhaupt hinter dem Ripple?) oder könnte es auch am 
Strommessverstärker liegen (ist ein 50MHz OPAMP, müsste extrem schnell 
sein). Vorher hatte ich Inphase mit einem INA240 (wie VESC) gemessen, 
aber das Ergebnis war schlechter.

Grüsse,
Bert

von Thomas B. (thombde)


Lesenswert?

Beschreibe doch erst mal deinen Motor,
und Dein Vorhaben.
Spindelmotor?
Modelbaumotor?
Welche Steuerung?

Du wirfst gleich so viele Zahlen in den Raum,
daß man keine Lust mehr hat dafür 1 Stunde Zeit zu verschwenden.

von Bert S. (kautschuck)


Lesenswert?

Thomas B. schrieb:
> Beschreibe doch erst mal deinen Motor,
> und Dein Vorhaben.
> Spindelmotor?
> Modelbaumotor?
> Welche Steuerung?

Es geht allgemein um High-Speed Motoren, keine spezifische Anwendung. 
Die Steuerung haben wir in der Firma entwickelt, basierend auf TI und 
STM32 uC. Bisher wurden diese aber nur selten für High-Speed eingesetzt 
und auch nur mit Induktivitäten in den Phasen.

Der Motor aus der Messung ist folgender (24V, 60krpm Variante):

https://www.maxongroup.de/medias/sys_master/root/8839851671582/DE-207.pdf

: Bearbeitet durch User
von J. T. (chaoskind)


Lesenswert?

Bert S. schrieb:
> Nun verwendet man normalerweise ja Induktivitäten in den Motorphasen

Bert S. schrieb:
> den Motor auch ohne Induktivitäten in den Phasen auf die 90krpm zu
> bringen mit sensorless FOC.

Bert S. schrieb:
> und auch nur mit Induktivitäten in den Phasen.

Entweder verstehe ich dich falsch, oder du verstehst etwas falsch...

Die Induktivitäten sind doch die Spulen im Motor, die bei Stromfluss ein 
Magnetfeld erzeugen, welches dann die Permanentmagneten im Motor 
anzieht, was dann letztendlich für die Drehung des Motors sorgt.
Ein (E)-Motor ohne jegliche Induktivität würde nicht funktionieren.

von Bert S. (kautschuck)


Lesenswert?

J. T. schrieb:
> Bert S. schrieb:
>> Nun verwendet man normalerweise ja Induktivitäten in den Motorphasen
>
> Bert S. schrieb:
>> den Motor auch ohne Induktivitäten in den Phasen auf die 90krpm zu
>> bringen mit sensorless FOC.
>
> Bert S. schrieb:
>> und auch nur mit Induktivitäten in den Phasen.
>
> Entweder verstehe ich dich falsch, oder du verstehst etwas falsch...
> Die Induktivitäten sind doch die Spulen im Motor, die bei Stromfluss ein
> Magnetfeld erzeugen, welches dann die Permanentmagneten im Motor
> anzieht, was dann letztendlich für die Drehung des Motors sorgt.
> Ein (E)-Motor ohne jegliche Induktivität würde nicht funktionieren.

Ich meinte ohne externe Induktivitäten zwischen Steuerung und Motor, 
sorry für die Verwirrung

von J. T. (chaoskind)


Lesenswert?

Bert S. schrieb:
> Ich meinte ohne externe Induktivitäten zwischen Steuerung und Motor,
> sorry für die Verwirrung

Ah okay, dann hatte ich dich nur falsch verstanden. Alles gut

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Aktuell benutzt die Steuerung 75kHz PWM und FOC mit 25kHz, was
> eigentlich so bis 60krpm klappt, jedoch wird der Motor massiv wärmer,
> als wenn keine Induktivitäten verwendet, ich nehme an, dass die
> Stromripple zu massiv höheren Verlusten im Motor führen, oder liege ich
> da falsch?

Moin.

Warum 75khz PWM und 25kHz Regelung?
1. 75kHz geben dir was 3k Schritte? Center Alined 1500, also nicht mal 
11Bit.
2. Warum Faktor 3 und nicht 2 wie es alle anderen machen.
3. Guck dir den ripple an brauchst du wirklich 75kHz PWM. 32kHz sollten 
auch reichen. Der Motor läuft max mit 2kHz Feldfrequenz wenn du da mehr 
als 10 PWM Zyklen schaffst ist es ok für die Regelung und die pwm 
Frequenz nur so hoch wählen das der Ripple I'm Rahmen bleibt.
4. Ich tippe mal die pwm Zyklen zwischen 2 Regelzyklen werden mit exakt 
dem selben duty gefahren. Sieh dir den DMA für den Timer an. Und rechne 
mit der svm die nächsten pwm Halbzyklen bis zum nächsten Regelschritt 
aus und lasse den DMA den Timer füttern.
5. Deine Strommessung hat eine Bandbreite die bei 1kHz und mehr 
Feldfrequenz zu einem signifikanten Lag deines gemessen Stromvektors zum 
realen Stromvektor. Das musst du kompensieren sonst schiebst du nur 
Blindstrom in die Maschine.
6. Die Stromsignale bei Low Side sehen immer böse aus. Lass den ADC mit 
DMA jeden pwm Zyklus samplen. Dann kannst du die Mitteln. Oder auch hier 
einzelne Stromvektoren bilden und mit Phase lag des Filters als auch der 
Änderung der Rotor lagen zwischen den Samples korrigieren. Dafür musst 
du aber die Rechenpower haben. Also Cortex-M7. Die M4s sind zu lahm beim 
Rechnen.

Ich hoffe du verstehst nicht nur Bahnhof von dem obigen Text.
Bei Fragen stehe ich zur Verfügung.

Gruß

Alex

Beitrag #7796708 wurde vom Autor gelöscht.
von Michael B. (laberkopp)


Lesenswert?

Bert S. schrieb:
> jedoch wird der Motor massiv wärmer, als wenn keine Induktivitäten
> verwendet

Bert S. schrieb:
> Nun verwendet man normalerweise ja Induktivitäten in den Motorphasen,
> mit diesen klappt es auch ohne Probleme mit dieser Steuerung aber ohne
> scheint man ziemlich Chancenlos.

Du verwendest also zusätzliche Induktivitäten in den Motorphasen, 
zusätzlich zu den 8uH die der Motor selbst hat.

Wie gross sind die denn, 46uH ?

Du möchtest damit die 48V PWM glätten damit die Motorphase keine 
Spannungs PWM mehr sieht sondern einen Strom mit geringem Ripple der 
an der Motorinduktivitat eine fast glatte Phasenspannung ergibt (und in 
Folge einen glatten Strom).

Wenn ich 90000rpm zu 1500 Hz umrechne als Grundfrequenz des Sinus in 
jeder Phasenwicklung, du mit 75kHz PWM fährst, dann bremsen die 8+47uH 
den Stromanstieg in jedem 1/75000s PWM Takt auf 5A Stromripple (ohne 
Beachtung der GegenEMK). Nicht wenig. Gegenüber der 1500 Hz sollten sie 
ja nicht wirksam sein, gegenüber der 75kHz aber schon.

von Bert S. (kautschuck)


Lesenswert?

@Alex Wow, vielen Dank für die ausführliche Antwort.

Zu deinen Punkten:
Alex E. schrieb:
> 1. 75kHz geben dir was 3k Schritte? Center Alined 1500, also nicht mal
> 11Bit.

Ja die 75kHz sind wohl nicht ideal, hatte damit aber bisher bessere 
Erfolge. Stelle sicher wieder auf 50kHz zurück. Müssten bei 75kHz nur 
1333 Schritte sein (Auf dem C2000 F280025, auf dem STM32F7 weiß ich 
gerade nicht).

Alex E. schrieb:
> 2. Warum Faktor 3 und nicht 2 wie es alle anderen machen.

Werde da sicher wieder mit Faktor 2 experimentieren

Alex E. schrieb:
> 3. Guck dir den ripple an brauchst du wirklich 75kHz PWM. 32kHz sollten
> auch reichen. Der Motor läuft max mit 2kHz Feldfrequenz wenn du da mehr
> als 10 PWM Zyklen schaffst ist es ok für die Regelung und die pwm
> Frequenz nur so hoch wählen das der Ripple I'm Rahmen bleibt.

Probiere auch da mal wider mit weniger hoher Frequenz, denke so 50kHz 
geben auch genug Bandbreite für höhere Feldfrequenzen

Alex E. schrieb:
> 4. Ich tippe mal die pwm Zyklen zwischen 2 Regelzyklen werden mit exakt
> dem selben duty gefahren. Sieh dir den DMA für den Timer an. Und rechne
> mit der svm die nächsten pwm Halbzyklen bis zum nächsten Regelschritt
> aus und lasse den DMA den Timer füttern.

Ja momentan fahre ich da mit dem gleichen Duty. PWM Duty wird in das 
Shadow Register geschrieben. Was genau meinst du mit:

"rechne mit der svm die nächsten pwm Halbzyklen bis zum nächsten 
Regelschritt aus und lasse den DMA den Timer füttern"

Alex E. schrieb:
> 5. Deine Strommessung hat eine Bandbreite die bei 1kHz und mehr
> Feldfrequenz zu einem signifikanten Lag deines gemessen Stromvektors zum
> realen Stromvektor. Das musst du kompensieren sonst schiebst du nur
> Blindstrom in die Maschine.

Jup, das ist massiv verzerrt. Du meinst also, dass die FOC Loop zu lange 
braucht zwischen Strommessung und appliziertem PWM oder wie meinst du 
das mit dem kompensieren? Der elektrische Winkel nimmt bereits die 
Feldgeschwindigkeit und Delay in die Berechnung mit ein.

Alex E. schrieb:
> 6. Die Stromsignale bei Low Side sehen immer böse aus. Lass den ADC mit
> DMA jeden pwm Zyklus samplen. Dann kannst du die Mitteln. Oder auch hier
> einzelne Stromvektoren bilden und mit Phase lag des Filters als auch der
> Änderung der Rotor lagen zwischen den Samples korrigieren. Dafür musst
> du aber die Rechenpower haben. Also Cortex-M7. Die M4s sind zu lahm beim
> Rechnen.

Hatte auch schon mit dem INA240 getestet und das sah auch nicht gerade 
so schön aus. Werde da sicher noch mal Messungen hochladen. Mitteln wäre 
eine Möglichkeit aber noch besser wäre wohl Subcycling (TI macht das mit 
ihrer FCL Library um die Bandbreite bei 20kHz FOC auf 6kHz zu erhöhen), 
hast du das schon mal implementiert? Glaube die haben einfach den 
Stromregler Optimiert, so dass die Berechnung nur ein paar us dauert, 
also so was wie FOC mit 100kHz und dann PWM z.B mit nur 20kHz.

Alex E. schrieb:
> Oder auch hier
> einzelne Stromvektoren bilden und mit Phase lag des Filters als auch der
> Änderung der Rotor lagen zwischen den Samples korrigieren. Dafür musst
> du aber die Rechenpower haben. Also Cortex-M7. Die M4s sind zu lahm beim
> Rechnen.

Kannst du das noch genauer erläutern? Also phase lag des Rotors wäre ja 
einfach Elektrischer Winkel + omega_ele * deltaT, oder? Wie meinst du 
das mit den Samples korrigieren für den Stromvektor?

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Michael B. schrieb:
> Du verwendest also zusätzliche Induktivitäten in den Motorphasen,
> zusätzlich zu den 8uH die der Motor selbst hat.
>
> Wie gross sind die denn, 46uH ?

Jup, wie oben im Schaltplan eingezeichnet.

Michael B. schrieb:
> Wenn ich 90000rpm zu 1500 Hz umrechne als Grundfrequenz des Sinus in
> jeder Phasenwicklung, du mit 75kHz PWM fährst, dann bremsen die 8+47uH
> den Stromanstieg in jedem 1/75000s PWM Takt auf 5A Stromripple (ohne
> Beachtung der GegenEMK). Nicht wenig. Gegenüber der 1500 Hz sollten sie
> ja nicht wirksam sein, gegenüber der 75kHz aber schon.

Die BEMF ist ja bei den 90krpm schon sehr hoch, da ist dann auch der 
Ripple klein.

Michael B. schrieb:
> Du möchtest damit die 48V PWM glätten damit die Motorphase keine
> Spannungs PWM mehr sieht sondern einen Strom mit geringem Ripple der
> an der Motorinduktivitat eine fast glatte Phasenspannung ergibt (und in
> Folge einen glatten Strom).

Grundsätzlich will ich nur, dass mir der Strom innerhalb eines 
Regelzyklus (25kHz) nicht abhanden kommt :D. Die Zeitkonstante dieses 
Motors ist gerade mal 108us, wenn ich da auf so 1% Fehler regeln will, 
dann muss ich ordentlich schnell regeln.

: Bearbeitet durch User
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Was genau meinst du mit:
>
> "rechne mit der svm die nächsten pwm Halbzyklen bis zum nächsten
> Regelschritt aus und lasse den DMA den Timer füttern"
Du hast die Möglichkeit den Duty beim hochzählen und beim runterzählen 
zusetzen. Also 2x pro PWM Periode. Dazu kommt noch das du z.b. nur alle 
2 Perioden eine Regelung rechnest. Wenn du jetzt am Ende der Regelung 
einen Spannungsvektor errechnet hast und die aktuelle 
Winkelgeschwindigkeit als konstant an nimmst dann kannst du die 4 
Spannungsvektoren die zwischen 2 Regelschritten kommen müssten 
berechnen.
v_dq um omega_ele*Tpwm/2*n mit n = 1 .. 4 weiter drehen.

Und das solltest du bei den Drehzahlen auch machen. Der Motor wird viel 
runder laufen weil er eben mit 2xPWM frequenz eine Drehfeld bekommt und 
nicht nur mit einem 1/4 davon. Die Berechung der Spannungsvektoren kann 
beim C2000 auch der CLA machen wenn er denn einen hat. (kenne den 0025 
jezzt nicht).

>
> Alex E. schrieb:
>> 5. Deine Strommessung hat eine Bandbreite die bei 1kHz und mehr
>> Feldfrequenz zu einem signifikanten Lag deines gemessen Stromvektors zum
>> realen Stromvektor. Das musst du kompensieren sonst schiebst du nur
>> Blindstrom in die Maschine.
>
> Jup, das ist massiv verzerrt. Du meinst also, dass die FOC Loop zu lange
> braucht zwischen Strommessung und appliziertem PWM oder wie meinst du
> das mit dem kompensieren? Der elektrische Winkel nimmt bereits die
> Feldgeschwindigkeit und Delay in die Berechnung mit ein.
Ok dann machst du das schon. Der Punkt ist hier aber den gemessenen 
Stromvektor den du dem Beobachter gibts bereits zu kompensieren und 
nicht stumpf den gemessenen nehmen. Du musst also den gemessenen Vektor 
um omega*delay weiter drehen. Diesen Stromvektor solltest du auch in die 
Regelung geben sonst gibts Probleme mit den Koppelthermen von d und q 
Achse.
>
> Alex E. schrieb:
>> 6. Die Stromsignale bei Low Side sehen immer böse aus. Lass den ADC mit
>> DMA jeden pwm Zyklus samplen. Dann kannst du die Mitteln. Oder auch hier
>> einzelne Stromvektoren bilden und mit Phase lag des Filters als auch der
>> Änderung der Rotor lagen zwischen den Samples korrigieren. Dafür musst
>> du aber die Rechenpower haben. Also Cortex-M7. Die M4s sind zu lahm beim
>> Rechnen.
>
> Hatte auch schon mit dem INA240 getestet und das sah auch nicht gerade
> so schön aus. Werde da sicher noch mal Messungen hochladen. Mitteln wäre
> eine Möglichkeit aber noch besser wäre wohl Subcycling (TI macht das mit
> ihrer FCL Library um die Bandbreite bei 20kHz FOC auf 6kHz zu erhöhen),
> hast du das schon mal implementiert? Glaube die haben einfach den
> Stromregler Optimiert, so dass die Berechnung nur ein paar us dauert,
> also so was wie FOC mit 100kHz und dann PWM z.B mit nur 20kHz.
Die FCL läuft zu 90% im CLA. Der trick ist hier vor dem nächsten PWM 
Update druch zu sein mit der Stromregelung. Das ist auch nicht so schwer 
wenn du eben nur die Stromregelung rechnest. Vorsteuerung, Koppeltherme 
usw. Rechnen die im C2000 Kern ganz normal. Also alles was für einen 
Regezyklus als konstant angesehen werden kann wird da nicht im CLA 
gerechnet. Geht mit einem Cortex M7 auch. Bei guten Umrichtern für 
Werkzeugmaschinen macht man das meißt im FPGA und der Rest wird oft 
sogar nur mit halber PWM Frequenz gerechnet.
>
> Alex E. schrieb:
>> Oder auch hier
>> einzelne Stromvektoren bilden und mit Phase lag des Filters als auch der
>> Änderung der Rotor lagen zwischen den Samples korrigieren. Dafür musst
>> du aber die Rechenpower haben. Also Cortex-M7. Die M4s sind zu lahm beim
>> Rechnen.
>
> Kannst du das noch genauer erläutern? Also phase lag des Rotors wäre ja
> einfach Elektrischer Winkel + omega_ele * deltaT, oder? Wie meinst du
> das mit den Samples korrigieren für den Stromvektor?
genau. Du setzt omega_ele als konstant an. Rechnest jeden Stromvektor 
mit phi_ele + omega_ele  deltaT  n. Mit n = 1 .. 4 für halbe PWM 
Frequenz Regelung und doppelte PWM Frequenz Sampling bei 
(Phasen-Strommessung, 2 bei Low side).

Was soll das werden wenn es fertig ist? Oder Spaß am Spiel?
Gruß

Alex

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Du hast die Möglichkeit den Duty beim hochzählen und beim runterzählen
> zusetzen. Also 2x pro PWM Periode. Dazu kommt noch das du z.b. nur alle
> 2 Perioden eine Regelung rechnest. Wenn du jetzt am Ende der Regelung
> einen Spannungsvektor errechnet hast und die aktuelle
> Winkelgeschwindigkeit als konstant an nimmst dann kannst du die 4
> Spannungsvektoren die zwischen 2 Regelschritten kommen müssten
> berechnen.
> v_dq um omega_ele*Tpwm/2*n mit n = 1 .. 4 weiter drehen.
>
> Und das solltest du bei den Drehzahlen auch machen. Der Motor wird viel
> runder laufen weil er eben mit 2xPWM frequenz eine Drehfeld bekommt und
> nicht nur mit einem 1/4 davon. Die Berechung der Spannungsvektoren kann
> beim C2000 auch der CLA machen wenn er denn einen hat. (kenne den 0025
> jezzt nicht).

Ok, glaube das hat mir noch gefehlt. Bisher wurde nur der aktuelle 
Stromvektor kompensiert, aber eben nicht für 4x Halbperiode. Danke dir.

Alex E. schrieb:
> Die FCL läuft zu 90% im CLA. Der trick ist hier vor dem nächsten PWM
> Update druch zu sein mit der Stromregelung. Das ist auch nicht so schwer
> wenn du eben nur die Stromregelung rechnest. Vorsteuerung, Koppeltherme
> usw. Rechnen die im C2000 Kern ganz normal.

Hatte mal die FOC auf dem F280025 laufen ohne CLA, das geht anscheinend 
auch.

Alex E. schrieb:
> Was soll das werden wenn es fertig ist? Oder Spaß am Spiel?

Ja grundsätzlich bin ich einfach neugierig und möchte Dinge weiter 
optimieren und verstehen. Beruflich  mache ich zwar viel mit Motor 
Control, aber hauptsächlich Elektronik Design und nur wenig Firmware.

Werde dann weitere Messungen posten (auch mal von der Inphase 
Strommessung), wenn ich die neue Stromkompensation implementiert habe.

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Hi, ich habe heute mal noch ein paar Versuche unternommen ohne 
Induktivität und mit dem DMA die 4 Spannungsvektoren vorzugeben, aber 
leider ohne Erfolg. Die Stromaufnahme ist mehr oder minder gleich wie 
ohne Kompensation. Einzig eine höhere PWM Frequenz macht einen 
unterschied, so dass der Motor effizienter läuft.

Ich habe noch mal überschlagsmässig gerechnet und mit der Zeitkonstante 
von nur 108us (nach Tau 156A, ergibt etwa 16A in 8us) scheint es mir 
unmöglich ohne zusätzliche Induktivitäten in den Motorkabeln effizient 
zu regeln. Wenn man im ersten Beitrag nochmals bei 15krpm schaut, dann 
sieht man ja wie der Strom stark ansteigt in dem kleinen Messinterval, 
sprich um etwa 200mV (sind dann um die 10A). Somit habe ich massive 
Stromripple, auch wenn ich den Strom perfekt messen kann.

Ich denke ich werde mal noch mit einer kleinen Induktivität in Serie 
probieren und schauen, ob es dann bei hohen Drehzahlen einen Unterschied 
macht. Melde mich wieder!

von Silvio K. (exh)


Lesenswert?

Bert S...

Alex E. schrieb:
> 5. Deine Strommessung hat eine Bandbreite die bei 1kHz und mehr
> Feldfrequenz zu einem signifikanten Lag deines gemessen Stromvektors zum
> realen Stromvektor. Das musst du kompensieren sonst schiebst du nur
> Blindstrom in die Maschine.

Falls Zweifel an der korrekten Lage der elektrischen Vektoren zur 
mechanischen Lage besteht, eignet sich auch die Idee des Stroboskopes. 
Wenn noch ein Timer frei und ein wenig Rechenpower übrig ist, dann 
schließe eine Power-LED über entsprechenden Treiber an und blitze den 
Rotor bei elektrisch fester Phasenlage an. Dann siehst du, ob der Punkt 
drehzahlabhängig wandert.
Mir hat das zur Kontrolle geholfen, obgleich ich nicht solch hohe 
Drehzahlen hatte. Den Single-Shot-Timer kurz vor deiner Zielphase mit 
entsprechend Delay programmieren, sodass er genau richtig los feuert. 
Dann steht der Punkt auch wie eine Eins.

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.