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
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.
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
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.
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
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
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.
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.
@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
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
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
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.