Forum: Mikrocontroller und Digitale Elektronik Aus Motorlage die AB-Signale für einen Inkrementalzähler erzeugen


von Micha (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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.

von Micha (Gast)


Lesenswert?

...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????

von oszi40 (Gast)


Lesenswert?

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?

von Micha (Gast)


Lesenswert?

...nicht Drehzahl, brauche Winkel. Und da darf Keiner verloren gehen...

von winkel (Gast)


Lesenswert?

>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

von Pieter (Gast)


Lesenswert?

suche mal nach gray-code...
Für die Umwandlung sind 2..3 Gatter-IC's notwendig.

von oszi40 (Gast)


Lesenswert?

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...

von Micha (Gast)


Lesenswert?

@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?

von Klaus (Gast)


Lesenswert?

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

von Pieter (Gast)


Lesenswert?

>>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.

von Falk B. (falk)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Micha (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.