mikrocontroller.net

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


Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
120° = 90° + 30°

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: rotzfrech (Gast)
Datum:

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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, analoge Hallsensoren die ein Sinus-Signal ausgeben.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!)

Autor: Frank Esselbach (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bereits fort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.