Forum: Mikrocontroller und Digitale Elektronik Zustände bei Drehgeber


von Jens (Gast)


Lesenswert?

Hallo,

ich beschäftige mich gerade mit Drehgebern und deren Auswertung mit
einem µC. Ich bin allerdings gerade etwas verwirrt denn in
verschiedenen Quellen (u. a.
http://dse-faq.elektronik-kompendium.de/dse-faq.htm) las ich, daß ein
solcher Drehgeber 4 Zustände annehmen kann, nämlich:

0: ab (Spur A LOW, Spur B LOW)
1: Ab (Spur A HIGH, Spur B LOW)
2: aB (Spur A LOW, Spur B HIGH)
3: AB (Spur A HIGH, Spur B HIGH)

(Quelle: Link oben)

Soweit gut, nur wenn ich mir mein hier liegendes Exemplar anschaue und
durchmesse, dann nimmt der genau zwei Zustände an:

0: ab
1: AB

Hab ich ein defektes Teil erwischt oder gibt es auch solche Typen? Wie
kann ich jetzt die Drehrichtung ermittel, offenbar nur so, indem ich
mir anschaue, welche Spur zuerst in den anderen Zustand wechselt. Ich
sehe jetzt nur das Problem, daß beide Kontakte wohl prellen werden und
der Wechsel der beiden Spuren erfolgt zeitlich sehr kurz
hintereinander. Gibt es da einen sinnvollen Weg der sicheren
Auswertung?

Das Programm in der Codesammlung habe ich schon gesehen, ich möchte es
allerdings zuerst gerne selbst probieren.

Vielen Dank.

Gruß
Jens

von Hias (Gast)


Lesenswert?

hallo!
die Zustände Ab sowie aB treten beim übergang von AB auf ab bzw ab auf
AB auf.
sie sind also zwischenzustände die man auswerten muss um die
drehrichtung herauszubekommen.
hias

von ...HanneS... (Gast)


Angehängte Dateien:

Lesenswert?

Hi...

Schau dir mal in diesem Beitrag
http://www.mikrocontroller.net/forum/read-4-37992.html#87902
die Beschreibung des Algorithmus an.

Ich habe mal versucht, das in ASM umzusetzen (Anhang), habe es aber
noch nicht mit Hardware getestet. Es kann also noch buggy sein.

...

von Hias (Gast)


Lesenswert?

ups was vergessen:

deiner is also ned kaputt.

auswerten kannst du die Drehrichtung
in dem du den sog Grey_Code auswertest.
ich hab das so gemacht, dass ich alle ms den zustand der beiden pins
abfrage. Wenn sich dabei was ändert. schau ich in einer .db Tabelle
nach, wie sich der zähler verändert.
Diese Tabelle hab ich nich mehr im Kopf. Is aber ganz einfach wenn du
dir das hier anschaust.
http://www.elektrik-trick.de/sminterf/sminterf.htm (erste zeichnung)
Hias

von ...HanneS... (Gast)


Lesenswert?

Auch vergessen:

Viele Encoder rasten nur in jeder zweiten Stellung.

...

von Dominik (Gast)


Lesenswert?

Für einen C-Code siehe auch:

http://www.mikrocontroller.net/forum/read-4-37992.html

Dominik

von Andi (Gast)


Lesenswert?

Bei den Drehgebern die alle 2 Änderungen eine Rastung haben braucht man
eigentlich nur einen der Kanäle "beobachten".

Z. B. überwacht man nur Kanal A auf Pegeländerung.
Ändert sich Kanal A von low auf high oder von high auf low prüft man
den Zustand von Kanal B.
Ist B = A wurde nach links gedreht.
Ist B <> A wurde nach rechts gedreht.
Bei einer Linksdrehung kann es dann ab oder AB sein bei einer
Rechtsdrehung Ab oder aB.

Hier das Verfahren:
A² = letzter, gemerkter A-Zustand

   A = PinA
   B = PinB
   If A <> A² then
      A² = A
      If A = B then left else right

Entprellen läßt sich das mit aktivierten Pullups und 10nF an den beiden
Kanal-Pins oder man macht eine Zeitbasierte Entprell-Software mit 1ms
vor der Drehgeberauswertung.

Gruß
Andi

von Jens (Gast)


Lesenswert?

Ok, ich habs jetzt auch hinbekommen. Nur habe ich folgenden Fehler
gemacht. Im Datenblatt des Drehgebers (so einer von Alps) steht, daß
die maximale Prellzeit 5ms beträgt. Also dachte ich mir, daß ich den
Timer so einstelle, daß er alle 10ms den Drehgeber abfragt; ich glaubte
so auf der sicheren Seite zu sein. Nur leider wird der Geber dann nur
100 mal pro Sekunde abgefragt und bei schnellem Drehen habe ich nicht
alle Übergänge mitbekommen. Jetzt fragt der Timmer jede ms ab (wie auch
Hias oben geschrieben) und es funktioniert wunderbar. Im Prinzip lese
ich bei jedem Timerinterrupt den Drehgber ein und vergleiche dies mit
dem vorherigen Wert. Über ein zweidimensionales Array hole ich mir dann
+1 oder -1, so wie es in der DSE FAQ auch gemacht wurde.

Interessant finde ich den zweiten Ansatz von Peter Dannegger ohne
Tabelle. Das schaue ich mir bei Gelegenheit mal an.

Jedenfalls vielen Dank für eure Antworten.

Gruß
Jens

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.