Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Conectarea codificatorului la microcontrolerul PIC. Asociem codificatorul și microcontrolerul

Conectarea codificatorului la microcontrolerul PIC. Asociem codificatorul și microcontrolerul

Acest articol va vorbi despre un encoder și despre cum să-l conectați la un microcontroler. Îl puteți găsi în dispozitive precum sisteme audio, mașini de spălat, cuptoare cu microunde și o serie de dispozitive moderne. De exemplu, în sistemele audio, codificatoarele și microcontrolerele sunt folosite pentru a regla volumul. Dar bine, destulă apă deja, să trecem la treabă.

Un encoder, sau așa cum este numit și un senzor de unghi de rotație, este un dispozitiv electromecanic care convertește poziția unghiului arborelui într-un semnal electric. Codificatoarele sunt împărțite în 2 tipuri, absolute și incrementale.

În codificatoarele incrementale, când arborele este rotit, sunt generate impulsuri, numărul acestor impulsuri este proporțional cu unghiul de rotație al arborelui. Dacă numărați aceste impulsuri, puteți afla unghiul de rotație al arborelui codificatorului. Dacă butonul codificatorului este în repaus, nu sunt generate impulsuri. Aceste codificatoare sunt utilizate pe scară largă în sistemele audio și comenzile industriale.

Codificatoarele absolute au un principiu de funcționare complet diferit, bazat pe emiterea unui cod unic pentru fiecare poziție a arborelui. Formarea pulsului are loc atunci când arborele se rotește și când acesta este în repaus. Mai mult, informațiile despre poziția actuală a arborelui vor rămâne chiar și după întreruperea alimentării cu tensiune.

În exemplul nostru, vom conecta un encoder incremental la un microcontroler. Encoder PEC12 422OF SOO24 care are 24 de impulsuri pe 1 rotatie.

Codificatorul are 5 pini, 3 dintre ei sunt pinii codificatorului în sine, iar ceilalți doi sunt butonul. Pinii codificatorului au un pin comun și alți doi pini de semnal. Schema de conectare nu este diferită de schema de conectare a unui buton convențional. Pinii de semnal sunt conectați la porturile I/O ale microcontrolerului. Și terminalul comun care în mijloc este conectat la pământ. Pentru a proteja împotriva respingerii contactului, pot fi adăugați condensatori cu o capacitate de câțiva nF. Ieșirile la care am conectat encoderul sunt configurate în program ca intrări și includ rezistențe pull-up, puteți conecta rezistențe externe.

Schema de conectare encoder la microcontroler

Principiul de funcționare al codificatorului se bazează pe închiderea și deschiderea contactelor, când nimeni nu rotește butonul, atunci există o unitate logică la intrarea în MC. Când butonul începe să se rotească, apar două impulsuri dreptunghiulare care sunt deplasate unul față de celălalt. Ce semnal conduce va depinde de direcția în care ne întoarcem.

Dar, deoarece există o fragilitate a contactelor în oricare, imaginea va arăta așa.

Algoritmul programului de microcontroler

Apelul funcției de interogare a codificatorului începe la un anumit interval. Această funcție citește nivelurile logice care sunt prezente pe pinii microcontrolerului și scrie această valoare într-o variabilă temporară. În interiorul funcției de interogare a codificatorului, există o altă variabilă statică care este salvată atunci când această funcție este ieșită, stochează o secvență de valori anterioare. Ultima valoare înregistrată este preluată din această variabilă și comparată cu cea actuală pentru a determina dacă au existat modificări. Dacă aceste valori sunt egale, atunci funcția este ieșită, iar dacă diferă, atunci valoarea variabilei statice este deplasată cu 2 biți la stânga și o nouă valoare (actuală) este scrisă în spațiul „liber”.

Se pare că atunci când arborele codificatorului se rotește, o nouă valoare va fi scrisă constant în variabila temporară și se va obține o secvență de cod care se repetă. Dacă rotim buled la dreapta: 11100001, iar dacă la stânga atunci 11010010. Din aceste valori, se poate înțelege în ce direcție se învârte arborele.

Arhiva conține 2 fișiere encoder.h și encoder.c. Inițial, trebuie să setați portul și numărul de pini la care se face conexiunea, acestea sunt variabilele LEFT_SPIN și RIGHT_SPIN. Fișierul „c” conține implementarea funcțiilor.

Encoder incremental se pare ca potențiometru, dar spre deosebire de un potențiometru, nu are poziții finale, se poate roti în ambele sensuri pentru un număr nelimitat de rotații. De asemenea, trebuie remarcat faptul că encoderul incremental nu se rotește la fel de ușor ca potențiometrul, ci în trepte. Se vede la radioul mașinii, osciloscop, un centru muzical, o mașină de spălat și alte echipamente, unde reglarea unui parametru se realizează în limite largi. Desigur, parametrii pot fi modificați și folosind butoanele, de exemplu, pentru a face muzica cu 20 de valori mai puternice, atunci când controlați butonul, trebuie să îl apăsați de 20 de ori, iar când controlați codificatorul, rotiți-l la o un anumit unghi, în funcție de algoritmul de procesare.

Encoder incremental reprezintă două contacte, a cărui ordine de închidere depinde de sensul de rotaţie.


De fapt un encoder incremental convertește rotația arborelui în impulsuri electrice conţinând informaţii despre sensul de rotaţie.

Să construim circuitul de testare prezentat în imaginea de mai sus și să ne conectăm la pinii A și B osciloscop, rezistențe pull-up - 4,7K.
Să rotim codificatorul în sensul acelor de ceasornic.


Acum în sens invers acelor de ceasornic.


Oscilogramele arată că, în funcție de sensul de rotație, ordinea închiderii contactului se modifică. Dar partea din față nu iese întotdeauna atât de frumoasă.


Deoarece contactele sunt mecanice, acestea sunt predispuse să sară, adică la închidere din cauza elasticității materialelor, apar multiple scurtcircuite și deschideri necontrolate, care pot fi observate pe oscilograma de mai sus.

Există două moduri de a face față săriturii, primul constă în adăugarea de condensatoare și rezistențe așa cum se arată în imaginea de mai jos.


Deoarece săritura este un fenomen pe termen scurt, este ușor de stins de un condensator.


Oscilograma arată că, după instalarea condensatoarelor, fronturile au devenit mai puțin abrupte, iar săritura a dispărut.

A doua cale- software și totul depinde de implementarea sondajului la ieșirile codificatorului. Dacă starea codificatorului monitorizată de întreruperi externe, apoi după declanșarea întreruperii, este necesar să se efectueze o întârziere de 20-30 de milisecunde, timp în care MC-ul nu va răspunde la o schimbare a stării de ieșire, adică nu va simți sărituri. Dacă sondarea pinilor codificatorului este implementată pe un cronometru, atunci intervalul dintre sondaje ar trebui să fie mai mare decât durata de respingere, aceeași 20-30 de milisecunde.

sa luam in considerare metode de prelucrare a datelor provenite de la codificator.
Prima metodă este că conectăm unul dintre picioarele codificatorului la ieșirea întreruperilor externe și îl setăm pentru o întrerupere pe marginea de cădere. În întrerupere, verificăm starea celuilalt picior, iar dacă este zero, atunci rotația are loc într-un sens, altfel în celălalt. Mai jos este codul care implementează această metodă pentru AVR.
#include ISR (INT2_vect) (dacă (PINB & 0X02) (PORTB | = (1)<<0); } else { PORTB &= ~(1<<0); } //антидребезг _delay_ms(20); //сбрасываем флаг прерывания вызванный дребезгом GIFR = (1<Când encoderul este întors pe o parte, LED-ul se aprinde, când encoderul este întors pe cealaltă parte, se stinge.

A doua metodă este comparând starea actuală cu cea anterioară... Să exprimăm nivelurile logice ale unui tren de impulsuri ca zerouri și unu.


Apoi obținem un număr finit de stări ale codificatorului. Prima cifră este nivelul logic al primului pin al codificatorului, a doua este nivelul logic al celui de-al doilea pin.

Să presupunem că ultima stare în care a fost localizat codificatorul este egală cu trei, dacă următoarea stare este egală cu una, atunci se rotește într-o direcție, dacă două, atunci în cealaltă. Se pare că puteți repara tranziția de la o stare la alta și puteți determina direcția de rotație, dar cea mai simplă implementare este atunci când treceți de la 11 la 01 și 10. Mai jos este codul care implementează algoritmul descris pentru AVR,
#define F_CPU 8000000UL #include #include uint8_t ultima_stare = 0; ISR (TIMER0_COMP_vect) (// ambii pini ai codificatorului sunt conectați la pinii 2 și 3 ai portului B // citiți starea lor uint8_t current_state = (PINB & 0x06) >> 1; // luați în considerare tranziția numai dacă starea anterioară este 11 // și dacă nu este egal cu cel nou dacă ((last_state == 3) && (last_state! = current_state)) (// dacă noua stare este 01 - aprinde LED-ul dacă (current_state == 1) (PORTB | = 0x01;) // dacă noua stare este 10 - stinge LED-ul dacă (current_state == 2) (PORTB & = ~ 0x01;)) // la ieșirea din întrerupere, starea curentă devine ultima_state anterioară = current_state;) int main (void) (// două intrări pentru conectarea codificatorului DDRB & = ~ 0x06; // trageți în sus intrările la sursa de alimentare PORTB | = 0x06; // ieșire pentru conectarea LED-ului DDRB | = 0x01 ; // setați temporizatorul să se reseteze prin coincidență TCCR0 = (1<Asta e tot.
Encoder cumpărat

În acest proiect demonstrativ, ne vom uita la sarcina de a asocia un control numit encoder cu un microcontroler PIC.

Pentru a implementa un proiect demonstrativ, avem nevoie de:

  • encoder cu 24 de pozitii;
  • 16 LED-uri (3mm);
  • driver LED;
  • microcontroler.

Un encoder este un element de control modern și original pentru dispozitivele digitale și, în aparență, este similar cu un rezistor variabil (vezi figura de mai jos). Un alt nume pentru acest control este senzor de unghi, senzor de rotație. Rotirea arborelui este însoțită de clicuri, de exemplu 24 de clicuri pe rotație. Encoderul are 3 iesiri - A, B, C si este folosit pentru introducerea rapida a datelor in dispozitive digitale. Unele modele au un buton încorporat care este declanșat prin apăsarea arborelui codificatorului (se mai adaugă o ieșire).

Principiul de funcționare a codificatorului

Când rotiți un clic, de exemplu, spre dreapta, contactul A + C este închis mai întâi, apoi B + C. Când arborele se rotește în acest clic, contactele se deschid în aceeași secvență. Când arborele este rotit în cealaltă direcție, secvența de închidere cu contactul C se modifică, adică. la întoarcerea la stânga, mai întâi B + C este închis, apoi A + C.

Folosind codificatorul în proiecte de microcontroler, poate folosind același encoder, implementați mai multe tipuri diferite de introducere a datelor, cu toate acestea, acest lucru necesită un anumit feedback și vizualizare, astfel încât utilizatorul să știe ce informații introduce și în ce poziție se află codificatorul.


Schemă schematică: conectarea unui encoder la un microcontroler PIC (click pentru a mări)

Pinii A și B al codificatorului sunt conectați la porturile RB4 și RB5 ale microcontrolerului, pinul C al codificatorului este conectat la masă. Este de remarcat faptul că rezistențele de tragere trebuie conectate la liniile de semnal ale pinii A și B. Encoderul nu este conectat accidental la liniile I/O specificate ale microcontrolerului: în primul rând, portul B are rezistențe de pull-up încorporate și nu trebuie să conectăm cele externe, iar în al doilea rând, portul B al microcontrolerului are o rezistență foarte mare. funcție utilă - „interrupt-on-change” - modificarea nivelului de întrerupere, care ne va permite să monitorizăm starea encoderului.

16 LED-uri convenționale de 3 mm sunt utilizate pentru a vizualiza datele de intrare și vor fi amplasate pe PCB în jurul codificatorului instalat. LED-urile sunt conectate la cipul A6276.

Microcircuitul este un driver LED cu intrare de informații seriale pe 16 biți. Driverul conține un registru de deplasare CMOS pe 16 biți, zăvoare asociate și drivere pentru a conduce LED-urile și poate conduce mai multe LED-uri decât permite microcontrolerul. În plus, driverul poate fi controlat prin interfața SPI, ceea ce reduce și mai mult numărul de linii I/O utilizate și face proiectul scalabil.

Software-ul microcontrolerului pentru rezolvarea problemei noastre este relativ simplu. Există 3 moduri de funcționare (introducerea informațiilor) și feedback:

  • Mod de poziționare 360 ​​° - în acest mod, LED-urile indică „poziția” curentă a codificatorului, utilizatorul poate întoarce arborele codificatorului la stânga și la dreapta în orice unghi;
  • Modul „Volum / Nivel” - în acest mod LED-urile indică valoarea curentă între nivelurile minime și maxime ale intervalului de intrare (cum ar fi nivelul volumului în dispozitivele audio);
  • Mod comutator rotativ cu 3 poziții - În acest mod există doar trei poziții selectabile pe care utilizatorul le selectează prin rotirea arborelui codificatorului la stânga/dreapta.

Demonstrarea proiectului

Un encoder este un lucru care arată ca un rezistor variabil, dar, spre deosebire de acesta din urmă, nu are limitatoare și se poate roti în orice direcție la nesfârșit. Cu ajutorul encoderului, este foarte convenabil să organizezi tot felul de meniuri pe ecran, în general, un codificator „push-button” (adică dacă poate funcționa și ca buton) este ideal pentru organizarea unidimensională meniuri ciclice.

Există două tipuri de codificatoare: absolute - care furnizează imediat codul unghiului de rotație și incrementale - emit impulsuri în timpul rotației. Pentru acesta din urmă, microcontrolerul ar trebui să fie angajat în numărarea impulsurilor și convertirea acestora într-un unghi de rotație.

Din punct de vedere al designului, codificatoarele sunt mecanice și optice, în primul rând, impulsurile în timpul rotației sunt generate pe o pereche de contacte atunci când sunt închise printr-un contact de alunecare al arborelui, în al doilea rând, fotodiodele joacă rolul de contacte, iar un LED care strălucește printr-un disc cu sloturi (bună ziua unui mouse cu bile) joacă rolul unui contactor. ...

Deși există o mulțime de informații despre programarea codificatoarelor în rețea, precum și biblioteci gata făcute pentru aceasta, toate sunt un fel de greoaie inutil (IMHO) - sondarea de stat, de regulă, este implementată sub forma unei stări. mașină sub forma unui bloc de comutare cu if-uri imbricate, care pare oarecum complicat (mai ales când este scris în asamblator). Implementarea ar putea fi totuși mai simplă.

Cele mai populare în economia națională sunt codificatoarele incrementale mecanice ieftine și le vom lua în considerare. Procesul de rotație a arborelui codificatorului este prezentat schematic în figură (sus - rotație în sensul acelor de ceasornic, jos - în sens invers acelor de ceasornic):


Aici A și B sunt chiar contactele, nivelurile la care microcontrolerul trebuie să proceseze. Contactul în mișcare le închide pe pământ dacă nu cad în găurile sale. Rețineți că doar patru găuri sunt afișate în figură pentru simplitate. De fapt, există mult mai multe dintre aceste găuri (din nou, amintiți-vă de mouse-ul cu bile și cum arată roata sa optică). Pinii A și B sunt trase în sus de rezistențe la tensiunea de alimentare. Ca rezultat, la rotire, se obțin diagramele prezentate în figura de mai sus.

Să presupunem că inițial ambele contacte cad în gaură, apoi va exista un nivel ridicat de tensiune pe ele (sunt, de asemenea, trase la sursa de alimentare). În plus, la întoarcerea în sensul acelor de ceasornic, contactul A va fi primul care va fi închis la pământ, apoi i se va alătura și contactul B. Mai departe, ajungând la următoarea gaură a discului, contactul A se va deschide și va ajunge la un nivel ridicat, după care contactul B. vor ajunge din urmă din aceste deplasări, contactele revin la starea lor inițială, iar cu rotirea ulterioară această diagramă se va repeta ciclic.

Astfel, se dovedește că starea curentă a codificatorului este descrisă de o valoare pe doi biți. Dar starea actuală în sine conține puține informații utile, iar pentru analiza rotației trebuie luată în considerare în legătură cu valoarea stării anterioare. Și această pereche determină deja în mod unic direcția de rotație a mânerului. Pentru comoditate, să luăm un număr de patru biți, dintre care cei mai importanți doi octeți conțin stările anterioare ale contactelor A și B, iar cele două cele mai puțin semnificative - cele actuale.

Și când se rotește în sens invers acelor de ceasornic

Binar Zecimal
1110 14
0001 1
0010 2
0111 7

Acum algoritmul pentru determinarea direcției de rotație a codificatorului pare foarte simplu: obținem valoarea și comparăm dacă se încadrează într-unul dintre seturile (2, 4, 11, 13) și (1, 7, 8, 14). Dacă da, atunci avem o viraj în direcția corespunzătoare. În caz contrar, arborele fie nu s-a rotit deloc, fie s-a rotit atât de repede încât a alunecat prin mai multe stări (dacă acest lucru se întâmplă des, atunci ar trebui să vă gândiți la creșterea frecvenței sondajului de stat) sau a existat o „sărire” de contacte. . Fără să aprofundăm motivul, toate celelalte valori pot fi ignorate în siguranță.

Ca exemplu, luați în considerare funcționarea unui encoder împreună cu un microcontroler AVR:


Aici, pentru conectare, sunt folosiți doi pini inferiori ai portului PB al microcontrolerului ATMega8. O pereche de rezistențe trage aceste linii până la tensiunea de alimentare (deoarece rezistențele interne ale atmega aici ar putea să nu fie suficiente pentru o funcționare stabilă), o pereche de condensatoare sunt instalate pentru a suprima zgomotul de impuls.

Pentru o astfel de schemă de conexiune, puteți schița următoarea implementare în limbajul C:

Static uint8_t encoderGetVal () (retur PINB & 3;) static uint8_t encoderGetCode () (static uint8_t prev; uint8_t val = encoderGetVal (); uint8_t cod = (anterior)<< 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); } }

Codul este revoltător de simplu - câteva dacă și nicio mașină de stat. Funcția encoderInit () este apelată la început pentru a inițializa portul și a reține valoarea de pornire. Funcția encoderCheck () este apelată în bucla de evenimente (în interiorul main () sau prin temporizator). Hander-ul onEncoderEvent (bool) va fi apelat ori de câte ori codificatorul este rotit și va primi indicatorul direcției de rotație.

Dar există un punct important: codificatorul este un lucru sensibil și, dacă încercați să procesați, de exemplu, evenimentele de navigare în meniu în acest fel, atunci chiar și o mică rotire a butonului codificatorului va apela în mod repetat handlerul onEncoderEvent (), ca rezultatul căruia cursorul meniului, în loc să se deplaseze la elementul următor/anterior, va zbura imediat la sfârșitul/începutul listei. Puteți regla sensibilitatea codificatorului schimbând frecvența apelurilor encoderCheck () (de obicei, frecvența optimă este de ~ 10 Hz). În acest caz, metoda encoderGetCode () ar trebui apelată cât mai des posibil pentru a avea întotdeauna valoarea reală a ultimei stări a contactelor (cu o frecvență de undeva ~ 100 Hz).

În asamblare, acest cod ar putea arăta astfel:

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_ddr, 0 cbi encoder, encoder_1bi_1, sdd 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 sau ZL, r0; 1 7 8 14 -> cpi clockwise ZL, 1 breq Encoder_clockwise cpi ZL, 7 breq Encoder_clockwise cpi ZL, 8 breq Encoder_clockwise cpi ZL, 14 breq Encoder_clockwise; 2 4 11 13 -> cpi antiorar ZL, 2 breq Encoder_contraclockwise cpi ZL, 4 breq Encoder_counterclockwise cpi ZL, 11 breq Encoder_counterclockwise cpi ZL, 13 breq Encoder_counterclockwise Encoder_lockwise_clock_r; ; aici este codul pentru manipulatorul de rotație în sensul acelor de ceasornic; Encoder_sens invers acelor de ceasornic:; ; aici este codul de gestionare a rotației în sens invers acelor de ceasornic; Interval_enc_done.

Pe scurt, codificatoarele pot fi numiți traductoare de deplasare unghiulară. Acestea servesc la modificarea unghiului de rotație al obiectului de rotație, de exemplu, arborele unui mecanism, într-un semnal de curent electric. În acest caz, se determină nu numai unghiul de rotație al arborelui, ci și direcția de rotație a acestuia, precum și viteza de rotație și poziția curentă față de poziția inițială.

Cele mai populare codificatoare au devenit atunci când sunt utilizate în sistemele de mișcare de precizie, în fabricile de mașini-unelte, în complexele industriale cu utilizarea roboticii, în aparatele de măsurare în care este necesară înregistrarea măsurătorilor precise ale pantelor, virajelor, rotațiilor și unghiurilor.

Tipuri și principii de acțiune

Codificatoarele sunt senzori de rotație. Cel mai simplu senzor are un mâner care poate fi rotit în sensul acelor de ceasornic sau în sens invers acelor de ceasornic. În funcție de unghiul de rotație și direcția, se emite un semnal digital care informează în ce poziție se află mânerul sau în ce direcție a fost rotit.

Cu codificatorul prezentat în figură, butonul poate fi folosit și ca buton. Aceasta este o funcție auxiliară a unui anumit tip de codificator.

În funcție de tipul de ieșire a datelor, codificatoarele sunt împărțite în două grupuri mari:

  1. Absolut.
  2. incremental.

Codificatoare absolute

Cu un encoder absolut, întregul cerc de rotație este împărțit într-un anumit număr de sectoare, cel mai adesea de aceeași dimensiune. Aceste sectoare sunt numerotate. Codificatorul, în timpul funcționării, oferă numărul sectorului în care se află în prezent. De aceea se numește absolut. Cu acest tip de encoder, puteți determina oricând unghiul la care codificatorul este rotit în raport cu sectorul zero la un moment dat, adică la întoarcere, scoate valorile numerelor de sector, până la valoarea maximă. . Apoi se întoarce la zero.

Dacă arborele codificatorului este rotit în direcția opusă, atunci va începe să dea valori opuse. În cazul nostru, folosește cinci pini pentru a returna valorile de rotație.

Acest algoritm are dezavantajele sale. Tabelul 1 arată ordinea valorilor ieșite ale codificatorului n-lea. Merită să acordați atenție ultimelor două rânduri, trecerea de la 127 la 128.

tabelul 1

Absolut toate părțile se schimbă aici. Într-un encoder ideal, toate se schimbă în același timp și nu există nicio problemă. Într-un encoder practic real, biții se schimbă rapid, dar nu simultan. Și la un moment dat, la ieșirea codificatorului apare o valoare complet arbitrară. Deoarece toți biții sunt modificați, codificatorul va avea o valoare arbitrară de la zero la toți.

Un exemplu de astfel de comutator este afișat în dreapta. Cum poate amenința asta? Să ne uităm la un exemplu. Microcontrolerul folosește un motor pentru a controla arborele și pentru a-l roti la un anumit unghi. La un moment dat, la trecerea de la 127 la 128 de celule, primește o anumită valoare aleatorie. Controlerul ajunge la concluzia că arborele se află într-un loc complet diferit de locul real și începe să-l rotească în cealaltă direcție, cu o viteză diferită etc.

După un anumit timp, microcontrolerul obține valoarea corectă, începe să încerce să oprească arborele și să-l rotească în direcția corectă. Acest proces poate dura mult timp, cu condiția ca o astfel de eroare să apară frecvent. Astfel de erori sunt neregulate și greu de calculat.

Cod gri

Problema de mai sus este rezolvată prin introducerea codului Gray. O caracteristică a codului Gray este că atunci când codificatorul comută la unul, valoarea codului Gray se schimbă și la unu. Se schimbă o singură specie. Acest lucru poate fi văzut în Tabelul 2 în comparația dintre codul binar și codul Gray.

masa 2

Primele două linii coincid, dar în a doua linie bitul din mijloc s-a schimbat. Mai mult, un bit este, de asemenea, schimbat. De asemenea, merită remarcat faptul că ultimul și primul cod Gray diferă cu un bit, adică codul Gray se poate bucla.

Avantajul acestui cod este că eroarea discutată mai sus nu este posibilă. Printre deficiențe, se poate remarca faptul că microcontrolerul trebuie să traducă codul Gray în binar pentru a înțelege în ce poziție se află codificatorul absolut.

Codificatoare incrementale

Următorul tip este codificatorul incremental, care are o structură mai simplă. Dar, în același timp, nu arată locația specifică a mânerului său. Arată doar direcția de rotație, iar numărul de diviziuni de rotație trebuie citit de microcontroler.

Un encoder incremental are un set de benzi care sunt conectate la masă în mod implicit și, atunci când sunt rotite, se închid și se deschid. Rezultatul este semnalul prezentat în figură (similar cu un meandre). Codificatorul are două astfel de dungi circulare. Dungile sunt compensate cu un sfert, iar semnalele sunt de asemenea compensate cu un sfert. Acest lucru este important deoarece vă permite să determinați direcția de rotație.

O diagramă a codificatorului incremental poate fi prezentată în figura din dreapta. Butoanele indică conectarea periodică a codificatorului la masă. Deoarece encoderul nu este conectat la o unitate logică în interior, este necesar să se tragă independent unitățile logice din exterior prin rezistențe la ieșirea codificatorului. În acest caz, când niciunul dintre picioarele codificatorului nu este conectat la masă, picioarele vor fi o unitate logică.

Dacă codificatorul a conectat un fel de picior la pământ, atunci acest picior va avea un zero logic. Într-o stare silențioasă, ieșirea codificatorului este una logică. Când codificatorul începe să se rotească în orice direcție, mai întâi un pin este conectat la pământ, apoi celălalt. În plus, aceste concluzii sunt la rândul lor deconectate de la sol și se formează din nou o unitate logică pe ele.

Puteți determina direcția de rotație prin care dintre pini a fost conectat anterior la pământ. Când numărați ciclurile complete, puteți număra numărul de clicuri pe care le rotiți codificatorul.

De fapt, un codificator are patru stări:

  1. Două unități.
  2. Zero și unu.
  3. Zero și zero.
  4. Unu și zero.

Trei stări care nu sunt egale cu unele sunt instabile și codificatorul nu poate fi în ele. Multe microcontrolere implementează funcția de numărare a turelor folosind temporizatoare care au intrări specifice. Cronometrul contorizează la nivel hardware după câte clicuri și în ce direcție a fost rotit codificatorul și oferă o valoare. Adică, contorul crește un anumit număr.

Schimbând acest număr, puteți determina câte clicuri a fost rotit codificatorul. După numărul de clicuri, puteți determina și unghiul de rotație. Codificatorul are, de asemenea, contact bounce, ceea ce face analiza semnalului dificilă.

Codificatoare optice

Un astfel de convertor este realizat sub forma unui disc fixat pe un arbore și din sticlă. Senzorul optic de rotație diferă de alte tipuri printr-un raster optic suplimentar, care este mișcat atunci când arborele este rotit. În același timp, transformă cuplul într-un flux luminos, care este apoi recepționat de fotosenzor.

Traductorul optic își amintește unghiurile de rotație. În acest caz, fiecărei poziții individuale i se atribuie un cod digital specific, care împreună cu viteza formează unitatea senzorului. Encoderul este conectat și funcționează în același mod ca un encoder incremental.

Prin natura funcționării lor, ele sunt împărțite în fotovoltaiceși magnetic ... Principiul de funcționare a magneticului se bazează pe o utilizare care a fost descoperită pentru prima dată în 1879. În acest caz, diferența de potențial apare numai atunci când firul de curent continuu este plasat într-un câmp magnetic.

În ceea ce privește proprietățile de precizie și rezoluție, forma magnetică a senzorului este inferioară celei fotoelectrice, totuși, în design este mai simplu, mai puțin solicitant în condițiile de lucru și spațiu. Un encoder magnetic este un dispozitiv care detectează trecerea polului magnetic al unui magnet în timp ce se rotește, situat lângă un element sensibil. Informațiile emițătorului sunt exprimate în cod digital.

Encoder fotoelectric este un senzor bazat pe principiul fotoelectric. Acest efect se observă atunci când o substanță este expusă unui flux de lumină. Acest principiu a fost descoperit în 1887. În timpul funcționării unui astfel de senzor, fasciculul de lumină este convertit în mod constant într-un semnal de curent electric.

Analogii codificatorului fotoelectric sunt optoelectronici, optici și. Acești senzori sunt cei mai sensibili la producție, funcționare și alți factori în comparație cu alte modele. Cu toate acestea, acest lucru este justificat de precizia lor sporită, spre deosebire de concurenți.

Top articole similare