Forum: Mikrocontroller und Digitale Elektronik Zähler für Drehencoder (A/B Signal)?


von Tony S. (tss)


Lesenswert?

Hallo zusammen :)

Nach dem ich mit Internetrecherchen nicht fündig wurde, habe ich mich 
doch nun mal hier angemeldet und euch direkt zu fragen (hoffe das mein 
Beitrag im richtigen Unterforum ist).

Folgendes Problem:
Mir liegt ein Drehencoder vor (also ein handbetriebener mit 
Rastpunkten), welcher ein A/B Signal ausgibt. Meine Frage nun, gibt es 
hierfür einen Zählerbaustein, welcher das Signal auswertet und 
entsprechend hoch oder runterzählt?
Jetzt gibt es ja Zähler (z.B. 4bit), welche nach erreichen des höchsten 
Wertes (z.B. 15) wieder auf 0 springen. Das dürfte nicht sein, er sollte 
dann einfach aufhören zu zählen. Die ausgegebene Zahl sollte auch binär 
dargestellt werden.

Wollte das Benutzen eines µC vermeiden und es mit einem einfachen IC 
(ggf. auch zwei oder drei) einfach realisieren.

Hoffentlich kann mir jemand helfen und im Voraus dafür schon mal Danke.

von MaWin (Gast)


Lesenswert?

Tony S. schrieb:
> gibt es
> hierfür einen Zählerbaustein, welcher das Signal auswertet und
> entsprechend hoch oder runterzählt?

Sicher,
 http://www.lsicsi.com/encoders.htm 
(LS7082/7083/7084/7182/7183/7166/7266/7366)
 http://www.avagotech.com/docs/5988-5895EN 
(HCTL2000/2016/2020/2022/2032)
 http://lost-contact.mit.edu/afs/eos.ncsu.edu/dist/xact_step/online/onlindb/xapp012.pdf

aber wozu ?

Du brauchst zum auslesen eh einen uC, der kann dann auch gleich zählen.

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

von Peter II (Gast)


Lesenswert?


von Tony S. (tss)


Lesenswert?

Erstmal Danke für beide Antworten


MaWin schrieb:

> (HCTL2000/2016/2020/2022/2032)
>
> aber wozu ?
>
> Du brauchst zum auslesen eh einen uC, der kann dann auch gleich zählen.

Die HCTL-Reihe sieht ganz gut aus. Mir geht es darum, das der (hoch- 
oder runter-) gezählte Wert binär über die Pins ausgegeben wird (bei 
8Bit wären es 8Pins).
Wir haben nämlich mit den Gedanken gespielt den Drehencoder zu benutzen 
um Lastwiderstände parallel zu schalten (Lastsimulation für 
Elektroniken). Bei 8 Bits wären das 8 Widerstände (1Ohm, 2, 4, ...). Die 
digitalen Ausgänge des ICs sollten dann besten Falls Logic-Level MOSFETs 
ansteuern, welche dann die Widerstände schalten.
Dadurch, das wir bei 8-16V auch bis zu 12A ziehen, ist eine günstige, 
fertig hergestellte Widerstandsdekade etwas unpassend, da diese ja in 
der Regel nicht den Strom abkönnen. (Ich hoffe an der Stelle werde ich 
nicht gesteinigt das ich einen völlig falschen Gedankengang habe und es 
einfacher geht.)

Deswegen wollte ich auf einen µC verzichten, da es vom Gedankengang 
eigentlich recht einfach klingt und ein µC einfach zu "overpowered" wäre 
für solch eine einfache Aufgabe. Wollte halt so wenig Aufwand wie 
möglich dafür betreiben.

von nixundnul (Gast)


Lesenswert?

Tony S. schrieb:
> µC einfach zu "overpowered" wäre

Auf den ersten Blick, ja.
Die üblichen Encoder haben keinen Anschlag, da ist mit dem Zeiger am 
Knopf nix. Und beim Einschalten morgens ist die Stellung des Knopfes 
auch unbekannt. Vielleicht brauchst Du dann eine Anzeige als 
Rückmeldung. 1 Schritt entspricht 4 Flanken, und das Ding kann auf einer 
Flanke durchaus nachprellen oder unsicher schalten.
µC ist 1 Chip, auch schnell mal erweitert. Mit Sonder-Hardware wird es 
teurer und aufwendiger.

von Tony S. (tss)


Lesenswert?

nixundnul schrieb:
>
> Vielleicht brauchst Du dann eine Anzeige als Rückmeldung.

Da hatte ich mir auch schon Gedanken gemacht. Als einfachste Lösung 
dachte ich mir, das ich die 8Bits/IC-Ausgänge auf 2 7-Segment Anzeigen 
aufteile. Wäre in dem Moment zwar eine hex-Anzeige die mir sagt wo ich 
mich befinde, aber gibt bestimmt auch Möglichkeiten, es auf Dezimal 
umzuwandeln.

> kann auf einer Flanke durchaus nachprellen oder unsicher schalten.

Würde also bedeuten, das er mir eventuell zu weit zählt als gedreht, 
oder?
Wäre an der Stelle vielleicht auch nicht tragisch, wenn es nicht 
dauerhaft vorkommt.
Einen Schalter/Taster lässt sich ja mit einem RC-Glied entprellen. Würde 
sowas ähnliches auch hier funktionieren?

Ein große Auswahl an Bauteilen hätte ich hier, würde also nicht gleich 
in Kosten ausarten. Nur ein µC fehlt im Sortiment.

Und nicht falsch verstehen, möchte den Vorschlag mit dem µC definitiv 
nicht madig reden. Interssiert mich halt nur ob man es nicht komplett 
"hardwaremäßig" realisieren kann ohne extra noch eine Software 
realisieren zu müssen.

Danke für deinen Beitrag.

: Bearbeitet durch User
von hp-freund (Gast)


Lesenswert?

Wenn Du es schaffst deinen Zähler mit etwas Logik am Überlauf zu 
hindern, dann ist das eine interessante Idee:

http://www.edn.com/design/systems-design/4416528/Adaptive-rotary-encoder-distinguishes-fine-from-coarse

von Georg (Gast)


Lesenswert?

Tony S. schrieb:
> Interssiert mich halt nur ob man es nicht komplett
> "hardwaremäßig" realisieren kann ohne extra noch eine Software
> realisieren zu müssen.

Klar kann man das, z.B. mit einem CPLD. Da kannst du genau das 
realisieren was du beschrieben hast, bloss ist es, was das nötige 
Knowhow betrifft, auch nicht einfacher als ein µC.

HCT2000 et al habe ich jahrelang benutzt, die sind aber längst obsolet, 
schwer beschaffbar, teuer und ausserdem für die Wegemessung an Maschinen 
gedacht, mit Zählraten im hohen kHz-Bereich, und sie sind 
Peripheriebausteine für Prozessoren, alleine sind sie zu nichts zu 
gebrauchen - Der Zählerinhalt muss mit Lesebefehlen ausgelesen werden.

Georg

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?


von Axel S. (a-za-z0-9)


Lesenswert?

Tony S. schrieb:
> Mir liegt ein Drehencoder vor (also ein handbetriebener mit
> Rastpunkten), welcher ein A/B Signal ausgibt. Meine Frage nun, gibt es
> hierfür einen Zählerbaustein, welcher das Signal auswertet und
> entsprechend hoch oder runterzählt?

Ich habe das vor Jahren mal gemacht. Der Lautstärkesteller in meinem 
Vorverstärker ist spannungsgesteuert (TDA1074) und die Steuerspannung 
kommt nicht von einem Poti, sondern von einem R2R-DAC, der an einem 
Zähler hängt, wobei der Zähler mit einem Drehencoder gesteuert wird.

Realisiert habe ich das mit 2 Stück CD4029. Drehrichtungsauswertung ganz 
klassisch mit XOR-Gatter (CD4030) und RC-Glied. Der 4029 hat ja einen 
Richtungs- und einen Zähleingang. Mein Encoder ist allerdings optisch 
(Lochscheibe und zwei Lichtschranken). Ein mechanischer Encoder muß erst 
entprellt werden.

Die Begrenzung des Zählers in den Endstellungen ist etwas trickreich. Da 
ich nur 6 Bit brauchte, ist Bit #7 (QC des zweiten 4029) auf die /PRESET 
Eingänge der beiden 4029 zurückgeführt. Und die 4 Eingänge des unteren 
4029 und die beiden ersten Eingänge des oberen sind mit UP/DOWN 
verbunden. So setzt sich der Zähler beim Überlauf nach oben auf 0x3F, 
beim Überlauf nach unten auf 0x00.

von Harald W. (wilhelms)


Lesenswert?

Axel Schwenke schrieb:

> Realisiert habe ich das mit 2 Stück CD4029. Drehrichtungsauswertung ganz
> klassisch mit XOR-Gatter (CD4030) und RC-Glied. Der 4029 hat ja einen
> Richtungs- und einen Zähleingang. Mein Encoder ist allerdings optisch
> (Lochscheibe und zwei Lichtschranken). Ein mechanischer Encoder muß erst
> entprellt werden.

Bei handbetätigten Encodern mit Zähleranzeige sind m.E. auch die
"Einfachencoder" per XOR oder D-Flipflop möglich. Man kann ja
nachkorrigieren, wenn der Zählerstand nicht stimmt. Für Encoder
zur Positionsbestimmung sollte man besser die aufwänderige Methode
nach Tutoriom verwenden.
Gruss
Harald

von Wolfgang A. (Gast)


Lesenswert?

nixundnul schrieb:
> 1 Schritt entspricht 4 Flanken, und das Ding kann auf einer
> Flanke durchaus nachprellen oder unsicher schalten.

Tony S. schrieb:
> Würde also bedeuten, das er mir eventuell zu weit zählt als gedreht,
> oder?

Lass dich von nixundnul nicht verunsichern. Ein Drehencoder liefert an 
seinen Ausgängen 2-Bit Graycode. Wenn der richtig ausgewertet, kann der 
dahinter hängende Zähler durch Nachprellen nicht zu weit zählen. 
Allenfalls zählt der beim Prellen vor und zurück. Und was mit "unsicher 
schalten" gemeint ist, bleibt etwas unklar und damit auch die möglichen 
Folgen.

Die Sache mit den 4 Flanken pro Schritt, würde ich auch nicht für bare 
Münze nehmen. Je nach dem, wo beim Drehencoder die Rastungen liegen, 
kann man jede Flanke oder zumindest jede zweite Flanke verwenden, um 
damit stabil einen Zähler anzusteuern.

von Anja (Gast)


Lesenswert?

Tony S. schrieb:
> Folgendes Problem:
> Mir liegt ein Drehencoder vor (also ein handbetriebener mit
> Rastpunkten), welcher ein A/B Signal ausgibt.

warum nimmst Du nicht einfach einen hexadezimalen Kodierschalter:

https://www.buerklin.com/default.asp?event=ShowArtikel%2817G307%29&context=ArtikelSubsetId:0;SE:Kodierschalter;PHNode:SE,swvt,4954;ALArtikelProSeite:25&l=d&jump=ArtNr_17G307&ch=96680

Gruß Anja

von Tony S. (tss)


Lesenswert?

Anja schrieb:
> warum nimmst Du nicht einfach einen hexadezimalen Kodierschalter:

An sich keine schlechte Idee, doch leider ist mir eine 4Bit-Auflösung zu 
grob, sollte 6Bits sein bzw. maximal 8.

Thomans Holmes:
> http://www.mikrocontroller.net/articles/Drehgeber
>
> ganz unten

Wenn ich das richtig sehe, wertet also die Schaltung (ganz unten die) 
das AB-Signal in ein Zählimpuls Signal und ein Richtungssignal (Auf oder 
Ab) aus, oder irre ich mich?
Könnte man dann danach zwei von Axel Schwenke erwähnten 4029 dranhängen? 
Diese können ja hoch und runterzählen und lassen sich zusammen 
verschalten um eine 8Bit-Auflösung zu bekommen. Würde das langsam zum 
Ziel meiner Aufgabestellung führen?


Muss an der Stelle noch erwähnen das ich von ICs nicht so erfahren bin 
wie ihr. Komme eher aus dem Bereich der LabVIEW-Programmierung, daher 
muss ich nach euren Beiträgen erst immer wieder nachschauen was die 
erwähnten Bauteilen nun wirklich können und übersehe sicherlich auch mal 
das eine oder andere Merkmal.

von Harald W. (wilhelms)


Lesenswert?

Tony S. schrieb:
> Anja schrieb:
>> warum nimmst Du nicht einfach einen hexadezimalen Kodierschalter:
>
> An sich keine schlechte Idee, doch leider ist mir eine 4Bit-Auflösung zu
> grob, sollte 6Bits sein bzw. maximal 8.

Dann nimm zwei Schalter.

von Tony S. (tss)


Lesenswert?

Harald Wilhelms schrieb:
> Dann nimm zwei Schalter.

Klar wäre das umsetzbar, aber dann muss ich zwangsläufig an zwei 
Schaltern drehen, ein einziger wäre komfortabler. Zudem möchte ich auch 
vermeiden wenn ich ständig nach rechts drehen würde (aufwärts), dann von 
F auf 0 wieder zu fallen.

von Axel S. (a-za-z0-9)


Lesenswert?

<seufz> Werde dir doch erstmal klar, was du wirklich brauchst.

Warum muß es für 6-8 Bit eigentlich ein Drehencoder sein? Ein 
ordentliches Poti reicht auch. Einfach einen 8-Bit ADC mit parallelen 
Ausgängen dahinter und fertig ist die Laube. Braucht keine Anzeige, hat 
Anschläge an den Endwerten.

Einen Drehencoder würde ich heute nicht mehr anders als mit einem µC 
auswerten. Weil man da z.B. die Entprellung einfach in Software machen 
kann. Und Komfort-Features wie eine Anzeige (gern auch dezimal), 
dynamische Progression oder der Stellumfang sind einfach ein paar Zeilen 
mehr Code oder Konstanten in einer Headerdatei.

von Jobst M. (jobstens-de)


Lesenswert?

Tony S. schrieb:
> Deswegen wollte ich auf einen µC verzichten, da es vom Gedankengang
> eigentlich recht einfach klingt und ein µC einfach zu "overpowered" wäre
> für solch eine einfache Aufgabe. Wollte halt so wenig Aufwand wie
> möglich dafür betreiben.

Der µController ist der geringste Aufwand. Sowohl vom Kostenfaktor, als 
auch vom Hardwareaufwand. Die Entwicklung der SW ist vermutlich 
schneller abgeschlossen, als die Entwicklung der entsprechenden HW 
dauern würde.

Der µController übernimmt Dekodierung und Ausgabe des Wertes
 - binär an 8 Pins
 - als analoger Wert (als PWM, mit der ein Widerstand auch geschaltet 
werden könnte - wenn für das Problem ausreichend.)
 - auf einem Display

und kann ausserdem
 - den zuletzt eingestellten Wert speichern und beim einschalten wieder 
herstellen.
 - an beliebiger Stelle den Wertebereich begrenzen
 - vorgespeicherte Werte ausgeben und Kurven fahren
 - den eingestellten Wert an einen PC übermitteln oder von diesem Werte 
empfangen
 - ...

Sicherlich ist das eine Aufgabe, mit der ein µController nicht 
sonderlich ausgelastet ist. Aber man muss einen µController auch nicht 
auslasten. Er wird nicht billiger dadurch.

Für mich eine ideale Aufgabe für einen µController ...


Gruß

Jobst

von Peter D. (peda)


Lesenswert?

Jobst M. schrieb:
> Für mich eine ideale Aufgabe für einen µController ...

Sehe ich auch so.
Du hast 2 Eingänge und 8 Ausgänge, das sind 10 IO-Pins.
Ein ATtiny24 im DIP14 hat 12 IOs, ist also bestens geeignet.

von Jobst M. (jobstens-de)


Lesenswert?

Axel Schwenke schrieb:
> Ein ordentliches Poti reicht auch. Einfach einen 8-Bit ADC
> mit parallelen Ausgängen dahinter und fertig ist die Laube.

Dann kann man ja auch gleich ganz analog bleiben:
1
 o----,--------------------------,
2
      |                          |
3
      |                          |
4
      |               / |        P
5
      |             / + |------->O
6
       \|         /     |        T
7
        |--------       |        |
8
      />|         \     |        |
9
      |             \ - |--,     |
10
      |               \ |  |     |
11
      |                    |     |
12
      +--------------------'     |
13
      |                          |
14
      R                          |
15
      |                          |
16
 o----'--------------------------'


Gruß

Jobst

von Tony S. (tss)


Lesenswert?

Hallo zusammen,

nach allem wollte ich mich mal wieder melden.

Ein µC ist nach all den Antworten hier klar die beste Lösung, da der µC 
mehr Möglichkeiten bietet, man damit flexibler bleibt und sicherlich 
paar Extras dazu bauen kann, wenn es von Nöten ist.

Nichtsdestotrotz wollte ich einfach zum Lernen/Weiterbilden es mit ICs 
ausprobieren. Wollte einfach etwas Erfahrung sammeln.

Habe es jetzt folgendermaßen aufgebaut.
Mit der unten abgebildeten Schaltung von:
http://www.mikrocontroller.net/articles/Drehgeber
habe ich mittels 74hc174 und 74hc86 das AB-Signal ausgewertet.

Ein Takt für den 74hc174 generiere ich mit einem 4093 und einem 
RC-Glied.

Gezählt wird mit zwei 4029. Damit habe ich die 8Bit Auflösung.

Es funktioniert soweit auch gut. Es kommt schon vor das er doppelt 
zählt, wobei ich sagen muss das der Drehencoder etwas grottig ist. 
Vielleicht verhilft hier ein besserer Drehencoder Abhilfe.
Für mein Ziel ist diese Schaltung vollkommen ausreichend und gut 
arbeitend. Werde mir nur nochmal Gedanken machen wie ich eine passende 
Anzeige realisiere, um nicht binär von den LEDs ablesen zu müssen.
Wenn ich Zeit finde, werde ich es wahrscheinlich doch nochmal mit einem 
µC lösen.

Soweit auch erstmal ein Danke an alle die sich hier beteiligt haben.

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.