Forum: Mikrocontroller und Digitale Elektronik BLDC Hall Sensor Offset


von xone92 (Gast)


Lesenswert?

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

von Achim M. (minifloat)


Lesenswert?

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

: Bearbeitet durch User
von Achim M. (minifloat)


Lesenswert?

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

: Bearbeitet durch User
von xone92 (Gast)


Lesenswert?

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

von Achim M. (minifloat)


Lesenswert?

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

von xone92 (Gast)


Lesenswert?

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

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.