Forum: Mikrocontroller und Digitale Elektronik IC zum decodieren von Drehencoder


von Encoder (Gast)


Lesenswert?

Hallo,

vor ein paar Monaten hielt ich ein Datenblatt für ein IC zum 
debouncen/decodieren von Drehencodern in den Händen.

Ich find das ums verrecken nicht mehr.

Kann mir jemand einen Tipp geben?

Danke

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

nö, sorry. Einige µCs haben einen Quadratur.Decoder incl. Entprellung 
eingebaut, da habe ich die Links gelöscht.

von Otmar (Gast)


Lesenswert?

Hallo

Von Agilent gibts Quadrature Decoder/Counter Interface ICs HCTL-2000, 
HCTL-2016, HCTL-2020

Schöne Grüsse
Otmar

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

öhm
 warum einen eigenen Chip für eine Basicfunktion das geht in SW und 
belegt nur 2 IO-Pins, vorzugsweise IRQ. Wenn es eine HW Lösung sein muss 
tun es ein  paar Gatter?

Brauchst du nur die Richtung oder auch die Ticks und wie willst du das 
weiter verarbeiten?

von Mehmet K. (mkmk)


Lesenswert?

IRQ: ja, aber Timer-Interrupt.
http://www.mikrocontroller.net/articles/Drehgeber

von Falk B. (falk)


Lesenswert?

@ Winfried J. (Firma: Nisch-Aufzüge) (winne)

> warum einen eigenen Chip für eine Basicfunktion das geht in SW und

Manchmal braucht man aber etwas anderes, z.B. wenn es Drehgeber mit 
hoher Auflösung und Drehzahl sind.

von Christian R. (supachris)


Lesenswert?

Könnte man auch in einem kleinen CPLD/FPGA umsetzen, wenn man es extern 
braucht: 
https://www.mikrocontroller.net/articles/Drehgeber#Beispielcode_in_VHDL

von MaWin (Gast)


Lesenswert?

Encoder schrieb:
> vor ein paar Monaten hielt ich ein Datenblatt für ein IC zum
> debouncen/decodieren von Drehencodern in den Händen.

Das war wahrscheinlich schon mehrere Jahrzehnte alt.

http://www.lsicsi.com/encoders.htm
http://www.avagotech.com/ Ins Suchfeld HCTL eintippen.

Heute macht das der uC nebenbei

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

von ich (Gast)


Lesenswert?

MaWin schrieb:
> Heute macht das der uC nebenbei

Im Normalfall hast du schon Recht, aber Falk hatte oben schon darauf 
hingewiesen, daß es auch Sonderfälle gibt.

Beispielsweise du hast einen Incrementalgeber mit 5000 Strichen, und der 
dreht sich mit 10.000rpm, dann hast du 833.000 Flanken pro Sekunde, die 
du auswerten mußt. Kommt vielleicht nicht so oft vor wie ein Drehgeber 
für das Menue eines LCDs, aber es kommt vor.

von m.n. (Gast)


Lesenswert?

Mehmet Kendi schrieb:
> IRQ: ja, aber Timer-Interrupt.
> http://www.mikrocontroller.net/articles/Drehgeber

Alles falsch :-) Es geht auch mit IRQ und ganz schnell.
Beitrag "4-fach Flankenauswertung per Interrupt mit ATmega48/88"

von Ulrich (Gast)


Lesenswert?

Die Frage ob die Drehgeber besser über Interruptfähige Pins oder einen 
Timerinterrupt ausgewertet werden hängt vor allem davon ab, ob die 
Signale Prellen könne. Bei prellenden Signalen geht es einfacher mit dem 
Timer - bei sauberen Signalen geht es besser mit direkten Interrupts.

Für extra ICs zur Auswertung besteht kaum noch Bedarf da es genügend µCs 
mit passendem Hardware-Interface gibt, und meistens auch die 
Softwarelösung geht.

von Amateur (Gast)


Lesenswert?

Mit den Kollegen von der HTCL-Fraktion bin ich mal ganz furchtbar aufs 
Maul geplumpst.
Hatte die Hoffnung auf einen, vom µP und seinen Unterbrechungen, 
unabhängigen Positionszähler. Typischer Fall von denkste.
Im Datenblatt hat aber alles prima Funktioniert...

von m.n. (Gast)


Lesenswert?

Amateur schrieb:
> Mit den Kollegen von der HTCL-Fraktion bin ich mal ganz furchtbar aufs
> Maul geplumpst.

Erzähl mal mehr, oder kannst Du jetzt nicht mehr sprechen.
Selber hatte ich mit den Teilen keine Probleme.

von MaWin (Gast)


Lesenswert?

m.n. schrieb:
> Es geht auch mit IRQ und ganz schnell.

Was natürlich grober Unsinn ist, denn es funktioniert nur mit prell- und 
zitterfreien Drehgebern, und ist durch die blödsinnige Wahl der 
Interrupts nicht "ganz schnell" sondern etwa 4 mal langsamer als mit 
pollender Abfrage.

Aber wer partout die falsche Lösung sucht, wird dort fündig.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> Manchmal braucht man aber etwas anderes

Wie immer in diesem Forum: Alle zanken sich und der "Autor: Encoder 
(Gast)" hat noch gar nicht gesagt, um wieviele Flanken pro Sekunde es 
sich bei ihm handelt.

Beim STM32F4 z.B. muss ich mich gar nicht zwischen Interrupt oder 
Polling entscheiden; der entprellt und zählt direkt den Timer-Counter 
hoch und runter. Die CPU kann dabei schlafen.

von m.n. (Gast)


Lesenswert?

MaWin schrieb:
> Was natürlich grober Unsinn ist, denn es funktioniert nur mit prell- und
> zitterfreien Drehgebern,

Ach! Bei kritischen Signalen schaltet man je nach Signalquelle einfach 
ein RC-Glied vor die Eingänge: z. B. 10k und 1nF. Und schon passt es.
Man darf sich eben nur nicht bockig stellen :-)

von ich (Gast)


Lesenswert?

m.n. schrieb:
> ein RC-Glied vor die Eingänge: z. B. 10k und 1nF.

Und machst dir damit die Flanken zur Sau.
Wenn du mit dem Fahrrad zu schnell fährst, schiebst du auch einen Stock 
in die Speichen, oder?

von Ulrich (Gast)


Lesenswert?

Das Problem mit dem Prellen kann man Hardwaremäßig abfangen, ist aber 
extra Aufwand. Der Code hat aber noch ein anderes Problem: es wird nur 
jeweils eine Richtung der Flanken ausgewertet, und dabei kann es beim 
Umdrehen zu einem Schrittfehler kommen - wenn der Sensor um die eine 
Flanke Pendelt wird fortlaufend in eine Richtung gezählt.

Man kann es auch richtig machen mit Interrupt, aber das geht anders - 
eigentlich genau so wie die Routine im Timer Interrupt, nur das halt 
nicht zu festen Zeiten ausgewertet wird sondern wenn was passier. Da 
geht dann auch mit z.B. einem Pin-Change Interrupt der beide Eingänge 
zusammen auswertet.

von m.n. (Gast)


Lesenswert?

ich schrieb:
> Und machst dir damit die Flanken zur Sau.

Der von mir benutzte AVR (andere µCs sind dabei nicht ausgeschlossen) 
hat einen eingebauten 'Eber' bzw. Schmitt-Trigger-Eingang.
Wie gesagt, alles kein Problem, wenn man nicht bockig ist.

Ulrich schrieb:
> Der Code hat aber noch ein anderes Problem: es wird nur
> jeweils eine Richtung der Flanken ausgewertet,

Das darf man nicht machen. Es müssen immer beide Flanken beachtet 
werden.

von ich (Gast)


Lesenswert?

m.n. schrieb:
> Das darf man nicht machen. Es müssen immer beide Flanken beachtet
> werden.

Siehst du, und mit Polling wertet man vier Flanken aus (beide Kanäle).
Kannst du natürlich mit Pinchange auch machen, dann brauchst du aber 
zwei Interrupts. Und das wäre ja dann der Gipfel an Blödsinn...

von MaWin (Gast)


Lesenswert?

m.n. schrieb:
> Und schon passt es.

Nur wenn die Eingänge Schmitt-Trigger haben.

> Man darf sich eben nur nicht bockig stellen :-)

Der einzige, der bockig ist "ich will aber Interrupts auch wenn alle 
sagen daß das blöd ist", bist du.

von m.n. (Gast)


Lesenswert?

Ach Kinners. Ich weiß ja, dass viele Fliegen auf einem Haufen sitzen und 
sich richtig wohlfühlen.

Mein Link von oben zeigt ein Stückchen Programm, mit dem man Flanken im 
2µs Abstand per Interrupt oder im 2,5µs Abstand mit polling auswerten 
kann.
Kann sich doch jeder frei entscheiden, wie er es gerne hätte.

ich schrieb:
> Siehst du, und mit Polling wertet man vier Flanken aus (beide Kanäle).
> Kannst du natürlich mit Pinchange auch machen, dann brauchst du aber
> zwei Interrupts. Und das wäre ja dann der Gipfel an Blödsinn...

Du hast Dir also meinen Code garnicht angesehen oder nicht verstanden: 
ist mir egal, such Dir was aus.

MaWin schrieb:
> Nur wenn die Eingänge Schmitt-Trigger haben.

Welcher Prozessorhersteller kann sich heute denn noch erlauben, digitale 
Eingänge ohne Schmitt-Trigger vorzusehen. Bei der heutigen 
Stromspartechnik ginge das gleich voll daneben.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ursprünglich hießen diese Encoder-ICs 74LS2000. Die bereits genannten
HCTL2xxx sind die CMOS-Varianten bzw. Erweiterungen davon.

Zum Thema Interrupts oder Sampling: Schon in grauer Vorzeit, als die
o.g. ICs noch hipp waren, hatte man schon erkannt, dass eine
zuverlässige Decodierung der Drehgeber bis in hohe Frequenzbereiche mit
klar definierter oberer Grenzfrequenz nur per Sampling möglich ist.
Deswegen haben alle diese ICs einen CLK-Eingang, über den der
Sample-Takt bereitgestellt wird.

von ich (Gast)


Lesenswert?

Yalu X. schrieb:
> Ursprünglich hießen diese Encoder-ICs 74LS2000. Die bereits
> genannten
> HCTL2xxx sind die CMOS-Varianten bzw. Erweiterungen davon.
>
> Zum Thema Interrupts oder Sampling: Schon in grauer Vorzeit, als die
> o.g. ICs noch hipp waren, hatte man schon erkannt, dass eine
> zuverlässige Decodierung der Drehgeber bis in hohe Frequenzbereiche mit
> klar definierter oberer Grenzfrequenz nur per Sampling möglich ist.
> Deswegen haben alle diese ICs einen CLK-Eingang, über den der
> Sample-Takt bereitgestellt wird.

Auch dieses Argument wird bei ihm leider wirkungslos verhallen. Er will 
nun mal seine Interrupts und läßt sich nicht davon abbringen.

Jedem Tierchen sein Pläsierchen :-)

von Ulrich (Gast)


Lesenswert?

m.n. schrieb:
> Das darf man nicht machen. Es müssen immer beide Flanken beachtet
> werden.

Genau das ist das Problem mit dem Code. Immerhin hat der den Fehler 
selber erkannt. Es könnte ja ggf. noch funktionieren, denn man die 
beiden Interrupts parallel belegt und einen Pin dazu - das gibt dann 
wenigstens keine Zählfehler, braucht aber 3 Pins und gibt nur die halbe 
Auflösung.

Gerade der Pinchange Interrupt bietet die Möglichkeit das ganze mit nur 
einer ISR zu machen. Das einzige was die Hardware in Sachen Entprellen 
machen muss ist eine zu hohe Interruptrate zu verhindern.

von m.n. (Gast)


Lesenswert?

Yalu X. schrieb:
> Ursprünglich hießen diese Encoder-ICs 74LS2000. Die bereits genannten
> HCTL2xxx sind die CMOS-Varianten bzw. Erweiterungen davon.

SN74LS2000 habe ich noch einen hier, die wärmen immer gut; vom THCT2000 
noch zwei ebenso wie vom CF32006FN (drei Kanäle). Oder falls jemand den 
CF32007NT braucht, verschenke ich auch gerne eine Stange. Soviel dazu.

Und da ich absolut beschränkt agiere, nehme ich jetzt pro Kanal einen 
ATmega48, der mir Dreh- und Inkrementalgeber bis 100kHz auswertet. Das 
ist zumeist auch oberhalb der Grenzfrequenz der Geber.
Neuerdings werde ich den ATtiny441 verwenden - noch kleiner und 
ebenfalls mit 100-fach Auswertung für sin/cos-Signale. Kosten Pro Kanal 
< 1€ avec plaisir.

von ich (Gast)


Lesenswert?

m.n. schrieb:
> Und da ich absolut beschränkt agiere, nehme ich jetzt pro Kanal einen
> ATmega48,

Und was hat das jetzt mit dem Thema Polling oder Interrupt zu tun?

von M. N. (Gast)


Lesenswert?

Ulrich schrieb:
> Gerade der Pinchange Interrupt bietet die Möglichkeit das ganze mit nur
> einer ISR zu machen.

Ursprünglich hatte ich den INT0-Eingang eines AVRs favorisiert, da 
dieser die höchste INT-Priorität nach /Reset besitzt. Auch reicht es für 
die Auswertung von mechanischen Drehgebern nur einen Interrupt-Eingang 
zu verwenden, um pro Rastpunkt genau einen Zählschritt zu erreichen.

In einem zweiten Schritt habe ich dann einen PCINTx-Eingang probiert, 
wobei ebenfalls nur eine Phase die ISR auslöst, zusätzlich aber noch die 
Option bietet, eine 4-fach Auswertung durchzuführen. Damit kann man auch 
kleinere AVRs verwenden, bei denen nur irgendein PCINTx zur Verfügung 
steht. Mit einem 8-pol. Tiny könnte man sich das "Dekoder-IC" selbst 
erstellen.

Da ich ein bißchen Zeit hatte, dies auch umzusetzen und zu testen, habe 
ich die Ergebnisse in die Codesammlung gestellt: 
Beitrag "Drehgeber per Interrupt auswerten, AVR"

von Thomas (Gast)


Lesenswert?

Hallo Zusammen,

wenn ihr einen schönen Baustein zum verarbeiten von Encoder wollt.

LS7366R

Dieser arbeitet zu hunderten bei uns ein relevanten Baugruppen ohne 
Probleme.

Und alles was langsamer läuft geht direkt im AVR.

PS: Alle alle die einen Encoder entprellen wollen.
    Wenn ein Encoder prellt, dann ist er eh für nichts zu gebrauchen.
    Lieber einen Euro mehr aus geben und was verlässliches haben.

Gruß Thomas

von MaWin (Gast)


Lesenswert?

Thomas schrieb:
> Alle alle die einen Encoder entprellen wollen.
>     Wenn ein Encoder prellt, dann ist er eh für nichts zu gebrauchen.

Es gibt keinen Encoder der nicht prellt.

Mechanisch per Kontakt oder Reed-Kontakt abgetastete prellen sowieso,
und photoelektrisch oder so abgetastete haben den prelltypisch 
wiederholten Flankenwechsel nur eines Kanals durch Vibrationen bei 
langsamerem Drehtempo in einer Frequenz, die nicht von der Drehzahl 
sondern nur von der Vibrationsfrequenz abhängt.

Decoder müssen also so oder so mit Prelleffekten klarkommen, deren 
Frequenz nicht mal vorherzusehen ist.

Aber das ist ja kein Problem, wenn man nicht so blöd ist und meint, 
unbedingt die Flanken auswerten zu müssen.

von m.n. (Gast)


Lesenswert?

Thomas schrieb:
> wenn ihr einen schönen Baustein zum verarbeiten von Encoder wollt.
>
> LS7366R
>
> Dieser arbeitet zu hunderten bei uns ein relevanten Baugruppen ohne
> Probleme.

Das ist sicherlich eine Lösung für alle Fälle. Auch, wenn man nur 
mechanische Geber anschließen möchte: 2 x pullup-Widerstand und beide 
Phasen direkt an die Eingänge. Pro Raststellung erhält man zwei 
Schritte, die man durch Division verringern kann: meinetwegen per 
Schiebeoperation oder auch in float :-)

Nachteil bei allen zuvor genannten Dekoder-ICs ist die langfristige 
Beschaffbarkeit. Seinerzeit war es immer eine Rennerei, die Teile 
aufzutreiben, oder das Layout an die neueren Ausführungen anzupassen.
Mit aus diesem Grunde habe ich mir vor 20 Jahren den H8/3003 angelacht, 
der schon einen Hardware-Dekoder auf dem Chip hatte und Signale mit weit 
über 1MHz verarbeiten konnte. Danach kam dann der H8S/.... mit zwei 
Quadraturdekodereingängen, und dann die H8SX mit insgesamt vier davon.
Heute liegen die STM32F407 mit insgesamt sechs Kanälen ganz vorne. Zu 
Kosten von <5€ (im LQFP100-Gehäuse) erhält man eine langfristig 
verfügbare µC-Lösung.

Ein kleiner Nachteil der neueren µCs ist die Versorgungsspannung von 
3,3V, wobei die Inkrementalgeber weiterhin mit 5V arbeiten. 
Pegelkonverter sind folglich Pflicht; sofern man sin/cos-Signale 
auswerten möchte, ist bei der zumeist gebotenen Mehrfachauswertung noch 
eine Synchronisierung der Phasenlage erforderlich. Für den festen Einbau 
ist das kein Problem; bei nach dem Einschalten zusteckbaren Gebern kann 
die Zuordnung nicht 100% sichergestellt sein.
Das sind aber Feinheiten, die für Freunde des billigen Einkaufens nie zu 
Tage treten werden.

Wenn man dann die ganzen Erfahrungen zusammenfaßt, lande ich, wie 
geschrieben, bei einem AVR! Hinreichend schnelle Zählfrequenz im 
100kHz-Bereich, optionale sin/cos-Interpolation direkt mit 5V Signalen 
und über IIC-Bus für viele Kanäle zu geringen Kosten ausbaubar. Der 
synchrone IIC-Bus benötigt keine konstante CPU-Taktfrequenz, weshalb 
auch der int. Oszillator, auf max. Frequenz eingestellt, völlig 
ausreichend ist.

von Georg (Gast)


Lesenswert?

m.n. schrieb:
> ist bei der zumeist gebotenen Mehrfachauswertung noch
> eine Synchronisierung der Phasenlage erforderlich.

Du meinst wahrscheinlich ein Abgleich auf gleiche Amplitude.

Gruss Georg

von m.n. (Gast)


Lesenswert?

Nein, die Amplituden sind nicht das Problem.

Nimmt man den µC-internen Quadraturdekoder mit 4-fach Auswertung, dann 
ist die Auswertelogik beim Einschalten zurückgesetzt und man kann sich 
an Hand der beiden Phasensignale errechnen, in welchem Quadranten der 
Geber steht und wie die analoge Interpolation stattfinden muß. Das geht 
gut.

Steckt man hingegen den Geber in ein eingeschaltetes Gerät ein, kann man 
nicht 100% sicher sein, dass die zuvor genannte Zuordnung eindeutig 
hergestellt ist. In der Regel funktioniert es, muß es aber nicht.

Ich habe hier sin/cos-Geber, die mit 0,1µm Auflösung arbeiten; die 
Genauigkeit liegt bei 0,2µm (lt. Meßprotokoll des Herstellers).
Sofern die Auswertung passend ist, werden die 0,1µm-Schritte mit hoher 
Wiederholgenauigkeit geliefert. Ist die Auswertung jedoch aus dem Tritt, 
gibt es ebenfalls eine Änderung um 0,1µm und alle 25 Schritte einen 
Sprung um 2,5µm. Sofern der Anwender eine Prüfung auf 
Wiederholgenauigkeit macht und dieses 'Verhalten' bemerkt, gibt es 
richtig Haue ;-)

Um wieder auf den AVR zu kommen: da kann man durch passende 
Programmierung diese Problematik umgehen. Hinzu kommt noch, die 
Gebersignale trotz schwankender Amplituden, Nulllinien und Hysteresen 
richtig auszuwerten; aber es geht!
Weiter möchte ich es nicht ausführen; bei dem vielen Geschrei im 
Hintergrund gehen die Feinheiten sowieso unter.

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.