Hvordan Rotary Encoder fungerer og interface det med Arduino

Hvordan Rotary Encoder Fungerer Og Interface Det Med Arduino



Rotary Encoder er en vigtig elektromekanisk enhed, der har forskellige anvendelser inden for elektronik. Denne artikel vil forklare typerne og funktionerne af den roterende encoder sammen med dens grænseflade med Arduino.

Hvad er en Rotary Encoder

En roterende encoder er en digital input-enhed, der registrerer drejeknappens vinkelposition og sender signaler til mikrocontrolleren eller enhver anden enhed, som de er forbundet til. De kan rotere 360° uden at stoppe. Det kaldes også en akselencoder. Det bruges i printere, lydelektronik, motorer og controllere.









Typer af roterende kodere

Der er hovedsageligt to typer roterende encodere, der bestemmes ud fra det udgangssignal, der genereres af dem. Disse typer hedder:



Inkrementel roterende encoder

Denne type encoder tæller omdrejninger af drejeknappen i form af impulser. Når knappen er drejet én gang, genereres en puls. For hver impuls stiger tælleren for at angive akslens vinkelposition.





Absolut Rotary Encoder

Denne type encoder giver den absolutte vinkelposition for akslen, da den har en separat kode for hver akselposition, og den måler vinklen gennem denne kode. Det behøver ikke en tæller for at give et output af vinkelposition. Selvom den absolutte drejegiver er spændingsløs, bibeholdes de respektive værdier for vinkelpositioner. Det er også en lavpris-encoder.



Drift af Rotary Encoder

Den roterende encoder består af en skive med lige store afstande forbundet med en fælles pin C, der er jordet. De to andre stifter A og B er kontaktstifter, der kommer i kontakt med C, når drejeknappen drejes. Når ben A eller B bliver forbundet til jorden, genereres et signal. Disse signaler genereret fra udgangsben er 90° ude af fase. Dette skyldes, at ben A bliver forbundet til jorden, når knappen drejes med uret, og pin B bliver forbundet til jorden først, når knappen drejes mod uret. Derfor bestemmes rotationsretningen for knappen gennem disse forbindelser.

Hvis tilstanden af B er ikke lig med EN , så er knappen drejet med uret.


Hvis tilstanden af ​​B er lig med A, er knappen drejet mod uret.

Pin-konfiguration af roterende encoder

Diagrammet nedenfor giver en pinout af den roterende encoder, der viser udgangsben A og B, en drejekontakt, der kan bruges som en trykknap, og ben til strømforsyning.

Benbeskrivelse af roterende encoder

Følgende er den givne beskrivelse af alle roterende encoderstifter.

Ud B eller CLK

Denne stift giver et output af, hvor mange gange knappen eller encoderen har drejet. Hver gang, når knappen drejes, fuldfører CLK en cyklus med HØJ og LAV. Det tælles som én rotation.

Ud A eller DT

Dette er den anden udgangsstift på den roterende encoder, der bestemmer rotationsretningen. Det halter 90° efter CLK-signalet. Derfor, hvis dens tilstand ikke er lig med CLKs tilstand, er rotationsretningen med uret, ellers mod uret.

Kontakt

Kontaktstiften bruges til at kontrollere, om trykknappen er trykket ned eller ej.

VCC

Denne pin er tilsluttet en 5V forsyning

GND

Denne pin er forbundet til jorden

Interfacing Rotary Encoder med Arduino

Den roterende encoder har fem ben. VCC og GND af den roterende encoder er forbundet med den for Arduino. De resterende ben CLK, DT og SW er forbundet til Arduinos digitale indgangsben.

Arduino-kode til Rotary Encoder

// Rotary Encoder-indgange
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int tæller = 0 ;
int nuværendeCLKState;
int lastCLKState;
Strengstrømretning = '' ;
unsigned long lastButtonPressTime = 0 ;
ugyldig opsætning ( ) {
// Indstil encoderstifter som input
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Opsætning af seriel skærm
Serial.begin ( 9600 ) ;
// Læs starttilstanden for CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
ugyldig løkke ( ) {
// Læs den aktuelle tilstand af CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Hvis sidst og den nuværende tilstand af CLK er anderledes, derefter der opstod en puls
// Reager kun på 1 tilstandsændring for at undgå dobbelttælling
hvis ( nuværende CLKState ! = sidsteCLKState && nuværendeCLKState == 1 ) {
// Hvis DT-tilstanden er anderledes end CLK-tilstanden, derefter
// Encoderen roterer mod uret, så faldet
hvis ( digitallæs ( DT_PIN ) ! = nuværende CLKState ) {
mod--;
nuværende retning = 'CCW' ;
} andet {
// Encoderen roterer med uret, så stigning
tæller++;
nuværende retning = 'CW' ;
}
Seriel.print ( 'Rotationsretning: ' ) ;
Seriel.print ( nuværende retning ) ;
Seriel.print ( ' | Tællerværdi: ' ) ;
Serial.println ( tæller ) ;
}
// Husk sidst CLK tilstand
lastCLKState = nuværendeCLKState;
// Læs knappens tilstand
int buttonState = digitalRead ( SW_PIN ) ;
// Hvis vi registrerer et LAVT signal, trykkes der på knappen
hvis ( knapState == LAV ) {
// Hvis der er gået 50 ms siden sidst LAV puls betyder det, at
// knappen er blevet trykket ned, sluppet og trykket igen
hvis ( millis ( ) - lastButtonPressTime > halvtreds ) {
Serial.println ( 'Knap trykket!' ) ;
}
// Husk sidst knaptryk begivenhed tid
lastButtonPressTime = millis ( ) ;
}
// Sætte i en lille forsinkelse til Hjælp afvise læsningen
forsinke ( 1 ) ;
}


I den ovenfor givne kode kontrolleres tilstanden af ​​CLK-stiften i loop()-funktionen. Hvis den ikke er lig med dens tidligere tilstand, viser den, at drejeknappen har drejet. Nu, for at kontrollere retningen af ​​drejeknappen, sammenlignes den nuværende tilstand af CLK med tilstanden af ​​DT. Hvis begge tilstande er ulige, viser det, at knappen har drejet med uret, og dens værdi øges modsat for at vise drejeknappens position. I det modsatte tilfælde tæller dekrementer.

Konklusion

Roterende encodere er avancerede positionssensorer, der kan rotere kontinuerligt. De fås i to typer: inkrementelle og absolutte. Den roterende encoder fungerer ved at tælle impulser genereret på grund af drejningen af ​​knappen. Det har forskellige anvendelser i dagligdagens elektronik til industriel automation.