Inhaltsverzeichnis:
Video: Einfacher Drehdecoder - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Dieses anweisbare beschreibt eine einfache Methode zum Decodieren eines sequentiellen Drehgebers mit einem Arduino Uno R3.
Kompakte Softwareroutinen werden verwendet, um die Anzahl der Übergänge zu zählen, Kontaktprellen zu eliminieren und die Drehrichtung zu bestimmen. Zusätzliche Komponenten und Nachschlagetabellen sind nicht erforderlich.
Interrupt- und Non-Interrupt-Versionen des Codes werden bereitgestellt.
Die Interrupt-Version des Codes erfordert nur einen einzigen Interrupt-Pin.
Bilder:
- Das Eröffnungsfoto zeigt den zusammengebauten Encoder.
- Der Screenshot zeigt den Code für die Interrupt-Version und den Zählerstand, wenn die Encoderwelle im Uhrzeigersinn und gegen den Uhrzeigersinn gedreht wird.
- Das Video zeigt die Zählung während der schnellen Rotation.
Schritt 1: Schaltplan
Der Schaltplan des Encoders ist in Abb. 1 dargestellt.
Die Jumperdrähte werden direkt an die Encoderpins gelötet.
Vertauschen Sie die beiden blauen Drähte, wenn die Zählrichtung umgekehrt wird.
Schritt 2: Teileliste
Die folgenden Teile wurden von https://www.aliexpress.com/ bezogen.
- 1 nur Arduino UNO R3 mit USB-Kabel.
- 1 nur sequenzieller Drehgeber (EC11 oder gleichwertig) mit Schalter.
- 1 einziger Knopf passend zur Welle.
- 3 nur Arduino-Stecker-zu-Stecker-Überbrückungsdrähte.
Schritt 3: Theorie
Sequentielle Drehgeber erzeugen zwei Rechteckwellen, von denen jede um 90 Grad verschoben ist, wie in Abb. 1 gezeigt.
Die Logikmuster an Kontakt A und Kontakt B sind unterschiedlich, wenn die Welle im Uhrzeigersinn (CW) und gegen den Uhrzeigersinn (CCW) durch die Positionen 1 bis 6 gedreht wird.
Gängige Methoden zur Bestimmung der Drehrichtung sind:
- Hardware-
- Zwillingsunterbrechungen
- Mustersuchtabellen
Dieses Projekt verwendet eine Softwaremethode, die keine Nachschlagetabellen erfordert. [1]
Richtung
Anstatt die Ausgabemuster von Kontakt A und Kontakt B zu betrachten, konzentrieren wir uns auf Kontakt A.
Wenn wir Kontakt B nach jedem Übergang von Kontakt A abtasten, stellen wir Folgendes fest:
- Kontakt A und Kontakt B haben entgegengesetzte logische Zustände, wenn der Encoder im Uhrzeigersinn gedreht wird
- Kontakt A und Kontakt B haben den gleichen logischen Zustand, wenn der Encoder gegen den Uhrzeigersinn gedreht wird
Tatsächlicher Code:
// ----- Übergänge zählen
CurrentStateA = stateContactA(); if (CurrentStateA != LastStateA) { CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Anzahl++; if (CurrentStateA != CurrentStateB) Anzahl--; LastStateA = CurrentStateA; }
Diese Methode bietet folgende Vorteile:
- Nachschlagetabellen sind nicht erforderlich
- nur eine einzige Unterbrechungsleitung erforderlich
Entprellen
Alle mechanischen Encoder leiden unter „Kontaktprellen“.
Wenn ein Schaltkontakt nicht sauber schließt/unterbricht, schwingt sein logischer Zustand schnell von HIGH nach LOW, bis der Schaltkontakt zur Ruhe kommt. Dies führt zu falschen Zählungen.
Eine Methode zum Unterdrücken des Kontaktprellens besteht darin, jedem Schaltkontakt einen kleinen Kondensator hinzuzufügen. Der Kondensator und der zugehörige Pull-up-Widerstand bilden einen Integrator, der hohe Frequenzen effektiv kurzschließt und ein gleichmäßiges Ansteigen/Abfallen der Schaltspannung ermöglicht.
Der Nachteil dieses Ansatzes besteht darin, dass Übergänge übersehen werden können, wenn die Encoderwelle schnell gedreht wird.
Software-Entprellung
Diese Methode verwendet zwei Zähler (Offen, Geschlossen), die auf Null gesetzt wurden. [2]
Sobald bei Kontakt A ein Übergang erkannt wird:
- Kontinuierlich befragen Kontakt A.
- Erhöhen Sie den Open-Zähler und setzen Sie den Closed-Zähler zurück, wenn Kontakt A HIGH ist.
- Erhöhen Sie den Geschlossen-Zähler und setzen Sie den Offen-Zähler zurück, wenn Kontakt A NIEDRIG ist.
- Verlassen Sie die Schleife, wenn einer der Zähler einen vorbestimmten Zählerstand erreicht. Wir suchen effektiv nach der Dauer des stationären Zustands nach einem Kontaktabprall.
Tatsächlicher Code:
// ----- Kontakt entprellen A
while (1) { if (digitalRead (ContactA)) {// ----- ContactA ist offen geschlossen = 0; // Leeren Sie den entgegengesetzten Integrator Open++; // Integrieren if (Open > MaxCount) return HIGH; } else { // ----- ContactA ist geschlossen Open = 0; // Entleeren Sie den gegenüberliegenden Integrator Closed++; // Integrieren if (Closed > MaxCount) return LOW; } }
Es besteht keine Notwendigkeit, Kontakt B zu entprellen, da die Übergänge von Kontakt A und Kontakt B nicht zusammenfallen.
Zählen
Eine mechanische „Einrastung“verdoppelt effektiv Ihre Zählung, da zwischen den Klicks zwei Zählungen registriert werden (siehe Abb. 1).
Die Anzahl der "Einrastungen" kann mit Modulo-2-Arithmetik wie unten gezeigt bestimmt werden.
Tatsächlicher Code:
// ----- "Rastungen" zählen
Wenn (Anzahl % 2 == 0) {Serial.print ("Anzahl: "); Serial.println (Anzahl / 2); }
Verweise
Weitere Informationen finden Sie unter:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Schritt 4: Software
Dieses Projekt erfordert eine aktuelle Version der Ardino Uno R3 IDE (integrierte Entwicklungsumgebung), die unter https://www.arduino.cc/en/main/software verfügbar ist
Laden Sie jede der folgenden beiden Arduino-Skizzen herunter (beigefügt)
- rotation_encoder_1.ino (Abfrageversion)
- rotation_encoder_2.no (Unterbrechungsversion)
Doppelklicken Sie auf Ihre bevorzugte Version und folgen Sie den Anweisungen auf dem Bildschirm.
Genießen …
Klicken Sie hier, um meine anderen instructables anzuzeigen.
Empfohlen:
Einfacher LED-Farbwechsel "Kerze": 5 Schritte (mit Bildern)
Einfacher LED-Farbwechsel "Kerze": Dies ist ein einfaches Farbwechsellicht, das sich hervorragend für Kinder und Erwachsene eignet. Sieht in einem schwach beleuchteten Raum wunderschön aus, ideal für die Feiertage und macht ein ziemlich cooles Nachtlicht
EINFACHER CARBOT -- ARDUINO -- BLUETOOTH-STEUERUNG -- TUTORIAL: 10 Schritte (mit Bildern)
EINFACHER CARBOT || ARDUINO || BLUETOOTH-STEUERUNG || TUTORIAL: IN DIESEM ANLEITUNG ZEIGE ICH, WIE MAN EINEN EINFACHEN BOT HERSTELLT, DER VON IHREM SMARTPHONE ÜBER BLUETOOTHPARTS GEBAUT WIRD:☻ARDUINO☻2X GETRIEBEMOTOREN☻HC-05 BLUETOOTH MODUL☻LAPTOP ODER PC ICH HABE EINE POWER BANK VERWENDET
Günstiger und einfacher Batteriehalter Version 1: 7 Schritte
Günstiger und einfacher Batteriehalter Version 1: Batteriehalter halten natürlich Batterien und sind SEHR nützlich in elektronischen Projekten, insbesondere bei solchen, die Batterien benötigen. Dies ist der einfachste Batteriehalter, den ich mir vorstellen kann. Das Beste ist, dass es billig ist und Haushaltsgegenstände verwendet werden, die
Günstiger und einfacher Batteriehalter Version 2: 6 Schritte
Günstiger und einfacher Batteriehalter Version 2: Dies ist die zweite Version meines Batteriehalters. Dieser Halter ist für diejenigen, die eine schöne enge Passform mögen. Tatsächlich ist es so eng, dass Sie etwas brauchen, um die leere Batterie herauszuhebeln. Das heißt, wenn Sie es zu klein messen und nicht genug Platz für den Schläger lassen
So zeigen Sie alle Schritte standardmäßig an – ABER EINFACHER !!!: 5 Schritte
So sehen Sie alle Schritte standardmäßig - ABER EINFACHER !!!: Einige von Ihnen wissen dies vielleicht bereits, aber ich poste dies nur, falls einige das neue Update nicht gesehen haben und das andere instructable betrachten. Ich hoffe du magst es! Oder tue ich? Benötigte Materialien: Ihr Computer 130 Ohm Widerstand 2x 5mm blaue LED-Leuchten