Kako radi rotacijski koder i njegovo sučelje s Arduinom

Kako Radi Rotacijski Koder I Njegovo Sucelje S Arduinom



Rotacijski enkoder je važan elektromehanički uređaj koji ima različite namjene u području elektronike. Ovaj će članak objasniti vrste i rad rotacijskog kodera zajedno s njegovim sučeljem s Arduinom.

Što je rotacijski enkoder

Rotacijski enkoder je digitalni ulazni uređaj koji očitava kutni položaj okretnog gumba i šalje signale mikrokontroleru ili bilo kojem drugom uređaju na koji je spojen. Mogu se okretati za 360° bez zaustavljanja. Također se naziva osovinski enkoder. Koristi se u pisačima, audio elektronici, motorima i kontrolerima.









Vrste rotacijskih enkodera

Postoje uglavnom dvije vrste rotacijskih enkodera koji se određuju na temelju izlaznog signala koji oni generiraju. Ove vrste se nazivaju:



Inkrementalni rotacijski enkoder

Ovaj tip enkodera broji okretaje okretnog gumba u obliku impulsa. Kada se gumb jednom okrene, generira se puls. Za svaki impuls, brojač se povećava kako bi pokazao kutni položaj osovine.





Apsolutni rotacijski koder

Ovaj tip enkodera daje apsolutni kutni položaj osovine, jer ima zasebnu šifru za svaku poziciju osovine i mjeri kut kroz tu šifru. Ne treba mu brojač da bi dao izlaz kutnog položaja. Čak i ako je apsolutni rotacijski koder bez napona, odgovarajuće vrijednosti za kutne položaje se zadržavaju. Također je jeftin koder.



Rad rotacijskog enkodera

Rotacijski enkoder sastoji se od diska s jednako razmaknutim područjima spojenim na zajednički pin C koji je uzemljen. Druge dvije igle A i B su kontaktne igle koje dolaze u kontakt s C kada se okretni gumb okreće. Kada se pin A ili B spoji na masu, tada se generira signal. Ovi signali generirani iz izlaznih pinova su 90° izvan faze. To je zato što se kontakt A povezuje s uzemljenjem kada se gumb okrene u smjeru kazaljke na satu, a kontakt B prvi se spoji na masu kada se gumb okrene u smjeru suprotnom od kazaljke na satu. Stoga se smjer vrtnje gumba određuje preko ovih spojeva.

Ako je stanje B nije jednako A , tada se gumb okrenuo u smjeru kazaljke na satu.


Ako je stanje B jednako A, gumb se okrenuo suprotno od kazaljke na satu.

Pin konfiguracija rotacijskog kodera

Donji dijagram daje prikaz pinova rotacijskog kodera koji prikazuje izlazne pinove A i B, okretni prekidač koji se može koristiti kao tipkalo i pinove za napajanje.

Pin Opis rotacijskog kodera

Slijedi opis svih pinova rotacijskog kodera.

Van B ili CLK

Ovaj pin daje izlaz koliko se puta gumb ili rotacijski enkoder okrenuo. Svaki put kada se gumb okrene, CLK dovršava ciklus HIGH i LOW. Računa se kao jedna rotacija.

Van A ili DT

Ovo je drugi izlazni pin rotacijskog enkodera koji određuje smjer vrtnje. Zaostaje 90° za CLK signalom. Stoga, ako njegovo stanje nije jednako stanju CLK-a tada je smjer rotacije u smjeru kazaljke na satu, u suprotnom, u suprotnom smjeru.

Sklopka

Zatik prekidača služi za provjeru je li tipka pritisnuta ili ne.

VCC

Ovaj pin je spojen na napajanje od 5 V

GND

Ovaj pin je spojen na masu

Povezivanje rotacijskog kodera s Arduinom

Rotacijski enkoder ima pet pinova. VCC i GND rotacijskog kodera spojeni su na Arduino. Preostali pinovi CLK, DT i SW spojeni su na digitalne ulazne pinove Arduina.

Arduino kod za rotacijski koder

// Ulazi za rotacijski koder
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int brojač = 0 ;
int currentCLKState;
int lastCLKState;
Smjer struje niza = '' ;
unsigned long lastButtonPressTime = 0 ;
void setup ( ) {
// Postavite pinove kodera kao ulazi
    pinMode ( CLK_PIN, ULAZ ) ;
    pinMode ( DT_PIN, ULAZ ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Postavljanje serijskog monitora
Serijski.početi ( 9600 ) ;
// Očitajte početno stanje CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
void petlja ( ) {
// Pročitajte trenutno stanje CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Ako je posljednji a trenutno stanje CLK je drugačije, zatim pojavio se puls
// Reagirajte samo na 1 promjena stanja kako bi se izbjeglo dvostruko brojanje
ako ( trenutno CLKS stanje ! = zadnje CLKS stanje && trenutno CLKS stanje == 1 ) {
// Ako je DT stanje različito od CLK stanja, zatim
// Enkoder se okreće u smjeru suprotnom od kazaljke na satu, tako da dekrement
ako ( digitalRead ( DT_PIN ) ! = trenutno CLKS stanje ) {
brojač--;
trenutni smjer = 'CCW' ;
} drugo {
// Enkoder se okreće u smjeru kazaljke na satu, pa povećavajte
brojač++;
trenutni smjer = 'CW' ;
}
Serijski.ispis ( 'Smjer rotacije: ' ) ;
Serijski.ispis ( trenutni smjer ) ;
Serijski.ispis ( ' | Protuvrijednost: ' ) ;
Serijski.println ( brojač ) ;
}
// Zapamtite posljednji CLK stanje
lastCLKState = trenutnoCLKSstate;
// Pročitajte stanje gumba
int buttonState = digitalRead ( SW_PIN ) ;
// Ako detektiramo LOW signal, tipka se pritisne
ako ( buttonState == LOW ) {
// Ako je prošlo 50 ms od posljednji NIZAK puls, znači da je
// tipka je pritisnuta, otpuštena i ponovno pritisnuta
ako ( millis ( ) - lastButtonPressTime > pedeset ) {
Serijski.println ( 'Gumb pritisnut!' ) ;
}
// Zapamtite posljednji događaj pritiska gumba vrijeme
lastButtonPressTime = millis ( ) ;
}
// Staviti u malo kašnjenje do Pomozite debounce čitanje
odgoditi ( 1 ) ;
}


U gore navedenom kodu, stanje CLK pina provjerava se u funkciji loop(). Ako nije jednak prethodnom stanju, to znači da se okretni gumb okrenuo. Sada, za provjeru smjera rotacije gumba, trenutno stanje CLK se uspoređuje sa stanjem DT. Ako su oba stanja nejednaka, to pokazuje da se gumb zakrenuo u smjeru kazaljke na satu, a brojač povećava svoju vrijednost kako bi pokazao položaj okretnog gumba. U suprotnom slučaju, brojač se smanjuje.

Zaključak

Rotacijski enkoderi su napredni senzori položaja koji se mogu kontinuirano okretati. Dostupni su u dvije vrste: inkrementalni i apsolutni. Rotacijski enkoder radi tako što broji impulse generirane rotacijom gumba. Ima različite primjene u svakodnevnoj elektronici do industrijske automatizacije.