Hallo zusammen,
ich arbeite gerade an einem Projekt mit BLDC Motoren, die 3 Hall
Sensoren als Lage bzw. Geschwindigkeitssensor benutzen. Ich kenne mich
mit feldorientierter Regelung sehr gut aus und versuche gerade auch hier
eine feldorientierte Regelung aufzusetzen. Deshalb versuche ich einen
einigermaßen präzisen Winkel der Hallsensoren zu bekommen.
Ich lese gerade die Sensoren ein und mache auch einen Offset Abgleich
für jeden Hallsektor bzw. Hallzustand. Ich drehe also zum Beispiel im
open-loop mit d-Spannungsvorgabe und gleiche dann den erkannten
Hallwinkel daran an.
Das mache ich jetzt zum Beispiel bei 30Hz elektrischer Drehfrequenz.
Mir ist jetzt aufgefallen, dass sich bei 100Hz mein Offset leicht
verschiebt (ca.10%). Wenn ich mir eine Hallzustände anschaue, sehe ich
auch, dass diese sich mit Drehzahl mehr oder weniger ein bisschen
mitbewegen.
Ich habe leider keine Erfahrung mit BLDC Motoren, die mit Hall-Sensoren
funktionieren und wollte mal fragen, ob jemand weiß, ob dieses Verhalten
"normal" ist und ich den physikalischen Effekt nicht verstehe, oder ob
ich etwas an der Software falsch mache. Ich lese die Sensoren mit 20kHz
aus und drehe sehr langsam (30Hz bzw 100Hz elektrischer Frequenz)
deshalb denke ich, dass der Drift durch das auslesen nicht so groß ist.
VG
xone92 schrieb:> Ich lese die Sensoren mit 20kHz aus und drehe sehr langsam (30Hz bzw> 100Hz elektrischer Frequenz) deshalb denke ich, dass der Drift durch das> auslesen nicht so groß ist.
Ich gehe mal davon aus, dass von den Hallsensoren die Rotormagnete
direkt erfasst werden (kein Sensormagnet am Wellenende und die von dir
genannten Dreh-Frequenzen sind alle elektrisch).
1. Versatz durch PWM-Schattenregister
Üblicherweise werden die im aktuellen PWM-Zyklus errechneten
Steuersignale erst in der darauffolgenden PWM-Periode tatsächlich
gestellt. Allein dadurch hast du einen zeitlichen Versatz der gerade
eingelesenen Hallsignale zum gestellten PWM-Pattern von einer
PWM-Periode.
Der daraus resultierende Winkelfehler beträgt bei deinem 20kHz PWM-Task
bei 30Hz schon 0,54° und bei 100Hz 1,80°.
xone92 schrieb:> Ich drehe also zum Beispiel im open-loop mit d-Spannungsvorgabe
2. Versatz durch nacheilenden Rotor
Für das Drehmoment, das sich ausbilden muss, um den Rotor mitzuziehen,
muss sich aus Rotorsicht ein q-Strom ergeben. Der kommt dadurch
zustande, dass der durch Reibung, Cogging... gebremste Rotor in deiner
Betriebsart dem d-Feld im Winkel ein wenig nacheilt. Wenn man annimmt,
dass die Reibung usw. proportional zur Drehzahl ist, erhälst du
zusätzlich ein von der Drehzahl abhängigen negativen Fehlwinkel.
Im Normalbetrieb, wo man Drehmoment mit q macht, muss ggf. nur der
Effekt 1 kompensiert werden.
mfg mf
PS, und nicht wenig davon...
Es empfiehlt sich, die Hallsensor-Flanken über Timerhardware einzulesen
und damit einen Observer zu füttern, der dir einen zu Beginn der
PWM-Periode passenden "genauen" Winkel liefert. Ansonsten kann von
Flanke bis Einlesen eine Latenz von bis zu einer PWM-Periode bestehen,
der dir einen Effekt wie obig 1, aber nicht deterministisch proportional
zur Drehzahl beschert.
Völlig außen vor gelassen habe ich statische oder schlimmer
Feldstärke-Abhängige Latenzzeit eines Hallsensors von
Feldänderung-bis-Flanke.
Uuund es kann u.U. 50% meiner Ergüsse nichtig sein, wenn du lineare
Hallsensorik hast. Da würde ich die 3 Signale (minus VCC/2) per
Clarke-inverse in ab-Signale wandeln und einen Observer drauf laufen
lassen, wie er z.B. in
https://www.nxp.com/docs/en/application-note/AN3943.pdf (das Ding mit
Kreuzprodukt sind/cos, nach der Resolver-Demodulation) beschrieben ist.
Oder halt ein simpler atan2, aber der ist allergisch auf punktuelle
Störungen und gibt da ggf. gleich absurde Fehlwinkel aus.
mfg nf
Hallo Achim,
vielen dank für deine Antwort!
Ich habe mal Bilder mit dem Oszi aufgenommen, vielleicht kannst du dann
noch mehr damit anfangen https://imgur.com/a/S9ZYfGI
In Grün ist da open-loop Vorgabesignal, in Gelb der Interpolierte
Hallwinkel, bzw der Hallwinkel zum zugehörigen Hallsektor.
Wie würdest du denn (ohne observer) den Hallwinkel bestimmen, bzw. den
Offset? Ich habe einen Hardwaretimer zu flankenerkennung, um mir die
Geschwindigkeit und auch die Zeit in einem Hallsektor sehr genau
bestimmen zu können, werfe aber keinen Interrupt, sondern lasse meinen
Controltask mit 20kHz laufen und ledes dort den entsprechenden Zustand
an den GPIOs aus und dann aus die Register der Hardwaretimer, um den
Winkel zu interpolieren.
VG
xone92 schrieb:> ledes dort den entsprechenden Zustand an den GPIOs aus und dann aus die> Register der Hardwaretimer, um den Winkel zu interpolieren.
Dann ist das schon das richtige.
"Hochauflösendes" Winkelsignal brauchst du nur bei Sinuskommutierung. Da
bin ich aber von ausgegangen, weil du was von d-Spannung geschrieben
hast.
Aus dem Zeitpunkt der letzten Hallflanke und der Geschwindigkeit kannst
du dir den Winkel errechnen, der zum (gemittelten) Zeitpunkt der letzten
Strommessung vorgelegen haben muss. Ach ja, haste ja, "interpolierter
Hallwinkel".
Den resultierenden Spannungsvektor musst du dann halt in die Zukunft
weiter drehen, damit er zum richtigen Zeitpunkt gestellt wird.
xone92 schrieb:> Ich habe mal Bilder mit dem Oszi aufgenommen, vielleicht kannst du dann> noch mehr damit anfangen https://imgur.com/a/S9ZYfGI> In Grün ist da open-loop Vorgabesignal, in Gelb der Interpolierte> Hallwinkel, bzw der Hallwinkel zum zugehörigen Hallsektor.
Die Bilder musst du (leider) selber interpretieren. Woher weiß ich, ob
ich hier nicht indirekt die Konkurrenz meines derzeitigen Arbeitgebers
unterstütze? ;)
Mit meinem obigen Geschreibsel solltest du schon in der Lage sein, zu
bewerten was da passiert.
Vielleicht hilft es, ein Fehlwinkel vs. Geschwindigkeit in einem
Diagramm aufzutragen. An der Kurve siehst du dann ob du einen statischen
und einen linear von der Geschwindigkeit abhängigen Offset hast.
mfg mf
Hallo Achim,
danke nochmal für die Antwort. Ganz genau, ich würde gerne
Sinuskommutierung machen. Auf einen observer wollte ich erstmal
verzichten, dass kann ich dann immer noch später mal machen. Ich wollte
erstmal verstehen, wie man es prinzipiell macht bei Hallsensoren.
Wenn ich eine q-Spannungsvorgabe mache, sehe ich dass mein abgeglichener
Winkel ca. 90° versetzt ist, das bestätigt mir eigentlich eher dass ich
alles richtig mache.
Keine Sorge, es ist nur ein Hobbyprojekt für mein e-Kettcar für meinen
Sohn.
Hab vor langer Zeit mal E-technik studiert, bin aber nur noch
informatiker jetzt ;)
VG