Forum: Digitale Signalverarbeitung / DSP / Machine Learning HFI Motor mit Vd Drehfeld --> Induktivität?


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich versuche bei einem PMSM Motor die Induktivitäten Ld und Lq zu 
messen. Dazu appliziere ich ein konstantes Vd und lasse den 
Spannungszeiger mit 1kHz drehen.

Dies führt zu einem Sinusförmigen Stromverlauf, wobei mir der 
Stromzeiger Id um etwa 85° nacheilt, aufgrund der Induktivität. Nun 
filtere ich das Stromsignal mit einem Lock-In Verstärker bei 1kHz und 
bekomme die Amplitude und die Phase des Stromsignals Id. Das scheint 
soweit sehr gut zu funktionieren.

Nun habe ich aber festgestellt, dass die Amplitude von Id nicht von der 
Amplitude von Vd abhängig ist, sondern direkt von der Eingangsspannung. 
Kommt dies vom Inverter, der ja nur die Eingangsspannung anlegen kann 
oder GND? Weiter sehe ich noch nicht ganz, wie ich die Induktivität aus 
dem Stromsignal und dem Eingangssignal Vd berechnen kann. Ich habe also 
den Realteil und den Imaginärteil meines Stromes Id und ich suche:

Somit kann ich eigentlich folgendes machen:

Dann sollte ich doch Ld einfach wie oben berechnen können, aber bei V_d 
scheint anders zu sein, bzw. den Einfluss auf die Ampltiude. Wie muss 
ich da die Eingangsspannung mit einbeziehen?

: Bearbeitet durch User
von Weltverschlimmbesserer (Gast)


Lesenswert?

Bert S. schrieb:
> Wie muss
> ich da die Eingangsspannung mit einbeziehen?

Irgendwie!
 Das hier ist kein Matheforum.

von Bert S. (kautschuck)


Lesenswert?

Das ist ein engineering topic, Mathe gehört halt bei der 
Signalverarbeitung dazu...

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Id sollte von Vd abhängen, bist du dir sicher dass dein Vd über die PWM 
auch in einen Spannungszeiger mit entsprechenden Pulsweiten bei der 
jeweiligen Eingangsspannung darstellt und du nicht einfach die 
Pulsweiten falsch geberechnest?

von Udo S. (urschmitt)


Lesenswert?

Bert S. schrieb:
> Nun habe ich aber festgestellt, dass die Amplitude von Id nicht von der
> Amplitude von Vd abhängig ist, sondern direkt von der Eingangsspannung.

Den Satz verstehe ich nicht.
Was genau ist Vd und was deine "Eingangsspannung"

oben schribst du "konstant".
Bert S. schrieb:
> Dazu appliziere ich ein konstantes Vd

Ist das die Vorbereitung oder Nachbereitung eines Praktikumsversuchs?
Dann häng alle Infos rein.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Id sollte von Vd abhängen, bist du dir sicher dass dein Vd über die PWM
> auch in einen Spannungszeiger mit entsprechenden Pulsweiten bei der
> jeweiligen Eingangsspannung darstellt und du nicht einfach die
> Pulsweiten falsch geberechnest?

Das einzige was ich mache ist Vd und Vq (Reglerausgang) direkt mit der 
Injektion zu überschreiben, dass sollte also schon passen. FOC 
funktioniert ja ansonsten perfekt mit dieser Implementation.

von Bert S. (kautschuck)


Lesenswert?

Udo S. schrieb:
> Den Satz verstehe ich nicht.
> Was genau ist Vd und was deine "Eingangsspannung"

Vd ist die Direct Spannungsamplitude bei FOC. Mit dieser Amplitude wird 
der Id (Feld erzeugende) Strom normalerweise geregelt, wobei für die 
Induktionsmessung eine hochfrequentes Signal direkt appliziert wird, was 
beim Strom Id zu einer Phasenverschiebung kommt, woraus man dann die 
Induktivität berechnen kann.

Die Eingangsspannung wird bei FOC gewandelt (wie ein Buck Converter) und 
alle Signale entsprechend skaliert. Von daher ist der applizierte Strom 
am Ende Spannungsunabhängig, jedoch habe ich irgendwie bei der 
Induktivitätsberechnung die Eingangsspannung drin und ich weiß noch 
nicht wieso.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Das die FOC läuft heißt im Messebetrieb gar nichts. Die PI Regler machen 
das schon solange der Rotor Winkel passt.
Wenn du da Schwankungen an der Eingangsspannung hast dann gibt der Pi 
mehr oder weniger pseudo "Vs" raus. Hast du Mal die Frequenz geändert? 
Und das Drehfeld mit geeignetem TP gemessen? Bevor das nicht überprüft 
ist brauchst du mit der Rechnung garnicht weiter machen. Meine FOC lief 
auch aber im Messebetrieb kam BS raus. Da merkt man erst wie viel die 
internen Werte mit der Realität zu tun haben.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Wenn du da Schwankungen an der Eingangsspannung hast dann gibt der Pi
> mehr oder weniger pseudo "Vs" raus.

Die Spannung schwankt nicht, ich habe das nur mal mit einem 
Labornetzteil überprüft und die Abhängigkeit entdeckt.

Alex E. schrieb:
> Hast du Mal die Frequenz geändert?

Ich habe schon zwischen 200Hz und 1kHz probiert, es bleibt das selbe. 
Bei höherem Vd scheint die Amplitude des Id Stromes ungefähr gleich, 
aber der Id Strom schiebt sich weg vom Nullpunkt und so liegt z.B ein 
Signal A * sin(omega t) + offset an. Von daher scheint schon etwas 
komisch zu sein.

Alex E. schrieb:
> Und das Drehfeld mit geeignetem TP gemessen?

Ich kann mal die Phasenströme mit dem Oszi messen, Vd kann ich ja nicht 
darstellen.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Ich kann mal die Phasenströme mit dem Oszi messen, Vd kann ich ja nicht
> darstellen.

Da du nur Vd setzt sollte die Amplitude der Spannungen passen.

Bert S. schrieb:
> Ich habe schon zwischen 200Hz und 1kHz probiert, es bleibt das selbe.
> Bei höherem Vd scheint die Amplitude des Id Stromes ungefähr gleich,
> aber der Id Strom schiebt sich weg vom Nullpunkt und so liegt z.B ein
> Signal A * sin(omega t) + offset an. Von daher scheint schon etwas
> komisch zu sein.

Das ist allerdings sehr Auffällig. Ist vllt das Offset abhängig von Vd?

Bert S. schrieb:
> Die Spannung schwankt nicht, ich habe das nur mal mit einem
> Labornetzteil überprüft und die Abhängigkeit entdeckt.

Die Schwankt bei Last garantiert nur merkst du das nicht. LabNTs und die 
Zuleitungen sind wahrscheinlich alles andere als eine Steife 
Spannungsquelle. Ist aber für die erstmal egal.

Dein Problem ist das Offset im Strom das darf nicht da sein.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Das ist allerdings sehr Auffällig. Ist vllt das Offset abhängig von Vd?

Ja, das sieht so aus.

Alex E. schrieb:
> ein Problem ist das Offset im Strom das darf nicht da sein.

Ok, ich gehe dem mal nach. Momentan setze ich Vd und den elektrischen 
Winkel aus einem Interrupt mit 5kHz, wobei der Drehwinkel mit 500Hz 
wechselt. Die FOC wird mit 20kHz aufgerufen, aus einem anderen 
Interrupt, der mir dann Vd setzt und entsprechend die PWM Signale.

Weiter habe ich mal das ganze simuliert, in der Simulation funktioniert 
alles und ich kann Ld bzw. Lq ziemlich genau berechnen. Die Umsetzung 
ist identisch auf dem Controller, aber eben, irgendwie scheint das 
applizieren von Vd noch problematisch zu sein.

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


Lesenswert?

Bert S. schrieb:
> Ok, ich gehe dem mal nach. Momentan setze ich Vd und den elektrischen
> Winkel aus einem Interrupt mit 5kHz, wobei der Drehwinkel mit 500Hz
> wechselt. Die FOC wird mit 20kHz aufgerufen, aus einem anderen
> Interrupt, der mir dann Vd setzt und entsprechend die PWM Signale.

Hört sich unnötig kompliziert an. Warum incrementierst du den Winkel 
nicht mit 20khz

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Hört sich unnötig kompliziert an. Warum incrementierst du den Winkel
> nicht mit 20khz

Ich werde es mal ausprobieren, momentan sind die Kalibrierungsroutinen 
so geschrieben, dass sie separat von einem timer interrupt aufgerufen 
werden, ich denke die Struktur muss noch überarbeitet werden.

Bis vor kurzem wurde alles zyklisch ohne Interrupt durchlaufen, sprich 
zuerst Messdaten erfassen, dann Positionsregler, dann Ausgang an 
Geschwindigkeitsregler und dann FOC und am ende setzen der PWM Signale. 
Das funktioniert soweit sehr gut, aber ich bin mir noch nicht sicher, 
wie es Interrupt basiert besser gelöst werden könnte. Wie genau wird das 
sonst gehandhabt? Die Strommessung sollte ja wahrscheinlich kurz vor der 
FOC stattfinden und das PWM setzen direkt danach. Die PWM Frequenz ist 
im Moment noch 32kHz, also schneller als die FOC cycle time.

Für die Strommessung kommen momentan INA240 zum Einsatz (direkt 
Phasenstrom), wobei hier über DMA einige Samples gelesen werden und dann 
ein MOV den Strom noch filtert. Ich weiss nicht, ob ich evtl. mit 
Interrupts direkt wie beim Low-Side messen bessere Resultate bekomme

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


Lesenswert?

Wie bei jeder Regelung üblich machst du alles in einem also Strommessung 
auswerten, verarbeiten Strom Regler ggf. Beobachter und dann die PWM 
Werte ins Shadow Register der Timer. Dann hast du einen Zyklus Versatz 
den du als totzeit ansehen kannst und eben so auch kompensieren.

Ganz klassisch lässt du dafür den ADC synchron zur PWM samplen und wenn 
der fertig ist machst du obige Verarbeitung. Oder du entkoppelst das 
komplett wie du es jetzt hast, dann musst du nur sicherstellen daß der 
ADC min 2x schneller Sampled als die PWM damit du mit nyqust kein 
Problem hast. Die Samples kannst du wieder Puffern und einen Mittelwert 
bilden oder anders fir filtern und gut. Nur bekommst du so jitter in die 
Regelung weil das Update der PWM Register nicht sicher gestellt ist. 
Wenn du gerade den PWM Zyklus verpasst werden die Werte erst einen 
Zyklus später übernommen und wenn du Just in time Mal die Register setzt 
dann hast du diesen Versatz nicht.

Üblich wäre die synchrone Variante weil das Timing komplett vorhersehbar 
und kompensierbar (Phasenverschiebung die durch die Verzögerung 
entsteht) ist.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ok, ich habe jetzt mal alles gemessen und es sieht alles sehr gut aus. 
Angehängt sind die Ströme Ia und Ib, die ich direkt in ein Buffer 
schreibe und dann auslese. Ebenfalls sehen die Ströme auf dem Oszi sehr 
gut aus, wie angehängt.
Ebenfalls sind die Stromamplituden unabhängig von der Eingangsspannung 
und skalieren linear mit Vd. Die injizierte Frequenz von 500Hz stimmt 
perfekt.

Von dem her, der applizierte Spannungsvektor Vd erzeugt schöne 
Phasenströme Ia und Ib, aber irgendwie funktioniert das wandeln nach Id 
nicht richtig, sondern schiebt mir Id und Iq nur entlang einer Achse 
nach oben/unten. Was man auf dem Plot sieht ist, dass die gemessenen 
Phasenströme einen leichten Offset haben, obwohl wenn ich die 
Phasenströme mit dem Oszi messe, sehe ich diesen nicht. Auch nicht, wenn 
ich im Position Mode bin und einen fixen Iq_max einstelle, sehen die 
Amplituden für Ia und Ib sauber aus, ohne Offset. Dieser Offset könnte 
wohl einer der Gründe sein, aber ich sehe nicht, wieso Iq/Id immer die 
gleiche Amplitude haben, aber der Offset zunimmt. Und dann noch die 
Abhängigkeit der Eingangsspannung macht keinen Sinn.

Hier mal der Code für das Wandeln, aber der muss schon gehen, 
schließlich geht FOC ohne Probleme. Kann es also alleine am Offset 
liegen?

Edit: Ok, Iq und Id müssten ja sowiso konstant sein, wenn die Ströme Ia, 
Ib und Ic schön Sinusförmig sind. Ic ist bei mir leicht daneben, aber 
das Board hat einen Shunt, der ein bisschen schlechter ist, von daher 
der leichte Offset. Also müsste Id ja eigentlich proportional zur Vd 
amplitude einen Offset bekommen. Daher sehe ich nicht genau, wieso ein 
Vd rotierender Vektor ein rotierenden Id um den Nullpunkt erzeugen 
sollte?

Edit 2: Ok, Ia, Ib und Ic sollten beim rotierenden Drehfeld alle eine 
andere Amplitude haben, das scheint bei mir nicht der Fall zu sein, 
wieso sehe ich noch nicht.
1
/********************/
2
/* Vq, Vd injection  */
3
/********************/
4
foc.ctrl.ele_angle_rad = inj.angle_inj;
5
6
/****************************************************/
7
/* Calculate cos and sin of actual electrical angle  */
8
/****************************************************/
9
foc.ctrl.c_rad = arm_cos_f32(foc.ctrl.ele_angle_rad);
10
foc.ctrl.s_rad = arm_sin_f32(foc.ctrl.ele_angle_rad);
11
12
/********************************/
13
/* Apply Clark Transformation  */
14
/********************************/
15
foc.ctrl.ialpha_mA = ctrl_input->ia_mA;
16
foc.ctrl.ibeta_mA =  ONE_BY_SQRT3 * (2 * ctrl_input->ib_mA + ctrl_input->ia_mA);
17
18
/********************************/
19
/* Apply Park Transformation  */
20
/********************************/
21
foc.ctrl.iq_mA = foc.ctrl.c_rad * foc.ctrl.ibeta_mA - foc.ctrl.s_rad * foc.ctrl.ialpha_mA;
22
foc.ctrl.id_mA = foc.ctrl.c_rad * foc.ctrl.ialpha_mA + foc.ctrl.s_rad * foc.ctrl.ibeta_mA;

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


Lesenswert?

1
void   arm_sin_cos_f32 (float32_t theta, float32_t *pSinVal, float32_t *pCosVal) // Floating-point sin_cos function. More...
Erste Frage warum nimmst du nicht die kombinierte Variante?

Der Code sieht in Ordnung aus.

Bert S. schrieb:
> Edit: Ok, Iq und Id müssten ja sowiso konstant sein, wenn die Ströme Ia,
> Ib und Ic schön Sinusförmig sind. Ic ist bei mir leicht daneben, aber
> das Board hat einen Shunt, der ein bisschen schlechter ist, von daher
> der leichte Offset. Also müsste Id ja eigentlich proportional zur Vd
> amplitude einen Offset bekommen. Daher sehe ich nicht genau, wieso ein
> Vd rotierender Vektor ein rotierenden Id um den Nullpunkt erzeugen
> sollte?

??? Gibst du jetzt ein konstantes Vd raus und rotierst mit dem 
elektrischen Winkel das System oder gibst du einen Sinus auf Vd?

von Bert S. (Gast)


Lesenswert?

Alex E. schrieb:
> Erste Frage warum nimmst du nicht die kombinierte Variante?

Gute Idee, habe das nicht gesehen.

Alex E. schrieb:
> Gibst du jetzt ein konstantes Vd raus und rotierst mit dem elektrischen
> Winkel das System oder gibst du einen Sinus auf Vd

Ich gebe ein konstantes Vd aus und variiere den elektrischen Winkel mot 
500Hz

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Ich gebe ein konstantes Vd aus und variiere den elektrischen Winkel mot
> 500Hz

Dann solltest du eigentlich einen konstanten Stromvektor mit im 
wesentlichen negativen Iq und nur wenig Id erhalten.

: Bearbeitet durch User
von Bert (Gast)


Lesenswert?

Hmm ok, das bekomme ich soweit auch, das konstante Schwingen mit fixer 
Amplitude kommt wahrscheinlich von den Abweichungen in der Strommessung.

Man könnte so also Lq berechnen, aber Abhängig von Rs. Ist das der 
richtige Weg oder wäre es einfacher mit einem Sinusförmige Vd?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

:) jetzt kommen wir doch weiter. Welche Amplitude hat die Schwingung? 
Und hat die ca. Die doppelte Frequenz deines Drehfeldes? Dann kommt die 
Schwingung mit hoher Wahrscheinlichkeit von der Achsigkeit des Motors 
also der Differenz von Ld und Lq.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> jetzt kommen wir doch weiter. Welche Amplitude hat die Schwingung?
> Und hat die ca. Die doppelte Frequenz deines Drehfeldes? Dann kommt die
> Schwingung mit hoher Wahrscheinlichkeit von der Achsigkeit des Motors
> also der Differenz von Ld und Lq.

Ja das sollte hinkommen :D

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

So, nachdem ich die Strommessung mit dem PWM triggere, bekomme ich 
nochmals bessere Phasenströme Ia und Ib. Auch hier sieht man diesen 
Offset von vielleicht -100mA, dies scheint aber nicht weiter tragisch zu 
sein.

Id und Iq sehen ein bisschen komisch aus, aber eben wahrscheinlich wegen 
der Überlagerung von Harmonischen. Sehen die Signale so in Ordnung aus? 
Man sieht jetzt auch schön, die doppelte Frequenz in Id wo in Ia/Ib ist.

Das ganze analysiere ich mit einem Lock-In Amplifier, der gibt mir bei 
1xOmega einen recht konstanten Output, bei 2xOmega nicht mehr, obwohl Id 
mit 2xOmega zu drehen scheint.

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


Lesenswert?

Bert S. schrieb:
> Das ganze analysiere ich mit einem Lock-In Amplifier, der gibt mir bei
> 1xOmega einen recht konstanten Output, bei 2xOmega nicht mehr, obwohl Id
> mit 2xOmega zu drehen scheint.

Lock-Amplifier? Eine PLL? Hast du Mal n Link zu dem Verfahren kenne ich 
noch nicht.

Ich nutze dazu einen Goertzel.

Bert S. schrieb:
> Id und Iq sehen ein bisschen komisch aus, aber eben wahrscheinlich wegen
> der Überlagerung von Harmonischen. Sehen die Signale so in Ordnung aus?

Noch nicht. Du hast jetzt eine Phase von 45° aber dein Rs ist bestimmt 
nicht so groß wie w*L also musst du erstmal die Phasenverschiebung durch 
die Strommessung kompensieren. Du hast jetzt bei 500Hz ca. 45° also grob 
250us. Musst du Mal mit deinen Daten zurück rechnen.

Dann ist die Amplitude der 2 * w Schwingung ist V= w*(Lq - Ld) * I
Und die DC Komponente des Stromes ist V=w*(Ld + Lq) / 2 * I

: Bearbeitet durch User
von Bert (Gast)


Lesenswert?

Alex E. schrieb:
> Noch nicht. Du hast jetzt eine Phase von 45° aber dein Rs ist bestimmt
> nicht so groß wie w*L also musst du erstmal die Phasenverschiebung durch
> die Strommessung kompensieren. Du hast jetzt bei 500Hz ca. 45° also grob
> 250us. Musst du Mal mit deinen Daten zurück rechnen.

Woran erkennst du die 45°, ich habe gerade gesehen, dass Iq/Id und Ia/Ib 
von Oben nicht aus der gleichen Messung sind, ich werde die Messung 
nochmals wiederholen.

Alex E. schrieb:
> Lock-Amplifier? Eine PLL? Hast du Mal n Link zu dem Verfahren kenne ich
> noch nicht.
> Ich nutze dazu einen Goertzel.

Ok, ich denke Goertzel und Lock-In kommen auf das gleiche, es wird im 
Endeffekt das Signal rekonstruiert bei einer fixen Frequenz:

https://www.zhinst.com/ch/en/resources/principles-of-lock-in-detection

Grüsse Bert

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert schrieb:
> Woran erkennst du die 45°, ich habe gerade gesehen, dass Iq/Id und Ia/Ib
> von Oben nicht aus der gleichen Messung sind, ich werde die Messung
> nochmals wiederholen.

Iq und Id liegen beide bei ca. -600 also im 3. Quadranten eigentlich 
sollte der Vektor aber max 90° hinter der Spannung liegen. Da die 
Spannung ein positives Vd ist hast du aber eher 135°. Daher die 45° 
These.

Bert schrieb:
> Ok, ich denke Goertzel und Lock-In kommen auf das gleiche, es wird im
> Endeffekt das Signal rekonstruiert bei einer fixen Frequenz:
>
> https://www.zhinst.com/ch/en/resources/principles-of-lock-in-detection

Ah kannte ich noch nicht ist aber schön wenn ich mal Speichersparen 
muss, da man dafür ja keine größere Menge an Samples Puffern muss. Die 
Rechenzeiten wären auch interessant. Danke für den Link.

Willst du das verfahren eigentlich nur zum Messen benutzen oder auch 
während der Rotation der Maschine? Dass sind dann 2 Paar Schuhe.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Alex E. schrieb:
> Iq und Id liegen beide bei ca. -600 also im 3. Quadranten eigentlich
> sollte der Vektor aber max 90° hinter der Spannung liegen. Da die
> Spannung ein positives Vd ist hast du aber eher 135°. Daher die 45°
> These.

Ok, ja die Messdaten waren halt die falschen, ich habe es versucht noch 
zu wiederholen, irgendwie habe ich aber wohl was verändert, ich bekomme 
andere Signale für Iq und Id. Ebenfalls habe ich mal Vd * sin(theta) 
geplottet, Vd bleibt ja konstant und theta der elektrische Winkel.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Das sieht doch gut aus. Du hast noch einen leicht negativen Id und ist 
die Welle fixiert oder kann die mit 500Hz oszillieren? Das würde die 
Oberwellen erklären.

@edit: versuche Mal 1khz oder etwas mehr was ändert sich dann an dem 
Signal.

: Bearbeitet durch User
von Bert (Gast)


Lesenswert?

Die Welle ist nicht fixiert, dann kommt das wohl so hin. Ich mache 
Morgen mal noch bei 1kHz eine Messung. Dann probiere ich mal den 
Goertzel, beim Lock-In bekomme ich irgenwie den Offset nicht raus, ich 
könnte den aber durch averaging und abziehen entfernen und so beide 
Signalkomponenten evaluieren

Ziel ist es eigentlich an allen Rotorpositionen bei einem bestimmtem 
Strom Ld zu messen, da dies mit dem Torque ripple korreliert. Aus dem 
Mapping möchte ich dann einen Feed Forward Term ermitteln. Hast du das 
schon mal gemacht?

Grüsse und danke, Bert

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

So habe mal die Messung mit 1kHz Injection ausgeführt, denke die Signale 
sehen gut aus so. Komisch ist nur, dass es mir Id so weit noch unten 
geschoben hat.

Anbei noch eine Messung mit 500Hz mit der gleichen Vd Amplitude.

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


Lesenswert?

Das passt voll zu meinen Erwartungen. Bei 500Hz scheint sich deine 
Motorwelle noch gut zu bewegen bei 1kHz kommt sie deutlich weniger mit 
wenn man sich den Anteil der harmonischen ansieht.

Bert S. schrieb:
> So habe mal die Messung mit 1kHz Injection ausgeführt, denke die Signale
> sehen gut aus so. Komisch ist nur, dass es mir Id so weit noch unten
> geschoben hat.

Das ist auch völlig klar du hast eine Verzögerung in deiner 
Strommessung/Auswertung. Also Bandbreite Stromsensor + HW RC TP + SW 
Filter haben eine Signallaufzeit und die wird bei den Feldfrequenzen 
signifikant. Da die Zeit konstant ist verdoppelt sich bei doppelter 
Frequenz die Phase und genau das siehst du hier. Wenn du L und R deiner 
Wicklungen kennst kannst du den Phasenfehler bei den Frequenzen 
bestimmen und die Zeit berechnen. Dann musst du nur um
 eine Parktransformation (zusätzlich nur für die Ströme Id/Iq] machen. 
Da sich die Drehzahl nur langsam ändert kannst du den Sinus und Cosinus 
für die Drehung auch in einer Langsamen Loop rechnen.

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Das ist auch völlig klar du hast eine Verzögerung in deiner
> Strommessung/Auswertung.

Ok, wie würden die Ströme Iq/Id ohne Verzögerung der Strommessung 
aussehen? Wären die ohne negativen Offset?

Alex E. schrieb:
> Da die Zeit konstant ist verdoppelt sich bei doppelter
> Frequenz die Phase

Von deinem vorigen Beitrag müsste ich ja den Offset bestimmen sowie die 
2 * omega Schwingung. Den Offset bekomme ich durch averaging, die 
2*omega Frequenz kann ich also berechnen, indem ich den Lock-In über den 
korrigierten Iq/Id laufen lasse, sprich mit der kompensierten Park 
Trafo?

Die Phaseninduktivität ist 1.1mH und der Phasenwiderstand ist 0.22mOhm, 
daraus ergibt sich ein Tl = 5ms und daraus ein omega * Tl = 10*PI, da 
wäre ich ja eigentlich wieder am gleichen Ort vom Winkel her? Was 
übersehen ich da?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Die Phaseninduktivität ist 1.1mH und der Phasenwiderstand ist 0.22mOhm,
> daraus ergibt sich ein Tl = 5ms und daraus ein omega * Tl = 10*PI, da
> wäre ich ja eigentlich wieder am gleichen Ort vom Winkel her? Was
> übersehen ich da?

OK jetzt habe ich Mal Zeit:

Punkt 1: 0.22Ohm und 1.1mH  ergeben bei 1kHz

Du hast aber einen Stromvektor von Iq = -300 und Id = -350 also:
 somit
Hat deine Strommessung bei 1kHz einen Phaselag von 42° und daher eine 
Laufzeit Verzögerung von

Um die These zu beweisen bei 500Hz sind das 21° Phase also
 somit sind das 20° lag. QED

So meinte ich das. Wenn das passt kannst du mit der Auswertung des Iq 
mit lockin auswerten.

: Bearbeitet durch User
von Bert (Gast)


Lesenswert?

Danke dir, ja das macht sinn. Ich werde dem Morgen mal nachgehen.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Dann ist die Amplitude der 2 * w Schwingung ist V= w*(Lq - Ld) * I
> Und die DC Komponente des Stromes ist V=w*(Ld + Lq) / 2 * I

Danke dir, ich habe es soweit hinbekommen, Id bleibt um den Nullpunkt 
stehen und Iq bewegt sich in die negative Richtung. Das ganze ist nun 
auch Eingangsspannungsunabhängig. Die Verzögerung der Strommessung kam 
daher, dass ich einen Mittelwert über die DMA Strommessungen mache, wenn 
ich direkt auslese habe ich eine Verzögerung von ca. 5us.

Zur obigen Formel, Ist V = Vd in beiden Gleichungen und I = Id in der 
ersten und Iq_dc in der zweiten?

Was ich schon mal sehr spannend finde ist, dass ich den elektrischen 
Winkel so schätzen kann, jetzt sehe ich auch wie die Positionsschätzung 
über HFI funktioniert. Der Lock-In scheint auch eine sehr schnelle 
Phasenkonvergenz zu besitzen, das wäre somit für die Positionsschätzung 
ideal, gerade da er Rekursiv ist.

: Bearbeitet durch User
von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ich habe mal jetzt mal alles so implementiert wie oben von den 
Gleichungen her, ich bekomme extrem stabile Werte über den ganzen 
Spannungsbereich und nur Abweichungen von maximal so 0.5%.

Nun stimmen aber Ld und Lq irgendwie noch nicht und der Wert ändert sich 
proportional zum applizierten Vd. Habe ich was nicht berücksichtigt in 
den Formeln?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Der Lock-In scheint auch eine sehr schnelle Phasenkonvergenz zu
> besitzen, das wäre somit für die Positionsschätzung ideal, gerade da er
> Rekursiv ist.

Das sieht für mich auch sehr gut aus. Hab aber bisher nur FPGA 
Implementierungen gesehen. Hast du einen Link zu einer C/C++ 
Implementierung? Ich das Rad ja nicht neu erfinden.

Bert S. schrieb:
> Ich habe mal jetzt mal alles so implementiert wie oben von den
> Gleichungen her, ich bekomme extrem stabile Werte über den ganzen
> Spannungsbereich und nur Abweichungen von maximal so 0.5%.
> Nun stimmen aber Ld und Lq irgendwie noch nicht und der Wert ändert sich
> proportional zum applizierten Vd. Habe ich was nicht berücksichtigt in
> den Formeln?

Mmh. Was kommt denn für ld und lq raus? Ich sehe so jetzt nix falsches. 
Kann du Mal die einzelnen Werte Posten das ich das nachvollziehen kann.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Mmh. Was kommt denn für ld und lq raus? Ich sehe so jetzt nix falsches.
> Kann du Mal die einzelnen Werte Posten das ich das nachvollziehen kann.

Ich bekomme für ein Vd von 2V ein Ld von 0.3mH, aber eben linear in Vd, 
für ein 4V Vd bekome ich dann 0.6mH etc. Lq bewegt sich bei 54uH. Da es 
sich nicht um ein salient Motor handelt, müsste Lq = Ld = Ls sein, in 
etwa und Ls ist 1.1mH.

Alex E. schrieb:
> Hast du einen Link zu einer C/C++
> Implementierung? Ich das Rad ja nicht neu erfinden.

Ich habe das mal selber implementiert:
1
/************************/
2
/*  Lock-In LPF Coeff A */
3
/************************/
4
#ifndef API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_A
5
#define API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_A 0.9995f
6
#endif
7
8
/************************/
9
/*  Lock-In LPF Coeff B  */
10
/************************/
11
#ifndef API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_B
12
#define API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_B (1.0f - API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_A)
13
#endif
14
15
16
void lq_ld_measurement_update()
17
{
18
  /********************/
19
  /*  Vd injection  */
20
  /********************/
21
  API_MCL_CALIBRATION_Set_Injection(API_MCL_CALIBRATION_INJECTION_VD, inductivity_calib.injection_angle_Vd_Vd_rad, inductivity_calib.omega_rotating_speed_rad_s, (int32_t)inductivity_calib.injection_Vd_Vq_voltage_mV);
22
23
  inductivity_calib.injection_angle_Vd_Vd_rad += inductivity_calib.injection_angle_Vd_Vd_step_rad;
24
  if(inductivity_calib.injection_angle_Vd_Vd_rad > TWO_PI)
25
  {
26
    inductivity_calib.injection_angle_Vd_Vd_rad -= TWO_PI;
27
  }
28
29
  /********************************/
30
  /*  Apply a lock-in amplifier  */
31
  /********************************/
32
  inductivity_calib.lpf_sin_component = API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_A * inductivity_calib.lpf_sin_component + 
33
                      API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_B * foc.ctrl.id_mA * arm_sin_f32(2.0f*inductivity_calib.injection_angle_Vd_Vd_rad);
34
  inductivity_calib.lpf_cos_component = API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_A * inductivity_calib.lpf_cos_component + 
35
                      API_MCL_CALIBRATION_INDUCTIVITY_QD_LPF_COEFF_B * foc.ctrl.id_mA * arm_cos_f32(2.0f*inductivity_calib.injection_angle_Vd_Vd_rad);
36
                      
37
}
38
39
void lq_ld_measurement_finished()
40
{
41
  /*****************************************************/
42
  /* Calculate phase and offset from the filter output */
43
  /*****************************************************/
44
  inductivity_calib.sig_amp = sqrtf(inductivity_calib.lpf_sin_component * inductivity_calib.lpf_sin_component + inductivity_calib.lpf_cos_component * inductivity_calib.lpf_cos_component);
45
  inductivity_calib.sig_phase_offset = atan2f(inductivity_calib.lpf_cos_component,inductivity_calib.lpf_sin_component);
46
47
}

Ist soweit noch nicht sehr effizient, ich wollte es aber mal 
funktionierend bringen. Die LPF Filter sind recht langsam gewählt für 
einen sehr genauen Output.

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


Lesenswert?

2V bzw 4V kommt mir sehr niedrig vor. Die Werte des Motors lassen auf 
einen Motor schließen der für 400V oder mehr Zwischenkreis Spannung 
ausgelegt ist. Aber deine Strommessung scheint ja schon gute Werte zu 
liefern. Was sind die Werte von Id_amp und Iq_dc bei 2V und 4V. Ist der 
Sinus hörbar oder ist der Antrieb noch Recht ruhig? Für eine gute L 
Messung muss der Ton schon nerven:).

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> 2V bzw 4V kommt mir sehr niedrig vor. Die Werte des Motors lassen
> auf
> einen Motor schließen der für 400V oder mehr Zwischenkreis Spannung
> ausgelegt ist. Aber deine Strommessung scheint ja schon gute Werte zu
> liefern. Was sind die Werte von Id_amp und Iq_dc bei 2V und 4V. Ist der
> Sinus hörbar oder ist der Antrieb noch Recht ruhig? Für eine gute L
> Messung muss der Ton schon nerven:).

Das ist ein +48VDC Motor und die Messung ist schon sehr nervig :). Bei 
2.2V Vd bekomme ich ein Id_amp von 36mA und ein Iq_dc von -386mA.

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


Lesenswert?

Passt doch.

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


Lesenswert?

Vllt verliert deine Strommessung bei 1 kHz schon etwas Amplitude oder es 
steckt noch ein Fehler in der Kalibrierung der Messung das kann jetzt 
vieles sein

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Passt doch.
> Lq=2.2V2∗Π∗1000Hz∗(0.386A−0.036)=1000.4uHLd=2.2V2∗Π∗1000Hz∗(0.386A+0.036 )=830uH
> L_q = \frac{2.2V}{2 * \Pi * 1000Hz *(0.386A - 0.036)} = 1000.4uH
>
> L_d = \frac{2.2V}{2 * \Pi * 1000Hz *(0.386A + 0.036)} = 830uH

Danke, ja scheint zu passen, ich habe irgendwie bei den Formeln was 
falsch gemacht.

Hast du schon mal sowas wie hier versucht: 
(DOI:10.6113/JPE.2010.10.2.176, am besten mit sci-hub öffnen --> 
https://sci-hub.se/http://koreascience.or.kr/article/JAKO201019451500666.page)
(Momentan irgendwie gerade nicht verfügbar)

Ich habe bei einem Motor Torque Ripples mit der 6ten Harmonischen des 
elektrischen Winkels (hat ja jeder Motor), die ich gerne kompensieren 
würde. Was in diesem Paper beschrieben wird ist, dass Ld an 
verschiedenen mit verschiedenen Strömen Positionen gemessen wird und so 
eine feed-forward Funktion erstellt wird, welche dann Stromabhängig 
einen feed-forward Term generiert. Ich bin mit der Umsetzung noch nicht 
ganz vertraut und gerade wie der Strom eingestellt wird ist mir noch 
nicht ganz klar (ich denke ein konstantes Id und dann die Induktivität 
berechnen)

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


Lesenswert?

Unter der DOI hab ich das PDF gefunden auch ohne scihub.

Die bauen aber nur ein Kennfelde (Winkel/Solldrehmoment) auf dass das 
Rastmoment kompensiert. Die Maschine ist auch sehr spezifisch für die 
Anwendung ausgelegt. Im industriellen Bereich wird sowas oft bei 
Drehzahl geregelten Antrieben mit einer FFT auf dem Sollstrom gemacht. 
Also bei Laufender Maschine FFT machen DC ausklammern und IFFT auf den 
Sollstrom vorsteuern. Dann der nächste durch Gang bis der THD unter x 
Prozent ist. Dann speichert man die iFFT Kurve.

Die Methode aus dem Paper ist Recht simple um nur den Coging Torque raus 
zu bekommen. Das kann die FFT Methode hat bei anderen Lasten unter 
Umständen genau das nicht berücksichtigt.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Im industriellen Bereich wird sowas oft bei
> Drehzahl geregelten Antrieben mit einer FFT auf dem Sollstrom gemacht.
> Also bei Laufender Maschine FFT machen DC ausklammern und IFFT auf den
> Sollstrom vorsteuern. Dann der nächste durch Gang bis der THD unter x
> Prozent ist. Dann speichert man die iFFT Kurve.

Ok, das klingt auch mal sehr spannend

Alex E. schrieb:
> Die Methode aus dem Paper ist Recht simple um nur den Coging Torque raus
> zu bekommen. Das kann die FFT Methode hat bei anderen Lasten unter
> Umständen genau das nicht berücksichtigt.

Wie ich das verstanden habe wird hier aktiv der Torque Ripple und nicht 
das Cogging kompensiert. Man misst also bei hohen Strömen die 
Induktivität Ld und dieses Mapping ist proportional zur Verzerrung des 
magnetischen Flusses bei diesen hohen Strömen. Das FF passiert dann 
proportional zum Strom. Bei der Rastmomentkompensation wird ja nur bei 
jeder Position der Strom gemessen um diese Position zu halten und dann 
ein statisches FF erstellt.

Noch eine andere Frage, für MTPA muss ich ja ein Ld und Lq nehmen, aber 
von welcher Position? Ld und Lq variieren ja mit dem elektrischen Winkel 
und bei manchen Winkeln sind Ld und Lq praktisch identisch.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Die Messmethode aus dem Paper ist pures HFI. Also du fährst den Motor in 
FOC bei konstanter niedriger Drehzahl und addierst auf Vd einen Sinus 
mit 1kHz und wertest dann die Iq Amplitude aus um Ls zu messen. Wie du 
es jetzt auch gemacht hast nur unter drehender Maschine. Das musst du 
dann für mehrere Lasten machen und dann hast du das Kennfeld für den 
Feed Forward. Die Rotorlage ist dabei quasi Abfall :)

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Das musst du
> dann für mehrere Lasten

Ok, die Lasten müssten ja eigentlich perfekt sein, sprich kein Ripple 
enthalten, sonst geht es ja nicht. Kann ich auch eine Last simulieren, 
indem ich einen großen Id Strom appliziere? Dieser führt ja zu den 
gleichen Sättigungseffekten?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Alex E. schrieb:
>> Das musst du
>> dann für mehrere Lasten
>
> Ok, die Lasten müssten ja eigentlich perfekt sein, sprich kein Ripple
> enthalten, sonst geht es ja nicht. Kann ich auch eine Last simulieren,
> indem ich einen großen Id Strom appliziere? Dieser führt ja zu den
> gleichen Sättigungseffekten?

Theoretisch stimme ich zu nur ggf. müsste man die Phase des Feed Forward 
anpassen weil es ja auf Id gemessen wurde und auf Iq angewendet werden 
wird.

Bert S. schrieb:
> Wie ich das verstanden habe wird hier aktiv der Torque Ripple und nicht
> das Cogging kompensiert. Man misst also bei hohen Strömen die
> Induktivität Ld und dieses Mapping ist proportional zur Verzerrung des
> magnetischen Flusses bei diesen hohen Strömen. Das FF passiert dann
> proportional zum Strom. Bei der Rastmomentkompensation wird ja nur bei
> jeder Position der Strom gemessen um diese Position zu halten und dann
> ein statisches FF erstellt.

Hier wird aber kein Ripple gemessen sondern die Änderung der 
Induktivität durch die Positionsabhängige Qualität des Magnetischen 
Kreises und exakt das ist der Grund für das Rastmoment eines Motors, 
mechanische Effekt werden nicht berücksichtigt.

Das ist deutlich besser als die Methode mit festhalten an Position x.

Bert S. schrieb:
> Noch eine andere Frage, für MTPA muss ich ja ein Ld und Lq nehmen, aber
> von welcher Position? Ld und Lq variieren ja mit dem elektrischen Winkel
> und bei manchen Winkeln sind Ld und Lq praktisch identisch.

Die sind praktisch identisch? Das wäre sehr komisch. Der Punkt ist deine 
Maschine hat einfach keine signifikante Achsigkeitkeit die im 
Rotoraufbau begründet ist sondern nur ein Unterschied von Ld und Lq der 
durch Sättigungseffekte begründet ist. Dementsprechend ist MTPA nicht 
sinnvoll für die Maschine und die Rotorlage Ermittlung über HFI wird 
auch problematisch.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Theoretisch stimme ich zu nur ggf. müsste man die Phase des Feed Forward
> anpassen weil es ja auf Id gemessen wurde und auf Iq angewendet werden
> wird.

Ok danke, ich werde das mal probieren.

Alex E. schrieb:
> Die sind praktisch identisch? Das wäre sehr komisch.

Ld schwankt zwischen 0.8mH und 0.92mH, Lq zwischen 1mH und 0.94mH je 
nach position, wobei bei Ld = 0.8mH Lq = 1mH ist und bei der Position Lq 
= 0.94mH Ld = 0.92mH ist. Es handelt sich aber um einen non-salient 
Motor, von daher ist das wahrscheinlich schon zu erwarten.

Alex E. schrieb:
> Dementsprechend ist MTPA nicht
> sinnvoll für die Maschine und die Rotorlage Ermittlung über HFI wird
> auch problematisch.

Ok, ich wollte das einfach mal implementiert haben, sobald ich mal einen 
salient Motor habe zum testen.

Was ich noch spannend finde ist, dass im Paper von oben der Strom Id 
sinusförmig appliziert wird und dann die Spannung ausgelesen wird, dies 
ist doch aber viel schwieriger zu erzielen, oder sehe ich das falsch? 
Weiter kann ich ja momentan nur ein konstantes Vd und einen drehenden 
elektrischen Winkel nutzen, wenn ich aber das ganze über den normalen 
Regler werfen möchte, muss ich ja ein Vd_HFI feed-forwarden und der 
elektrische Winkel bleibt wie beim normalen Regler. Reicht es da, 
einfach ein Vd * Sinus(omega t) zu forwarden?

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


Lesenswert?

Bert S. schrieb:
> Reicht es da,
> einfach ein Vd * Sinus(omega t) zu forwarden?

Jop, nichts anderes machen die auch. Im Paper ist das V_dac welches auf 
das normale Vd nach dem Regler addiert wird. Hier kann man noch 
unterscheiden. Wenn du nur Vd mit dem Sinus beaufschlagst ist das kein 
komplettes Drehfeld und somit ist die Stromantwort Positionsabhängig. 
Das nutzt man eigentlich bei HFI direkt. Also man jagt nur auf Vd das 
Signal rein und guckt sich Iq an. Wenn die Amplitude des 
Injektionssignales in Iq nahe 0 ist liegt der aktuelle Rotorwinkel der 
FOC auf dem wirklichen Rotorwinkel oder 180° gedreht dazu.

Für die Messung ist das aber ungünstig, vllt fällst du hier mit der 
jetzigen Messung rein. Siehe 
https://www.db-thueringen.de/servlets/MCRFileNodeServlet/dbt_derivate_00013770/ilm1-2007000172.pdf 
ab Seite 63. Die Diss ist generell ein guter Überblick über alles was so 
Standard ist im sensorlosen Bereich. Kannst ja mal drüber fliegen.

Für die Messung solltest du einen komplettes Drehfeldvorsteuern also Vd 
und Vq. So hast du es ja implizit auch gemacht all du noch den ganzen 
d/q-Frame mit 1kHz rotiert hast.

von Bert S. (kautschuck)


Lesenswert?

Danke dir, ich schaue mir das mal an.

von Bert S. (kautschuck)


Lesenswert?

Ich habe mal Kapitel 4 durchgelesen und verstehe nun auch besser, wie du 
auf die Berechnung von Lq und Ld gekommen bist, danke dafür.

Alex E. schrieb:
> Für die Messung solltest du einen komplettes Drehfeldvorsteuern also Vd
> und Vq. So hast du es ja implizit auch gemacht all du noch den ganzen
> d/q-Frame mit 1kHz rotiert hast.

Das macht absolut sinn, nur wie genau soll ich das am besten machen? 
Vd_hfi = Vd' * sin(wt) und Vq_hfi = V_q' * cos(wt)? So wären ja die 
Signale 90° phasenverschoben wie zuvor.

Dann wird es meiner Meinung nach etwas knifflig. Wenn ich jetzt an 
verschiedenen Positionen ein Ld messen will und das bei einem konstanten 
Id (als Last Ersatz), dann muss mein Iq auch leicht ansteigen um das 
Reluktanzmoment von Id auszugleichen und auch um den Cogging Strom an 
der jeweiligen Position zu erbringen. Diese beiden Ströme sollten sich 
aber schnell stabilisieren und so könnte ich vor jeder Messung zuerst 
die Rotorposition neu einstellen, Iq und Id messen, ein HFI applizieren 
und bei der Berechnung von Iq_dc sowie Id_amp die Offsets abziehen?

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


Lesenswert?

Bert S. schrieb:
> Das macht absolut sinn, nur wie genau soll ich das am besten machen?
> Vd_hfi = Vd' * sin(wt) und Vq_hfi = V_q' * cos(wt)? So wären ja die
> Signale 90° phasenverschoben wie zuvor.
>
> Dann wird es meiner Meinung nach etwas knifflig. Wenn ich jetzt an
> verschiedenen Positionen ein Ld messen will und das bei einem konstanten
> Id (als Last Ersatz), dann muss mein Iq auch leicht ansteigen um das
> Reluktanzmoment von Id auszugleichen und auch um den Cogging Strom an
> der jeweiligen Position zu erbringen. Diese beiden Ströme sollten sich
> aber schnell stabilisieren und so könnte ich vor jeder Messung zuerst
> die Rotorposition neu einstellen, Iq und Id messen, ein HFI applizieren
> und bei der Berechnung von Iq_dc sowie Id_amp die Offsets abziehen?

Ja das denke ich auch. Willst du das ohne Geber machen oder mit einem 
Geber? Ohne Geber ist die Frage ob du bestimmte Positionen überhaupt bei 
einem niedrigen Strom erreichen kannst. In dem Paper hatten die ja schon 
einen Motor der kein Rastmoment hatte und nur unter Last gerastet hat 
das ist ja deutliche einfacher als mit einem Rastmoment das auch ohne 
Bestromung bereits vorhanden ist weil der Motor so einfach gebaut ist.

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Ja das denke ich auch. Willst du das ohne Geber machen oder mit einem
> Geber? Ohne Geber ist die Frage ob du bestimmte Positionen überhaupt bei
> einem niedrigen Strom erreichen kannst. In dem Paper hatten die ja schon
> einen Motor der kein Rastmoment hatte und nur unter Last gerastet hat
> das ist ja deutliche einfacher als mit einem Rastmoment das auch ohne
> Bestromung bereits vorhanden ist weil der Motor so einfach gebaut ist.

Ich mache das mit Geber und die Rastmomentkompensation (FF von Iq an 
spezifischer Position nach statischer Analyse) mache ich auch schon 
vorher, von dem her ist ein positionsabhängiges Rastmoment-Mapping 
vorhanden.

Im Endeffekt möchte ich die Sättigung des magnetischen Flusses bei 
höheren Strömen kompensiere, was sich durch ein Torque Ripple bemerkbar 
macht. Das Erkennen der Position über HFI ist mir eigentlich im Moment 
noch nicht wichtig, obwohl das natürlich auch etwas feines ist und ich 
später sicher auch noch damit herumprobieren möchte :)

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


Lesenswert?

Ja dann sollte das gehen. Was ist das für eine Servo Anwendung das der 
ripple so wichtig ist? Oder ist es wie bei mir Spaß an der Freude?

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Oder ist es wie bei mir Spaß an der Freude?
 Genau, ich interessiere mich einfach für Servomotoren und deren 
Ansteuerung :) und ich möchte mal so einen Simulator bauen für ein 
Steuerrad, der sich gut anfühlt und richtig Power hat. Im Moment fühlt 
man einfach noch die 6te Harmonische, sprich beim 2 PP Motor gibt es 12 
mal pro Umdrehung einen Ripple.

Ich suche momentan noch verschiedene Paper zusammen, habe mal eine 
schöne Übersicht über die verschiedenen Möglichkeiten der 
Parameteridentifikation gefunden:

https://eprints.whiterose.ac.uk/173931/1/09402773.pdf

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

So, folgendes Paper beschreibt das Messen der Induktivitäten unter einem 
applizierten Iq und Id Strom am besten:

https://sci-hub.ee/10.1109/ecce44975.2020.9235908
(DOI:10.1109/ECCE44975.2020.9235908)

Was ich nicht verstehe ist, warum dazu eine Valpha/Vbeta sowie 
zusätzlich eine Vd/Vq Injektion notwendig ist?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> So, folgendes Paper beschreibt das Messen der Induktivitäten unter einem
> applizierten Iq und Id Strom am besten:
>
> https://sci-hub.ee/10.1109/ecce44975.2020.9235908
> (DOI:10.1109/ECCE44975.2020.9235908)
>
> Was ich nicht verstehe ist, warum dazu eine Valpha/Vbeta sowie
> zusätzlich eine Vd/Vq Injektion notwendig ist?

vom ersten Lesen ist mir das auch nicht ganz klar. Aber wenn man sich 
den Vergleich ansieht dient die mehrfach Injection schlicht der Erhöhung 
des SNR und dabei misst er auch noch die Kreuzkopplung der 
Induktivitäten. Wenn man das ganze Verfahren durchzieht dauert das 
wahrscheinlich ewig aber man bekommt anscheinend ein sehr gutes Bild von 
den Induktivitäten bei verschiedenen Arbeitspunkten.

von Bert S. (kautschuck)


Lesenswert?

Ich habe mir noch überlegt, der Ripple könnte auch von der 
Nichtlinearität des Inverters kommen, gerade da ich einen 2PP Motor habe 
und 12 mal pro Umdrehung eine Rasterung spüre bei hohem Strom. Ist der 
Ripple der Nichtlinearität des Inverters linear im Strom oder sollte der 
nicht konstant sein und Stromunabhängig?

Daher implementiere ich zuerst mal noch eine Dead Time Compensation mit 
Zero-Clamping, wie hier beschrieben:

(https://sci-hub.se/10.1049/ip-epa:20045123)

Nur verstehe ich nicht ganz, wie man das ganze im Position Mode stabil 
bekommen soll. Das Problem ist ja, dass wenn der Strom um den Nullpunkt 
ist, es zu einer starken Oszillation kommt, da die Vd_comp und Vq_comp 
Komponenten zwischen 2 Werten springen. Wie handhabt man die Dead Time 
Kompensation, so dass es zu keiner Oszillation kommt im Position Mode? 
Ich habe auch mal versucht das ganze erst ab einem Iq von 1A zu 
aktivieren, aber auch hier kommt es schnell mal zu einer Oszillation 
wenn ich auf eine neue Position springe.

In dem Paper wird ebenfalls eine Vamp definiert, die sqrt(2/3) so gross 
ist wie Vacomp, jedoch geht das irgendwie mit der Clark und Park Trafo 
nicht auf, da die Amplitude im Valpha/Vbeta System bereits mit dem 
Faktor 2/3 gestaucht wird.

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


Lesenswert?

Bert S. schrieb:
> Daher implementiere ich zuerst mal noch eine Dead Time Compensation mit
> Zero-Clamping, wie hier beschrieben:
>
> (https://sci-hub.se/10.1049/ip-epa:20045123)

Bis auf die Kompensation der Kapazitäten mit der LUT ist das das gleiche 
wie bei allen anderen: 
https://www.nxp.com/docs/en/application-note/AN4863.pdf

Bert S. schrieb:
> Nur verstehe ich nicht ganz, wie man das ganze im Position Mode stabil
> bekommen soll. Das Problem ist ja, dass wenn der Strom um den Nullpunkt
> ist, es zu einer starken Oszillation kommt, da die Vd_comp und Vq_comp
> Komponenten zwischen 2 Werten springen. Wie handhabt man die Dead Time
> Kompensation, so dass es zu keiner Oszillation kommt im Position Mode?
> Ich habe auch mal versucht das ganze erst ab einem Iq von 1A zu
> aktivieren, aber auch hier kommt es schnell mal zu einer Oszillation
> wenn ich auf eine neue Position springe.
Wenn du die Formeln 11 und 12 aus der AN4863 von oben nimmst hast du das 
Problem nicht weil die Unabhängig von der Stromrichtung sind. Und du 
bist automatisch bei dem case 3 aus dem Paper von dir. Weil du Vd comp 
nicht mehr rechnerisch dort halten musst wo sie hin soll sondern gleich 
ideal vorgibst. Wenn man die Gleichungen 11 und 12 dann noch an den 
spitzen verrundet wie bei Case 4 aus dem Paper dann hätte man auch das 
erschlagen.

Viel schwieriger finde ich den Spannungsfehler zu beziffern. Ich habe 
meine dead time comp nach AN4963 implementiert habe aber Probleme Uerr 
genau zu bestimmen, der rechnerische Wert ist bei mir zu hoch. Vllt 
liegt es ja an den Kapazitäten oder ich mache noch einen Rechnenfehler. 
Das werde ich bei Gelegenheit mal prüfen. Kannst ja mal berichten wie es 
bei dir Funktioniert.

Bert S. schrieb:
> In dem Paper wird ebenfalls eine Vamp definiert, die sqrt(2/3) so gross
> ist wie Vacomp, jedoch geht das irgendwie mit der Clark und Park Trafo
> nicht auf, da die Amplitude im Valpha/Vbeta System bereits mit dem
> Faktor 2/3 gestaucht wird.

in Gleichung 3 im Paper sehe ich keinen Faktor. Somit passt das meiner 
Meinung nach ohne es genau nachzuvollziehen. Witziger Weise ist in der 
AN4863 von 4/3 die rede für Uerr.

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Viel schwieriger finde ich den Spannungsfehler zu beziffern. Ich habe
> meine dead time comp nach AN4963 implementiert habe aber Probleme Uerr
> genau zu bestimmen, der rechnerische Wert ist bei mir zu hoch. Vllt
> liegt es ja an den Kapazitäten oder ich mache noch einen Rechnenfehler.
> Das werde ich bei Gelegenheit mal prüfen. Kannst ja mal berichten wie es
> bei dir Funktioniert.

Danke dir, ich werde das mal ausprobieren und Bescheid geben.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

So ich habe das mal noch wie in 
(https://www.nxp.com/docs/en/application-note/AN4863.pdf) implementiert, 
irgend etwas geht mir das nicht auf.

In pink ist die Vq Kompensation und in grün die Vd Kompensation. Bei der 
Vq Kompensation ist irgendwie keine Verrundung vorhanden wie es nach 
AN4863 sein sollte und Vd hat einen Offset. Ich gehe dem mal noch nach, 
aber rein von den Formeln her sollte es stimmen und auch die 
angenommenen Werte sehen gut aus:

foc.ctrl.verr_dt_comp_mV bleibt stabil,
foc.ctrl.sector_dt bewegt sich in {0..5}

Wie ich das sehe wird aber auch hier beim Wechsel zwischen Iq > 0 und Iq 
< 0 eine Spiegelung entlang der X-Achse dieser Kompensationsspannung 
stattfinden und somit eine Instabilität bei Iq = 0 vorherrschen. 
Ebenfalls ist zwischen zwei Sektoren durch die Noise eine Unstetigkeit, 
was auch zu Instabilität führt. Evtl. habe ich aber wie du gesagt hast 
einfach eine zu hohe Kompensationsspannung.

Edit: Ok, es scheint, dass der Sektor für SVPWM für die DTC anders 
gewählt wird, und zwar um 30° gedreht im UZS

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Ich habe es mal so wie in AN4863 stabil hinbekommen, jetzt spürt man 
aber noch den Ripple bei den Sektor Übergangen, weil Iq ja springt. Ist 
dass, weil die Verrundung fehlt?

Wie genau machst du das mit der Verrundung? Wenn man das Zero Clamping, 
noch implementiert, dann kommt man ja auf Va_comp, Vb_comp und Vc_comp, 
jedoch bewegen wir uns in AN4863 direkt im Vq und Vd System und hin und 
her transformieren wäre  eher rechenintensiv. Gibt es da einen 
einfacheren Trick für Zero Clamping und reicht das Zero Clamping für die 
Verrundung?

Was auch noch komisch ist, dass die SVPWM Sektoren um 30° verschoben 
sind, ich sehe dass noch nicht genau ein.

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


Angehängte Dateien:

Lesenswert?

Bert S. schrieb:
> Ich habe es mal so wie in AN4863 stabil hinbekommen, jetzt spürt man
> aber noch den Ripple bei den Sektor Übergangen, weil Iq ja springt. Ist
> dass, weil die Verrundung fehlt?

Die Verrundung ist ja aus deinem Paper die habe ich auch noch nicht 
implementiert. Bei mir ist die DTC aus solange der Iq Sollwert unter 
einer einstellbaren Schwelle ist und darüber richtet sich die DTC immer 
nach dem Iq Sollwert. Der Istwert hat bei mir auch für Rückkopplungen 
gesorgt.

Bert S. schrieb:
> Wie genau machst du das mit der Verrundung? Wenn man das Zero Clamping,
> noch implementiert, dann kommt man ja auf Va_comp, Vb_comp und Vc_comp,
> jedoch bewegen wir uns in AN4863 direkt im Vq und Vd System und hin und
> her transformieren wäre  eher rechenintensiv. Gibt es da einen
> einfacheren Trick für Zero Clamping und reicht das Zero Clamping für die
> Verrundung?

So wie ich das Zero Clamping verstanden habe ist das in der AN4863 
Methode schon drin. Die Autoren in dem Paper sind ja von den Phasen 
ausgegangen und haben für die Phasen eine DTC gemacht und dass dann in 
DQ transformiert und dort dann gesehen dass sie einen Offset haben und 
diesen Offset kompensiert.
AN4863 ist durch die reine Vorsteuerung im DQ bereits offsetfrei und 
braucht dieses Problem gar nicht zu lösen. Das meinte ich auch initial 
als ich die AN vorgeschlagen habe.

Bert S. schrieb:
> Was auch noch komisch ist, dass die SVPWM Sektoren um 30° verschoben
> sind, ich sehe dass noch nicht genau ein.
Liegt an der Phase des Stromes von 90° und der 120° Phasenverschiebung 
zwischen den Phasen. Siehe Figure 6 in der AN. Ich hab das Bild mal 
angehängt.


Du bist da jetzt ungefähr so weit wie ich in dem Thema. Für die 
Verrundung könnte man einmal für die komplette elektrische Umdrehung die 
Vd/q Werte über die Gleichungen berechnen und in einer LUT speichern und 
dann jagt man einen gleitenden Mittelwert mittig darüber um die Kanten 
raus zu bekommen.
Die Frage ist wie lang man den Mittelwert macht und ob man die LUT nicht 
eher für einen Sektor macht und dann Ende-zu-Ende stätig. Also wenn die 
LUT in einer Schleife durchlaufen wird darf kein Sprung in den 
Ausgangswerten sein.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Alex E. schrieb:
> Liegt an der Phase des Stromes von 90° und der 120° Phasenverschiebung
> zwischen den Phasen. Siehe Figure 6 in der AN. Ich hab das Bild mal
> angehängt.

Danke dir, ich habe momentan noch das Problem, dass ich zwar die 
richtigen Vq_comp und Vd_comp bekomme, aber diese noch nicht mit Ia,Ib 
und Ic richtig in phase sind, wie im Anhang. Wenn Ia, Ib und Ic = Null 
sind, dann bin ich nicht wie beim Paper beim starken Anstieg von 
Vq_comp, sondern 180° verschoben. Wieso sehe ich noch nicht.

Alex E. schrieb:
> Für die
> Verrundung könnte man einmal für die komplette elektrische Umdrehung die
> Vd/q Werte über die Gleichungen berechnen und in einer LUT speichern und
> dann jagt man einen gleitenden Mittelwert mittig darüber um die Kanten
> raus zu bekommen.
> Die Frage ist wie lang man den Mittelwert macht und ob man die LUT nicht
> eher für einen Sektor macht und dann Ende-zu-Ende stätig. Also wenn die
> LUT in einer Schleife durchlaufen wird darf kein Sprung in den
> Ausgangswerten sein.

Das klingt interessant, ich überlege mir auch mal was.

Was ich noch sehe in meinem Paper und deinem ist, dass bei meinem Paper 
Vq_comp und Vd_comp von den Signalen her gerade vertauscht sind, bei dir 
ist Vq_comp das Signal, dass um den Nullpunkt ändert, bei meinem Paper 
ist Vq_comp das Wellenförmige Signal mit Offset. Was ist nun richtig?

: Bearbeitet durch User
von Bert S. (kautschuck)


Lesenswert?

Ich habe mal noch Vd_comp und Vq_comp getauscht, das scheint wesentlich 
besser zu sein, es gibt mir weniger Verzehrung und ich spüre auch diesen 
Übergang nicht mehr bei den Sektoren.

So wie ich das sehe, hat AN4863 wirklich gerade die beiden 
Kompensationspannungen vertauscht.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Bert S. schrieb:
> Ich habe mal noch Vd_comp und Vq_comp getauscht, das scheint wesentlich
> besser zu sein, es gibt mir weniger Verzehrung und ich spüre auch diesen
> Übergang nicht mehr bei den Sektoren.
>
> So wie ich das sehe, hat AN4863 wirklich gerade die beiden
> Kompensationspannungen vertauscht.

Das erklärt Einiges. Jetzt wo du es schreibst habe ich bei mir die 
Spannungen auch gedreht, ist aber schon lange her. Hätte da mal n 
Kommentar machen müssen.

Wie passt du Uerr bei dir? Kannst du einfach nur die Totzeit annehmen?

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Wie passt du Uerr bei dir? Kannst du einfach nur die Totzeit annehmen?

Genau, ich habe meine 200ns Todzeit genommen und die Signale sehen 
massiv besser aus. Denke Uerr passt mit dem 4/3 Faktor.

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


Lesenswert?

Ich habe Mal in meinem Code geguckt ich habe damals meine Sektor 
Berechnung um 180° gedreht aber dass er gibt ja ein völlig anderes 
Signal als Vd/q getauscht. Danke dafür, ich werde das nochmal genauer 
untersuchen.

Hast du die DTC jetzt durchgehend aktiv?

von Bert S. (kautschuck)


Lesenswert?

Alex E. schrieb:
> Hast du die DTC jetzt durchgehend aktiv?

Ich habe immer noch eine Einschaltgrenze von 1A für Iq

von Bert S. (kautschuck)


Lesenswert?

Was ich momentan noch als Problem habe:

Mit DTC schwingt der Positionsregler stärker bei einem neuen 
Referenzwert. Das Problem ist auch hier wieder das Umschalten von der 
Richtungsabhängigkeit. Bei einem positiven Iq_ref müssen die Vd_com und 
Vq_comp addiert werden und bei einem negativen Iq_ref subtrahiert, dies 
führt dann zu mehr Instabilität.

Ich habe folgendes bereits versucht:
- Implementierung einer Hysterese, dies scheint aber nur teilweise zu 
funktionieren, da ein Überschwinger durch das ein und ausschalten von 
DTC verstärkt wird.
- Implementierung einer Rampe um den Nullpunkt für Vd_comp und Vq_comp, 
das führt aber trotzdem zu ähnlicher Instabilität.

Evtl. ist auch der Unbelastete Motor das Problem, dort wird halt das 
Überschwingen verstärkt. Hast du evtl. noch eine andere Idee, wie man 
das perfekt stabil bekommt? Die Signale sehen soweit top aus und auch Id 
hat wesentlich weniger Spikes drauf.

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


Lesenswert?

Bei einer Positionsregelung würde ich das an die Drehzahl hängen also 
die Höhe der DTC wird von 10rpm bis runter zu 0 rpm abgeschwächt. Weil 
die Störungen ohne DTC bei niedrigen Drehzahlen in der Bandbreite der 
Stromregeler untergehen sollte.

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.