- Drehgeber und seine Typen
- Pinbelegung und Beschreibung des Drehgebers KY-040
- So funktioniert der Drehgeber
- Erforderliche Komponenten
- Schaltplan der Drehgeberschnittstelle PIC16F877A
- Code Erklärung
Ein Drehgeber ist ein Eingabegerät, mit dem der Benutzer mit einem System interagieren kann. Es sieht eher aus wie ein Funkpotentiometer, gibt jedoch eine Folge von Impulsen aus, was seine Anwendung einzigartig macht. Wenn der Knopf des Encoders gedreht wird, dreht er sich in Form kleiner Schritte, wodurch er zur Steuerung des Schritt- / Servomotors, zum Navigieren durch eine Menüfolge und zum Erhöhen / Verringern des Werts einer Zahl und vielem mehr verwendet werden kann.
In diesem Artikel erfahren Sie mehr über die verschiedenen Arten von Drehgebern und deren Funktionsweise. Wir werden es auch mit dem PIC-Mikrocontroller PIC16F877A verbinden und den Wert einer Ganzzahl durch Drehen des Encoders steuern und seinen Wert auf einem 16 * 2-LCD-Bildschirm anzeigen. Am Ende dieses Tutorials werden Sie mit der Verwendung eines Drehgebers für Ihre Projekte vertraut sein. Also lasst uns anfangen…
Drehgeber und seine Typen
Drehgeber wird oft als Wellengeber bezeichnet. Es ist ein elektromechanischer Wandler, dh er wandelt mechanische Bewegungen in elektronische Impulse um oder mit anderen Worten, er wandelt Winkelposition oder Bewegung oder Wellenposition in ein digitales oder analoges Signal um. Es besteht aus einem Knopf, der sich beim Drehen Schritt für Schritt bewegt und für jeden Schritt eine Folge von Impulsfolgen mit vordefinierter Breite erzeugt.
Es gibt viele Arten von Drehgebern auf dem Markt, die der Konstrukteur je nach Anwendung auswählen kann. Die häufigsten Typen sind unten aufgeführt
- Inkrementalgeber
- Absolutwertgeber
- Magnetischer Encoder
- Optischer Encoder
- Lasercodierer
Diese Codierer werden basierend auf der Ausgangssignal- und Sensortechnologie klassifiziert, der Inkrementalcodierer und die Absolutcodierer werden basierend auf dem Ausgangssignal klassifiziert und der magnetische, optische und Lasercodierer werden basierend auf der Sensortechnologie klassifiziert. Der hier verwendete Encoder ist ein inkrementeller Encoder.
Der Absolutwertgeber speichert die Positionsinformationen auch nach dem Abschalten der Stromversorgung, und die Positionsinformationen sind verfügbar, wenn wir sie erneut mit Strom versorgen.
Der andere Grundtyp, der Inkrementalgeber, liefert Daten, wenn der Geber seine Position ändert. Die Positionsinformationen konnten nicht gespeichert werden.
Pinbelegung und Beschreibung des Drehgebers KY-040
Die Pinbelegung des Inkremental- Drehgebers vom Typ KY-040 ist unten dargestellt. In diesem Projekt werden wir diesen Drehgeber mit dem beliebten Mikrocontroller PIC16F877A von microchip verbinden.
Die ersten beiden Pins (Masse und Vcc) werden zur Stromversorgung des Encoders verwendet. In der Regel wird eine + 5V-Versorgung verwendet. Neben der Drehung des Knopfes im Uhrzeigersinn und gegen den Uhrzeigersinn verfügt der Encoder auch über einen Schalter (Active Low), der durch Drücken des Knopfes im Inneren gedrückt werden kann. Das Signal von diesem Schalter wird über Pin 3 (SW) erhalten. Schließlich hat es die zwei Ausgangspins (DT und CLK), die die Wellenformen erzeugen, wie bereits unten diskutiert. Wir haben diesen Drehgeber zuvor mit Arduino verbunden.
So funktioniert der Drehgeber
Die Leistung hängt vollständig von den internen Kupferpads ab, die die Verbindung mit GND und VCC mit der Welle herstellen.
Der Drehgeber besteht aus zwei Teilen. Wellenrad, die mit der Welle verbunden und dreht sie im Uhrzeigersinn oder gegen den Uhrzeigersinn in Abhängigkeit von der Drehung der Welle und der Basis, wo die elektrische Verbindung durchgeführt wird. Die Basis hat Anschlüsse oder Punkte, die so mit DT oder CLK verbunden sind, dass beim Drehen des Wellenrads die Basispunkte verbunden werden und sowohl am DT- als auch am CLK-Anschluss eine Rechteckwelle erzeugt wird.
Die Ausgabe ist wie beim Drehen der Welle.
Zwei Ports liefern die Rechteckwelle, aber es gibt einen kleinen Unterschied im Timing. Wenn wir den Ausgang als 1 und 0 akzeptieren, kann es daher nur vier Zustände geben: 0 0, 1 0, 1 1, 0 1. Die Reihenfolge des Binärausgangs bestimmt die Drehung im oder gegen den Uhrzeigersinn. Wenn beispielsweise der Drehgeber im Leerlauf 1 0 liefert und danach 1 1 liefert, bedeutet dies, dass der Geber seine Position um einen Schritt im Uhrzeigersinn ändert, aber wenn er nach dem Leerlauf 1 0 0 0 liefert, bedeutet, dass die Welle ihre Positionen mit einem Schritt gegen den Uhrzeigersinn ändert.
Erforderliche Komponenten
Es ist an der Zeit zu ermitteln, was wir benötigen, um den Drehgeber mit dem PIC-Mikrocontroller zu verbinden.
- PIC16F877A
- 4,7k Widerstand
- 1k Widerstand
- 10k Topf
- 33pF Keramikscheibenkondensator - 2St
- 20 MHz Kristall
- 16x2 Anzeige
- Drehcodierer
- 5V Adapter.
- Brotbrett
- Anschlussdrähte.
Schaltplan der Drehgeberschnittstelle PIC16F877A
Unten sehen Sie das Bild der endgültigen Einrichtung nach dem Anschließen der Komponenten gemäß Schaltplan:
Wir haben einen einzelnen 1K-Widerstand für den Kontrast des LCD verwendet, anstatt ein Potentiometer zu verwenden. Überprüfen Sie auch das vollständige Arbeitsvideo am Ende.
Code Erklärung
Der vollständige PIC-Code wird am Ende dieses Projekts mit einem Demonstrationsvideo angegeben. Hier werden einige wichtige Teile des Codes erläutert. Wenn Sie mit PIC Microcontroller noch nicht vertraut sind, folgen Sie von Anfang an unseren PIC-Tutorials.
Wie bereits erwähnt, müssen wir die Ausgabe überprüfen und die Binärausgabe sowohl für DT als auch für CLK unterscheiden. Daher haben wir einen if-else- Teil für die Operation erstellt.
if (Encoder_CLK! = Position) { if (Encoder_DT! = Position) { // lcd_com (0x01); Zähler ++; // Erhöhe den Zähler, der auf dem lcd gedruckt wird lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, Zähler); } else { // lcd_com (0x01); lcd_com (0xC0); Zähler--; // den Zähler verringern lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, Zähler); // lcd_puts ("Links"); } }
Wir müssen auch die Position bei jedem Schritt speichern. Dazu haben wir eine Variable „Position“ verwendet, die die aktuelle Position speichert.
position = Encoder_CLK; // Hiermit wird die Position des Encodertakts in der Variablen gespeichert. Kann 0 oder 1 sein.
Andernfalls wird eine Option bereitgestellt, um über das Drücken des Schalters auf dem LCD zu informieren.
if (Encoder_SW == 0) { sw_delayms (20); // Entprellungsverzögerung if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("Schalter gedrückt"); // itoa (Zähler, Wert, 10); // lcd_puts (Wert);
Die Funktion system_init wird verwendet, um die Pin-E / A-Operation und das LCD zu initialisieren und die Position des Drehgebers zu speichern.
void system_init () { TRISB = 0x00; // PORT B als Ausgang, Dieser Port wird für LCD TRISDbits verwendet. TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Dies initialisiert die LCD- Position = Encoder_CLK; // Sotred die CLK-Position auf Systeminit, bevor die while-Schleife startet. }}
Die LCD-Funktion wird in die Bibliotheken lcd.c und lcd.h geschrieben, in denen die Dateien lcd_puts () und lcd_cmd () deklariert sind.
Für die Variablendeklaration, Konfigurationsbits und andere Codefragmente finden Sie den vollständigen Code unten.