Kuidas Rotary Encoder töötab ja liidestage see Arduinoga

Kuidas Rotary Encoder Tootab Ja Liidestage See Arduinoga



Rotary Encoder on oluline elektromehaaniline seade, millel on elektroonika valdkonnas mitmekülgne kasutusala. See artikkel selgitab pöörleva kodeerija tüüpe ja toimimist ning selle liidest Arduinoga.

Mis on Rotary Encoder

Pöördkooder on digitaalne sisendseade, mis tunneb ära pöördnupu nurgaasendi ja saadab signaale mikrokontrollerile või muule seadmele, millega need on ühendatud. Need võivad peatumata pöörata 360°. Seda nimetatakse ka võllkooderiks. Seda kasutatakse printerites, helielektroonikas, mootorites ja kontrollerites.









Rotary kodeerijate tüübid

Peamiselt on kahte tüüpi pöörlevaid kodeerijaid, mille üle otsustatakse nende genereeritud väljundsignaali põhjal. Neid tüüpe nimetatakse:



Inkrementaalne pöörlev kodeerija

Seda tüüpi kodeerija loendab pöördnupu pöördeid impulsside kujul. Kui nuppu üks kord pöörata, genereeritakse impulss. Iga impulsi korral suureneb loendur, et näidata võlli nurgaasendit.





Absoluutne pöörlev kodeerija

Seda tüüpi andur annab võlli absoluutse nurgaasendi, kuna sellel on iga võlli asendi jaoks eraldi kood ja see mõõdab selle koodi kaudu nurka. Nurgaasendi väljundi andmiseks pole loendurit vaja. Isegi kui absoluutne pöörlev andur on pingest välja lülitatud, säilivad vastavad nurgapositsioonide väärtused. See on ka odav kodeerija.



Rotary kodeerija töö

Pöördkooder koosneb võrdsete aladega plaadist, mis on ühendatud ühise viiguga C, mis on maandatud. Kaks teist tihvti A ja B on kontakttihvtid, mis puutuvad kokku C-ga, kui pöördnupp on pööratud. Kui kontakt A või B ühendatakse maandusega, genereeritakse signaal. Need väljundviigudest genereeritud signaalid on 90° faasist väljas. Selle põhjuseks on asjaolu, et tihvt A ühendatakse maandusega, kui nuppu keeratakse päripäeva, ja tihvt B ühendub maandusega esimesena, kui nuppu keeratakse vastupäeva. Seetõttu määratakse nende ühenduste kaudu nupu pöörlemise suund.

Kui riik B ei ole võrdne A , siis on nupp päripäeva keeranud.


Kui B olek on võrdne A-ga, on nupp pöördunud vastupäeva.

Pöördkodeerija tihvtide konfiguratsioon

Allpool toodud diagramm annab pöördkoodri väljundi, millel on väljundviigud A ja B, pöördlüliti, mida saab kasutada surunupuna, ja toiteallika kontaktid.

Pin Pöördkodeerija kirjeldus

Järgnevalt on toodud kõigi pöörlevate koodri kontaktide kirjeldus.

Out B või CLK

See tihvt annab väljundi, mitu korda nupp või pöördkooder on pööranud. Iga kord, kui nuppu keeratakse, lõpetab CLK tsükli HIGH ja LOW. Seda arvestatakse ühe pöördena.

Out A või DT

See on pöörleva kooderi teine ​​väljundtihvt, mis määrab pöörlemissuuna. See jääb CLK signaalist maha 90° võrra. Seega, kui selle olek ei ole võrdne CLK olekuga, on pöörlemissuund päripäeva, vastasel juhul vastupäeva.

Lüliti

Lülititihvti kasutatakse selleks, et kontrollida, kas surunupp on vajutatud või mitte.

VCC

See kontakt on ühendatud 5 V vooluvõrku

GND

See tihvt on ühendatud maandusega

Rotary Encoderi liidestamine Arduinoga

Pöördkooderil on viis kontakti. Pöörleva kodeerija VCC ja GND on ühendatud Arduino omaga. Ülejäänud tihvtid CLK, DT ja SW on ühendatud Arduino digitaalsisendi tihvtidega.

Arduino kood pöörleva kodeerija jaoks

// Rotary kodeerija sisendid
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int loendur = 0 ;
int currentCLKState;
int lastCLKState;
Stringi voolu suund = '' ;
allkirjastamata long lastButtonPressTime = 0 ;
tühine seadistus ( ) {
// Määrake kodeerija kontaktid nagu sisendid
    pinMode ( CLK_PIN, SISEND ) ;
    pinMode ( DT_PIN, SISEND ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Seadistage jadamonitor
Serial.begin ( 9600 ) ;
// Lugege CLK algolekut
lastCLKState = digitaalne lugemine ( CLK_PIN ) ;
}
tühi silmus ( ) {
// Lugege CLK hetkeseisu
currentCLKState = digitalRead ( CLK_PIN ) ;
// Kui viimane ja CLK praegune olek on erinev, siis tekkis pulss
// Reageerige ainult 1 oleku muutmine topeltloendamise vältimiseks
kui ( praeguneCLKSolek ! = viimaneCLKSolek && praeguseCLKSolek == 1 ) {
// Kui DT olek erineb CLK olekust, siis
// Kooder pöörleb vastupäeva, seega väheneb
kui ( digitaalne lugemine ( DT_PIN ) ! = praegune CLKSolek ) {
counter--;
praeguseDirection = 'CCW' ;
} muidu {
// Kodeerija pöörleb päripäeva, seega suurendage
loendur++;
praeguseDirection = 'CW' ;
}
Serial.print ( 'Pöörlemise suund:' ) ;
Serial.print ( praegune suund ) ;
Serial.print ( ' | Vastuväärtus: ' ) ;
Serial.println ( loendur ) ;
}
// Pea meeles viimane CLK olek
lastCLKState = praeguneCLKSolek;
// Lugege nupu olekut
int buttonState = digitaalneRead ( SW_PIN ) ;
// Kui tuvastame LOW signaali, vajutatakse nuppu
kui ( buttonState == LOW ) {
// Kui kuupäevast on möödunud 50 ms viimane MADAL pulss tähendab, et
// nuppu on vajutatud, vabastatud ja uuesti vajutatud
kui ( millis ( ) - lastButtonPressTime > viiskümmend ) {
Serial.println ( 'Nupp vajutatud!' ) ;
}
// Pea meeles viimane nupuvajutuse sündmus aega
lastButtonPressTime = millis ( ) ;
}
// Pane sisse väike viivitus abi tõrjuma näitu
viivitus ( 1 ) ;
}


Ülaltoodud koodis kontrollitakse CLK viigu olekut funktsioonis loop(). Kui see ei ole võrdne eelmise olekuga, näitab see, et pöördnupp on pöörlenud. Nüüd, et kontrollida nupu pöörlemissuunda, võrreldakse CLK praegust olekut DT olekuga. Kui mõlemad olekud on ebavõrdsed, näitab see, et nupp on pööratud päripäeva, ja loendur suurendab selle väärtust, et näidata pöördnupu asendit. Vastupidisel juhul vähendatakse vastukaalu.

Järeldus

Pöörlevad kodeerijad on täiustatud asendiandurid, mis võivad pidevalt pöörata. Need on saadaval kahte tüüpi: inkrementaalsed ja absoluutsed. Pöördkooder töötab nupu pöörlemise tõttu tekkivate impulsside loendamisega. Sellel on mitmesuguseid rakendusi igapäevaelus elektroonikas kuni tööstusautomaatikani.