Hvordan Rotary Encoder fungerer og grensesnitt med Arduino

Hvordan Rotary Encoder Fungerer Og Grensesnitt Med Arduino



Rotary Encoder er en viktig elektromekanisk enhet som har forskjellige bruksområder innen elektronikk. Denne artikkelen vil forklare typene og funksjonene til den roterende koderen sammen med dens grensesnitt med Arduino.

Hva er en Rotary Encoder

En roterende koder er en digital inngangsenhet som registrerer vinkelposisjonen til dreieknappen og sender signaler til mikrokontrolleren eller en hvilken som helst annen enhet de er koblet til. De kan rotere 360° uten å stoppe. Det kalles også en akselkoder. Den brukes i skrivere, lydelektronikk, motorer og kontrollere.









Typer roterende kodere

Det er hovedsakelig to typer roterende kodere som bestemmes basert på utgangssignalet som genereres av dem. Disse typene heter:



Inkrementell roterende koder

Denne typen koder teller omdreininger av dreieknappen i form av pulser. Når knappen er rotert én gang, genereres en puls. For hver puls øker telleren for å indikere vinkelposisjonen til akselen.





Absolutt Roterende Encoder

Denne typen koder gir den absolutte vinkelposisjonen til akselen, siden den har en egen kode for hver akselposisjon, og den måler vinkelen gjennom den koden. Den trenger ikke en teller for å gi en utgang av vinkelposisjon. Selv om den absolutte rotasjonsgiveren er spenningsløs, beholdes respektive verdier for vinkelposisjoner. Det er også en lavkostkoder.



Virkning av Rotary Encoder

Den roterende koderen består av en skive med likt fordelte områder koblet til en felles pinne C som er jordet. De to andre pinnene A og B er kontaktstifter som kommer i kontakt med C når dreieknappen dreies. Når pinne A eller B blir koblet til bakken, genereres et signal. Disse signalene generert fra utgangspinner er 90° ute av fase. Dette er fordi pinne A blir koblet til bakken når knappen dreies med klokken, og pinne B kobles til jorden først når knappen dreies mot klokken. Derfor bestemmes knottens rotasjonsretning gjennom disse koblingene.

Hvis tilstanden til B er ikke lik EN , så har knotten dreid med klokken.


Hvis tilstanden til B er lik A, har knotten dreid mot klokken.

Pin-konfigurasjon av roterende koder

Diagrammet gitt nedenfor gir en pinout av rotasjonsgiveren som viser utgangspinner A og B, en dreiebryter som kan brukes som trykknapp, og pinner for strømforsyning.

Pin Beskrivelse av Rotary Encoder

Følgende er gitt beskrivelse av alle roterende encoder pinner.

Ut B eller CLK

Denne pinnen gir en utgang på hvor mange ganger knotten eller encoderen har rotert. Hver gang knotten roteres, fullfører CLK en syklus med HØY og LAV. Det regnes som én rotasjon.

Ut A eller DT

Dette er den andre utgangspinnen til den roterende koderen som bestemmer rotasjonsretningen. Den ligger 90° bak CLK-signalet. Derfor, hvis tilstanden ikke er lik CLKs tilstand, er rotasjonsretningen med klokken, ellers mot klokken.

Bytte om

Bryterpinnen brukes til å sjekke om trykknappen er trykket inn eller ikke.

VCC

Denne pinnen er koblet til en 5V-forsyning

GND

Denne pinnen er koblet til bakken

Interfacing Rotary Encoder med Arduino

Rotasjonsgiveren har fem pinner. VCC og GND til den roterende koderen er koblet til den til Arduino. De resterende pinnene CLK, DT og SW er koblet til de digitale inngangspinnene til Arduino.

Arduino-kode for Rotary Encoder

// Roterende Encoder-innganger
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int teller = 0 ;
int gjeldendeCLKState;
int sisteCLKState;
Strengestrømretning = '' ;
usignert long lastButtonPressTime = 0 ;
ugyldig oppsett ( ) {
// Still inn koderpinner som innganger
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Sett opp seriell monitor
Serial.begin ( 9600 ) ;
// Les starttilstanden til CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
ugyldig sløyfe ( ) {
// Les gjeldende status for CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Hvis siste og nåværende tilstand til CLK er annerledes, deretter en puls oppstod
// Reager kun på 1 tilstandsendring for å unngå dobbelttelling
hvis ( nåværende CLKState ! = sisteCLKState && gjeldendeCLKState == 1 ) {
// Hvis DT-tilstanden er forskjellig fra CLK-tilstanden, deretter
// Enkoderen roterer mot klokken, så reduksjonen
hvis ( digitallest ( DT_PIN ) ! = gjeldende CLKState ) {
disk--;
gjeldende retning = 'CCW' ;
} ellers {
// Enkoderen roterer med klokken, så øk
teller++;
gjeldende retning = 'CW' ;
}
Serial.print ( 'Rotasjonsretning: ' ) ;
Serial.print ( gjeldende retning ) ;
Serial.print ( ' | Tellerverdi: ' ) ;
Serial.println ( disk ) ;
}
// Husk siste CLK-tilstand
sisteCLKState = gjeldendeCLKState;
// Les knappens tilstand
int buttonState = digitalRead ( SW_PIN ) ;
// Hvis vi oppdager et LAVT signal, trykkes knappen
hvis ( buttonState == LAV ) {
// Hvis det har gått 50 ms siden siste LAV puls betyr det at
// -knappen har blitt trykket, sluppet og trykket igjen
hvis ( millis ( ) - lastButtonPressTime > femti ) {
Serial.println ( 'Knappen trykket!' ) ;
}
// Husk siste knappen trykk hendelse tid
lastButtonPressTime = millis ( ) ;
}
// Sette i en liten forsinkelse til hjelp avvise lesingen
forsinkelse ( 1 ) ;
}


I den ovenfor angitte koden kontrolleres tilstanden til CLK-pinnen i loop()-funksjonen. Hvis den ikke er lik sin forrige tilstand, viser den at dreieknappen har rotert. Nå, for å sjekke retningen på knottens rotasjon, sammenlignes den nåværende tilstanden til CLK med tilstanden til DT. Hvis begge tilstandene er ulik, viser den at knotten har rotert med klokken og teller opp verdien for å vise posisjonen til knotten. I motsatt tilfelle, tellereduksjoner.

Konklusjon

Roterende enkodere er avanserte posisjonssensorer som kan rotere kontinuerlig. De er tilgjengelige i to typer: inkrementelle og absolutte. Den roterende encoderen fungerer ved å telle pulser generert på grunn av rotasjonen av knotten. Den har forskjellige bruksområder i dagliglivets elektronikk til industriell automasjon.