Drehimpuls-Geber

Hardware

Hierbei handelt es sich um sehr praktische Eingabe-Schalter, die im Englischen als „Rotary Encoder“ bezeichnet werden. Bekannt sind diese Geber unter anderem als anschlagloser Lautstärkeregler im Autoradio. Sie beinhalten sowohl einen Taster als auch einen Geber, der bei jeder Drehung mehrere Impulse und die Information „rechts“ bzw. „links“ übergibt.

Wir haben durch einen günstigen Einkauf zwei Typen von Drehimpuls-Gebern bekommen:

  • Optischer/magetischer Typ mit 16 Impulsen/Raster
    mit angelöteter Mini-Platine, Flachbandkabel und rotem Stecker
  • Mechanischer Typ mit 30 Impulsen/Raster
    ohne Platine

Den angelöteten roten Stecker des optischen Gebers kann man aufgrund des Rastermaßes nicht verwenden. Diesen Stecker habe ich aufgebrochen (und dabei zerstört). Das dann bereits teilweise abisolierte Flachbandkabel habe ich an einen 6-poligen Pfostenstecker angelötet. Der Pin 1 ist dabei durch eine rote Markierung gekennzeichnet.

Den mechanischen Typ habe ich auf eine kleine Lochraster-Platine 9×5 Punkte gelötet. Als Anschlüsse dienen hier 2x 3-poliger Pfostenstecker. Wer mag, kann auch versuchen, diesen Typ direkt auf das Steck-Board zu stecken.

Anschluß an den Arduino

Die Anschlüsse des optischen Typs sind folgende:

  1. GND (rote Markierung)
  2. Taster
  3. Taster
  4. Phase A
  5. Phase B
  6. Vcc (10 mA @ 5V)

Hier als Beispiel der Anschluß der Phasen-Signale an Pins 9 und 10 und den Taster an Pin 8.

Die Anschlussbelegung des mechanischen Encoders ist:

  1. Taster
  2. (leer)
  3. Taster
  1. Phase A
  2. GND
  3. Phase B

Das hier verwendete Encoder-Library nutzt Interrupts, um die Auswertung zu beschleunigen. Aus diesem Grund sollte man (wenn möglich) einen oder beide Phasen-Signale auf Eingänge mit Interrupt-Funktion legen. Die Library funktioniert aber auch ohne die Verwendung von Interrupts.

Im Bild: Der Anschluß des mechanischen Encoders, ebenfalls mit den Phasen-Signalen an Pins 9 und 10 und dem Taster an Pin 8.

Der Taster schaltet gegen GND. Alle Arduino-Eingänge verwenden die interne Pull-Up-Funktion.

Software

Zum Glück haben sich schon Experten um den Anschluß eines Drehimpulsgebers Gedanken gemacht. Eine gute Fundstelle für solche Vorarbeiten ist häufig der "Arduino Playground".

Zur Programmierung ist die „High Performance Encoder Library“ zu empfehlen. Als Download steht momentan die Version 1.0 zur Verfügung, die man entweder von hier oder von der Original-Quelle laden kann.

Hier ist die Installationsanweisung für die Library.

Danach funktioniert dann folgendes leicht abgewandelte Beispiel:

BasicEncoder.ino
/* Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */
 
#include <Encoder.h>
 
// Change these two numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder myEnc(9, 10);
//   avoid using pins with LEDs attached
 
void setup() {
  Serial.begin(9600);
  while (!Serial) {}
  Serial.println("Basic Encoder Test:");
}
 
long oldPosition  = -999;
 
void loop() {
  long newPosition = myEnc.read(); /* >> 1 see text */
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }
}

Bei den Versuchen fällt auf, daß sich die Anzeige meist um 2 oder sogar um 4 Zähler verändert. Dies liegt an der Eigenschaft der Library, auch Halbschritte auszuwerten (siehe Erklärung auf der Webseite). Man erhält damit eine noch höhere Genauigkeit bei der Abtastung. Bei langsamer Drehung erkennt man, daß durch die Encoder auch ungerade Zwischenwerte erreicht werden können, die Encoder jedoch nicht in dieser Stellung einrasten.

Wenn dieses Verhalten in der Anwendung stört, empfielt es sich, die Auflösung zu halbieren, indem man den gelesenen read()-Wert halbiert bzw. viertelt.

Tipp: Wenn die Richtung der Werte nicht mit dem Uhrzeigersinn zunimmt, einfach mal die Phasen austauschen.

Wenn so weit alles geklappt hat, dann geht es hier weiter zu einer sinnvollen Anwendung des Drehgebers.

f11/technik/arduino/datasheets/rotary-encoder.txt · Zuletzt geändert: 2019/09/29 12:03 (Externe Bearbeitung)
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0