Drehencoder

Inhalt

  • Dreh-Encoder als Endlos-Regler

Einführung

Dreh-Encoder sind Input-Module, die endlos in die eine oder andere Richtung gedreht werden können (im Unterschied zu Potentiometern, die in ihrer Drehung begrenzt sind). Sie werden überall dort eingesetzt, wo die absolute Dreh-Ausrichtung nicht ausschlaggebend ist, sondern nur die Anzahl der zurückgelegten Drehschritte (sie werden daher auch als Inkrementalgeber bezeichnet).

Funktionsweise von Drehncodern

Im Gegensatz zu Potentiometern geben Encoder keine analoge Spannung, sondern eine definierte Folge von binären Pulsen an zwei Anschlüssen aus. Im Wesentlichen sind die beiden Anschlüsse nichts anderes als zwei Kontakte, die sich schließen und öffnen können – ähnlich den Tastern. Die Drehposition entscheidet, welche Kontakte verbunden sind. Anhand der Wechsel zwischen den Zuständen kann man erkennen, ob der Encoder eine Vorwärts- oder Rückwärtsbewegung ausführt:

Modifiziert von: Von MatthiasDD - Eigenes Werk, CC0, https://commons.wikimedia.org/w/index.php?curid=19086154
Modifiziert von: Von MatthiasDD – Eigenes Werk, CC0, https://commons.wikimedia.org/w/index.php?curid=19086154

Beispiel Rückwärtsbewegung gegen den Uhrzeigersinn (eng. counter clockwise -CCW):
Bei der Rückwärtsbewegung werden die Zeitpunkte von links nach rechts gelesen. Bei Zeitpunkt 1 erfolgt für A ein Wechsel von LOW auf HIGH. Ausgang B liegt auf LOW, daher kann angenommen werden, dass hier eine Rückwärtsbewegung passiert ist.

Beispiel Vorwärtsbewegung im Uhrzeigersinn (engl. clockwise – CW):
Bei der Vorwärtsbewegung müssen die Zeitpunkte von rechts nach links gelesen werden. Beim Zeitpunkt 3 erfolgt von rechts kommend für A ein Wechsel von LOW auf HIGH. Ausgang B liegt an dieser Stelle aber auf HIGH. Daher kann hier auf eine Vorwärtsbewegung geschlossen werden.

Anschlüsse eines Drehencoders

Ein klassischer Drehencoder besitzt 3 Anschlüsse: A,B und Common. Die Anschlüsse A und B sind wie Taster zu benutzen und können daher mit einem (Arduino-internen) PullUp-Widerstand versehen werden. Common wird mit der Masse (GND) verbunden.

Drehencoder_Steckplatine

Beispiel 1: Drehencoder simpel

Folgendes Beispiel dient dazu, das Prinzip des Drehencoders zu illustrieren. In der Praxis ist es fast immer besser, eine Bibliothek zu verwenden (siehe Beispiel 3), da auch Encoder vom Bouncing-Problem betroffen sind.

Folgendes Beispiel nimmt darauf keine Rücksicht:

Code-Analyse

Um festzustellen, in welche Richtung der Encoder gedreht wurde genügt es, eine Flanke eines Pins zu analysieren. In diesem Beispiel wird überprüft ob an Pin A eine steigende Flanke auftritt. In diesem Fall wird der Zustand von Pin B ausgelesen um zu erkennen, in welche Richtung gedreht wurde und dann dementsprechend eine Zählvariable erhöht oder erniedrigt.

Beispiel 2 (extern): Verwendung von Interrupts

Die Drehbewegung von Encodern kann durchaus sehr schnell ausgeführt werden. Bei der Ausführung des normalen Programmcodes kann es daher passieren, dass manche Zustandswechsel nicht erkannt werden, weil sie wieder vorbei sind, wenn Pins ausgelesen werden. Oft werden daher Interrupts verwendet, um auch wirklich jeden wichtigen Zustandswechsel zu erkennen.

Auf der Arduino Playground Seite für Encoder gibt es eine Menge von Beispielen, wie ein Encoder mit Interrupts angewandt werden können.

Beispiel 3: Anwendung einer Library

Die wahrscheinlich einfachste Möglichkeit einen Drehencoder einzusetzen ist die Verwendung einer hierfür spezialisierten Bibliothek, wie die Encoder Bibliothek von Paul Stoffregen (die auch via Library Manager installierbar ist).

Sie kümmert sich um das Bouncing Problem und kann mit oder ohne Interrupts verwendet werden. Hier das Beispiel der Anwendung

 

Zusammenfassung

Drehencoder sind praktische Input-Elemente für inkrementielle Werte. Intern verwenden sie zwei Kontakte, die wechselseitig geöffnet und geschlossen werden können. Am einfachsten werden sie mit einer Bibliothek eingesetzt, da diese das Contact-Bounce Problem behandeln und auch mit Interrupts arbeiten.

Weiterführende Links

 

2 Gedanken zu „Drehencoder“

  1. Folgede Frage zu Drehencoder, Beispiel 1 + Erklärung:

    Bei „Nicht-Drehen“ sind sowohl PinA als auch PinB mittels Pullup-Wdst auf „High“.
    Bedeutet, dass bei Drehen PinA bzw. PinB auf „Low“ gehen, also umgekehrte Logik? (fallende Flanke)
    (wenn dem so ist, müsste man StateA und B invertieren)

    1. Der simple Code hier nimmt nur auf einen Zustandswechsel (nämlich nur A von LOW auf HIGH) Rücksicht. Intelligenterer Code würde alle 4 möglichen Wechsel berücksichtigen und entsprechend die Richtung bestimmen.

      Für die Hardware-Encoder, die ich euch gegeben habe, ist das aber nicht relevant, da bei jedem Einrastpunkt alle 4 Zustände durchlaufen werden.

      Generell ist es so, dass man nichts invertieren muss, da die Zustandswechsel nur relativ definiert sind – d.h. es macht keinen Unterschied ob man sich den Wechsel von LOW auf HIGH ansieht oder umgekehrt. Letztendlich muss man nur wissen, wie Output B aussieht, um auf die Drehrichtung rückschließen zu können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.