Hoe Rotary Encoder werkt en het koppelt aan Arduino

Hoe Rotary Encoder Werkt En Het Koppelt Aan Arduino



Rotary Encoder is een belangrijk elektromechanisch apparaat dat op verschillende manieren wordt gebruikt op het gebied van elektronica. Dit artikel legt de typen en werking van de roterende encoder uit, samen met de interface met Arduino.

Wat is een roterende encoder

Een roterende encoder is een digitaal invoerapparaat dat de hoekpositie van de draaiknop detecteert en signalen verzendt naar de microcontroller of een ander apparaat waarop ze zijn aangesloten. Ze kunnen 360° draaien zonder te stoppen. Het wordt ook wel een as-encoder genoemd. Het wordt gebruikt in printers, audio-elektronica, motoren en controllers.









Soorten roterende encoders

Er zijn hoofdzakelijk twee soorten roterende encoders die worden bepaald op basis van het door hen gegenereerde uitgangssignaal. Deze soorten heten:



Incrementele roterende encoder

Dit type encoder telt het aantal omwentelingen van de draaiknop in de vorm van pulsen. Wanneer de knop eenmaal wordt gedraaid, wordt een puls gegenereerd. Voor elke puls wordt de teller verhoogd om de hoekpositie van de as aan te geven.





Absolute roterende encoder

Dit type encoder geeft de absolute hoekpositie van de as weer, omdat het een aparte code heeft voor elke aspositie, en meet de hoek door die code. Er is geen teller nodig om een ​​uitvoer van de hoekpositie te geven. Zelfs als de absolute encoder spanningsloos is, blijven de respectieve waarden voor hoekposities behouden. Het is ook een goedkope encoder.



Werking van roterende encoder

De roterende encoder bestaat uit een schijf met gelijke afstanden die zijn verbonden met een gemeenschappelijke pen C die geaard is. De twee andere pinnen A en B zijn contactpinnen die contact maken met C als de draaiknop wordt gedraaid. Wanneer pin A of B met aarde wordt verbonden, wordt een signaal gegenereerd. Deze signalen die worden gegenereerd door uitgangspennen zijn 90° uit fase. Dit komt omdat pin A met aarde wordt verbonden als de knop met de klok mee wordt gedraaid, en pin B als eerste met aarde wordt verbonden als de knop tegen de klok in wordt gedraaid. Daarom wordt de draairichting van de knop via deze verbindingen bepaald.

Als de staat van B is niet gelijk aan A , dan is de knop rechtsom gedraaid.


Als de toestand van B gelijk is aan A, is de knop tegen de klok in gedraaid.

Pinconfiguratie van roterende encoder

Het onderstaande diagram geeft een pinout van de roterende encoder die uitvoerpinnen A en B toont, een draaischakelaar die kan worden gebruikt als een drukknop en pinnen voor voeding.

Pin Beschrijving van Rotary Encoder

Hieronder volgt de gegeven beschrijving van alle pennen van de roterende encoder.

Uit B of CLK

Deze pin geeft een output van hoe vaak de knop of roterende encoder is gedraaid. Elke keer dat aan de knop wordt gedraaid, voltooit de CLK een cyclus van HIGH en LOW. Het wordt geteld als één omwenteling.

Uit A of DT

Dit is de tweede uitvoerpin van de roterende encoder die de draairichting bepaalt. Het loopt 90° achter op het CLK-signaal. Daarom, als zijn toestand niet gelijk is aan de toestand van CLK, is de draairichting met de klok mee, anders tegen de klok in.

Schakelaar

De schakelpin wordt gebruikt om te controleren of de drukknop is ingedrukt of niet.

VCC

Deze pin is verbonden met een voeding van 5V

GND

Deze pin is verbonden met de aarde

Interface Rotary Encoder met Arduino

De roterende encoder heeft vijf pinnen. VCC en GND van de roterende encoder zijn verbonden met die van Arduino. De resterende pinnen CLK, DT en SW zijn verbonden met de digitale ingangspinnen van Arduino.

Arduino-code voor roterende encoder

// Rotary Encoder-ingangen
#definieer CLK_PIN 2
#definieer DT_PIN 3
#definieer SW_PIN 4
int teller = 0 ;
int huidigeCLKState;
int laatsteCLKState;
String huidige richting = '' ;
niet-ondertekend lang lastButtonPressTime = 0 ;
ongeldige opstelling ( ) {
// Codeerpennen instellen als ingangen
    pinMode ( CLK_PIN, INVOER ) ;
    pinMode ( DT_PIN, INVOER ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Stel seriële monitor in
Serieel.begin ( 9600 ) ;
// Lees de beginstatus van CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
lege lus ( ) {
// Lees de huidige status van CLK
huidigeCLKState = digitalRead ( CLK_PIN ) ;
// Als de laatst en de huidige status van CLK is anders, Dan er trad een puls op
// Reageer alleen op 1 staatswijziging om dubbeltelling te voorkomen
als ( huidigeCLKState ! = laatsteCLKState && huidigeCLKState == 1 ) {
// Als de DT-status verschilt van de CLK-status, Dan
// De encoder draait tegen de klok in, dus de afname
als ( digitaal lezen ( DT_PIN ) ! = huidigeCLKState ) {
balie--;
huidigeRichting = 'CCW' ;
} anders {
// Encoder draait met de klok mee, dus ophogen
teller++;
huidigeRichting = 'CW' ;
}
Serieel.afdrukken ( 'Rotatierichting: ' ) ;
Serieel.afdrukken ( huidigeRichting ) ;
Serieel.afdrukken ( ' | Tellerwaarde: ' ) ;
Serial.println ( balie ) ;
}
// Herinner de laatst CLK staat
lastCLKState = huidigeCLKState;
// Lees de knopstatus
int buttonState = digitalRead ( SW_PIN ) ;
// Als we een LAAG signaal detecteren, wordt de knop ingedrukt
als ( buttonState == LAAG ) {
// Als er 50 ms zijn verstreken sinds de laatst LAGE puls, het betekent dat de
// knop is ingedrukt, losgelaten en opnieuw ingedrukt
als ( millis ( ) - lastButtonPressTime > vijftig ) {
Serial.println ( 'Knop ingedrukt!' ) ;
}
// Herinner de laatst knop druk evenement tijd
lastButtonPressTime = millis ( ) ;
}
// Neerzetten in een kleine vertraging op hulp de lezing ontkrachten
vertraging ( 1 ) ;
}


In de hierboven gegeven code wordt de status van de CLK-pin gecontroleerd in de functie loop(). Als het niet gelijk is aan de vorige status, geeft dit aan dat de draaiknop is gedraaid. Om nu de draairichting van de knop te controleren, wordt de huidige toestand van CLK vergeleken met de toestand van DT. Als beide toestanden ongelijk zijn, geeft dit aan dat de knop met de klok mee is gedraaid en wordt de waarde tegengesteld verhoogd om de positie van de draaiknop weer te geven. In het tegenovergestelde geval, teller verlaagt.

Conclusie

Roterende encoders zijn geavanceerde positiesensoren die continu kunnen draaien. Ze zijn beschikbaar in twee soorten: incrementeel en absoluut. De roterende encoder werkt door pulsen te tellen die worden gegenereerd door het draaien van de knop. Het heeft uiteenlopende toepassingen in het dagelijks leven van elektronica tot industriële automatisering.