Hallo Zusammen, ich komme mal wieder nicht weiter. In unserem open source Projekt für Ebike- bzw. Scooter-Controller habe ich bisher auf Feldschwächung verzichtet. Da aber gerade die Scooter-Gemeinde danach schreit, habe ich es jetzt eingebaut. Es funktioniert auch wie erwartet. Die Hardware hat keinen Shunt zur Messung des Batteriestroms. Ohne Feldschwächung war das kein Problem, hier konnte ich den Batteriestrom aus iq * dutycycle = iq * uq/umax leicht berechnen. Das funktioniert nun auch bei reinem id, (der Motor dreht sich also nicht) id * ud/umax, dann wird der Batteriestrom korrekt berechnet. Wenn ich aber id und iq ungleich Null fahre, hätte ich erwartet daß der Batteriestrom der Betrag des Stromzeigers ist. Batteriestrom = Wurzel((iq * uq/umax)²+(id * ud/umax)²) Dem ist aber nicht so :-( Habe ich irgendwo einen Denkfehler?! Gruß hochsitzcola https://github.com/Koxx3/SmartESC_STM32_v3/blob/10205dff61ea2f6b2e5c30deeab56497beabb005/Core/Src/main.c#L582
hochsitzcola schrieb: > (...) Wenn ich aber id und iq ungleich Null > fahre, hätte ich erwartet daß der Batteriestrom der Betrag des > Stromzeigers ist. Batteriestrom = Wurzel((iq * uq/umax)²+(id * > ud/umax)²) Da Du den Raumzeiger des Stromes nicht beliebig einstellen kannst, sondern nur 6 feste Richtungen hast, die Dir durch die Raumachsen der drei Statorwicklungen erzeugt werden, ist die Summe der Phasenströme größer als der Betrag des Strom-Raumzeigers. Im Prinzip eine vektorielle Addition "anders herum". Aber sollte Deine Regelung nicht die Ströme im Statorsystem kennen? Grüßle Volker
Volker B. schrieb: > sondern nur 6 feste Richtungen hast Ich mache ja FOC, da kann der Zeiger im rotierenden Bezugssystem jede beliebige Richtung haben. Gruß hochsitzcola
Bei einer sinnvoll implementierten Feldschwächung bleibt die mechanische Leistung konstant im Maximum, denn man erkauft erreichbare Drehzahl mit reduziertem Drehmoment. Ich komme damit auf:
Zu früh abgeschickt. Meine Begründung: die Formel beruht auf der Leistungsbeilanz P_elektrisch = P_mechanisch I_DC * I_Bat = w*M mit M = c_m * I_q mit c_m = Kehrwert-irgendwas vom KV-Rating des Motors
OK und was soll dabei cm sein?! Ich kann doch bei FOC id und iq auf jeden beliebigen Wert regeln, ob damit der Motor sinnvoll dreht oder nicht, sei mal dahingestellt. Aber ich sehe schon, ich muß die BEMF irgendwie mit reinrechnen. Bei reinem iq brauch ich das nach Erfahrung aber nicht ?! Gruß hochsitzcola
Ah OK, die Drehmomentkonstante, ich hab auch zu schnell abgeschickt :-)
Felddreher schrieb: > Leistungsbeilanz P_elektrisch = P_mechanisch Der Ansatz passt bei Feldschwächung aber ja nicht, da ein Anteil der elektrischen Eingangsleistung zur Feldschwächung genutzt wird. Da wird Wärme statt Drehmoment erzeugt. Gruß hochsitzcola
Hallo, sorry, für meine nicht wirklich zielführende erste Antwort. Nach etwas Nachdenken glaube ich die Lösung Deines Problems erkannt zu haben: hochsitzcola schrieb: > Batteriestrom korrekt berechnet. Wenn ich aber id und iq ungleich Null > fahre, hätte ich erwartet daß der Batteriestrom der Betrag des > Stromzeigers ist. Batteriestrom = Wurzel((iq * uq/umax)²+(id * > ud/umax)²) Iq ist ein Wirkstrom, da er Leistung umsetzt. Id ist (idealerweise) ein reiner Blindstrom (wenn man die -- im wesentlichen ohmschen -- Verluste vernachlässigt). Id wird also weitgehend zwischen Umrichterbrücke und Zwischenkreiskondensator pendeln, die Batterie "sieht" ihn idelaerweise nicht. Lediglich die aus Id resultierenden, zusätzlichen Verluste müssen von der Batterie gedeckt werden. Grüßle Volker
:
Bearbeitet durch User
Volker B. schrieb: > Lediglich die aus Id resultierenden, zusätzlichen Verluste müssen von > der Batterie gedeckt werden. Stell dir den Kram wie zwei Step-Down-Wandler vor. Einer wandelt von Ubat auf Uq und einer wandelt von Ubat auf Ud. Da Id, Ud, Iq, Uq alle bekannt sind, einfach über Leistungsgleichung und Ubat den DC berechnen. Dann gibt es noch die andere Methode, mit Schaltzeiten und Phasenströmen:
1 | Idc = ((T_uhigh * I_u) + (T_vhigh * I_v) + (T_whigh * I_w)) / T_PWM |
2 | |
3 | (Geht auch mit Low und alles andersrum...) |
Kommt leider mit dem Nachteil nicht kompensierter sich ausbildender Diodenleitzeit während der Totzeiten. mfg mf
Achim M. schrieb: > Da Id, Ud, Iq, Uq alle bekannt sind, einfach über Leistungsgleichung und > Ubat den DC berechnen Ich steh auf dem Schlauch. Wenn es einfach wäre, hätte ich es ja schon längst gemacht :-) Gruß hochsitzcola
Hm, mit rumprobieren in Excel komme ich auf folgende Fallunterscheidung: Wenn Betrag iq kleiner als Betrag id dann: Ibat = Betrag (id*ud/umax) - Betrag (iq*uq/umax) Wenn Betrag iq größer als Betrag id dann: Ibat = Betrag (id*ud/umax) + Betrag (iq*uq/umax) Im Bildchen oben, Motor mit Last auf 1000, 2000 und 3000mA laufen lassen, unten im Leerlauf bei voller Drehzahl, es ergibt sich ein Batteriestrom von ca.1800mA. id wird einfach linear zur Drehzahl erhöht. So passen die berechneten Werte zu den gemessenen. Aber ist das physikalisch irgendwie sinnvoll?! Ich will auch gar nicht wissen, wie das dann bei Rekuperation oder anderer Drehrichtung aussieht :-) Gruß hochsitzcola
Hochsitz C. schrieb: > Achim M. schrieb: > >> Da Id, Ud, Iq, Uq alle bekannt sind, einfach über Leistungsgleichung und >> Ubat den DC berechnen > > Ich steh auf dem Schlauch. Wenn es einfach wäre, hätte ich es ja schon > längst gemacht :-) Du hast einen Regler für Id drin. Dessen Ausgang entspricht Ud. Ud wird sehr klein sein, aber genau das ist der Verlust den du hast :) Du hast einen Regler für Iq drin. Dessen Ausgang entspricht Uq. Iq und Uq müssen nicht invertiert werden, wenn rückwärts drehend. Weil rückwärts drehend und rückwärts weiter beschleunigend negatives Uq und auch negatives Iq zur Folge hat usw. Dieser Leistungsbedarf beider orthogonalen Komponenten muss jetzt aus Ubat gedeckt werden. Also beide Leistungen addieren und das Ergebnis durch Ubat teilen. Und kräftig filtern :) mfg mf
:
Bearbeitet durch User
PS. hochsitzcola schrieb: > folgende Fallunterscheidung Merkwürdig... sind bei dir alle Vorzeichen richtig? Alternativ kannst du ja die Phasenstrom-Schaltzeit-Methode probieren...
Hallo Zusammen, ich bin auch dabei für E-Scooter eine Feldschwächung zu schreiben. Ich habe es geschafft Id so zu manipulieren, dass der Roller statt ca. 35 km/h in der Luft lässig auch bis 50 km/h hochgeht. Id ist dabei in einer Range von 2A bis 10A. Iq ist vor der PI Regelung bei 30A. Beide Werte werden in der bisherigen Hersteller FOC vor der PI Regelung eingespeist. Wenn ich jedoch mit egal welchem Id auf die Straße gehe, kommt der Roller nicht über seine normale Höchstgeschwindigkeit hinaus. Wie würde denn die Berechnung von Id aussehen, wenn ich die Möglichkeit hätte den Batteriestrom zu messen? hochsitzcola schrieb: > Die Hardware hat > keinen Shunt zur Messung des Batteriestroms. Grüße, Paul
Paul .. schrieb: > Wie würde denn die Berechnung von Id aussehen, wenn ich die Möglichkeit > hätte den Batteriestrom zu messen? Das hat erstmal nix miteinander zu tun. Die Frage hier im Faden war übrigens andersherum. Einer hatte Feldschwächung und hat es nicht hingebracht, den DC-Strom zu errechnen. Paul .. schrieb: > Wenn ich jedoch mit egal welchem Id auf die Straße gehe, kommt der > Roller nicht über seine normale Höchstgeschwindigkeit hinaus. Äh, du machst was falsch. Kann es sein, dass du positiven Id gibst? Damit schwächst du das Feld nicht. Ein bisschen positiver Id kann im Ankerstellbereich helfen, zum normalen Drehmoment aus Iq noch Reluktanzmoment zu nutzen. Außerhalb des Ankerstellbereichs muss es negativer Id sein, damit es weniger Feld ist, damit für ein bisschen mehr Iq noch genug Udc-BEMF zu Verfügung steht. Wie regelst oder stellst du aktuell deinen Id ein? Was meinst du mit... Paul .. schrieb: > der bisherigen Hersteller FOC ...? mfg mf
Achim M. schrieb: > Das hat erstmal nix miteinander zu tun. > Die Frage hier im Faden war übrigens andersherum. Einer hatte > Feldschwächung und hat es nicht hingebracht, den DC-Strom zu errechnen. Oh sorry. Dann habe ich die Anfrage oben falsch verstanden. Achim M. schrieb: > Kann es sein, dass du positiven Id gibst? Ich glaube nicht. Umso größer der Wert Id wird, umso schneller läuft der Motor im Leerlauf. Id = 0A --> 35 km/h Id = -2A --> 37-38 km/h Id = -4A --> 40 km/h Achim M. schrieb: > Wie regelst oder stellst du aktuell deinen Id ein? Ich setzte auf der Regelung der original Firmware des Roller auf indem ich Funktionen in die binary Datei einfüge. Damit setzte ich auch auf der bestehenden SVPWM auf und verändere nur die Iq* und Id* Werte aus dem Schaubild. Das heißt ich gebe der Id PI lediglich einen Sollwert von x Ampere mit. Danke und Grüße, Paul
:
Bearbeitet durch User
Paul .. schrieb: > Achim M. schrieb: > >> Kann es sein, dass du positiven Id gibst? > > Ich glaube nicht. Umso größer der Wert Id wird, umso schneller läuft der > Motor im Leerlauf. Ok, das ist schon mal gut. Dauerhaft negativer Id ist aber nicht zielführend. Es gäbe da jetzt mehrere Methoden. a) aus einer 1D-Lookuptabelle den benötigten Iq abhängig von x = (Drehzahl * (Ubat_nom/Ubat_ist)) lesen und stellen b) aus einer 2D-Lookuptabelle Id-Iq-Strompaare abhängig von x = (Drehzahl * (Ubat_nom/Ubat_ist)) y = gefordertes Drehmoment lesen und stellen c) schauen, ob die Spannungsamplitude √(Ud²+Uq²) in die Nähe von Ubat kommt, daraufhin negativen Iq erhöhen. Das geht mit einem PI-Regler. Begrenzung des Id in beide Richtungen muss mit rein. mfg mf
:
Bearbeitet durch User
Achim M. schrieb: > den benötigten Iq Achim M. schrieb: > daraufhin negativen Iq erhöhen Du sprichst mehrfach von Iq. Muss ich Iq für die Feldschwächung auch verändern? Bisher habe ich zur Motorsteuerung, ähnlich auch wie in der originalen FW, Iq konstant mit dem gleichen Wert beschrieben. Das gleiche habe ich auch mit Id versucht. So wie ich dich verstehe, muss ich Id in Abhängigkeit von der Batteriespannung und der Motorspannung bringen. Sobald Ubat = √(Ud²+Uq²) ist, muss ich dann Id erhöhen. Dabei würde ich dann aber wieder konstant einen negativen Wert zuweisen. Verstehe ich das richtig?
Paul .. schrieb: > Du sprichst mehrfach von Iq. Muss ich Iq für die Feldschwächung auch > verändern? Na, ich hab teils Mist geschrieben. Sorry...nochmal. a) aus einer 1D-Lookuptabelle den benötigten Id abhängig von x = (Drehzahl * (Ubat_nom/Ubat_ist)) lesen und stellen b) aus einer 2D-Lookuptabelle Id-Iq-Strompaare abhängig von x = (Drehzahl * (Ubat_nom/Ubat_ist)) y = gefordertes Drehmoment lesen und stellen c) schauen, ob die Spannungsamplitude √(Ud²+Uq²) in die Nähe von Ubat kommt, daraufhin negativen Id erhöhen. Das geht mit einem PI-Regler. Begrenzung des Id in beide Richtungen muss mit rein. Paul .. schrieb: > So wie ich dich verstehe, muss ich Id in Abhängigkeit von der > Batteriespannung und der Motorspannung bringen. Sobald Ubat = √(Ud²+Uq²) > ist, muss ich dann Id erhöhen. Du entscheidest dich also für c). Ok soweit, Ja. Besser Id erhöhen, kurz bevor der Spannungsvektor so groß wie Ubat wird, sonst hast du keine Reserve mehr. Paul .. schrieb: > Dabei würde ich dann aber wieder konstant einen negativen Wert zuweisen. > Verstehe ich das richtig? Nein, weil sich Uq abhängig von der Drehzahl (BEMF) und Iq resistiven Verlusten einstellt. BEMF aber abhängig von Id, ... mfg mf
Die Leistung im AC-System ist (Uq*Iq+Ud*Id)*3/2, wenn die amplitudengleiche Transformation verwendet wird und das System dreiphasig ist. Wenn der Motor Oberflächenmagnete hat, erzeugt der Motor kein Reluktanzmoment, ansonsten erzeugt ein Motor mit vergrabenen Magneten auch mit -Id*Iq ein positives Drehmoment. Im Leerlauf ist der Strom üblicherweise sehr klein, also auch die Spannung am Motor. Unter Last erzeugt Iq*omega*Lq ebenfalls eine Spannung, die mehr Feldschwächung nötig macht.
HSc schrieb: > ansonsten erzeugt ein Motor mit vergrabenen Magneten auch mit -IdIq ein > positives Drehmoment. Feldschwächung geht mit beiden, Oberflächen- als auch vergrabenen Magneten. HSc schrieb: > Im Leerlauf ist der Strom üblicherweise sehr klein, also auch die > Spannung am Motor Gemeint ist Iq der klein ist. mfg mf
Alles klar. Danke für euren Input. Ich werde am Wochenende versuchen Id anhand von dieser Gleichung zu erhöhen: Ubat = √(Ud²+Uq²) (natürlich schon ein bisschen früher) Bisher war mein Ansatz Id an der Geschwindigkeit zu orientieren: Startgeschwindigkeit z.B. 25 km/h (bei 30 km/h regulärem Topspeed) id = Basisstrom (z.B. 2A) + (Aktuelle Geschwindigkeit - Startgeschwindigkeit) * Multiplikator (0,3A) Damit würde bei 30 km/h, wo der Batteriestrom ca. 15A groß ist, id ca. 3,5 A groß sein. Reicht das vom Größenverhältnis nicht aus? Oder ist es töricht sich am Batteriestrom und nicht am Phasenstrom zu orientieren? Danke nochmal für die Hilfe :) Paul
Achim M. schrieb: > HSc schrieb: > >> ansonsten erzeugt ein Motor mit vergrabenen Magneten auch mit -IdIq ein >> positives Drehmoment. > > Feldschwächung geht mit beiden, Oberflächen- als auch vergrabenen Ich habe nichts anderes behauptet, nur folgt daraus, das diese Motoren mit Feldschwächung mehr Drehmoment aus dem gleichen Strombetrag erzeugen und besser immer etwas -Id bekommen sollten. Das auf der Straße nicht mehr Geschwindigkeit raus kommt könnte bedeuten, dass die Leistung nicht für mehr reicht oder das gewählte Id nicht reicht. Die Info über den Kurzschlussstrom ist hier wichtig. Ist der sehr groß, ist der Motor nicht so gut geeignet für den Feldschwächbetrieb
Paul .. schrieb: > Ubat = √(Ud²+Uq²) (natürlich schon ein bisschen früher) Ja, mehr vektorielle Zeigerlänge kommt halt nicht aus dem Inverter raus. Musst ein bisschen aufpassen, wie HSc schon angedeutet hatte, ob und wie die Modulation bzw. die Clarke-inverse Transformation im Vorwärtspfad skaliert. Wenn die ... Ud = Amplitude Ua = Amplitude Uu ... machen, dann aber so tun als wäre der Motor im Stern verschaltet (ist üblich), kann die Amplitude bzw. Die Aussteurgrenze √(Ud²+Uq²) nicht Ubat, sondern nur Ubat/√3 werden. Was wir auch nicht wissen, ist, ob der Modulationsalgorithmus Übersteuerung verträgt. Vielleicht machst du die Eingriffsgrenze des Feldschwächreglers auch einfach empirisch bedatbar und stellst es eben auf ein Optimum ein. HSc schrieb: > Ich habe nichts anderes behauptet, nur folgt daraus, das diese Motoren "Diese" sind in dem Fall Oberflächen-Magnetmotoren. Kommt auch darauf an, in welcher Richtung man jetzt -Id versteht ;) HSc schrieb: > oder das gewählte Id nicht reicht. Der Threadkaperer hatte Eingangs einen konstanten Id gestellt. Das hat gleich gezeigt, dass es so nicht geht. Schaun' wir mal was dabei herum kommt. mfg mf
:
Bearbeitet durch User
Paul .. schrieb: > Alles klar. Danke für euren Input. > Ich werde am Wochenende versuchen Id anhand von dieser Gleichung zu > erhöhen: > Ubat = √(Ud²+Uq²) (natürlich schon ein bisschen früher) Ubat/√3 = √(Ud²+Uq²) so ist es richtig
Bolor schrieb: > Ubat/√3 = √(Ud²+Uq²) so ist es richtig Kommt darauf an, wie deine Clarke-Park-Transformation bzw. der Modulator skalieren. Gibt sogar eine DIN-EN-Norm dazu, deren Nummer ich gerade nicht parat habe. mfg mf
Paul .. schrieb: > Alles klar. Danke für euren Input. > Ich werde am Wochenende versuchen Id anhand von dieser Gleichung zu > erhöhen: ich glaub, ein negativer Id führt zu Feldschwächung. Bspl: 30% Id links, 70% Iq
Bolor schrieb: > Bspl: 30% Id links, 70% Iq Das ergibt vektoriell addiert nur 76%. Links ist "left" und Pauls Wochenende war vor 3 Jahren. mfg mf
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.