Kā darbojas rotējošais kodētājs un savienojiet to ar Arduino

Ka Darbojas Rotejosais Kodetajs Un Savienojiet To Ar Arduino



Rotary Encoder ir svarīga elektromehāniska ierīce, kurai ir dažādi pielietojumi elektronikas jomā. Šajā rakstā tiks izskaidroti rotējošā kodētāja veidi un darbība, kā arī tā saskarne ar Arduino.

Kas ir rotējošais kodētājs

Rotējošais kodētājs ir digitālās ievades ierīce, kas uztver rotējošās pogas leņķisko stāvokli un nosūta signālus uz mikrokontrolleru vai jebkuru citu ierīci, ar kuru tie ir pievienoti. Tie var griezties par 360° bez apstāšanās. To sauc arī par vārpstas kodētāju. To izmanto printeros, audio elektronikā, motoros un kontrolleros.









Rotācijas kodētāju veidi

Galvenokārt ir divu veidu rotējošie kodētāji, kurus nosaka, pamatojoties uz to ģenerēto izejas signālu. Šie veidi ir nosaukti:



Inkrementālais rotējošais kodētājs

Šāda veida kodētājs skaita rotējošās pogas apgriezienus impulsu veidā. Kad rokturis vienreiz tiek pagriezts, tiek ģenerēts impulss. Katram impulsam skaitītājs palielinās, lai norādītu vārpstas leņķisko stāvokli.





Absolūtais rotējošais kodētājs

Šāda veida kodētājs sniedz vārpstas absolūto leņķisko stāvokli, jo tam ir atsevišķs kods katrai vārpstas pozīcijai, un tas mēra leņķi caur šo kodu. Tam nav nepieciešams skaitītājs, lai iegūtu leņķiskās pozīcijas izvadi. Pat ja absolūtais rotējošais kodētājs ir atslēgts, attiecīgās leņķisko pozīciju vērtības tiek saglabātas. Tas ir arī zemu izmaksu kodētājs.



Rotācijas kodētāja darbība

Rotējošais kodētājs sastāv no diska ar vienādiem apgabaliem, kas savienoti ar kopēju kontaktu C, kas ir iezemēts. Divas pārējās tapas A un B ir kontakttapas, kas saskaras ar C, kad tiek pagriezta pagriežamā poga. Kad tapa A vai B tiek savienota ar zemi, tiek ģenerēts signāls. Šie signāli, kas ģenerēti no izejas tapām, ir par 90° ārpus fāzes. Tas ir tāpēc, ka tapa A tiek savienota ar zemi, kad pogu pagriež pulksteņrādītāja kustības virzienā, un tapa B tiek savienota ar zemi vispirms, kad pogu pagriež pretēji pulksteņrādītāja virzienam. Tāpēc pogas griešanās virziens tiek noteikts caur šiem savienojumiem.

Ja valsts no B nav vienāds ar A , tad poga ir pagriezta pulksteņrādītāja virzienā.


Ja B stāvoklis ir vienāds ar A, poga ir pagriezta pretēji pulksteņrādītāja virzienam.

Rotējošā kodētāja tapu konfigurācija

Zemāk redzamajā diagrammā ir parādīts rotējošā kodētāja kontaktdakšas, kas parāda izejas tapas A un B, rotējošo slēdzi, ko var izmantot kā spiedpogu, un tapas strāvas padevei.

Rotējošā kodētāja pin apraksts

Tālāk ir sniegts visu rotējošā kodētāja tapu apraksts.

Out B vai CLK

Šī tapa parāda, cik reižu poga vai rotējošais kodētājs ir pagriezts. Katru reizi, kad poga tiek pagriezta, CLK pabeidz HIGH un LOW ciklu. Tas tiek uzskatīts par vienu apgriezienu.

Out A vai DT

Šī ir otrā rotējošā kodētāja izejas tapa, kas nosaka griešanās virzienu. Tas atpaliek no CLK signāla par 90°. Tāpēc, ja tā stāvoklis nav vienāds ar CLK stāvokli, tad griešanās virziens ir pulksteņrādītāja virzienā, pretējā gadījumā pretēji pulksteņrādītāja virzienam.

Slēdzis

Slēdža tapu izmanto, lai pārbaudītu, vai spiedpoga ir nospiesta vai nav.

VCC

Šī tapa ir savienota ar 5 V barošanu

GND

Šī tapa ir savienota ar zemi

Rotācijas kodētāja saskarne ar Arduino

Rotējošajam kodētājam ir piecas tapas. Rotējošā kodētāja VCC un GND ir savienoti ar Arduino. Atlikušās tapas CLK, DT un SW ir savienotas ar Arduino digitālās ievades tapām.

Arduino kods rotējošajam kodētājam

// Rotācijas kodētāja ieejas
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int skaitītājs = 0 ;
int currentCLKState;
int lastCLKState;
Stīgas strāvas virziens = '' ;
neparakstīts long lastButtonPressTime = 0 ;
tukša iestatīšana ( ) {
// Iestatiet kodētāja tapas ievades
    pinMode ( CLK_PIN, IEVADE ) ;
    pinMode ( DT_PIN, IEVADE ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Iestatīt seriālo monitoru
Sērija.sākt ( 9600 ) ;
// Izlasiet CLK sākotnējo stāvokli
lastCLKState = digitalRead ( CLK_PIN ) ;
}
tukša cilpa ( ) {
// Izlasiet pašreizējo CLK stāvokli
currentCLKState = digitalRead ( CLK_PIN ) ;
// Ja Pēdējais un pašreizējais CLK stāvoklis ir atšķirīgs, tad notika pulss
// Reaģēt tikai uz 1 stāvokļa maiņa, lai izvairītos no dubultas uzskaites
ja ( pašreizējaisCLKState ! = pēdējaisCLKState && pašreizējaisCLKState == 1 ) {
// Ja DT stāvoklis atšķiras no CLK stāvokļa, tad
// Kodētājs griežas pretēji pulksteņrādītāja virzienam, tāpēc tiek samazināts
ja ( digitalRead ( DT_PIN ) ! = pašreizējaisCLKState ) {
counter--;
pašreizējaisDirection = 'CCW' ;
} cits {
// Kodētājs griežas pulksteņrādītāja virzienā, tāpēc palieliniet
counter++;
pašreizējaisDirection = 'CW' ;
}
Serial.print ( 'Rotācijas virziens:' ) ;
Serial.print ( pašreizējaisDirection ) ;
Serial.print ( ' | Skaitītāja vērtība: ' ) ;
Serial.println ( skaitītājs ) ;
}
// Atcerieties, Pēdējais CLK stāvoklis
lastCLKState = pašreizējaisCLKState;
// Izlasiet pogas stāvokli
int buttonState = digitalRead ( SW_PIN ) ;
// Ja mēs atklājam LOW signālu, tiek nospiesta poga
ja ( buttonState == LOW ) {
// Ja ir pagājuši 50 ms kopš Pēdējais ZEMS pulss, tas nozīmē, ka
// poga ir nospiesta, atlaista un nospiesta vēlreiz
ja ( millis ( ) - LastButtonPressTime > piecdesmit ) {
Serial.println ( 'Poga nospiesta!' ) ;
}
// Atcerieties, Pēdējais pogas nospiešanas pasākums laiks
lastButtonPressTime = milič ( ) ;
}
// Put iekšā neliela kavēšanās palīdzēt atgrūž lasījumu
kavēšanās ( 1 ) ;
}


Iepriekš dotajā kodā CLK tapas stāvoklis tiek pārbaudīts funkcijā loop (). Ja tas nav vienāds ar iepriekšējo stāvokli, tas parāda, ka pagriežamā poga ir pagriezta. Tagad, lai pārbaudītu pogas griešanās virzienu, pašreizējais CLK stāvoklis tiek salīdzināts ar DT stāvokli. Ja abi stāvokļi nav vienādi, tas parāda, ka poga ir pagriezta pulksteņrādītāja virzienā, un pretstats palielina tās vērtību, lai parādītu rotējošās pogas pozīciju. Pretējā gadījumā pretsamazinājumi.

Secinājums

Rotējošie kodētāji ir uzlaboti pozīcijas sensori, kas var griezties nepārtraukti. Tie ir pieejami divos veidos: inkrementālie un absolūtie. Rotējošais kodētājs darbojas, skaitot impulsus, kas rodas, pagriežot pogu. Tam ir dažādi pielietojumi ikdienas dzīves elektronikā līdz rūpnieciskajai automatizācijai.