Forum: Mikrocontroller und Digitale Elektronik Winkel mittels zweier um 120° versetzter Hall-Sensoren bestimmen


von Mark (Gast)


Lesenswert?

Hallo,

ich stehe gerade etwas auf dem Schlauch: Ich soll den Winkel eines 
BLDC-Motors bestimmen und habe hierzu nur die drei um jeweils 120° 
verschobenen Signale der integrierten Hallsensoren zur Verfügung. Wie 
kann ich hieraus möglichst einfach den Drehwinkel bestimmen? Ein 
Mikrocontroller mit ADC-Eingängen steht hierfür zur Verfügung. Wären die 
Sensoren um 90° zueinander versetzt, kann ich einfach den 
arctan(Signal1/Signal2) nehmen, aber bei 120°?

Mark

von Jupp (Gast)


Lesenswert?

120° = 90° + 30°

von Mark (Gast)


Lesenswert?

Vielen Dank für die qualifizierte Aussage, nur hilft mir das nicht 
weiter. Ich komme wirklich gerade nicht weiter, wenn ich die beiden 
Messwerte habe und den resultierenden Winkel zwischen 1 und 360° 
bestimmen will.

von rotzfrech (Gast)


Lesenswert?

die Hallsensoren sind doch digital, oder ?
Dann kannst Du den Winkel nur in 30° Schritten bestimmen.

von Mark (Gast)


Lesenswert?

Nein, analoge Hallsensoren die ein Sinus-Signal ausgeben.

von gast (Gast)


Lesenswert?

Soweit ich weiß, sind die Sensoren analog, doch das zu erfassende Signal 
wird mittels Interruptflanke an einem mC Pin erfasst, so dass man 
tatsächlich nur eine 30° zur Verfügung hat. Am besten schaust Du doch 
einfach mal in eine Application Note (es gibt unzählige, jeder mC 
Hersteller hat mind. eine mit Hall-Sensoren!!!)

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wenn es sich nicht um spezielle werksseitig kalibrierte 
Winkelgeber-Versionen handelt, wird es schwierig mit der Geanuigkeit. 
Ich denke, es wird ohne Look-Up-Table nicht oder nur mit erheblichem 
Aufwand klappen.

Ansonsten: 2 Hall-Sensoren --> 2 ADC-Kanäle ergeben die zwei Koordinaten 
in einer großen Matrix, aus der du dann den zugehörigen WInkel ausliest. 
In der Firmware könnte man gleich einen Teach-In-Lernmodus einbauen.

Frank

von Mark (Gast)


Lesenswert?

Das Problem ist, dass sie alle die Hallsignale digital erfassen (analoge 
halt über Komparator) und dann den Motor in Block-Kommutierung 
bestromen. Wird mit einem Sinus bestromt, werden die Zwischenschritte 
über die Zeit interpoliert. Dafür ist jedoch eine konstante Drehzahl 
nötig, die ich nicht haben werde.

von Mark (Gast)


Lesenswert?

@ Frank:

Wie würdest du die Tabelle denn sinnvollerweise aufbauen? Die PWM später 
läuft mit ca. 10bit Auflösung, mehr Zwischenschritte machen also auch 
bei der Winkelbestimmung nicht Sinn.

von yalu (Gast)


Lesenswert?

Wenn der erste Sensor mit dem Messwert s1 am Winkel 0°, der zweite mit
dem Messwert s2 am Winkel 120° liegt und der Rotor 1 Polpaar hat, kann
der Winkel des Rotors folgendermaßen berechnet werden:
1
winkel = atan2(s1+2*s2, s1*sqrt(3));

Die Konstante sqrt(3) braucht natürlich nur einmal berechnet werden.
Hat der Rotor n Polpaare, muss der Winkel noch durch n dividiert und
die Anzahl der Perioden mitgezählt und berücksichtigt werden, um ein
eindeutiges Ergebnis zu erhalten.

Bei zwei um 120° versetzten Sensoren wird das Ergebnis stärker von
Messfehlern beeinflusst als bei 90°. Wenn du damit leben kannst, ist
alles ok, wenn nicht, müsste man alle drei Messwerte bei der Messung
berücksichtigen. Dann wird aber die Berechnung komplizierter.

Das Ergebnis ist natürlich nur so genau wie die Messungen. Wichtig
hierbei ist, dass die Sensoren tatsächlich ein sauberes Sinussignal
liefern und beide Signale die gleiche Amplitude haben.

Wenn dies nicht der Fall ist und du lieber mit Tabellen arbeiten
möchtest, wie es Frank vorgeschlagen hat, würde ich evtl. so vorgehen,
dass abhängig von der Winkelstellung des Rotors immer nur einer der
drei Sensoren ausgwertet wird, nämlich derjenige, dessen Signal in
einem Bereich von ±30° um einen der beiden Nullpunkte des Sinussignals
liegt. Da dort die Steigung des Signals am größten ist, ist die
Genauigkeit höher als für die jeweils anderen beiden Sensoren. Jeder
der drei Sensoren bekommt also eine eindimensionale Umsetzungstabelle
für diesen ±-30°-Bereich. Läuft der Rotor aus diesem Bereich hinaus,
wird auf den nächsten Sensor umgeschaltet.

Dieses Vorgehen erspart ein nebenbei speicherintensives zwei- oder gar
dreidimensionales Array zur Umsetzung der Werte.

von Ralf (Gast)


Lesenswert?

Hi Mark,

Du könntest deine drei 120° phasenverschobenen Signale (a, b, c) in ein 
orthogonales Ersatzsystem (alpha, beta) umrechnen und dann mittels atan2 
den Lagewinkel berechnen:

alpha = a
beta = 1/sqrt(3)(a + 2*b)
phi = atan2(beta,alpha)

Du benötigst also nur zwei AD-Signale da das dritte Signal redundant 
ist. (a+b+c=0)

Hierzu kannst Du auch mal unter dem Stichwort Clarke Transformation 
googlen.

Gruß,
Ralf

von bereits fort (Gast)


Lesenswert?

viel zu kompliziert


die antwort wahr schon da der Korrektur wert ist zum arctan = tan(30°)
Dieser wird vor der berechnung von arctan aufadiert bzw abgezogen (Stich 
wort Offsetverschiebung).
Und schön ist.

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.