Kako deluje rotacijski kodirnik in ga povežemo z Arduinom

Kako Deluje Rotacijski Kodirnik In Ga Povezemo Z Arduinom



Rotacijski kodirnik je pomembna elektromehanska naprava, ki ima raznoliko uporabo na področju elektronike. Ta članek bo razložil vrste in delovanje rotacijskega dajalnika skupaj z njegovim vmesnikom z Arduinom.

Kaj je rotacijski kodirnik

Rotacijski kodirnik je digitalna vhodna naprava, ki zaznava kotni položaj vrtljivega gumba in pošilja signale mikrokrmilniku ali kateri koli drugi napravi, na katero je povezan. Lahko se vrtijo za 360° brez ustavljanja. Imenuje se tudi osni dajalnik. Uporablja se v tiskalnikih, avdio elektroniki, motorjih in krmilnikih.









Vrste rotacijskih dajalnikov

Obstajata predvsem dve vrsti rotacijskih dajalnikov, ki se odločata glede na izhodni signal, ki ga ustvarita. Te vrste so poimenovane:



Inkrementalni rotacijski kodirnik

Ta tip dajalnika šteje vrtljaje vrtljivega gumba v obliki impulzov. Ko enkrat zavrtite gumb, se ustvari impulz. Za vsak impulz se števec poveča, da prikaže kotni položaj gredi.





Absolutni rotacijski kodirnik

Ta tip dajalnika daje absolutni kotni položaj gredi, saj ima ločeno kodo za vsak položaj gredi in meri kot skozi to kodo. Za prikaz kotnega položaja ne potrebuje števca. Tudi če je absolutni rotacijski dajalnik brez napetosti, se ustrezne vrednosti za kotne položaje ohranijo. Je tudi poceni kodirnik.



Delovanje rotacijskega dajalnika

Rotacijski dajalnik je sestavljen iz diska z enakomerno razmaknjenimi območji, ki je povezan s skupnim zatičem C, ki je ozemljen. Druga dva zatiča A in B sta kontaktna zatiča, ki prideta v stik s C, ko zavrtite vrtljivi gumb. Ko se nožica A ali B poveže z maso, se ustvari signal. Ti signali, ustvarjeni iz izhodnih zatičev, so za 90° zamaknjeni v fazi. To je zato, ker se nožica A poveže z maso, ko gumb obrnete v smeri urinega kazalca, nožica B pa se najprej poveže z maso, ko gumb zavrtite v nasprotni smeri urnega kazalca. Zato je smer vrtenja gumba določena prek teh povezav.

Če je stanje B ni enako A , potem se je gumb obrnil v smeri urinega kazalca.


Če je stanje B enako A, se je gumb obrnil v nasprotni smeri urinega kazalca.

Konfiguracija zatiča rotacijskega dajalnika

Spodnji diagram prikazuje pinout vrtljivega dajalnika, ki prikazuje izhodna zatiča A in B, vrtljivo stikalo, ki se lahko uporablja kot potisni gumb, in zatiče za napajanje.

Pin Opis rotacijskega dajalnika

Sledi opis vseh pinov rotacijskega dajalnika.

Izhod B ali CLK

Ta zatič daje izhod, kolikokrat se je zavrtel gumb ali vrtljivi kodirnik. Vsakič, ko zavrtite gumb, CLK zaključi cikel HIGH in LOW. Šteje se kot ena rotacija.

Izven A ali DT

To je drugi izhodni zatič rotacijskega dajalnika, ki določa smer vrtenja. Za signalom CLK zaostaja 90°. Torej, če njegovo stanje ni enako stanju CLK, je smer vrtenja v smeri urinega kazalca, drugače pa v nasprotni smeri urinega kazalca.

Stikalo

Zatič stikala se uporablja za preverjanje, ali je tipka pritisnjena ali ne.

VCC

Ta zatič je priključen na napajanje 5 V

GND

Ta zatič je povezan z ozemljitvijo

Povezovanje rotacijskega kodirnika z Arduinom

Rotacijski dajalnik ima pet pinov. VCC in GND rotacijskega dajalnika sta povezana z Arduino. Preostali zatiči CLK, DT in SW so povezani z digitalnimi vhodnimi zatiči Arduino.

Koda Arduino za rotacijski kodirnik

// Vhodi rotacijskega kodirnika
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int števec = 0 ;
int currentCLKState;
int lastCLKState;
Smer toka niza = '' ;
unsigned long lastButtonPressTime = 0 ;
nastavitev praznine ( ) {
// Nastavite zatiče kodirnika kot vložki
    pinMode ( CLK_PIN, VNOS ) ;
    pinMode ( DT_PIN, VNOS ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Nastavite serijski monitor
Serial.begin ( 9600 ) ;
// Preberite začetno stanje CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
prazna zanka ( ) {
// Preberite trenutno stanje CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Če je zadnji in trenutno stanje CLK je drugačno, potem pojavil se je utrip
// Reagiraj samo na 1 sprememba stanja, da se prepreči dvojno štetje
če ( trenutno stanje CLKS ! = zadnje CLKSstate && trenutno CLKSstate == 1 ) {
// Če je stanje DT drugačno od stanja CLK, potem
// Dajalnik se vrti v nasprotni smeri urinega kazalca, zato dekrement
če ( digitalRead ( DT_PIN ) ! = trenutno stanje CLK ) {
proti--;
trenutna smer = 'CCW' ;
} drugače {
// Dajalnik se vrti v smeri urinega kazalca, zato se poveča
števec++;
trenutna smer = 'CW' ;
}
Serijski.natis ( 'Smer vrtenja: ' ) ;
Serijski.natis ( trenutna smer ) ;
Serijski.natis ( ' | Protivrednost: ' ) ;
Serial.println ( števec ) ;
}
// Zapomnite si zadnji stanje CLK
lastCLKState = trenutnoCLKSstate;
// Preberite stanje gumba
int buttonState = digitalRead ( SW_PIN ) ;
// Če zaznamo nizek signal, pritisnemo gumb
če ( buttonState == LOW ) {
// Če je minilo 50 ms od zadnji NIZEK utrip, to pomeni, da je
// je bil gumb pritisnjen, izpuščen in ponovno pritisnjen
če ( milis ( ) - lastButtonPressTime > petdeset ) {
Serial.println ( 'Gumb pritisnjen!' ) ;
}
// Zapomnite si zadnji dogodek pritiska na gumb čas
lastButtonPressTime = millis ( ) ;
}
// Postavite v manjša zamuda pri pomoč odbiti branje
zamuda ( 1 ) ;
}


V zgornji kodi se stanje pina CLK preveri v funkciji loop(). Če ni enak prejšnjemu stanju, pomeni, da se je vrtljivi gumb zavrtel. Za preverjanje smeri vrtenja gumba se trenutno stanje CLK primerja s stanjem DT. Če obe stanji nista enaki, kaže, da se je gumb zavrtel v smeri urinega kazalca, nasprotnik pa poveča svojo vrednost, da prikaže položaj vrtljivega gumba. V nasprotnem primeru se števec zmanjša.

Zaključek

Rotacijski dajalniki so napredni senzorji položaja, ki se lahko neprekinjeno vrtijo. Na voljo so v dveh vrstah: inkrementalni in absolutni. Rotacijski dajalnik deluje tako, da šteje impulze, ki nastanejo zaradi vrtenja gumba. Ima različne aplikacije v vsakodnevni elektroniki do industrijske avtomatizacije.