Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • Lidhja e koduesit me mikrokontrolluesin PIC. Ne përputhemi me koduesin dhe mikrokontrolluesin

Lidhja e koduesit me mikrokontrolluesin PIC. Ne përputhemi me koduesin dhe mikrokontrolluesin

Ky artikull do të diskutojë koduesin dhe si ta lidhni atë me mikrokontrolluesin. Mund ta takoni në pajisje të tilla si sisteme audio, lavatriçe, mikrovalë dhe një numër pajisjesh moderne. Për shembull, në sistemet audio, koduesit dhe mikrokontrolluesit përdoren për të kontrolluar volumin. Por në rregull, mjaft ujë tashmë, le të fillojmë me biznesin.

Një kodues, ose siç quhet edhe sensori i këndit të rrotullimit, është një pajisje elektromekanike që konverton pozicionin e këndit të boshtit në një sinjal elektrik. Koduesit ndahen në 2 lloje absolute dhe në rritje.

Në koduesit rritës, kur boshti rrotullohet, gjenerohen impulse, numri i këtyre impulseve është në proporcion me këndin e rrotullimit të boshtit. Nëse i numëroni këto impulse, mund të zbuloni këndin e rrotullimit të boshtit të koduesit. Nëse pulla e koduesit është në qetësi, atëherë nuk krijohen impulse. Këta kodues përdoren gjerësisht në sistemet audio dhe kontrollet industriale.

Koduesit absolut kanë një parim krejtësisht të ndryshëm të funksionimit, bazuar në lëshimin e një kodi unik për çdo pozicion bosht. Formimi i pulsit ndodh kur boshti rrotullohet dhe kur është në qetësi. Për më tepër, informacioni për pozicionin aktual të boshtit do të mbetet edhe pas ndërprerjes së furnizimit me tension.

Në shembullin tonë, ne do të lidhim një kodues në rritje me një mikrokontrollues. Koder PEC12 422OF SOO24 i cili ka 24 impulse për 1 rrotullim.

Enkoderi ka 5 kunja, 3 prej tyre janë kunjat e vetë koduesit dhe dy të tjerët janë butoni. Daljet e koduesit kanë një dalje të përbashkët dhe 2 sinjale të tjera. Skema e lidhjes nuk është e ndryshme nga skema e lidhjes së një butoni konvencional. Daljet e sinjalit lidhen me portat I/O të mikrokontrolluesit. Dhe dalja e përbashkët që është në mes lidhet me tokën. Për të mbrojtur kundër kërcimit të kontaktit, mund të shtoni kondensatorë me një kapacitet prej disa nF. Daljet me të cilat lidhëm koduesin janë konfiguruar në program si hyrje dhe aktivizojnë rezistorët tërheqës, mund të lidhni rezistorë të jashtëm.

Skema e lidhjes së koduesit me mikrokontrolluesin

Parimi i funksionimit të koduesit bazohet në mbylljen dhe hapjen e kontakteve, kur askush nuk e kthen dorezën, atëherë ka një njësi logjike në hyrjen në MK. Kur doreza fillon të rrotullohet, shfaqen dy impulse drejtkëndëshe që zhvendosen në lidhje me njëri-tjetrin. Në cilin drejtim do të kthehemi do të varet nga cili sinjal është përpara.

Por meqenëse ka një miqësi kontaktesh në cilindo, fotografia do të duket kështu.

Algoritmi i programit të mikrokontrolluesit

Thirrja në funksionin e votimit të koduesit fillon në një interval të caktuar. Ky funksion lexon nivelet logjike që janë të pranishme në kunjat e mikrokontrolluesit dhe e shkruan këtë vlerë në një ndryshore të përkohshme. Brenda funksionit të sondazhit të koduesit ka një variabël tjetër statike që ruhet kur del nga ky funksion, ruan sekuencën e vlerave të mëparshme. Vlera e fundit e shkruar merret nga kjo variabël dhe krahasohet me vlerën aktuale për të përcaktuar nëse ka pasur një ndryshim. Nëse këto vlera janë të barabarta, funksioni del dhe nëse ndryshojnë, vlera e ndryshores statike zhvendoset 2 bit majtas dhe një vlerë e re (aktuale) shkruhet në vendin "e lirë".

Rezulton se kur boshti i koduesit rrotullohet, një vlerë e re do të shkruhet vazhdimisht në ndryshoren e përkohshme dhe do të merret një sekuencë kodi përsëritëse. Nëse rrotullojmë në të djathtë, bulled: 11100001, dhe nëse në të majtë, atëherë 11010010. Nga këto vlera, ju mund të kuptoni se në cilin drejtim boshti po rrotullohet.

Arkivi përmban 2 skedarë encoder.h dhe encoder.c. Fillimisht, duhet të vendosni portën dhe numrin e kunjave me të cilat po lidheni, këto janë variablat LEFT_SPIN dhe RIGHT_SPIN. Skedari "c" përmban zbatimin e funksioneve.

Koder inkremental nga pamja e jashtme e ngjashme me potenciometër, por ndryshe nga një potenciometër, ai nuk ka pozicione ekstreme, ai mund të rrotullohet në të dy drejtimet një numër të pakufizuar rrotullimesh. Duhet gjithashtu të theksohet se koduesi në rritje nuk rrotullohet aq mirë sa një potenciometër, por me hapa. Mund të shihet në radion e makinës, oshiloskop, qendër muzikore, lavatriçe dhe pajisje të tjera, ku rregullimi i disa parametrave kryhet në një gamë të gjerë. Sigurisht, parametrat mund të ndryshohen edhe duke përdorur butonat, për shembull, për ta bërë muzikën 20 vlera më të zhurmshme, kur kontrolloni butonin, duhet ta shtypni atë 20 herë, dhe kur kontrolloni koduesin, kthejeni atë në një kënd të caktuar, në varësi të algoritmit të përpunimit.

Koder inkrementalështë dy kontakte radha e mbylljes së të cilave varet nga drejtimi i rrotullimit.


Në fakt koduesi inkremental konverton rrotullimin e boshtit në impulse elektrike, që përmban informacion për drejtimin e rrotullimit.

Le të montojmë qarkun e provës të treguar në figurën e mësipërme dhe të lidhemi me kunjat A dhe B oshiloskop, rezistenca tërheqëse - 4.7K.
Ktheni koduesin në drejtim të akrepave të orës.


Tani në të kundërt të akrepave të orës.


Oshilogramet tregojnë se në varësi të drejtimit të rrotullimit ndryshon rendi i mbylljes së kontakteve. Por pjesa e përparme nuk del gjithmonë aq e bukur.


Meqenëse kontaktet janë mekanike, ato janë të prirura të kërcejnë, domethënë kur mbyllen për shkak të elasticitetit të materialeve, ndodhin mbyllje dhe hapje të pakontrolluar të shumëfishtë, gjë që mund të shihet në oshilogramin e mësipërm.

Ka dy mënyra për t'u marrë me zhurmën. së pari konsiston në shtimin e kondensatorëve dhe rezistorëve, siç tregohet në foton më poshtë.


Meqenëse kërcimi është një fenomen afatshkurtër, ai shuhet lehtësisht nga kondensatori.


Oshilogrami tregon se pas instalimit të kondensatorëve, pjesët e përparme u bënë më pak të pjerrëta dhe kërcimi u zhduk.

Mënyra e dytë- softuer dhe gjithçka varet nga zbatimi i sondazhit të daljeve të koduesit. Nëse statusi i koduesit i monitoruar nga ndërprerje të jashtme, atëherë pasi të aktivizohet ndërprerja, është e nevojshme të bëhet një vonesë prej 20 - 30 milisekonda, gjatë së cilës MK nuk do t'i përgjigjet një ndryshimi në gjendjen e daljes, domethënë nuk do të ndjejë një kërcim. Nëse Daljet e koduesit të votimit zbatohen në një kohëmatës, atëherë intervali ndërmjet sondazheve duhet të jetë më i madh se kohëzgjatja e fryrjes, e njëjta 20 -30 milisekonda.

le të shqyrtojmë metodat për përpunimin e të dhënave që vijnë nga koduesi.
Metoda e parë është që ne lidhim një nga këmbët e koduesit me daljen e ndërprerjeve të jashtme dhe e konfigurojmë atë që të ndërpresë në një skaj që bie. Në interrupt kontrollojmë gjendjen e këmbës tjetër dhe nëse është zero, atëherë rrotullimi ndodh në një drejtim, përndryshe në tjetrin. Më poshtë është kodi që zbaton këtë metodë për AVR.
#përfshi ISR(INT2_vect) ( nëse (PINB & 0X02) ( PORTB |= (1<<0); } else { PORTB &= ~(1<<0); } //антидребезг _delay_ms(20); //сбрасываем флаг прерывания вызванный дребезгом GIFR = (1<Kur e ktheni koduesin në një drejtim, LED ndizet, kur e ktheni në drejtimin tjetër, fiket.

Metoda e dytë është që krahasimi i gjendjes aktuale dhe asaj të mëparshme. Le të shprehim nivelet logjike të trenit të pulsit si zero dhe njëshe.


Pastaj marrim një numër të kufizuar të gjendjeve të koduesit. Shifra e parë është niveli logjik i daljes së parë të koduesit, e dyta është niveli logjik i daljes së dytë.

Supozoni se gjendja e fundit në të cilën ishte vendosur koduesi është e barabartë me tre, nëse gjendja tjetër është e barabartë me një, atëherë ai rrotullohet në një drejtim, nëse dy, atëherë në tjetrin. Rezulton se është e mundur të rregullohet kalimi nga një gjendje në tjetrën dhe të përcaktohet drejtimi i rrotullimit, por zbatimi më i thjeshtë është kur lëvizni nga 11 në 01 dhe 10. Më poshtë është kodi që zbaton algoritmin e përshkruar për AVR,
#përcaktoni F_CPU 8000000UL #përfshini #përfshi uint8_t gjendja e fundit = 0; ISR(TIMER0_COMP_vect) ( //të dy daljet e koduesit janë të lidhura me kunjat 2 dhe 3 të portës B //lexoni gjendjen e tyre uint8_t aktuale_state = (PINB & 0x06)>>1; //merr parasysh kalimin vetëm nëse gjendja e mëparshme është 11 //dhe nëse nuk është e barabartë me të renë nëse ((gjendja_e fundit == 3) && (gjendja_e fundit != gjendja_aktuale)) ( //nëse gjendja e re është 01 - ndizni LED-në nëse (gjendja_aktuale == 1) ( PORTB |= 0x01; ) //nëse gjendja e re është 10 - fikeni LED-në nëse(gjendja_aktuale == 2) ( PORTB &= ~0x01; ) ) //kur dilni nga ndërprerja, gjendja aktuale bëhet gjendja e fundit e fundit = gjendja_aktuale ; ) int main(void) ( //dy hyrje për lidhjen e koduesit DDRB &= ~ 0x06; //tërhiq hyrjet në fuqinë PORTB |= 0x06; //dalja për lidhjen e LED DDRB |= 0x01; // vendosni kohëmatësin që të rivendoset rastësisht TCCR0=(1<Kjo eshte e gjitha.
Blerë kodues

Në këtë projekt demo, ne do të shikojmë detyrën e ndërlidhjes së një kontrolli të quajtur kodues me një mikrokontrollues PIC.

Për të zbatuar projektin demo, na duhen:

  • kodues 24 pozicionesh;
  • 16 LED (3 mm);
  • drejtues LED;
  • mikrokontrollues.

Enkoderi është një element kontrolli modern dhe origjinal për pajisjet dixhitale dhe në pamje duket si një rezistencë e ndryshueshme (shih figurën më poshtë). Një emër tjetër për këtë kontroll është sensori i këndit, sensori i rrotullimit. Rrotullimi i boshtit shoqërohet me klikime, për shembull 24 klikime për rrotullim. Enkoderi ka 3 dalje - A, B, C dhe përdoret për futjen e shpejtë të të dhënave në pajisjet dixhitale. Disa modele kanë një buton të integruar që aktivizohet duke shtypur boshtin e koduesit (shtohet një dalje tjetër).

Si funksionon koduesi

Kur ktheni një klik, për shembull, në të djathtë, kontakti A + C mbyllet fillimisht, pastaj B + C. Kur boshti kthehet në këtë klikim, kontaktet hapen në të njëjtën sekuencë. Kur boshti rrotullohet në drejtimin tjetër, sekuenca e mbylljes me kontaktin C ndryshon, d.m.th. kur ktheheni në të majtë, fillimisht B + C, pastaj A + C janë të mbyllura.

Duke përdorur koduesin në projektet e mikrokontrolluesve, është e mundur të zbatohen disa lloje të ndryshme të futjes së të dhënave duke përdorur të njëjtin kodues, megjithatë, kjo kërkon disa reagime dhe vizualizim në mënyrë që përdoruesi të dijë se çfarë informacioni po fut dhe në cilin pozicion kodifikuesi.


Diagrami skematik: lidhja e një koduesi me një mikrokontrollues PIC (kliko për ta zmadhuar)

Daljet e koduesit A ​​dhe B janë të lidhura me portat e mikrokontrolluesit RB4 dhe RB5, dalja e koduesit C është e lidhur me tokën. Vlen të përmendet se rezistorët tërheqës duhet të lidhen me linjat e sinjalit të kunjave A dhe B. Enkoderi nuk është i lidhur rastësisht me linjat e specifikuara I/O të mikrokontrolluesit: së pari, porta B ka rezistorë tërheqës të integruar dhe nuk kemi pse të lidhim ato të jashtme, dhe së dyti, porta B e mikrokontrolluesit ka një funksion i dobishëm - "interrupt-on-change" - ndërprerje sipas ndryshimit të nivelit, i cili do të na lejojë të monitorojmë statusin e koduesit.

16 LED të rregullta 3 mm përdoren për të vizualizuar të dhënat hyrëse dhe do të vendosen në PCB rreth koduesit të montuar. LED-et janë të lidhura me çipin A6276.

Çipi është një drejtues LED me hyrje serike 16-bit. Drejtuesi përmban një regjistër zhvendosjeje 16-bitësh CMOS, kapëse të përshtatshme dhe drejtues LED, dhe mund të drejtojë më shumë LED sesa mund të përballojë mikrokontrolluesi. Përveç kësaj, drejtuesi mund të kontrollohet nëpërmjet ndërfaqes SPI, e cila redukton më tej numrin e linjave I/O të përdorura dhe e bën projektin të shkallëzueshëm.

Softueri i mikrokontrolluesit për zgjidhjen e problemit tonë është relativisht i thjeshtë. Ekzistojnë 3 mënyra funksionimi (hyrje informacioni) dhe reagime:

  • Modaliteti i pozicionimit 360° - në këtë modalitet, LED-të tregojnë "pozicionin" aktual të koduesit, përdoruesi mund ta kthejë boshtin e koduesit majtas dhe djathtas në çdo kënd;
  • Modaliteti "Vëllimi/Niveli" - në këtë modalitet, LED-të tregojnë vlerën aktuale midis niveleve minimale dhe maksimale të diapazonit të hyrjes (si niveli i volumit në pajisjet audio);
  • Modaliteti i ndërprerësit rrotullues me 3 pozicione - Në këtë modalitet, ekzistojnë vetëm tre pozicione të përzgjedhura që përdoruesi zgjedh duke e kthyer boshtin e koduesit majtas/djathtas.

Demonstrimi i projektit

Një kodues është një gjë që duket si një rezistencë e ndryshueshme, por, ndryshe nga kjo e fundit, nuk ka kufizues dhe mund të rrotullohet pafundësisht në çdo drejtim. Me ndihmën e një koduesi, është shumë i përshtatshëm për të organizuar të gjitha llojet e menyve në ekran, në përgjithësi, një kodues "i shtypshëm" (d.m.th., nëse mund të funksionojë edhe si buton) është ideal për organizimin ciklik njëdimensional menutë.

Ekzistojnë dy lloje të koduesve: absolut - që lëshon menjëherë kodin e këndit të rrotullimit dhe inkremental - lëshon impulse gjatë rrotullimit. Për këtë të fundit, mikrokontrolluesi duhet të përfshihet në numërimin e pulseve dhe shndërrimin e tyre në një kënd rrotullimi.

Nga pikëpamja e projektimit, koduesit janë mekanikë dhe optikë, në të parët pulset gjatë rrotullimit krijohen në një palë kontaktesh kur ato mbyllen nga një kontakt rrëshqitës i boshtit, në të dytën, fotodiodat veprojnë si kontakte, dhe Roli i një kontaktori është një LED që shkëlqen përmes një disku të çarë (përshëndetje miut me top).

Megjithëse ka shumë informacione mbi koduesit e programimit në rrjet, si dhe bibliotekat e gatshme për këtë, të gjitha ato janë disi të panevojshme (IMHO) - sondazhi i statusit zakonisht zbatohet si një makinë shtetërore në formën e një ndërprerës bllok me if të mbivendosur, i cili duket disi i komplikuar (sidomos kur shkruhet në asembler). Megjithëse, zbatimi mund të jetë më i thjeshtë.

Më të njohurit në ekonominë kombëtare janë koduesit mekanikë të lirë në rritje, dhe ne do t'i shqyrtojmë ato. Procesi i rrotullimit të boshtit të koduesit tregohet skematikisht në figurë (rrotullimi lart - në drejtim të akrepave të orës, poshtë - kundër akrepave të orës):


Këtu A dhe B janë të njëjtat kontakte, nivelet në të cilat mikrokontrolluesi duhet të përpunojë. Kontakti lëvizës i mbyll ato në tokë nëse nuk bien në vrimat e saj. Këtu vërejmë se figura tregon vetëm katër vrima për thjeshtësi. Në fakt, ka shumë të tjera nga këto vrima (përsëri, kujtojmë miun e topit dhe si duket rrota e tij e ndërprerësit optik). Përfundimet A dhe B tërhiqen nga rezistorët në tensionin e furnizimit. Si rezultat, kur rrotullohen, fitohen diagramet e paraqitura në figurën e mësipërme.

Lërini të dy kontaktet fillimisht të bien në vrimë, atëherë ata do të kenë një nivel të tensionit të lartë (ato gjithashtu tërhiqen në fuqi). Më tej, kur rrotullohet në drejtim të akrepave të orës, kontakti A do të jetë i pari që mbyllet në tokë, më pas kontakti B do të bashkohet me të. Më pas, pasi të keni arritur në vrimën tjetër në disk, kontakti A do të hapet dhe do të marrë një nivel të lartë, pas së cilës kontakti Do ta arrijë atë B. Pas këtyre lëvizjeve, kontaktet kthehen në gjendjen e tyre origjinale dhe me rrotullim të mëtejshëm, ky diagram do të përsëritet në mënyrë ciklike.

Kështu, rezulton se gjendja aktuale e koduesit përshkruhet nga një vlerë dy-bit. Por në vetvete, gjendja aktuale mbart pak informacion të dobishëm dhe për të analizuar rotacionin duhet marrë parasysh në lidhje me vlerën e gjendjes së mëparshme. Dhe kjo palë tashmë përcakton në mënyrë të paqartë drejtimin e rrotullimit të dorezës. Për lehtësi, le të marrim një numër katër-bitësh, dy bajtë të lartë të të cilit përmbajnë gjendjet e mëparshme të kontakteve A dhe B, dhe dy bajtë të ulët përmbajnë ato aktuale.

Dhe kur rrotullohet në të kundërt të akrepave të orës

Binar dhjetore
1110 14
0001 1
0010 2
0111 7

Tani algoritmi për përcaktimin e drejtimit të rrotullimit të koduesit duket shumë i thjeshtë: marrim vlerën dhe krahasojmë nëse ai bie në një nga grupet (2, 4, 11, 13) dhe (1, 7, 8, 14). Nëse po, atëherë kemi një kthesë në drejtimin përkatës. Përndryshe, boshti ose nuk u rrotullua fare, ose u rrotullua aq shpejt sa kaloi disa gjendje (nëse kjo ndodh shpesh, atëherë duhet të mendoni për rritjen e frekuencës së votimit të shtetit), ose ka pasur një "kërcim" të kontakteve. Pa u thelluar në arsyen, të gjitha vlerat e tjera mund të shpërfillen me siguri.

Si shembull, merrni parasysh funksionimin e një koduesi në lidhje me një mikrokontrollues AVR:


Këtu, dy dalje më të ulëta të portës PB të mikrokontrolluesit ATMega8 përdoren për lidhje. Një palë rezistencash i tërheqin këto linja deri në tensionin e furnizimit (pasi rezistorët e brendshëm të atmega mund të mos jenë të mjaftueshëm për funksionim të qëndrueshëm këtu), janë instaluar një palë kondensatorë për të shtypur zhurmën e impulsit.

Për një skemë të tillë lidhjeje, mund të skiconi zbatimin e mëposhtëm në gjuhën C:

Uint8_t statike encoderGetVal() ( kthen PINB & 3; ) statik uint8_t encoderGetCode() ( static uint8_t prev; uint8_t val = encoderGetVal(); kodi uint8_t = (prev<< 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); } }

Kodi është i thjeshtë për t'u turpëruar - disa if-s dhe pa automata të fundme. Funksioni encoderInit() thirret në fillim për të inicializuar portin dhe për të kujtuar vlerën fillestare. Funksioni encoderCheck() thirret në ciklin e ngjarjeve (brenda main() ose në një kohëmatës). Trajtuesi onEncoderEvent(bool) do të thirret sa herë që koduesi rrotullohet dhe merr flamurin e drejtimit të rrotullimit.

Por ka një pikë të rëndësishme këtu: koduesi është një gjë e ndjeshme, dhe nëse përpiqeni të përpunoni, për shembull, ngjarjet e navigimit të menysë në këtë mënyrë, atëherë edhe një rrotullim i vogël i pullës së koduesit do të thërrasë në mënyrë të përsëritur mbajtësin onEncoderEvent(), si rezultat, kursori i menysë në vend që të kalojë te elementi tjetër /e mëparshme, do të fluturojë menjëherë në fund/fillim të listës. Mund të rregulloni ndjeshmërinë e koduesit duke ndryshuar frekuencën e thirrjes së encoderCheck() (zakonisht frekuenca optimale është ~ 10 Hz). Në të njëjtën kohë, metoda encoderGetCode() duhet të thirret sa më shpesh që të jetë e mundur në mënyrë që të ketë gjithmonë vlerën aktuale të gjendjes së fundit të kontakteve (me një frekuencë rreth ~ 100 Hz).

Në assembler, ky kod mund të duket si ky:

EQU encoder_port PORTB .EQU encoder_pin PINB .EQU encoder_ddr DDRB .DSEG .ORG SRAM_START sEncoderPrev:. në r0, encoder_pin andi r0, 3 sts sEncoderPrev, r0 ... Encoder_check lds ZL, sEncoderPrev lsl ZL lsl ZL in r0, encoder_pin andi r0, 3 sts sEncoderPrev, r0 ose ZL, r0 ; 1 7 8 14 -> në drejtim të akrepave të orës cpi ZL, 1 breq Enkoder_në drejtim të akrepave të orës cpi ZL, 7 breq Enkoder_në drejtim të akrepave të orës cpi ZL, 8 breq Enkoder_në drejtim të akrepave të orës cpi ZL, 14 breq Enkoder_në drejtim të akrepave të orës cpi ZL, 14 breq Enkoder_në drejtim të akrepave të orës ; 2 4 11 13 -> cpi në drejtim të kundërt të akrepave të orës ZL, 2 breq Encoder_kundër akrepave të orës cpi ZL, 4 breq Encoder_kundër akrepave të orës cpi ZL, 11 breq Encoder_kundër akrepave të orës cpi ZL, 13 breq Encoder_counterclockwise r. ; këtu është kodi për mbajtësin e rrotullimit në drejtim të akrepave të orës; Encoder_kundër akrepave të orës: ; ; këtu është kodi i mbajtësit të rrotullimit në drejtim të kundërt të akrepave të orës; Interval_enc_mbaruar.

Shkurtimisht, koduesit mund të quhen transduktorë me zhvendosje këndore. Ato shërbejnë për të modifikuar këndin e rrotullimit të një objekti rrotullimi, për shembull, boshti i një mekanizmi, në një sinjal të rrymës elektrike. Në këtë rast, përcaktohet jo vetëm këndi i rrotullimit të boshtit, por edhe drejtimi i rrotullimit të tij, si dhe shpejtësia e rrotullimit dhe pozicioni aktual në lidhje me pozicionin fillestar.

Koduesit janë bërë më të njohurit kur përdoren në sistemet e lëvizjes me saktësi, në fabrikat e veglave të makinerive, në komplekset industriale që përdorin robotikë, në pajisjet matëse që duhet të regjistrojnë matje të sakta të prirjeve, rrotullimeve, rrotullimeve dhe këndeve.

Llojet dhe parimi i funksionimit

Koduesit janë sensorë rrotullimi. Sensori më i thjeshtë ka një dorezë që mund të rrotullohet në drejtim të akrepave të orës ose në të kundërt. Në varësi të këndit të rrotullimit dhe drejtimit, lëshohet një sinjal dixhital, i cili ju informon për pozicionin në të cilin ndodhet doreza ose në cilin drejtim është kthyer.

Me koduesin e treguar në figurë, pulla mund të përdoret edhe si buton. Ky është një funksion ndihmës i një lloji të veçantë koduesi.

Sipas llojit të të dhënave dalëse, koduesit ndahen në dy grupe të mëdha:

  1. Absolute.
  2. në rritje.

Koduesit absolut

Me një kodues absolut, i gjithë rrethi i kthesës ndahet në një numër të caktuar sektorësh, më shpesh me të njëjtën madhësi. Këta sektorë janë të numëruar. Enkoderi gjatë funksionimit jep numrin e sektorit në të cilin ndodhet aktualisht. Prandaj quhet absolut. Me këtë lloj koduesi, është gjithmonë e mundur të përcaktohet se në cilin kënd në lidhje me sektorin zero koduesi rrotullohet në një moment të caktuar, domethënë kur rrotullohet, ai jep vlerat e numrave të sektorit, deri në maksimum. vlerë. Pastaj kthehet në zero.

Nëse boshti i koduesit rrotullohet në drejtim të kundërt, ai do të fillojë të japë vlera të kundërta. Në rastin tonë, ai përdor pesë kunja për të nxjerrë vlerat e rrotullimit.

Ky algoritëm ka të metat e veta. Tabela 1 tregon rendin e vlerave të daljes së koduesit të n-të. Vlen t'i kushtohet vëmendje dy rreshtave të fundit, kalimi nga 127 në 128.

Tabela 1

Këtu, absolutisht të gjitha pjesët ndryshojnë. Në një kodues ideal, të gjithë ndryshojnë në të njëjtën kohë dhe nuk ka asnjë problem. Në praktikë, në një kodues të vërtetë, bitet ndryshojnë shpejt, por jo njëkohësisht. Dhe në një moment, dalja e koduesit është një vlerë krejtësisht arbitrare. Meqenëse të gjitha bitet ndryshojnë, pra, koduesi do të ketë një vlerë arbitrare nga zero në të gjitha.

Një shembull i një ndërprerësi të tillë tregohet në të djathtë. Cili mund të jetë kërcënimi? Le të marrim një shembull. Mikrokontrolluesi me ndihmën e një motori kontrollon boshtin dhe e rrotullon atë në një kënd të caktuar. Në një moment të caktuar, kur kalon nga 127 në 128 qeliza, ajo merr një vlerë të caktuar të rastësishme. Kontrolluesi arrin në përfundimin se boshti është në një vend krejtësisht të ndryshëm, ndryshe nga vendi aktual, dhe fillon ta rrotullojë atë në drejtimin tjetër, me një shpejtësi të ndryshme, etj.

Pas një kohe të caktuar, mikrokontrolluesi merr vlerën e duhur, fillon të përpiqet të ndalojë boshtin dhe ta rrotullojë atë në drejtimin e duhur. Një proces i tillë mund të vazhdojë për një kohë të gjatë, me kusht që një gabim i tillë të ndodhë shpesh. Gabime të tilla janë të parregullta dhe të vështira për t'u llogaritur.

Kodi gri

Problemi i përshkruar më sipër zgjidhet duke futur një kod Gri. Një veçori e kodit Grey është se kur koduesi ndërrohet me një, vlera e kodit Grey gjithashtu ndryshon me një. Ndryshon vetëm një lloj. Kjo mund të shihet në tabelën 2 duke krahasuar kodin binar dhe kodin gri.

tabela 2

Dy rreshtat e para janë të njëjta, por pjesa e mesme ka ndryshuar tashmë në rreshtin e dytë. Pastaj një bit gjithashtu ndryshon. Vlen gjithashtu të përmendet se kodi i fundit dhe i parë Grey ndryshojnë nga një bit, domethënë, kodi Grey mund të qarkullojë.

Avantazhi i këtij kodi është se gabimi i diskutuar më sipër nuk është i mundur. Ndër disavantazhet, mund të vërehet se mikrokontrolluesi duhet të përkthejë kodin Grey në kod binar në mënyrë që të kuptojë se në çfarë pozicioni ndodhet koduesi absolut.

Koduesit rritës

Lloji tjetër është koduesi inkremental, i cili ka një strukturë më të thjeshtë. Por në të njëjtën kohë, ai nuk tregon vendndodhjen specifike të stilolapsit të tij. Ai tregon vetëm drejtimin e rrotullimit, dhe numri i ndarjeve të rrotullimit duhet të llogaritet nga mikrokontrolluesi.

Një kodues në rritje ka një grup shiritash që janë të lidhur me tokën si parazgjedhje dhe kur kthehen, mbyllen dhe hapen. Rezulton sinjali i treguar në figurë (i ngjashëm me një gjarpërim). Enkoderi ka dy vija të tilla rrethore. Shiritat janë zhvendosur një të katërtën, dhe sinjalet janë gjithashtu një të katërtën e zhvendosjes. Kjo është e rëndësishme sepse ju lejon të përcaktoni drejtimin e rrotullimit.

Qarku inkremental i koduesit mund të përfaqësohet nga figura e duhur. Butonat tregojnë lidhjet periodike të koduesit me tokën. Meqenëse koduesi nuk është i lidhur me një njësi logjike brenda, është e nevojshme që në mënyrë të pavarur të tërheqni njësitë logjike përmes rezistorëve në daljen e koduesit nga jashtë. Në këtë rast, kur asnjë nga këmbët e koduesit nuk është e lidhur me tokën, këmbët do të kenë një logjike.

Nëse koduesi ka lidhur një këmbë me tokën, atëherë do të ketë një zero logjike në këtë këmbë. Në një gjendje të qetë, dalja e koduesit është një njësi logjike. Kur koduesi fillon të rrotullohet në çdo drejtim, atëherë së pari njëra dalje lidhet me tokën, pastaj tjetra. Më tej, këto përfundime janë shkëputur nga toka nga ana tjetër, dhe një njësi logjike formohet përsëri mbi to.

Ju mund të përcaktoni drejtimin e rrotullimit me anë të cilit prej përfundimeve ishte lidhur më herët me tokën. Kur numëroni ciklet e plota, mund të numëroni numrin e klikimeve të rrotullimit të koduesit.

Në fakt, koduesi ka katër gjendje:

  1. Dy njësi.
  2. Zero dhe një.
  3. Zero dhe zero.
  4. Një dhe zero.

Tre gjendje që nuk janë të barabarta me ato janë të paqëndrueshme dhe koduesi nuk mund të jetë në to. Shumë mikrokontrollues zbatojnë funksionin e numërimit të kthesave duke përdorur kohëmatës që kanë hyrje specifike. Kohëmatësi numëron në nivelin e harduerit sa klikime dhe në cilin drejtim është kthyer koduesi dhe jep një vlerë. Kjo do të thotë, numëruesi rrit çdo numër.

Duke ndryshuar këtë numër, mund të përcaktoni se sa klikime është kthyer koduesi. Nga numri i klikimeve, ju mund të përcaktoni këndin e rrotullimit. Enkoderi ka gjithashtu kërcim kontakti që e bën të vështirë analizimin e sinjaleve.

Koduesit optikë

Një transduktor i tillë është bërë në formën e një disku të fiksuar në një bosht dhe prej xhami. Sensori i rrotullimit optik ndryshon nga llojet e tjera nga një grup optik shtesë që lëviz kur boshti rrotullohet. Në të njëjtën kohë, ai konverton momentin e rrotullimit në një fluks ndriçues, i cili më pas merret nga një sensor foto.

Konvertuesi optik kujton këndet e rrotullimit. Në këtë rast, çdo pozicion individual korrespondon me një kod të veçantë dixhital, i cili, së bashku me numrin e rrotullimeve, formon njësinë e matjes së koduesit. Enkoderi është i lidhur dhe funksionon në të njëjtën mënyrë si një kodues në rritje.

Sipas natyrës së funksionimit të tyre, ato ndahen në fotovoltaike Dhe magnetike . Parimi i funksionimit të magnetit bazohet në përdorimin e të cilit u zbulua për herë të parë në 1879. Në këtë rast, ndryshimi i potencialit shfaqet vetëm kur teli DC ndodhet në një fushë magnetike.

Për sa i përket saktësisë dhe vetive të rezolucionit, lloji magnetik i sensorit është inferior ndaj atij fotoelektrik, por për sa i përket dizajnit është më i thjeshtë, më pak i kërkuar për kushtet e punës dhe hapësirën. Një kodues magnetik është një pajisje që zbulon kalimin e polit magnetik të një magneti gjatë rrotullimit, i vendosur pranë elementit ndijor. Informacioni i transmetuesit shprehet në një kod dixhital.

Koder fotoelektrik është një sensor i bazuar në parimin fotoelektrik. Ky efekt vërehet kur një fluks drite vepron në një substancë. Ky parim u zbulua në 1887. Gjatë funksionimit të një sensori të tillë, ndodh një shndërrim i vazhdueshëm i një rreze drite në një sinjal të rrymës elektrike.

Analogët e koduesit fotoelektrik janë optoelektronikë, optikë dhe. Këta sensorë janë më të ndjeshëm ndaj karakteristikave të prodhimit, funksionimit dhe faktorëve të tjerë sesa modelet e tjera. Sidoqoftë, kjo justifikohet nga saktësia e tyre e rritur, ndryshe nga konkurrentët.

Artikujt kryesorë të lidhur