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?
...nicht Drehzahl, brauche Winkel. Und da darf Keiner verloren gehen...
>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
suche mal nach gray-code... Für die Umwandlung sind 2..3 Gatter-IC's notwendig.
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.
Vielen Dank für die zahlreichen Antworten. Werde es wohl so machen wie Falk vorgeschlagen hat.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.