Verwendung von Drehencodern mit Arduino-Boards
Sie können viele Projekte mit Komponenten wie Tasten oder Slider-Eingängen steuern, aber was, wenn Ihr Aufbau einen Knopf erfordert? Wenn Ihr Projekt einen Drehimpulsgeber benötigt, haben Sie zwei Möglichkeiten: entweder ein Potentiometer oder einen Drehgeber.
Potentiometer, die den Widerstand basierend auf der Position des Knopfes variieren, sind einfacher und oft eine solide Wahl, können jedoch nur im Uhrzeigersinn oder gegen den Uhrzeigersinn gedreht werden (bisher). Wenn Sie etwas benötigen, das sich kontinuierlich in beide Richtungen drehen kann, ist ein Drehgeber Ihre beste Wahl. Wenn Sie Hilfe bei der Entscheidung zwischen den beiden benötigen, kann unsere Diskussion Encoder vs. Potentiometer Ihnen bei der Entscheidungsfindung helfen.
Encoder gibt es in zwei grundlegenden Ausführungen:
1. Inkrementale Encoder verwenden eine Reihe von Impulsen in einem Quadraturmuster, um anzuzeigen, wie weit und in welche Richtung sich eine Welle dreht.
2. Absolute Encoder kennen inhärent ihre Winkelposition.
Dieser Artikel konzentriert sich hauptsächlich auf inkrementale Encoder, die Art von Encoder, die Sie am häufigsten sehen werden. Auch Einzel-Ausgangs-Encoder (auch Tachometer genannt) sind verfügbar, aber sie sind weit weniger nützlich, da sie nur anzeigen, wie weit sich eine Welle bewegt hat, nicht in welche Richtung. Sie können unseren Artikel über Encodertypen für eine detailliertere Diskussion lesen, aber heute behandeln wir die Grundlagen, wie ein inkrementaler Encoder funktioniert und wie man ihn mit einem Arduino-Board verbindet.
Inkrementalgeber: Anleitung und Übersicht
Quadraturdiagramm für Encodersignale A und B. Eine steigende Flanke für B und ein niedriges Signal für A bedeutet eine Bewegung nach rechts in diesem Muster, während eine fallende Flanke für A mit B hoch eine Bewegung nach links anzeigt.
Im Kern der meisten Encoder befinden sich die Ausgänge „A” und „B”, die stetig und inkrementell pulsieren. Diese Ausgänge kombinieren sich mit Stromversorgung und Masse, wie erforderlich. Die A- und B-Ausgänge sind „quadraturcodiert”, was bedeutet, dass jedes Signal einen Duty-Cycle von 50 % hat (die Hälfte der Zeit ein und die andere Hälfte aus). So funktioniert es:
- Jeder Duty-Cycle ist um 90° phasenverschoben im Verhältnis zum anderen; ein Ausgang ändert sich, wenn der andere gerade die Hälfte der Zeit benötigt, um den Zustand zu ändern.
- Ein angeschlossener Mikrocontroller oder eine dedizierte Platine übersetzt diese Impulse in eine Drehinkrementierung, und die Impulsfolge zeigt an, in welche Richtung sich die Welle gedreht hat.
Wie im obigen Diagramm gezeigt, wenn das B-Signal steigt, während A in einem niedrigen Zustand ist, hat sich die Position in diesem Muster nach rechts verschoben. Wenn jedoch das B-Signal steigt, wenn A bereits in einem hohen Zustand ist, würde man nach links gehen. In Kombination mit dem Steigen und Fallen des A-Signals ergeben sich für jede Linie vier eindeutige Zustände:
Dasselbe Signalverhalten ist für das Signal A verfügbar, was acht mögliche Übergänge und vier in jede Richtung ergibt. Mit diesem Muster, das sich im Kreis wiederholt, haben Sie nun die Grundlage für einen Quadratur-Drehencoder.
1. B steigt, A niedrig
2. B fällt, A hoch
3. B steigt, A hoch
4. B fällt, A niedrig
Verwendung eines Drehencoders mit Arduino
Wir werden zwei Arten von Encodern mit dem Arduino paaren:
- Kontaktencoder: kleiner, wird allgemein als Schnittstellengerät verwendet.
- Optischer Encoder (LPD3806-600BM-G5-24C): größerer Stil mit einer Lagerunterstützung, wird allgemein zur Messung der Motorgeschwindigkeit verwendet.
Wenn Sie den kleineren Encoder verwenden, führen Sie die folgenden Schritte aus:
1. Schließen Sie die mittlere Leitung an Masse an.
2. Verbinden Sie einen äußeren Anschluss mit D2 und den anderen mit D3; keine positive Spannung ist erforderlich.
Für den größeren Encoder folgen Sie diesen Schritten:
1. Schließen Sie die rote Stromleitung an +5V und den schwarzen Draht an Masse an.
2. Verkabeln Sie die A- und B-Leitungen (grün und weiß) mit Arduino D2 und D3.
3. Beachten Sie, dass Anschlüsse, Spannungsanforderungen und Farbkonzepte je nach Ihrer Implementierung variieren können.
Arduino Encoder-Code
Bild: Jeremy S. Cook
Sobald Sie verstehen, wie die A- und B-Linien eines Encoders mit der Rotation pulsieren, ist es eine Frage der Übersetzung dieses Eingangs in Code, um nützliche Ausgaben zu erzielen. Dieser Schritt ist theoretisch einfach, kann in der Praxis jedoch knifflig sein. Sie finden den Beispielcode hier (zusammen mit einem 3D-druckbaren Aufsatz, der beim Testen hilft). Während der Aufsatz nicht perfekt ist, ist er richtungsgenau und veranschaulicht, wie ein Encoder funktioniert. Wenn der Mikrocontroller des Arduino einen Übergang zwischen hoch und niedrig auf einer der Leitungen erkennt, vergleicht er beide Leitungszustände und fügt je nach Bedarf einen Inkrement hinzu oder subtrahiert ihn.
Stellen Sie sicher, D2 und D3 auszuwählen, da sie die einzigen beiden Eingänge für den ATmega328 in vielen Arduino-Platinen sind, die in der Lage sind, einen Interrupt zu erzeugen. Das bedeutet, dass, wenn hier ein Übergang erkannt wird, es sofort in eine Leseroutine übergeht, ohne darauf zu warten, dass die Logik des Programms es aufruft.
Beachten Sie auch den millis()-Entprellcode, der einen Eingang berücksichtigt, der während eines Übergangs schnell zwischen Zuständen wechselt und sich möglicherweise für kurze Zeit schnell verbindet und trennt. Während dieser Code in einigen Anwendungen akzeptabel funktioniert und Ihnen helfen kann zu verstehen, wie Encoder arbeiten, ist es nicht einfach, 100% genaue Messwerte zu erhalten.
Verwendung der Arduino Encoder Library
Der Arduino-Encoder-Code hilft Ihnen, zu verstehen, wie Encoder funktionieren. Wenn Sie jedoch einfach nur einen in Ihrem Projekt verwenden möchten, nutzen Sie die fertige Bibliothek von Paul Stoffregen. So fangen Sie an:
1. Laden Sie die Encoder-Bibliothek von GitHub herunter.
2. Navigieren Sie in der Arduino IDE zu Sketch ==> Include Library ==> Add .ZIP Library und fügen Sie "Encoder-master.zip" hinzu.
3. Sobald die Installation abgeschlossen ist, sehen Sie unter File ==> Examples ==> Encoder, wo vier Programme aufgelistet sind. Laden Sie das „Basic“-Beispiel und übertragen Sie es auf Ihr Arduino-Board.
4. Schließen Sie Ihren Encoder mit positivem und negativem Anschluss wie zuvor an, aber leiten Sie diesmal die A- und B-Signalleitungen zu D5 und D6.
5. Öffnen Sie den seriellen Monitor bei 9600 Baud und Sie werden sehen, wie die Position genau hoch- und heruntergezählt wird.
Wie beim optischen Encoder sollte sich die Position ändern, ohne dass Sie eingreifen müssen. Für zusätzlichen Spaß öffnen Sie den seriellen Plotter der Arduino IDE mit der gleichen Baudrate. Anstatt Ihnen lediglich die Positionsnummern anzuzeigen, wird automatisch ein Graph der Werte erstellt.
Ob Sie sie als benutzerdefinierte Schnittstelle verwenden oder um Geschwindigkeit und Distanz zu messen, Drehgeber bieten eine ausgezeichnete Methode zur rotativen Eingabe für Ihr Arduino-Projekt. Sie erfordern etwas mehr Aufwand beim Einrichten als viele andere Gerätetypen, aber die Ergebnisse können es wert sein.
Artikel Tags