Hur Rotary Encoder fungerar och gränssnitt med Arduino

Hur Rotary Encoder Fungerar Och Granssnitt Med Arduino



Rotary Encoder är en viktig elektromekanisk anordning som har olika användningsområden inom elektronikområdet. Den här artikeln kommer att förklara typerna och funktionerna för den roterande kodaren tillsammans med dess gränssnitt med Arduino.

Vad är en roterande kodare

En roterande encoder är en digital ingångsenhet som känner av vridknappens vinkelposition och skickar signaler till mikrokontrollern eller någon annan enhet som de är anslutna till. De kan rotera 360° utan att stanna. Det kallas också en axelkodare. Det används i skrivare, ljudelektronik, motorer och styrenheter.









Typer av roterande kodare

Det finns huvudsakligen två typer av roterande omkodare som bestäms utifrån den utsignal som genereras av dem. Dessa typer heter:



Inkrementell roterande kodare

Denna typ av kodare räknar vridknappens varv i form av pulser. När ratten en gång vrids genereras en puls. För varje puls ökar räknaren för att indikera axelns vinkelposition.





Absolut Rotary Encoder

Denna typ av kodare ger den absoluta vinkelpositionen för axeln, eftersom den har en separat kod för varje axelposition, och den mäter vinkeln genom den koden. Den behöver ingen räknare för att ge en utmatning av vinkelläge. Även om den absoluta vridgivaren är spänningslös, bibehålls respektive värden för vinkellägen. Det är också en lågkostnadskodare.



Funktion av Rotary Encoder

Rotationsgivaren består av en skiva med jämnt fördelade ytor kopplade till ett gemensamt stift C som är jordat. De två andra stiften A och B är kontaktstift som kommer i kontakt med C när vridknappen vrids. När stift A eller B ansluts till marken genereras en signal. Dessa signaler som genereras från utgångsstiften är 90° ur fas. Detta beror på att stift A ansluts till marken när ratten vrids medurs, och stift B ansluts till jord först när ratten vrids moturs. Därför bestäms rattens rotationsriktning genom dessa anslutningar.

Om tillståndet av B är inte lika med A , då har vredet vridits medurs.


Om tillståndet för B är lika med A, har vredet vridits moturs.

Stiftkonfiguration för roterande kodare

Diagrammet nedan ger en stiftuttag för den roterande pulsgivaren som visar utgångsstift A och B, en vridomkopplare som kan användas som tryckknapp och stift för strömförsörjning.

Pin Beskrivning av Rotary Encoder

Följande är den givna beskrivningen av alla roterande encoderstift.

Ut B eller CLK

Denna stift ger en utdata på hur många gånger ratten eller vridgivaren har roterats. Varje gång ratten vrids, slutför CLK en cykel med HÖG och LÅG. Det räknas som en rotation.

Ut A eller DT

Detta är det andra utgångsstiftet på den roterande kodaren som bestämmer rotationsriktningen. Den ligger 90° efter CLK-signalen. Därför, om dess tillstånd inte är lika med CLK:s tillstånd är rotationsriktningen medurs, annars moturs.

Växla

Omkopplarstiftet används för att kontrollera om tryckknappen är intryckt eller inte.

VCC

Detta stift är anslutet till en 5V-matning

GND

Detta stift är anslutet till jord

Interfacing Rotary Encoder med Arduino

Rotationsgivaren har fem stift. VCC och GND för den roterande kodaren är anslutna till den för Arduino. De återstående stiften CLK, DT och SW är anslutna till Arduinos digitala ingångsstift.

Arduino-kod för roterande kodare

// Rotary Encoder-ingångar
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int räknare = 0 ;
int aktuellCLKState;
int lastCLKState;
Strängströmriktning = '' ;
osignerad long lastButtonPressTime = 0 ;
ogiltig installation ( ) {
// Ställ in kodarstiften som ingångar
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Ställ in seriell monitor
Serial.begin ( 9600 ) ;
// Läs initialtillståndet för CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
tom slinga ( ) {
// Läs det aktuella läget för CLK
aktuellCLKState = digitalRead ( CLK_PIN ) ;
// Om sista och nuvarande tillstånd för CLK är annorlunda, sedan en puls uppstod
// Reagera bara på 1 tillståndsändring för att undvika dubbelräkning
om ( nuvarande CLKState ! = sistaCLKState && nuvarandeCLKState == 1 ) {
// Om DT-tillståndet skiljer sig från CLK-tillståndet, sedan
// Kodaren roterar moturs, så minskningen
om ( digitalRead ( DT_PIN ) ! = aktuellCLKState ) {
disken--;
currentDirection = 'CCW' ;
} annan {
// Kodaren roterar medurs, så stega
räknare++;
currentDirection = 'CW' ;
}
Serial.print ( 'Rotationsriktning: ' ) ;
Serial.print ( aktuell riktning ) ;
Serial.print ( ' | Räknarvärde: ' ) ;
Serial.println ( disken ) ;
}
// Kom ihåg sista CLK-tillstånd
lastCLKState = aktuellCLKState;
// Läs knappens status
int buttonState = digitalRead ( SW_PIN ) ;
// Om vi ​​upptäcker en LÅG signal trycks knappen in
om ( buttonState == LÅG ) {
// Om det har gått 50 ms sedan sista LÅG puls betyder det att
// knappen har tryckts ned, släppts och tryckts ned igen
om ( millis ( ) - lastButtonPressTime > femtio ) {
Serial.println ( 'Knapp nedtryckt!' ) ;
}
// Kom ihåg sista knapptryckningshändelse tid
lastButtonPressTime = millis ( ) ;
}
// Sätta i en liten fördröjning till hjälp avstudsa läsningen
dröjsmål ( 1 ) ;
}


I den ovan angivna koden kontrolleras tillståndet för CLK-stiftet i loop()-funktionen. Om det inte är lika med dess tidigare tillstånd, visar det att vridknappen har vridits. Nu, för att kontrollera rattens rotationsriktning, jämförs nuvarande tillstånd för CLK med tillståndet för DT. Om båda tillstånden är olika visar det att vredet har vridits medurs och räknar in dess värde för att visa vridknappens position. I det motsatta fallet, räknare dekrement.

Slutsats

Vridgivare är avancerade positionssensorer som kan rotera kontinuerligt. De finns i två typer: inkrementella och absoluta. Den roterande encodern fungerar genom att räkna pulser som genereras på grund av vridningen av ratten. Den har olika applikationer inom vardagselektronik till industriell automation.