Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Povezivanje enkodera na PIC mikrokontroler. Usklađujemo enkoder i mikrokontroler

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

Ovaj članak će govoriti o enkoderu i kako ga povezati s mikrokontrolerom. Možete ga sresti u uređajima kao što su audio sistemi, mašine za pranje veša, mikrotalasne pećnice i niz modernih uređaja. Na primjer, u audio sistemima, koderi i mikrokontroleri se koriste za kontrolu jačine zvuka. Ali dobro, već dovoljno vode, pređimo na posao.

Enkoder, ili kako ga još nazivaju senzor ugla rotacije, je elektromehanički uređaj koji pretvara položaj ugla 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 ovih impulsa je proporcionalan kutu rotacije osovine. Ako izbrojite ove impulse, možete saznati kut rotacije osovine enkodera. Ako je dugme enkodera u mirovanju, tada se ne generišu impulsi. Ovi koderi se široko koriste u audio sistemima i industrijskim kontrolama.

Apsolutni enkoderi imaju potpuno drugačiji princip rada, baziran na izdavanju jedinstvenog koda za svaku poziciju osovine. Oblikovanje impulsa nastaje kada se osovina rotira i kada miruje. Štaviše, informacije o trenutnom položaju osovine ostat će i nakon prestanka napajanja naponom.

U našem primjeru ćemo povezati inkrementalni enkoder sa mikrokontrolerom. Enkoder PEC12 422OF SOO24 koji ima 24 impulsa po 1 obrtaju.

Enkoder ima 5 pinova, od kojih su 3 pinovi samog enkodera, a druga dva su dugme. Izlazi enkodera imaju jedan zajednički izlaz i 2 druga signala. Shema povezivanja se ne razlikuje od sheme povezivanja konvencionalnog gumba. Signalni izlazi su povezani 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 su konfigurisani u programu kao ulazi i uključuju pull-up otpornike, možete spojiti eksterne otpornike.

Šema povezivanja enkodera na mikrokontroler

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

Ali pošto u bilo kom 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 nivoe koji su prisutni na pinovima mikrokontrolera i upisuje ovu vrijednost u privremenu varijablu. Unutar funkcije anketiranja kodera postoji još jedna statička varijabla koja se pohranjuje pri izlasku iz ove funkcije, ona pohranjuje niz prethodnih vrijednosti. Posljednja upisana vrijednost se uzima iz ove varijable i upoređuje sa trenutnom vrijednošću kako bi se utvrdilo da li je 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 rotira, nova vrijednost će se stalno upisivati ​​u privremenu varijablu i dobiti će se ponavljajući kodni niz. Ako se okrenemo udesno, bulled: 11100001, a ako lijevo, onda 11010010. Iz ovih vrijednosti možete razumjeti u kojem smjeru se osovina okreće.

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

Inkrementalni enkoder spolja sličan potenciometar, ali za razliku od potenciometra, nema ekstremne položaje, može se rotirati u oba smjera neograničen broj okretaja. Također treba napomenuti da se inkrementalni enkoder ne rotira tako glatko kao potenciometar, već u koracima. Može se videti na auto radiju, osciloskop, muzički centar, veš mašina i druga oprema, gde se podešavanje nekog parametra vrši u širokom opsegu. Naravno, parametri se mogu menjati i pomoću dugmadi, na primer, da bi muzika bila 20 vrednosti glasnija, kada kontrolišete dugme, potrebno ga je pritisnuti 20 puta, a kada upravljate enkoderom, okrenite ga na određenog ugla, u zavisnosti od algoritma obrade.

Inkrementalni enkoder je dva kontakta čiji redosled zatvaranja zavisi od smera rotacije.


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

Sastavimo testno kolo prikazano 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 suprotnom smeru kazaljke na satu.


Oscilogrami pokazuju da se u zavisnosti od smera rotacije menja redosled zatvaranja kontakata. Ali prednji dio ne ispadne uvijek tako lijep.


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

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


Pošto je odskok kratkotrajan fenomen, 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 zavisi od implementacije prozivanja izlaza enkodera. Ako status enkodera nadgledan eksternim prekidima, onda je nakon aktiviranja prekida potrebno napraviti odgodu od 20 - 30 milisekundi, tokom kojih MK neće reagirati na promjenu stanja izlaza, odnosno neće osjetiti poskakivanje. Ako Prozivanje izlaza enkodera implementirano na tajmer, tada bi interval između glasanja trebao biti veći od trajanja odbijanja, istih 20 -30 milisekundi.

hajde da razmotrimo metode za obradu podataka koji dolaze iz enkodera.
Prvi metod je da povežemo jednu od nogu enkodera na izlaz eksternih prekida i konfigurišemo ga da prekida na opadajućoj ivici. 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.
#include 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 poređenje trenutnog i prethodnog stanja. Izrazimo logičke nivoe niza impulsa kao nule i jedinice.


Tada dobijamo konačan broj stanja kodera. Prva znamenka je logička razina prvog izlaza enkodera, 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. Ispostavilo se da je moguće popraviti prijelaz iz jednog stanja u drugo i odrediti smjer rotacije, ali najjednostavnija implementacija je kada se krećete sa 11 na 01 i 10. Ispod je kod koji implementira opisani algoritam za AVR,
#define F_CPU 8000000UL #include #include uint8_t zadnje_stanje = 0; ISR(TIMER0_COMP_vect) ( //oba izlaza enkodera su povezana na pinove 2 i 3 porta 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šlost last_state = current_state ; ) int main(void) ( //dva ulaza za povezivanje DDRB enkodera &= ~ 0x06; //povucite ulaze za napajanje PORTB |= 0x06; //izlaz za povezivanje LED DDRB |= 0x01; / /podesite tajmer da se resetuje u režimu slučajnosti TCCR0=(1<To je sve.
Encoder kupljen

U ovom demo projektu razmotrićemo zadatak povezivanja kontrole koja se zove enkoder sa PIC mikrokontrolerom.

Za implementaciju demo projekta potrebno nam je:

  • 24 pozicija koder;
  • 16 LED dioda (3mm);
  • LED drajver ;
  • mikrokontroler.

Enkoder je moderan i originalan element za upravljanje digitalnim uređajima, a po izgledu izgleda kao promjenjivi otpornik (vidi sliku ispod). Drugi naziv za ovu kontrolu je senzor ugla, senzor rotacije. Rotacija osovine je prać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đeno dugme koje se aktivira pritiskom na osovinu enkodera (dodat 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 okrene u drugom smjeru, redoslijed zatvaranja sa kontaktom C se mijenja, tj. pri skretanju ulijevo prvo se zatvaraju B + C, zatim A + C.

Koristeći enkoder u projektima mikrokontrolera, moguće je implementirati nekoliko različitih tipova unosa podataka pomoću istog enkodera, međutim to zahtijeva određene povratne informacije i vizualizaciju kako bi korisnik znao koje informacije unosi i na kojoj poziciji je koder.


Šematski dijagram: povezivanje enkodera na PIC mikrokontroler (kliknite za povećanje)

Izlazi enkodera A i B su povezani na portove mikrokontrolera RB4 i RB5, izlaz enkodera C je spojen na masu. Vrijedi napomenuti da otpornici za povlačenje moraju biti spojeni na signalne linije pinova A i B. Koder nije slučajno povezan sa navedenim I/O linijama mikrokontrolera: prvo, port B ima ugrađene pull-up otpornike i ne moramo da povezujemo eksterne, a drugo, port B mikrokontrolera ima veoma korisna funkcija - "interrupt-on-change" - prekidanje promjenom nivoa, što će nam omogućiti praćenje statusa enkodera.

16 konvencionalnih LED dioda od 3 mm koristi se za vizualizaciju ulaznih podataka i nalazi se na PCB-u oko montiranog enkodera. LED diode su povezane na A6276 čip.

Čip je LED drajver sa 16-bitnim serijskim ulazom. Drajver sadrži 16-bitni CMOS pomakni registar, odgovarajuće kvačice i LED drajvere i može pokretati više LED dioda nego što mikrokontroler može podnijeti. Osim toga, drajver se može kontrolisati preko SPI interfejsa, što dodatno smanjuje broj korištenih I/O linija i čini projekat skalabilnim.

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

  • Režim pozicioniranja od 360° - u ovom modu LED diode pokazuju trenutni "položaj" enkodera, korisnik može okretati osovinu enkodera lijevo i desno pod bilo kojim kutom;
  • "Volume/Level" mod - u ovom modu, LED diode pokazuju trenutnu vrijednost između minimalnog i maksimalnog nivoa ulaznog opsega (kao nivo jačine zvuka u audio uređajima);
  • 3-Position Rotary Switch Mode - U ovom načinu rada, postoje samo tri selektovana položaja koje korisnik bira okretanjem osovine enkodera lijevo/desno.

Demonstracija projekta

Enkoder je stvar koja izgleda kao varijabilni 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" enkoder (odnosno, ako može raditi i kao tipka) je idealan za organiziranje jednodimenzionalnih cikličnih meniji.

Postoje dvije vrste enkodera: apsolutni - koji odmah izdaje šifru ugla rotacije i inkrementalni - izdaje impulse tokom rotacije. Za potonje, mikrokontroler bi trebao biti uključen u brojanje impulsa i njihovo pretvaranje u ugao rotacije.

Sa stanovišta dizajna, koderi su mehanički i optički, u prvom se impulsi tokom rotacije generišu na paru kontakata kada su zatvoreni kliznim kontaktom osovine, u drugom, fotodiode se ponašaju kao kontakti, a uloga kontaktora je LED koji sija kroz disk sa prorezima (zdravo mišu sa kuglom).

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

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


Ovdje su A i B isti kontakti, nivoi na kojima mikrokontroler mora obraditi. Pokretni kontakt ih zatvara za uzemljenje ako ne upadnu u njegove rupe. Ovdje napominjemo da slika pokazuje samo četiri rupe radi jednostavnosti. U stvari, ima mnogo više ovih rupa (opet se prisjećamo miša s kuglom, i kako izgleda njegov optički točak za prekidanje). Zaključci A i B se povlače otpornicima na napon napajanja. Kao rezultat toga, kada se rotiraju, dobijaju se dijagrami prikazani na gornjoj slici.

Neka oba kontakta u početku padnu u rupu, tada će imati visok napon (takođe se povlače na napajanje). Dalje, pri okretanju u smjeru kazaljke na satu, kontakt A će se prvi zatvoriti za tlo, 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 visok nivo, nakon čega kontakt Sustiže ga B. Nakon ovih pomeranja, kontakti se vraćaju u prvobitno stanje, a daljim rotiranjem ovaj dijagram će se ciklički ponavljati.

Tako se ispostavlja da je trenutno stanje kodera opisano dvobitnom vrijednošću. Ali samo po sebi, trenutno stanje nosi malo korisnih informacija, i da bi se analizirala rotacija mora se uzeti u obzir u vezi sa vrednošć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

Binarno Decimala
1110 14
0001 1
0010 2
0111 7

Sada algoritam za određivanje smjera rotacije enkodera izgleda vrlo jednostavno: dobijemo vrijednost i uporedimo da li ona spada u jedan od skupova (2, 4, 11, 13) i (1, 7, 8, 14). Ako da, onda imamo skretanje u odgovarajućem smjeru. Inače, osovina se ili uopće nije rotirala, ili se rotirala tako brzo da je preskočila nekoliko stanja (ako se to često događa, onda biste trebali razmisliti o povećanju frekvencije prozivanja stanja), ili je došlo do "odbijanja" kontakata. Bez udubljivanja u razlog, sve ostale vrijednosti ​​mogu se bezbedno 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 (pošto unutrašnji otpornici atmege ovdje možda neće biti dovoljni za stabilan rad), instaliran je par kondenzatora za suzbijanje impulsnog šuma.

Za takvu šemu 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() se poziva na početku da inicijalizira port i zapamti početnu vrijednost. Funkcija encoderCheck() se poziva u petlji događaja (unutar main() ili na tajmeru). OnEncoderEvent(bool) rukovalac će biti pozvan kad god se enkoder rotira 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 menijem na ovaj način, onda će čak i mali okret gumba enkodera više puta pozvati onEncoderEvent() rukovalac, kao rezultat, kursor menija umesto da se pomeri na sledeći/prethodni element, odmah će leteti na kraj/početak liste. Možete podesiti osjetljivost kodera promjenom frekvencije poziva encoderCheck() (obično je optimalna frekvencija ~ 10 Hz). U isto vrijeme, metodu encoderGetCode() treba pozivati ​​što je češće moguće kako bi uvijek imali trenutnu vrijednost posljednjeg stanja kontakata (sa frekvencijom negdje 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_endr, 0 cbi encoder s encoder, 0 ccobi_0 luka, 1 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, r; 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 suprotnom smjeru kazaljke na satu cpi ZL, 4 breq Encoder_u smjeru kazaljke na satu cpi ZL, 11 breq Encoder_u suprotnom smjeru od kazaljke na satu cpi ZL, 13 breq Encoder_u suprotnom od kazaljke na satu rjmp Encoder_koder; ; ovdje je kod za rukovalac rotacije u smjeru kazaljke na satu; Encoder_counterwise: ; ; 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 objekta rotacije, na primjer, osovine mehanizma, u signal električne struje. U ovom slučaju se ne određuje samo kut rotacije osovine, već i njen smjer rotacije, kao i brzina rotacije i trenutni položaj u odnosu na početni položaj.

Enkoderi su postali najpopularniji kada se koriste u preciznim sistemima kretanja, u fabrikama alatnih mašina, u industrijskim kompleksima koji koriste robotiku, u mernim uređajima u kojima je potrebno beležiti tačna merenja nagiba, rotacija, rotacija i uglova.

Vrste i princip rada

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

Sa enkoderom prikazanim na slici, dugme se takođe može koristiti kao dugme. Ovo je pomoćna funkcija određenog tipa enkodera.

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

  1. Apsolutno.
  2. inkrementalno.

Apsolutni enkoderi

Kod apsolutnog enkodera cijeli krug okretanja je podijeljen na određeni broj sektora, najčešće iste veličine. Ovi sektori su numerisani. Koder tokom rada daje broj sektora u kojem se trenutno nalazi. Zbog toga se naziva apsolutnim. Kod ovog tipa enkodera uvijek je moguće odrediti pod kojim uglom u odnosu na nulti sektor se enkoder rotira u određenom trenutku, odnosno kada se rotira daje vrijednosti brojeva sektora, do maksimalnog vrijednost. Onda 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. Tabela 1 pokazuje redoslijed izlaznih vrijednosti n-tog enkodera. Vrijedi obratiti pažnju na posljednja dva reda, prijelaz sa 127 na 128.

Tabela 1

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

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

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

Grey kod

Gore opisani problem je riješen uvođenjem Grey koda. Karakteristika Grey koda je da kada se koder promeni za jedan, vrednost Grey koda se takođe menja za jedan. Samo jedna vrsta se mijenja. To se može vidjeti u Tabeli 2 upoređujući binarni kod i Grey kod.

tabela 2

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

Prednost ovog koda je u tome što greška o kojoj smo gore govorili nije moguća. Među nedostacima može se primijetiti da mikrokontroler treba da prevede Grey kod u binarni kod kako bi shvatio u kojoj se poziciji nalazi apsolutni enkoder.

Inkrementalni enkoderi

Sljedeći tip je inkrementalni enkoder, koji ima jednostavniju strukturu. Ali u isto vrijeme, on ne pokazuje konkretnu lokaciju svoje olovke. Prikazuje samo smjer rotacije, a broj podjela rotacije mora brojati mikrokontroler.

Inkrementalni enkoder ima skup traka koje su prema zadanim postavkama povezane s uzemljenjem, a kada se okrenu, zatvaraju se i otvaraju. Ispada signal prikazan na slici (slično meandru). Koder ima dvije takve kružne trake. Tragovi su ofset za jednu četvrtinu, a signali su takođe za jednu četvrtinu. Ovo je važno jer vam omogućava da odredite smjer rotacije.

Kolo inkrementalnog enkodera može se prikazati desnom slikom. Tasteri označavaju periodične veze enkodera sa masom. 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 povezana sa zemljom, noge će imati logičku.

Ako je enkoder spojio neku nogu sa zemljom, onda će na ovoj nozi biti logička 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. Dalje, ovi zaključci se redom odvajaju od tla i na njima se ponovo formira logička jedinica.

Možete odrediti smjer rotacije po tome koji od zaključaka je ranije bio spojen na tlo. Prilikom brojanja kompletnih ciklusa, možete računati broj klikova rotacije enkodera.

U stvari, 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 enkoder ne može biti u njima. Mnogi mikrokontroleri implementiraju funkciju brojanja okreta koristeći tajmere koji imaju specifične ulaze. Tajmer broji na hardverskom nivou koliko klikova i u kom smjeru je enkoder 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 ugao rotacije. Enkoder također ima odbijanje kontakta što otežava analizu signala.

Optički enkoderi

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

Optički pretvarač pamti uglove rotacije. U ovom slučaju, svaka pojedinačna pozicija odgovara posebnom digitalnom kodu, koji zajedno sa brojem okretaja čini mjernu jedinicu enkodera. Enkoder je povezan i radi na isti način kao inkrementalni enkoder.

Prema prirodi svog funkcionisanja dijele se na fotonaponski I magnetna . Princip rada magneta zasniva se na čijoj upotrebi je 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 tačnosti i rezolucije, magnetni tip senzora je inferiorniji od fotoelektričnog, ali je u pogledu dizajna jednostavniji, manje zahtjevan za radne uvjete i prostor. Magnetni enkoder je uređaj koji detektuje prolazak magnetnog pola magneta tokom rotacije, a nalazi se pored senzorskog elementa. Informacije o predajniku su izražene u digitalnom kodu.

Fotoelektrični enkoder je senzor zasnovan na fotoelektričnom principu. Ovaj efekat se primećuje kada svetlosni tok deluje na supstancu. Ovaj princip je otkriven 1887. Tokom rada takvog senzora dolazi do konstantne konverzije snopa svjetlosti u signal električne struje.

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

Top Related Articles