Hallo zusammen,
ich möchte aus den Hall-Sensorsignalen eines Motors (3 Stücke) den
Drehwinkel desselben bestimmen. Hierzu soll ein Inkrementalzähler
(AB-Zähler) verwendet werden.
Bin nun auf der Suche nach einem IC / Encoder, der die drei
Hall-Sensorsignal in AB-Signal wandelt, so dass ich die Winkel mit einem
Inkrementalzähler zählen kann.
Gruß Micha
Micha schrieb:> Hallo zusammen,>> ich möchte aus den Hall-Sensorsignalen eines Motors (3 Stücke) den> Drehwinkel desselben bestimmen. Hierzu soll ein Inkrementalzähler> (AB-Zähler) verwendet werden.
Naja, deine Skizze ist ein wenig falsch. Bei einem BLDC-Motor haben die
drei Hallsignale eine andere Form. Es sind drei Rechtecksignale mit 50%
Tastverhältnis und 60° Phasenverschiebung. Die Auflösung dieser Sensoren
ist damit SEHR grob, die reicht nur für den Trapezbetrieb.
> Bin nun auf der Suche nach einem IC / Encoder, der die drei> Hall-Sensorsignal in AB-Signal wandelt, so dass ich die Winkel mit einem> Inkrementalzähler zählen kann.
Gibt es AFAIK nicht, muss man selber mit einem CPLD oder Mikrocontroller
bauen. Das lohnt sich aber nicht, denn real kann man nur 6 Zustände
direkt dekodieren. Das kann man aber besser und einfacher, wenn man die
drei Hallsignale direkt auswertet, so wie es der Rest der Welt macht.
Einzig wenn du analoge Resolver hättest, welche ein analoges
SIN/COS-Signal ausgeben, könnte man dieses in ein AB-Signal mit
Gray-Code umwandeln, was dann wieder per Dekoder und Zähler ausgewertet
werden kann. Aber auch das ist doppelt gemoppelt, denn da kann man auch
gleich in der Auswertung des Resolvers das Ergebnis als Digitalwert zur
Verfügung stellen. Der Umweg über GrayCode-Codierung und Dekodierung
entfällt.
...danke für deine Antwort. Die Skizze sollte auch nur das Prinzip
verdeutlichen. Die Lösung mit einem PLD habe ich schon, ist mir aber zu
aufwendig. Die Auflösung der Winkelmessung über die Hallsignale ist für
meinen Anwendungsfall völlig ausreichend, zumal nach dem Motor noch ein
Getriebe ist.
Ähm.....vielleicht noch nen Tipp, wie "der Rest der Welt das macht".
Wie gesagt, ich will nur den Drehwinkel mit den Hallsignalen zählen.
Mein µC hat für AB-Signal direkt Zähler, daher die Idee die Hallsignale
in AB zu wandeln. Ich könnte auch die Hallsignale direkt am µC auflegen
und sie direkt auswerten, habe aber Bedenken bei höheren Drehzahlen.
Vielleicht hat noch jemand ne Idee????
Micha schrieb:> Bedenken bei höheren Drehzahlen
Bei 30 000 U/min *3 kannst Du ja überlegen ob nicht EIN Hallsensor
auswerten reicht, um die Drehzahl zu erfassen?
>Wie gesagt, ich will nur den Drehwinkel mit den Hallsignalen zählen.
Falk hat ja geschrieben, dass genau das problematisch ist.
Die Signale haben eine sehr grobe Winkelauflösung.
Welche Auflösung stellst Du Dir vor? Resp. wieviele Pulse pro Umdrehung
denkst Du gewinnen zu können aus den drei Signalen?
( ) 2 Pulse
( ) 3 Pulse
( ) 6 Pulse
( ) 100 Pulse
( ) 1024 Pulse
Pieter schrieb:> gray-code...
Man könnte mit einem Binärzähler die Impulse vorbereiten, aber EINEN
Impuls pro Umdehung würde ich doch ganz gern einzeln auswerten, um eine
Grundstellung zu erkennen. Je nach mechanischer Last könnte ja auch mal
was schief gehen...
@winkel
...habe 6 Impulse (2 Polpaare) damit 12 Flanken bei einer
Getriebeübersetzung von 1:26,3785 und damit 6*2*26,3785 = 316,542
Ereignisse pro Umdrehung am Getriebe. Ergibt ein Auflöung von ca. 1,14
°. Reicht mir völlig....
@Pieter
...werde mal nach gray-code...sollte diesen dann aber auch wieder nach
AB wandeln?
Micha schrieb:> Wie gesagt, ich will nur den Drehwinkel mit den Hallsignalen zählen.
Warum zählen? Die drei Hallsensoren sind ein Absolutencoder mit einer
Auflösung von 60°. Da gibt es nichts zu zählen, den Winkel kann man
direkt aus den 3 Bits ablesen. Die Kombinationen 0b000 und 0b111 gibt es
nicht, die restlichen Werte sind der Winkel mit einer Genauigkeit von
+-30°.
Bei einem Absolutencoder gibt es keine verlorenen Positionen.
MfG Klaus
>>Auflöung..
übliche BLDC haben 48 Schritte/Umdrehung
Wenn 3000Umdrehungen / min reichen, sind das 50 Schritte pro sec.
Als Abtastrate reicht dann 100Hz.
Getriebe hat Spiel, für Position zu ungenau.
Nimm einen kleinen MC, 3x3Pin Eingang, 3x Gray-Code-Tabelle mit
Auswertung und Umsetzung in AB-Impulse. Oder lasse den MC auch gleich
zählen.
Das Prog wird relativ simpel.
Micha schrieb:> Ähm.....vielleicht noch nen Tipp, wie "der Rest der Welt das macht".
OK.
> Wie gesagt, ich will nur den Drehwinkel mit den Hallsignalen zählen.> Mein µC hat für AB-Signal direkt Zähler, daher die Idee die Hallsignale> in AB zu wandeln. Ich könnte auch die Hallsignale direkt am µC auflegen> und sie direkt auswerten, habe aber Bedenken bei höheren Drehzahlen.
Mal gerechnet?
10.000 U/min ~ 166 U/s
Deine Hallsensoren machen 6 Codeschritte/U, macht 1000 Codes/s. Wenn du
mit einem Timer-Interrupt diese drei Signale mit sagen wir 2-5kHz
abtastest, ist alles im grünen Bereich. Mit diesen drei Signalen kann
man ebenso wie mit den AB-Signalen einen Zähler in Software hoch- und
runter zählen, denn auch das ist ein Gray-Code.
https://de.wikipedia.org/wiki/Gray-Code
Ein 5kHz Timer-Interrupt, zumal dort nicht wirklich viel passiert, ist
selbst für einen kleinen AVR kein Thema. CPU-Last unter 3% würde ich mal
sagen.
Wie man das macht, ist verschieden. Der klassische Ansatz wäre eine
Tabelle mit 2^6=64 Einträgen. Dort kann man auch kodieren, ob ein
Schrittfehler vorliegt, damit kann man im realen System diese erkennen
und anzeigen. Der Index der Tabelle wird aus den aktuellen drei Bits
(Bit 0-2) und den Bits der letzten Messung (Bits 3-5) gebildet. That's
it!
Das Aufstellen der Tabelle ist eine gooooohte ÖÖÖÖÖbung fööör den
Schööööler ;-)
Ein anderer Ansatz ist der Vergleich von letztem und aktuellem Wert per
XOR. Dabei darf nur eine einzige 1 rauskommen. Bei welchem Bit diese
erscheint zeigt an, ob ein Schritt vor oder zurück gemacht wurde. Sind
mehr als ein Bit verschieden, war das ein Schrittfehler.
Pieter schrieb:>>>Auflöung..> übliche BLDC haben 48 Schritte/Umdrehung
Unsinn, BLDC sind keine Schrittmotoren. BLDC haben im einfachsten Fall
drei um 120 Grad phasenversetzte Hallsensoren zur Erkennung der
Rotorlage und werden einfach per Trapezbetrieb angesteuert. Reicht für
viele Anwendungen.
Bessere BLDC haben einen hochauflösenden Drehgeber auf der Achse und
können ähnlich einem Synchronmotor (was sie technisch ja sind!) mit
SIN/COS angesteuert werden, das gibt ein gleichmäßigeres Drehmoment und
man kann auch einen Servo draus bauen. Sensorlose BLDC brauchen eine
Mindestdrehzahl, damit die Erkennung der Rotorlage mittels
Induktionsspannung funktioniert.