Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
f11:technik:arduino:datasheets:rotary-encoder [2012/10/20 12:03] dm8mb weteres Bild |
f11:technik:arduino:datasheets:rotary-encoder [2019/09/29 12:03] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | === Drehimpulse-Geber === | + | ===== Drehimpuls-Geber |
- | == Hardware == | + | ==== Hardware |
- | Hierbei handelt es sich um sehr praktische Eingabe-Schalter, | + | Hierbei handelt es sich um sehr praktische Eingabe-Schalter, |
Sie beinhalten sowohl einen Taster als auch einen Geber, der bei jeder Drehung mehrere Impulse und die Information " | Sie beinhalten sowohl einen Taster als auch einen Geber, der bei jeder Drehung mehrere Impulse und die Information " | ||
Zeile 10: | Zeile 10: | ||
Wir haben durch einen günstigen Einkauf zwei Typen von Drehimpuls-Gebern bekommen: | Wir haben durch einen günstigen Einkauf zwei Typen von Drehimpuls-Gebern bekommen: | ||
- | * Optischer Typ 16 Impulse/Raster \\ mit angelöteter Mini-Platine, | + | * Optischer/ |
- | * Mechanischer Typ 30 Impulse/Raster \\ ohne Platine | + | * 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. | 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. | ||
Zeile 18: | Zeile 18: | ||
{{ : | {{ : | ||
- | Den mechanischen Typ habe ich auf eine kleine Lochraster-Platine 9x5 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. | + | Den mechanischen Typ habe ich auf eine kleine Lochraster-Platine 9x5 Punkte |
{{: | {{: | ||
{{ : | {{ : | ||
- | == Anschluß an den Arduino == | + | ==== Anschluß an den Arduino |
Die Anschlüsse des optischen Typs sind folgende: | Die Anschlüsse des optischen Typs sind folgende: | ||
Zeile 33: | Zeile 33: | ||
- Vcc (10 mA @ 5V) | - Vcc (10 mA @ 5V) | ||
- | == Software == | + | 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: | ||
+ | - Taster | ||
+ | - (leer) | ||
+ | - Taster | ||
+ | |||
+ | - Phase A | ||
+ | - GND | ||
+ | - 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 [[http:// | ||
+ | |||
+ | Zur Programmierung ist die "High Performance Encoder Library" | ||
+ | Als Download steht momentan die Version 1.0 zur Verfügung, die man entweder von | ||
+ | {{: | ||
+ | |||
+ | [[f11: | ||
+ | |||
+ | Danach funktioniert dann folgendes leicht abgewandelte Beispiel: | ||
+ | |||
+ | <code c BasicEncoder.ino> | ||
+ | /* Encoder Library - Basic Example | ||
+ | * http:// | ||
+ | * | ||
+ | * This example code is in the public domain. | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | |||
+ | // Change these two numbers to the pins connected to your encoder. | ||
+ | // Best Performance: | ||
+ | // Good Performance: | ||
+ | // Low Performance: | ||
+ | Encoder myEnc(9, 10); | ||
+ | // avoid using pins with LEDs attached | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | while (!Serial) {} | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | long oldPosition | ||
+ | |||
+ | void loop() { | ||
+ | long newPosition = myEnc.read(); | ||
+ | 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 [[http:// | ||
+ | |||
+ | 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 | ||
+ | [[f11: | ||
+ | weiter zu einer sinnvollen Anwendung des Drehgebers. | ||
- | Beschreibung kommt später |