Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Spajanje enkodera na PIC mikrokontroler. Usklađujemo enkoder i mikrokontroler

Spajanje enkodera na PIC mikrokontroler. Usklađujemo enkoder i mikrokontroler

Ovaj članak će raspravljati o koderu i kako ga spojiti na mikrokontroler. Možete ga susresti u uređajima kao što su audio sustavi, perilice rublja, mikrovalne pećnice i niz modernih uređaja. Na primjer, u audio sustavima se za kontrolu glasnoće koriste koderi i mikrokontroleri. Ali dobro, već dovoljno vode, prijeđimo na posao.

Enkoder, ili kako ga još nazivaju senzor kuta rotacije, je elektromehanički uređaj koji pretvara položaj kuta osovine u električni signal. Koderi se dijele na 2 tipa apsolutne i inkrementalne.

U inkrementalnim enkoderima, kada se osovina okreće, generiraju se impulsi, broj tih impulsa proporcionalan je kutu rotacije osovine. Ako prebrojite ove impulse, možete saznati kut rotacije osovine enkodera. Ako je gumb kodera u mirovanju, tada se ne generiraju impulsi. Ovi koderi se široko koriste u audio sustavima i industrijskim kontrolama.

Apsolutni koderi imaju potpuno drugačiji princip rada, koji se temelji na izdavanju jedinstvenog koda za svaki položaj osovine. Oblikovanje pulsa događa se kada se osovina okreće i kada miruje. Štoviše, informacije o trenutnom položaju osovine ostat će i nakon prestanka napajanja naponom.

U našem primjeru spojit ćemo inkrementalni enkoder s mikrokontrolerom. Enkoder PEC12 422OF SOO24 koji ima 24 impulsa po 1 okretaju.

Enkoder ima 5 pinova, od kojih su 3 igle samog enkodera, a druga dva su gumb. Izlazi kodera imaju jedan zajednički izlaz i 2 druga signala. Shema povezivanja se ne razlikuje od sheme povezivanja konvencionalnog gumba. Signalni izlazi su spojeni na I/O portove mikrokontrolera. A zajednički izlaz koji je u sredini spojen je na masu. Kako biste se zaštitili od odbijanja kontakta, možete dodati kondenzatore s kapacitetom od nekoliko nF. Izlazi na koje smo spojili enkoder konfigurirani su u programu kao ulazi i uključuju pull-up otpornike, možete spojiti vanjske otpornike.

Shema spajanja enkodera na mikrokontroler

Princip rada enkodera temelji se na zatvaranju i otvaranju kontakata, kada nitko ne okreće gumb, tada se nalazi logička jedinica na ulazu u MK. Kada se ručka počne okretati, pojavljuju se dva pravokutna impulsa koji su pomaknuti jedan u odnosu na drugi. U kojem ćemo smjeru skrenuti ovisit će o tome koji je signal ispred nas.

Ali budući da u bilo kojem postoji prijateljstvo kontakata, slika će izgledati ovako.

Algoritam programa mikrokontrolera

Poziv funkcije prozivanja kodera počinje u određenom intervalu. Ova funkcija čita logičke razine koje su prisutne na pinovima mikrokontrolera i zapisuje ovu vrijednost u privremenu varijablu. Unutar funkcije prozivanja kodera postoji još jedna statička varijabla koja se sprema pri izlasku iz ove funkcije, ona pohranjuje slijed prethodnih vrijednosti. Posljednja upisana vrijednost uzima se iz ove varijable i uspoređuje s trenutnom vrijednošću kako bi se utvrdilo je li došlo do promjene. Ako su ove vrijednosti jednake, funkcija izlazi, a ako se razlikuju, vrijednost statičke varijable se pomiče 2 bita ulijevo i nova (trenutna) vrijednost se upisuje na "slobodno" mjesto.

Ispada da kada se osovina enkodera okreće, nova vrijednost će se stalno upisivati ​​u privremenu varijablu i dobiti će se ponavljajući kodni niz. Ako zakrenemo udesno, bulled: 11100001, a ako ulijevo, onda 11010010. Iz ovih vrijednosti možete razumjeti u kojem smjeru se osovina vrti.

Arhiva sadrži 2 datoteke encoder.h i encoder.c. U početku morate postaviti port i broj pinova na koje se spaja, to su varijable LEFT_SPIN i RIGHT_SPIN. Datoteka "c" sadrži implementaciju funkcija.

Inkrementalni koder izvana sličan potenciometar, ali za razliku od potenciometra, nema ekstremne položaje, može se okretati u oba smjera neograničen broj okretaja. Također treba napomenuti da se inkrementalni enkoder ne okreće glatko kao potenciometar, već u koracima. Može se vidjeti na radiju u autu, osciloskop, glazbeni centar, perilica rublja i druga oprema, gdje se podešavanje nekog parametra provodi u širokom rasponu. Naravno, parametri se mogu mijenjati i pomoću tipki, na primjer, kako bi glazba bila 20 vrijednosti glasnija, kada upravljate tipkom, trebate je pritisnuti 20 puta, a kada upravljate enkoderom, okrenite ga na određeni kut, ovisno o algoritmu obrade.

Inkrementalni koder je dva kontakta čiji red zatvaranja ovisi o smjeru rotacije.


Zapravo inkrementalni enkoder pretvara rotaciju osovine u električne impulse, koji sadrži informacije o smjeru rotacije.

Sastavimo ispitni krug prikazan na gornjoj slici i spojimo ga na pin A i B osciloskop, pull-up otpornici - 4,7K.
Okrenite enkoder u smjeru kazaljke na satu.


Sada u smjeru suprotnom od kazaljke na satu.


Oscilogrami pokazuju da se, ovisno o smjeru vrtnje, mijenja redoslijed zatvaranja kontakata. Ali prednji dio ne ispada uvijek tako lijep.


Budući da su kontakti mehanički, skloni su odbijanju, odnosno pri zatvaranju zbog elastičnosti materijala dolazi do višestrukog nekontroliranog zatvaranja i otvaranja, što je vidljivo na oscilogramu iznad.

Postoje dva načina da se nosite sa zveckanjem. prvi sastoji se u dodavanju kondenzatora i otpornika, kao što je prikazano na donjoj slici.


Budući da je odbijanje kratkotrajna pojava, kondenzator ga lako gasi.


Oscilogram pokazuje da su nakon ugradnje kondenzatora prednje strane postale manje strme, a odskok je nestao.

Drugi način- softver i sve ovisi o provedbi prozivanja izlaza kodera. Ako je a status enkodera nadgledan vanjskim prekidima, tada nakon što se prekid aktivira, potrebno je napraviti odgodu od 20 - 30 milisekundi, tijekom kojih MK neće reagirati na promjenu stanja izlaza, odnosno neće osjetiti poskakivanje. Ako je a Prozivanje izlaza kodera implementirano na timer, tada bi interval između anketa trebao biti veći od trajanja odbijanja, istih 20 -30 milisekundi.

razmotrimo metode za obradu podataka koji dolaze iz kodera.
Prva metoda je da spojimo jednu od nogu enkodera na izlaz vanjskih prekida i konfiguriramo ga da prekida na rubu pada. U prekidu provjeravamo stanje druge noge i ako je nula, onda se rotacija događa u jednom smjeru, inače u drugom. Ispod je kod koji implementira ovu metodu za AVR.
#uključiti ISR(INT2_vect) ( ako (PINB & 0X02) ( PORTB |= (1<<0); } else { PORTB &= ~(1<<0); } //антидребезг _delay_ms(20); //сбрасываем флаг прерывания вызванный дребезгом GIFR = (1<Kada okrenete enkoder u jednom smjeru, LED svijetli, kada ga okrenete u drugom smjeru, gasi se.

Druga metoda je da usporedba sadašnjeg i prethodnog stanja. Izrazimo logičke razine niza impulsa kao nule i jedinice.


Tada dobivamo konačan broj stanja kodera. Prva znamenka je logička razina prvog izlaza kodera, druga je logička razina drugog izlaza.

Pretpostavimo da je posljednje stanje u kojem se nalazio koder jednako tri, ako je sljedeće stanje jednako jednom, onda se rotira u jednom smjeru, ako dva, onda u drugom. Pokazalo se da je moguće popraviti prijelaz iz jednog stanja u drugo i odrediti smjer rotacije, ali najjednostavnija implementacija je kada se krećete s 11 na 01 i 10. Ispod je kod koji implementira opisani algoritam za AVR,
#define F_CPU 8000000UL #include #uključiti uint8_t zadnje_stanje = 0; ISR(TIMER0_COMP_vect) ( //oba izlaza kodera spojena su na pinove 2 i 3 priključka B //očitajte njihovo stanje uint8_t current_state = (PINB & 0x06)>>1; //uzmite u obzir prijelaz samo ako je prethodno stanje 11 //i ako nije jednako novom if ((last_state == 3) && (last_state != current_state)) ( //ako je novo stanje 01 - upali LED if(current_state == 1) ( PORTB |= 0x01; ) //ako je novo stanje 10 - ugasi LED if(current_state == 2) (PORTB &= ~0x01; ) ) //prilikom izlaska iz prekida, trenutno stanje postaje prošlo zadnje_state = current_state ; ) int main(void) ( //dva ulaza za spajanje DDRB enkodera &= ~ 0x06; //povucite ulaze za napajanje PORTB |= 0x06; //izlaz za spajanje LED DDRB |= 0x01; / /postaviti tajmer na resetiranje slučajno TCCR0=(1<To je sve.
Enkoder kupljen

U ovom demo projektu razmotrit ćemo zadatak povezivanja kontrole zvane enkoder s PIC mikrokontrolerom.

Za provedbu demo projekta potrebno nam je:

  • 24 položajni koder;
  • 16 LED dioda (3mm);
  • LED drajver ;
  • mikrokontroler.

Enkoder je moderan i originalan element za upravljanje digitalnim uređajima, a izgledom izgleda kao promjenjivi otpornik (vidi sliku ispod). Drugi naziv za ovu kontrolu je senzor kuta, senzor rotacije. Rotacija osovine je popraćena klikovima, na primjer 24 klika po okretu. Enkoder ima 3 izlaza - A, B, C i služi za brzi unos podataka u digitalne uređaje. Neki modeli imaju ugrađenu tipku koja se aktivira pritiskom na osovinu enkodera (dodan je još jedan izlaz).

Kako radi koder

Prilikom okretanja jednog klika, na primjer, udesno, prvo se zatvara kontakt A + C, a zatim B + C. Kada se osovina okrene u ovom kliku, kontakti se otvaraju istim redoslijedom. Kada se osovina okreće u drugom smjeru, slijed zatvaranja s kontaktom C se mijenja, t.j. pri skretanju ulijevo prvo se zatvaraju B + C, zatim A + C.

Korištenjem enkodera u projektima mikrokontrolera moguće je implementirati nekoliko različitih tipova unosa podataka pomoću istog enkodera, međutim to zahtijeva određenu povratnu informaciju i vizualizaciju kako bi korisnik znao koje podatke unosi i na kojoj poziciji se koder nalazi.


Shematski dijagram: spajanje enkodera na PIC mikrokontroler (kliknite za povećanje)

Izlazi enkodera A i B spojeni su na priključke mikrokontrolera RB4 i RB5, izlaz enkodera C spojen je na masu. Važno je napomenuti da otpornici za povlačenje moraju biti spojeni na signalne linije pinova A i B. Koder nije slučajno spojen na navedene I/O linije mikrokontrolera: prvo, port B ima ugrađene pull-up otpornike i ne moramo spajati vanjske, a drugo, port B mikrokontrolera ima vrlo korisna funkcija - "interrupt-on-change" - prekid promjenom razine, što će nam omogućiti praćenje statusa enkodera.

16 konvencionalnih LED dioda od 3 mm koristi se za vizualizaciju ulaznih podataka i bit će smješteno na PCB-u oko montiranog enkodera. LED diode su spojene na A6276 čip.

Čip je LED drajver sa 16-bitnim serijskim ulazom. Upravljački program sadrži 16-bitni CMOS pomakni registar, odgovarajuće zasune i LED drajvere i može pokretati više LED dioda nego što mikrokontroler može podnijeti. Osim toga, drajverom se može upravljati putem SPI sučelja, što dodatno smanjuje broj korištenih I/O linija i čini projekt skalabilnim.

Softver mikrokontrolera za rješavanje našeg problema relativno je jednostavan. Postoje 3 načina rada (unos informacija) i povratne informacije:

  • Način pozicioniranja od 360° - u ovom načinu rada LED diode pokazuju trenutni "položaj" enkodera, korisnik može okretati osovinu enkodera lijevo i desno pod bilo kojim kutom;
  • Način rada "Glasnoća/Razina" - u ovom načinu rada LED diode pokazuju trenutnu vrijednost između minimalne i maksimalne razine ulaznog raspona (kao što je razina glasnoće u audio uređajima);
  • Način rada s rotirajućim prekidačem s 3 položaja - U ovom načinu rada postoje samo tri položaja za odabir koje korisnik bira okretanjem osovine enkodera lijevo/desno.

Demonstracija projekta

Enkoder je stvar koja izgleda kao promjenjivi otpornik, ali, za razliku od potonjeg, nema limitera i može se beskonačno rotirati u bilo kojem smjeru. Uz pomoć enkodera vrlo je zgodno organizirati sve vrste izbornika na ekranu, općenito, jedan "pritisni" koder (odnosno, ako može raditi i kao gumb) idealan je za organiziranje jednodimenzionalnih cikličkih izbornicima.

Postoje dvije vrste enkodera: apsolutni - odmah izdavanje koda kuta rotacije i inkrementalni - izdavanje impulsa tijekom rotacije. Za potonje, mikrokontroler bi trebao biti uključen u brojanje impulsa i njihovo pretvaranje u kut rotacije.

Sa stajališta dizajna, koderi su mehanički i optički, u prvom se impulsi tijekom rotacije generiraju na paru kontakata kada su zatvoreni kliznim kontaktom osovine, u drugom, fotodiode igraju ulogu kontakata, a uloga kontaktora je LED koja svijetli kroz disk s prorezima (pozdrav mišu s kuglom) .

Iako postoji puno informacija o programiranju kodera na mreži, kao i gotovih knjižnica za to, sve su one nekako nepotrebno glomazne (IMHO) - ispitivanje statusa se obično implementira kao državni stroj u obliku prekidača blok s ugniježđenim ifs, što izgleda pomalo komplicirano (osobito kada je napisano u asembleru). Iako bi implementacija mogla biti jednostavnija.

Najpopularniji u nacionalnom gospodarstvu su jeftini mehanički inkrementalni koderi, a mi ćemo ih razmotriti. Proces rotacije osovine enkodera shematski je prikazan na slici (gore - rotacija u smjeru kazaljke na satu, dolje - suprotno od kazaljke na satu):


Ovdje su A i B isti kontakti, razine na kojima mikrokontroler mora obraditi. Pokretni kontakt ih zatvara za tlo ako ne upadnu u njegove rupe. Ovdje napominjemo da slika prikazuje samo četiri rupe radi jednostavnosti. Zapravo, ovih rupa je puno više (opet se prisjećamo miša s kuglom, i kako izgleda njegov optički kotačić za prekidanje). Zaključci A i B se povlače otpornicima na napon napajanja. Kao rezultat toga, kada se zakreću, dobivaju se dijagrami prikazani na gornjoj slici.

Neka oba kontakta u početku padnu u rupu, tada će imati visoku razinu napona (također se povlače na napajanje). Nadalje, pri okretanju u smjeru kazaljke na satu, kontakt A će se prvi zatvoriti na masu, zatim će mu se pridružiti kontakt B. Zatim, kada dođe do sljedeće rupe na disku, kontakt A će se otvoriti i dobiti visoku razinu, nakon čega kontakt B Nakon ovih pomicanja kontakti se vraćaju u prvobitno stanje, a daljnjom rotacijom ovaj dijagram će se ciklički ponavljati.

Dakle, ispada da je trenutno stanje kodera opisano dvobitnom vrijednošću. Ali samo po sebi, trenutno stanje nosi malo korisnih informacija, a da bi se analizirala rotacija mora se uzeti u obzir u vezi s vrijednošću prethodnog stanja. I ovaj par već nedvosmisleno određuje smjer rotacije ručke. Radi praktičnosti, uzmimo četverobitni broj, čija dva visoka bajta sadrže prethodna stanja kontakata A i B, a dva niža bajta sadrže trenutna.

I pri rotaciji u smjeru suprotnom od kazaljke na satu

Binarni Decimal
1110 14
0001 1
0010 2
0111 7

Sada algoritam za određivanje smjera rotacije enkodera izgleda vrlo jednostavno: dobivamo vrijednost i uspoređujemo spada li u jedan od skupova (2, 4, 11, 13) i (1, 7, 8, 14). Ako da, onda imamo skretanje u odgovarajućem smjeru. Inače se osovina ili uopće nije okretala ili se okretala toliko brzo da je preskočila nekoliko stanja (ako se to često događa, onda biste trebali razmisliti o povećanju učestalosti prozivanja stanja), ili je došlo do "odbijanja" kontakata. Bez udubljivanja u razlog, sve ostale vrijednosti ​​mogu se sigurno zanemariti.

Kao primjer, razmotrite rad enkodera u kombinaciji s AVR mikrokontrolerom:


Ovdje se za povezivanje koriste dva donja izlaza PB porta mikrokontrolera ATMega8. Par otpornika povlači ove vodove do napona napajanja (budući da unutarnji otpornici atmege ovdje možda neće biti dovoljni za stabilan rad), instaliran je par kondenzatora za suzbijanje impulsnog šuma.

Za takvu shemu povezivanja možete skicirati sljedeću implementaciju u jeziku C:

Statički uint8_t encoderGetVal() (vrati PINB & 3;) statički uint8_t encoderGetCode() ( statički uint8_t prev; uint8_t val = encoderGetVal(); uint8_t kod = (pret<< 2) | val; prev = val; return code; } static void encoderInit() { DDRB &= ~0b11; PORTB |= 0b11; encoderGetCode(); } void onEncoderEvent(bool direction); void encoderCheck() { uint8_t code = encoderGetCode(); if (code == 1 || code == 7 || code == 8 || code == 14) { onEncoderEvent(true); } else if (code == 2 || code == 4 || code == 11 || code == 13) { onEncoderEvent(false); } }

Kod je jednostavan za sramotu - nekoliko if-ova i nema konačnih automata. Funkcija encoderInit() poziva se na početku kako bi inicijalizirala port i zapamtila početnu vrijednost. Funkcija encoderCheck() poziva se u petlji događaja (unutar main() ili na mjeraču vremena). Rukovatelj onEncoderEvent(bool) bit će pozvan kad god se koder okrene i primi oznaku smjera rotacije.

Ali ovdje postoji jedna važna točka: koder je osjetljiva stvar i ako pokušate obraditi, na primjer, događaje navigacije izbornikom na ovaj način, tada će čak i mali okret gumba kodera više puta pozvati rukovatelja onEncoderEvent(), kao rezultat toga, pokazivač izbornika umjesto da se pomakne na sljedeći/prethodni element, odmah će letjeti na kraj/početak liste. Osjetljivost kodera možete podesiti promjenom frekvencije poziva encoderCheck() (obično je optimalna frekvencija ~ 10 Hz). Istodobno, metodu encoderGetCode() treba pozivati ​​što je češće moguće kako bi uvijek imala trenutnu vrijednost posljednjeg stanja kontakata (s frekvencijom od oko ~ 100 Hz).

U asembleru ovaj kod može izgledati ovako:

EQU encoder_port PORTB .EQU encoder_pin PINB .EQU encoder_ddr DDRB .DSEG .ORG SRAM_START sEncoderPrev: .BYTE 1 ... .CSEG .ORG $0000 ... Encoder_init: cbi encoder_ddr, 0 cbi encoder_endr, 0 cbi encoder_port, 0 cbi encoder_port u r0, encoder_pin andi r0, 3 ss sEncoderPrev, r0 ... Encoder_check lds ZL, sEncoderPrev lsl ZL lsl ZL u r0, encoder_pin andi r0, 3 ss sEncoderPrev, r0 ili ZL; 1 7 8 14 -> u smjeru kazaljke na satu cpi ZL, 1 breq Encoder_clockwise cpi ZL, 7 breq Encoder_clockwise cpi ZL, 8 breq Encoder_clockwise cpi ZL, 14 breq Encoder_clockwise cpi ZL ; 2 4 11 13 -> suprotno od kazaljke na satu cpi ZL, 2 breq Encoder_u smjeru kazaljke na satu cpi ZL, 4 breq Encoder_u smjeru kazaljke na satu cpi ZL, 11 breq Encoder_u smjeru suprotnom od kazaljke na satu cpi ZL, 13 breq Encoder_u suprotnom od kazaljke na satu rjmp Encoder_koder_koder; ; ovdje je kod za rukovalac rotacije u smjeru kazaljke na satu; Enkoder_u smjeru suprotnom od kazaljke na satu: ; ; ovdje je kod za rukovanje rotacijom u smjeru suprotnom od kazaljke na satu; Interval_enc_done.

Ukratko, koderi se mogu nazvati pretvaračima kutnih pomaka. Oni služe za modificiranje kuta rotacije predmeta rotacije, na primjer, osovine mehanizma, u signal električne struje. U tom slučaju se ne određuje samo kut rotacije osovine, već i njezin smjer vrtnje, kao i brzina vrtnje i trenutni položaj u odnosu na početni položaj.

Enkoderi su postali najpopularniji kada se koriste u sustavima za precizno gibanje, u tvornicama alatnih strojeva, u industrijskim kompleksima koji koriste robotiku, u mjernim uređajima koji trebaju bilježiti točna mjerenja nagiba, rotacija, rotacija i kutova.

Vrste i princip rada

Enkoderi su senzori rotacije. Najjednostavniji senzor ima ručku koja se može rotirati u smjeru kazaljke na satu ili suprotno. Ovisno o kutu rotacije i smjeru, ispušta se digitalni signal koji vas obavještava o položaju u kojem se ručka nalazi, odnosno u kojem smjeru je okrenuta.

Uz enkoder prikazan na slici, gumb se također može koristiti kao tipka. Ovo je pomoćna funkcija određene vrste kodera.

Prema vrsti izlaznih podataka, koderi se dijele u dvije velike skupine:

  1. Apsolutno.
  2. inkrementalni.

Apsolutni koderi

Kod apsolutnog enkodera cijeli krug okretanja podijeljen je na određeni broj sektora, najčešće iste veličine. Ovi sektori su numerirani. Koder tijekom rada daje broj sektora u kojem se trenutno nalazi. Zato se naziva apsolutnim. Kod ovog tipa enkodera uvijek je moguće odrediti pod kojim kutom u odnosu na nulti sektor se koder zakreće u određenom trenutku, odnosno kada se zakreće daje vrijednosti brojeva sektora, do maksimalnog vrijednost. Zatim se vraća na nulu.

Ako se osovina enkodera okrene u suprotnom smjeru, počet će davati suprotne vrijednosti. U našem slučaju, koristi pet pinova za izlaz vrijednosti rotacije.

Ovaj algoritam ima svoje nedostatke. Tablica 1 prikazuje redoslijed izlaznih vrijednosti n-tog kodera. Vrijedno je obratiti pažnju na posljednja dva retka, prijelaz sa 127 na 128.

stol 1

Ovdje se mijenjaju apsolutno svi bitovi. U idealnom koderu svi se mijenjaju u isto vrijeme i nema problema. U praksi, u stvarnom koderu, bitovi se mijenjaju brzo, ali ne istovremeno. I u nekom trenutku, izlaz enkodera je potpuno proizvoljna vrijednost. Budući da se svi bitovi mijenjaju, enkoder će imati proizvoljnu vrijednost od nule do svih jedinica.

Primjer takvog prekidača prikazan je na desnoj strani. Što bi mogla biti prijetnja? Uzmimo primjer. Mikrokontroler uz pomoć motora upravlja osovinom i zakreće je pod određenim kutom. U određenom trenutku, pri prelasku sa 127 na 128 ćeliju, dobiva određenu slučajnu vrijednost. Kontrolor zaključuje da se osovina nalazi na sasvim drugom mjestu, za razliku od stvarnog mjesta, i počinje ga okretati u drugom smjeru, drugom brzinom itd.

Nakon određenog vremena, mikrokontroler dobiva ispravnu vrijednost, počinje pokušavati zaustaviti osovinu i rotirati je u pravom smjeru. Takav proces može trajati dugo vremena, pod uvjetom da se takva pogreška često javlja. Takve greške su nepravilne i teško ih je izračunati.

Grey kod

Gore opisani problem riješen je uvođenjem Grey koda. Značajka Grey koda je da kada se koder promijeni za jedan, vrijednost Gray koda također se mijenja za jedan. Mijenja se samo jedna vrsta. To se može vidjeti u tablici 2. usporedbom binarnog koda i koda Graya.

tablica 2

Prva dva retka su ista, ali se srednji dio već promijenio u drugom retku. Tada se i jedan dio mijenja. Također je vrijedno napomenuti da se zadnji i prvi Grey kod razlikuju za jedan bit, odnosno da se Grey kod može zapetljati.

Prednost ovog koda je što gore opisana pogreška nije moguća. Među nedostacima može se primijetiti da mikrokontroler treba prevesti Grayjev kod u binarni kod kako bi razumio u kojoj se poziciji nalazi apsolutni enkoder.

Inkrementalni koderi

Sljedeći tip je inkrementalni koder, koji ima jednostavniju strukturu. Ali u isto vrijeme, on ne pokazuje točno mjesto svoje olovke. Pokazuje samo smjer vrtnje, a broj podjela rotacije mora brojati mikrokontroler.

Inkrementalni enkoder ima skup traka koje su prema zadanim postavkama spojene na masu, a kada se okrenu, zatvaraju se i otvaraju. Ispada signal prikazan na slici (slično meandru). Koder ima dvije takve kružne trake. Trake su pomaknute za jednu četvrtinu, a signali su također za jednu četvrtinu. To je važno jer vam omogućuje određivanje smjera rotacije.

Krug inkrementalnog kodera može se prikazati desnom slikom. Gumbi označavaju periodične veze enkodera s uzemljenjem. Budući da enkoder nije spojen na logičku jedinicu iznutra, potrebno je samostalno povući logičke jedinice kroz otpornike na izlaz enkodera izvana. U ovom slučaju, kada nijedna od nogu enkodera nije spojena na uzemljenje, noge će imati logičan.

Ako je koder spojio neku nogu s uzemljenjem, tada će na ovoj nozi biti logična nula. U mirnom stanju, izlaz enkodera je logička jedinica. Kada se enkoder počne okretati u bilo kojem smjeru, tada je prvo jedan izlaz spojen na masu, a zatim drugi. Nadalje, ti se zaključci redom odvajaju od tla i na njima se ponovno formira logička cjelina.

Možete odrediti smjer rotacije koji je od zaključaka ranije spojen na tlo. Kada brojite pune cikluse, možete izbrojati broj klikova rotacije kodera.

Zapravo, koder ima četiri stanja:

  1. Dvije jedinice.
  2. Nula i jedan.
  3. Nula i nula.
  4. Jedan i nula.

Tri stanja koja nisu jednaka jedinici su nestabilna i koder ne može biti u njima. Mnogi mikrokontroleri implementiraju funkciju brojanja okreta pomoću mjerača vremena koji imaju specifične ulaze. Tajmer broji na razini hardvera koliko klikova i u kojem smjeru je koder bio okrenut i daje vrijednost. To jest, brojač povećava bilo koji broj.

Promjenom ovog broja možete odrediti na koliko klikova je koder okrenut. Po broju klikova možete odrediti kut rotacije. Koder također ima odbijanje kontakta, što otežava analizu signala.

Optički koderi

Takav pretvarač je izrađen u obliku diska pričvršćenog na osovinu i izrađenog od stakla. Optički senzor rotacije razlikuje se od ostalih tipova po dodatnom optičkom nizu koji se pomiče kada se osovina okreće. Istodobno, pretvara trenutak rotacije u svjetlosni tok, koji zatim prima fotosenzor.

Optički pretvarač pamti kutove rotacije. U tom slučaju svaki pojedinačni položaj odgovara posebnom digitalnom kodu, koji zajedno s brojem okretaja čini mjernu jedinicu enkodera. Enkoder je povezan i radi na isti način kao inkrementalni koder.

Prema prirodi svog funkcioniranja dijele se na fotonaponski i magnetski . Princip rada magneta temelji se na čijoj je upotrebi prvi put otkriven 1879. godine. U ovom slučaju, razlika potencijala se pojavljuje samo kada se DC žica nalazi u magnetskom polju.

U pogledu svojstava točnosti i razlučivosti, magnetski tip senzora je inferiorniji od fotoelektričnog, ali je u pogledu dizajna jednostavniji, manje zahtjevan za radne uvjete i prostor. Magnetski enkoder je uređaj koji detektira prolazak magnetskog pola magneta tijekom rotacije, a nalazi se pored senzorskog elementa. Informacije o odašiljaču izražene su u digitalnom kodu.

Fotoelektrični enkoder je senzor baziran na fotoelektričnom principu. Ovaj učinak se opaža kada svjetlosni tok djeluje na tvar. Ovaj princip je otkriven 1887. Tijekom rada takvog senzora dolazi do stalne pretvorbe snopa svjetlosti u signal električne struje.

Analogi fotoelektričnog kodera su optoelektronički, optički i. Ovi senzori su osjetljiviji na proizvodne karakteristike, rad i druge čimbenike od ostalih modela. Međutim, to je opravdano njihovom povećanom preciznošću, za razliku od konkurenata.

Vrhunski povezani članci