Convertorul Analog-Digital

ADC-ul sau Convertorul Analog Digital, permite conversia unui semnal analogic într-o valoare digitală, valoare care mai apoi poate fi utilizată de microcontroler sau de un alt sistem de calcul. Știai că întreaga lume în care trăim este una analogică? Sunetul, lumina, temperatura, umiditatea până chiar și distanța, poziția și forța (lista poate continua) sunt mărimi (semnale) analogice. Pe de altă parte, un semnal digital este obținut prin eșantionarea unui semnal analogic, acesta fiind de forma 1 sau 0.

Din punct de vedere funcțional, în ziua de azi există 2 categorii distincte de convertoare analog-digitale: cu buclă de reacție (cu aproximări succesive, cu rampă în trepte) și fără buclă de reacție (cu rampă liniară, parelel, serie). Înainte de a trece la partea de programare și de citire a semnalelor analogice cu ajutorul microcontrolerului, vom face mai întâi o scurtă prezentarea a principiului de funcționare și a caracteristicilor principale ce stau la baza acestor convertoare.

ADC cu aproximări succesive
Convertorul analog-digital cu aproximații succesive compară corespondentul analogic al unei informații digitale, generate de un registru intern, cu tensiunea analogică a semnalului extern. Această comparare se face pas cu pas, începând de la cel mai semnificativ bit (MSB), luând decizii privind valoarea binară a fiecărui bit (0 sau 1 logic). Înainte de explicarea principiului de funcționare, vom face o scurtă prezentare a fiecărui bloc în parte:
1. Blocul S/H (Sample and Holding/ Eșantionare și Memorare)
Circuitul de eșantionare și memorare primește un semnal analogic pe care acesta îl urmărește (eșantionează) și la momente de timp convenabil alese extrage eșantioane de nivel pe care le memorează. Circuitul are două etape de funcționare:
– eșanționarea, S, în care semnalul de la ieșire reproduce semnalul de la intrare;
– memorarea, H, când semnalul de la ieșire este constant și egal cu valoarea avută în faza de eșantionare la aplicarea unei comenzi de memorare.


Principala aplicație a circuitelor de eșantionare-memorare este în conversia analog-digitală a semnalelor, ca circuite ce se află înaintea convertorului ADC pentru a aplica acestuia o tensiune constantă pe durata efectuării conversiei.

2. Comparatorul de tensiune
Comparatorul de tensiune este un circuit, care are două intrări și o singură ieșire, având structura unui amplificator operațional fără reacție (vom vedea mai târziu ce este amplificatorul operațional). Pe una din cele două intrări se aplică o tensiune fixă (denumită tensiune de prag), iar pe cealaltă intrare se aplică o tensiune care este comparată cu tensiunea de prag. În urma comparației se stabilește una din cele două valori posibile la ieșire, valori prezentate în ecuațiile din figura de mai jos:

De obicei comparatorul este alimentat cu o tensiune dublă simetrică (+Ucc, -Ucc). În aceste cazuri, nivelul înalt al tensiunii de ieșire, Uinalta, este egal cu aproximativ +Ucc, iar nivelul coborât al tensiunii de ieșire, Ujoasa, este egal cu aproximativ -Ucc. Aceste două cazuri sunt ilustrate de asemenea în caracteristica de transfer ilustrată în figura de mai sus.

3. Registru de aproximări succesive (SAR)
Un registru cu aproximații succesive produce o serie de X numere binare care mai apoi sunt convertite în tensiuni analogice de către convertorul digital-analogic. La initializare, intodeauna cel mai semnificativ bit (MSB) va fi egal cu 1 logic, restul fiind forțați în 0 logic. Acesta dispune de o intrare de date, D, o intrare alocată comenzii de start conversie (SC) și o intrare de tact, CLK, utilizată la sincronizare. De asemenea, prezintă o ieșire de CC (conversion complete) și n ieșiri binare (în funcție de rezoluția sa). În figura de mai jos este prezentat ca și exemplu un registru de aproximări succesive cu o rezoluție de 4 biți:

4. Convertorul numeric-analogic (DAC)
Convertorul numeric analogic (CNA) este un circuit electronic ce furnizează la ieșire o mărime analogică proporțională cu echivalentul binar aplicat la intrarea sa. Mărimea obținută la ieșire poate fi atât o tensiune cât și un curent electric. Ca și parametrii principali amintim:
Rezoluția
Treapta minimă ce poate fi sesizată la ieșirea unui CNA. Specificarea rezoluției poate fi făcută prin valoarea absolută a treptei minime de la ieșirea convertorului (de exemplu, în cazul unui convertor de 4 biți, vom avea o rezoluție egală cu undefined ), fie prin numărul maxim de trepte distincte de la ieșire:undefined.
Precizia
Este rezultată din compararea valorii actuale cu valoarea așteptată, fiind exprimată în procente din domeniul maxim. De exemplu, un CNA cu domeniul maxim de variație de 10 V și o precizie de +-0.1%, eroarea maximă pentru orice tensiune de intrare este egală cu 10 mV (10*0.001).
Timpul de conversie
Reprezintă intervalul de timp necesar pentru a se executa o conversie, aceasta considerându-se încheiată când mărimea de ieșire se stabilește la valoarea finală.
Rata de conversie
Reprezintă numărul de conversii pe secundă ce pot fi executate de convertor.

În figura de mai jos este prezentată schema principiului de funcționare a convertorului analog-digital cu aproximări succesive. Considerăm următorii parametrii:
– tensiunea de intrare, Uin, egală cu 11.2 volți;
– tensiunea de referință, Uref, egală cu 16 volți;
– rezoluția convertorului este de 4 biți.

Pasul 1: La inițializarea registrului de aproximări, bitul cel mai semnificativ este setat cu 1 logic. La introducerea acestei secvențe de cod binar (1000) în DAC, acesta va furniza la ieșire echivalentul analogic, valoarea rezultată fiind aplicată la intrarea comparatorului.

Cum este obținută valoarea analogică pe baza secvenței binare aplicate la intrarea convertorului? Ținând cont de faptul că există mai multe structuri ce stau la baza DAC-urilor (rețea de rezistențe R-2R, rețea de rezistențe ponderate, etc), vom folosi cea mai ușoară metodă de aflare a acestei tensiuni:

Pasul 2: Comparatorul compară tensiunea de la ieșirea convertorului cu tensiunea de intrare eșantionată. Aici avem două cazuri:
dacă undefined comparatorul va face ca SAR să reseteze bitul curent și să seteze bitul următor;
dacă undefined comparatorul va face ca SAR să seteze următorul bit, bitul curent păstrându-și valoarea.
Această operație continuă până când fiecare bit din SAR a fost testat, fiind urmată de trimiterea semnalului de CC (conversie completă). Codul rezultat reprezintă aproximarea digitală a tensiunii de intrare eșantionate.

Considerând exemplul cu parametrii specificați în figura de mai sus, vom avea următoarele cazuri:
1. Calculând valoare tensiunii de la ieșirea DAC utilizând formula prezentată mai sus, vom obține o valoare egală cu 8 volți. Având în vedere că tensiunea de intrare este egală cu 11.2 volți, ne regăsim în cazulundefined și deci SAR păstrează bitul de pe pozitia 3 și îl setează pe cel de pe poziția 2;
2. undefined, SAR resetând bitul curent (de pe poziția 2) și setând bitul de pe poziția 1;
3. undefined, caz în care SAR va păstra valoarea bitului de pe poziția 1 și o va seta și pe cea a bitului de pe poziția 0
4. undefined, caz identic cu cel anterior.

În final, valoarea obținută în urma conversiei va fi egală cu 11V. În prezentarea de mai jos este simulat ciclul de conversie a căror valori au fost calculate anterior:

În consecință, utilizând un ADC cu aproximări succesive la achiziția unui semnal analogic, vom obține la ieșire un semnal digital de forma:

ADC cu rampă în trepte
ADC-ul cu rampă în trepte ne pune la dispoziție o soluție mult mai ieftină, înlocuind registul de aproximări succesive cu un bloc logic de control mult mai simplu. Având în vedere că schema bloc a ADC-ului cu aproximări succesive este în mare parte identică cu cea din cazul de față, iar blocul DAC și comparatorul au fost explicate anterior, în cele ce urmează voi face o scurtă descriere a bistabilului și a blocului numărător pentru o întelegere mai ușoară a întregului proces de conversie.

Bistabilul R-S
Circuitele basculante bistabile sunt circuite cu două stări stabile, trecerea dintr-o stare în alta făcându-se numai la modificarea unei variabile de intrare. Bistabilele de tip R-S au două intrări: S – Set, R – Reset și două ieșiri, una normală, Q, și una negată, Q’. Acești bistabili pot fi realizați cu porți ȘI-NU, respectiv SAU-NU. În figura de mai jos este prezentat simbolul, tabela de adevăr și reprezentarea cu porți logice de tipul SAU-NU:

Din tabela de adevăr reies 4 cazuri:
– când ambele intrări sunt inactive, R=S=0, ieșirile nu își schimbă stările logice în care se află;
– când pe intrarea S se aplică un impuls pozitiv, S=1, ieșirea Q trece în 1 logic, iar ieșirea complementată Q’ în 0;
– când pe intrarea R se aplică un impul pozitiv, R=1, ieșirea Q trece în 0 logic, iar ieșirea complementată Q’ în 1;
– când ambele intrări sunt active, R=S=1, ieșirile Q și Q’ se află într-o stare nedeterminată.

Numărătorul
Numărătoarele sunt circuite logice secvențiale utilizate la contorizarea impulsurilor aplicate la intrările acestora. Acestea nu dispun de intrări de date, tranzițiile efectuându-se după o anumită regulă și într-o anumită ordine. Ele sunt realizate cu circuite basculante bistabile (stabilesc capacitatea de numărare) și porți logice (stabilesc modul corect în care numărătorul își schimbă stările în cadrul procesului de numărare). În viitorul apropiat vei găsi un curs dedicat bistabilelor, numărătoarelor și altor dispozitive logice în secțiunea Start în electronică.

Ținând cont că toate blocurile funcționale ce stau la baza ADC-ului cu rampă în trepte sunt cunoscute, mai jos este prezentată schema bloc a acestuia:

Mod de funcționare:
– la aplicarea comenzii de start conversie, SC, bistabilul R-S trece în starea 1 (ieșirea sa fiind setată în 1 logic), permițând impulsurilor de tact (CLK) trecerea prin poarta logică ȘI, iar numărătorul este inițializat;
– numărătorul începe să numere pornind din starea 0, iar numărul respectiv este aplicat pe intrările convertorului digital-analogic;
– după prelucrarea valorii de la intrare, DAC-ul va genera o tensiune analogică de ieșire, tensiune aplicată pe intrarea comparatorului (se calculează cu aceeași formulă prezentată în cazul anterior);
– comparatorul compară cele două tensiuni, iar dacă tensiunea obținută la ieșirea DAC nu este mai mare decât tensiunea de intrare procesul este reluat;
– în momentul în care tensiunea obținută este mai mare decât tensiunea de intrare, ieșirea comparatorului va trece în starea 1 resetând bistabilul;
– odată resetat bistabilul, poarta logică ȘI va fi blocată, oprind accesul impulsurilor de tact către numărător.
De asemenea, pentru o exemplificare și mai concretă, principiul de funcționare al acestui tip de ADC este simulat în ilustrația de mai jos:

În consecință, utilizând un ADC cu rampă în trepte la achiziția unui semnal analogic, vom obține la ieșire un semnal digital de forma:

Acum că toată logica de funcționare din spatele ADC-ului este cunoscută, vom trece la cea de a doua parte a cursului de astăzi, intitulată: Registrii și parametrii specifici ADC-ului din cadrul familiei de microcontrolere AVR.

Parametrii ADC-ul regăsit în cadrul microcontrolerului ATmega128A:
1. Rezoluția
ADC-ul are o rezoluție de 10 biți. Cu alte cuvinte, convertorul nostru poate avea un număr de undefined de stări, micșorând considerabil valoarea erorii de conversie. De exemplu, în acest caz comunicația SAR – DAC se va face pe 10 linii, drept urmare rezultatul fiind mult mai precis.

2. Număr de canale
Convertorul din cadrul microcontrolerului folosit dispune de 8 canale. Ce înseamnă asta? Păi de exemplu avem posibilitatea de a conecta la microcontroler 8 senzori analogi. Trebuie amintit aici faptul că datele de la cei 8 senzori nu pot fi citite în paralel, citirea următorului canal facându-se în momentul în care conversia anterioară este completă (canalele fiind multiplexate).

3. Prescalar
Conversia semnalului analogic în cel digital are loc într-un anumit interval de timp. Acest interval de timp este determinat cu ajutorul frecvenței de ceas, frecvență furnizată de către cristalul de quarț (click aici pentru mai multe detalii). În general ADC-ul operează la frecvențe între 50kHz și 200kHz, dar frecvența la care operează microcontrolerul este de ordinul megaherților (8MHz, 16MHz, etc). Prescalarul se comportă ca un factor de divizare, având o scară de divizare predefinită: CLK/2, CLK/4, CLK/8, CLK/16, CLK/32, CLK/64, CLK/128. De exemplu, presupunând că folosim un prescalar de 64 și F_CPU = 16MHz, frecvența la care va opera ADC-ul va fi egală cu: 16 000 000 / 64 = 250 000 = 250kHz. Trebuie ținut cont de faptul că cu cât frecvența de conversie este mai mare, acuratețea conversiei este mai mică și vice-versa.

4. Tensiunea de referință
Tensiunea de referință, după cum ați vazut în prima parte a cursului, este utilizată în procesul de conversie. Aceasta poate fi “luată” din trei locuri:
AVCC: tensiunea conectată la pinul de AVCC care este de asemenea conectat intern la ADC printr-un comutator pasiv;
Internal 2.56V reference: tensiune de referință generată intern;
External AREF pin: utilizat la asigurarea unei tensiuni de referință din exterior, folosind un pinul de AREF atașat microcontroller-ului.

În figura de mai jos este prezentată schema bloc a convertorului analog digital din cadrul microcontrolerului ATmega128A:

Având în vedere că prezintă o structură destul de “stufoasă”, am hotărât să o împart în 4 blocuri principale (Referința, Intrarea, Comanda și Ieșirea) lângă care se adaugă celelalte 3 blocuri (DAC, Logica de conversie și comparatorul S/H) pe care le-am văzut deja mai sus în cadrul prezentării tipurilor de ADC-uri.

1.Referința
Aici este asigurată tensiunea de referință a convertorului. După cum am explicat anterior, aceasta poate fi furnizată din exterior pe pinii AVCC sau AREF ori din interior (2.56V).

2. Intrarea
In acest loc este selectat canalul de pe care dorim să achiziționăm semnalul analogic. După cum se poate observa și în schemă, dispunem de:
referință de tensiune de tip bandă fixă (tensiune constantă imună la modificările de temperatură și la variațiile de tensiune);
– 8 canale de intrare (ADC0 – ADC7);
– intrarea de AGND (analog GND) care este conectată în prealabil la GND.
De asemenea, în funcție de selecție, se poate utiliza unul dintre cele două multiplexoare (cu intrări pozitive sau negative).

Un lucru foarte important aici o constituie selecția tipului de măsurătoare a semnalului de intrare: Single Ended sau Differential.

Operația diferențială (Differențial operation)
Un ADC setat să funcționeze în mod diferențial va măsura o cădere de tensiune între două intrări. Prin definiție, valoarea unui semnal diferențial este dată de valoarea tensiunii prezente între cele două borne: pozitivă și negativă. De exemplu, pentru conectarea unui senzor analogic de tip diferențial, borna pozitivă va fi legată pe o intrare pozitivă a ADC-ului (POS INPUT MUX), în timp ce borna negativă pe una din intrările asignate semnalelor negative (NEG INPUT MUX). De asemenea, ADC-ul este prevăzut cu un amplificator de semnal pentru a permite măsurarea tensiunilor foarte mici în regim diferențial.

Operația Single Ended
Cei mai simpli și utilizați senzori analogici furnizează semnale de tip single-ended. Aceștia sunt concepuți astfel încât să poată fi conectați la aceeași masă comună cu microcontrolerul (același GND), furnizându-ne rezultatul măsurătorii ca un semnal de tensiune analogic raportat la masă. Toate ADC-urile suportă acest tip de operație.

3. Comanda
În cadrul blocului de comandă se setează toți parametrii necesari realizării conversiei analog-digitale. Aici se regăsesc cei 2 regiștrii utilizați la setarea ADC-ului: ADMUX și ADCSRA, prescalarul și un multiplexor.

4. Ieșirea
În blocul de ieșire găsim registrul ADCH/ADCL, registru în care se găsește informația rezultată în urma conversiei.

Registrul ADMUX

Bits 7:6 – REFS1:0: Selecția tensiunii de referință (Reference selection bits)
Acești biți sunt utilizați la selecția tensiunii de referință a ADC-ului. Dacă în timpul conversiei valoarea biților este schimbată, schimbarea va avea efect doar atunci când actuala conversie a fost încheiată. Avem la dispoziție următoarele combinații:

Prezența condensatorului pe AREF în cazul referinței de AVCC sau a tensiunii interne de 2.56 este necesară pentru înlăturarea zgomotului, pinul de AREF fiind conectat direct la ADC.

Bit 5 – ADLAR: Ajustarea rezultatului (ADC Left Adjust Result)
Bitul acesta este utilizat la “ajustarea” rezultatului obținut în urma conversiei. Când bitul este setat rezultatul va suferi o ajustare la stânga, în timp ce valoarea 0 îl va ajusta la dreapta. Acest rezultat se regăsește în registrul de date ADC: ADCH și ADCL. Pentru o înțelegere mult mai ușoară, considerăm exemplul de mai jos:

Bits 4:0 – MUX4:0 Selecția canalului analogic
Acești biți sunt utilizați la selecția canalului analogic de pe care se va face achiziția semnalul ce urmează a fi convertit. De exemplu dacă vrem să citim date de la canalul 2 de tip Single Ended (ADC2), vom avea următoarea combinație: 00010:

Atunci când tensiunea de la intrarea ADC-ului este de tip diferențial, selecția canalului se va face utilizând următoarea combinație binară: 10000. În acest caz, borna pozitivă va fi conectată la intrarea ADC0, cea negativă fiind conectată la ADC1. După cum se poate vedea și în tabelul atașat foii de catalog corespunzătoare microcontrolerului folosit, această configurație prezintă un factor de amplificare egal cu 1.

Registrul ADCSRA

Bit 7 – ADEN: Activare ADC (ADC Enable)
Acest bit este utilizat la activarea ADC-ului. Când acest bit este setat (1-logic), ADC este activat. În caz contrar (0-logic), ADC-ul este dezactivat.

Bit 6 – ADSC: Start conversie ADC (ADC Start Conversion)
Conversia analog-digitală începe în momentul în care acest bit este setat. Atunci când ne aflăm în modul de conversie singulară (are loc o singură conversie după care ADC se oprește), setarea acestui bit va porni conversia. În modul de conversie continuă (conversia se face în mod continuu, fiind oprită la cererea programatorului) setarea acestui bit va determina pornirea primei conversii. Această primă conversie va dura un interval de timp puțin mai mare (comparativ cu celelelate), timp necesar inițializării ADC-ului.

Bit 5- ADFR: Mod conversie continuă ADC (ADC Free Running Select)
Când acest bit este setat în 1 logic, ADC-ul va funcționa în modul conversie continuă (free running mode). În acest mod, convertorul presupune că intrarea este validă și va actualiza în mod continuu cei doi regiștrii de date (ADCH, ADCL).

Bit 4 – ADIF: Flag de întrerupere ADC (ADC Interrupt Flag)
Bitul acesta se setează automat în momentul în care o conversie este finalizată, iar cei doi regiștrii de date s-au actualizat. Bitul de ADIF se va șterge automat în momentul în care întreruperea corespunzătoate ADC-ului va fi executată (vezi curs întreruperi). La cerere, ștergea manuală a acestui flag se poate face prin scrierea unui 1 logic în bitul respectiv.

Bit 3 – ADIE: Activare întrerupere ADC (ADC Interrupt Enable)
La finalizarea procesului de conversie se poate genera o înterupere de ADC, utilizarea acestei înteruperi fiind posibilă doar prin setarea bitului ADIE și a bitului 7 din registrul SREG (vezi curs întreruperi).

Bit 2:0 – ADPS2:0: Selectarea prescalerului ADC (ADC Prescaler Select Bits)
Acești biți sunt utilizați la selecția factorului de diviziune dintre frecvența oscilatorului cu cuarț a microcontrolerului și a semnalului de ceas utilizat de către ADC. Acest factor începe cu valoarea 2 (corespunzător binar 000) și poate ajunge pănâ la valoarea de 128 (corespunzător binar 111). Vezi explicații mai sus.

Registrul ADCH și ADCL
La sfârșitul fiecărei conversii complete de ADC, rezultatul poate fi găsit în cadrul acestor doi regiștrii. Așa cum am explicat și în cadrul registrului ADLAR, rezultatul final poate fi ajustat la stânga sau la dreapta, în funcție de preferințe. Mai jos se pot observa biții utilizați de către cei doi regiștrii în funcție de cele două moduri de ajustare:

Design a site like this with WordPress.com
Get started