CURSUL 07

Convertorul Analog-Numeric

Durată: 122 min de predare Nivel: licență, anul II - recomandat după Cursul 06 Disciplină: Microcontrollere și Microprocesoare Laborator asociat: Laboratorul 05 PDF: descarcă suportul EN English version

Toate mărimile pe care le măsurăm în lumea fizică sunt continue - temperatura nu sare de la douăzeci la douăzeci și unu de grade, ci trece prin toate valorile intermediare. Memoria unui microcontroler e exact opusul: un grup de zece biți poate păstra exact 1024 de configurații distincte, niciuna în plus. Blocul care face puntea între aceste două lumi, cu o pierdere de informație deliberată și dimensionată cu grijă, este convertorul analog-numeric - piesa care transformă un microcontroler dintr-un automat cu comenzi logice într-un instrument de măsură programabil.

1Obiectul și structura cursului6 min

Vom urmări drumul complet al unui semnal, de la o tensiune continuă la un număr în memorie: etapele obligatorii ale conversiei, condiția care spune cât de des trebuie să privim semnalul pentru a-l putea reconstitui, compromisul dintre rezoluție și domeniu, rolul esențial și adesea neglijat al tensiunii de referință, familiile de arhitecturi și, la final, modulul ADC concret al ATmega328P.

Recapitulare din Cursul 06
  • Un modul de timp transformă timpul dintr-un efect secundar al execuției într-o mărime măsurabilă (Cursul 06)
  • Formulele de prescalare (frecvență, factor de prescalare, valoare de comparare) revin identic în acest curs, aplicate ceasului convertorului (Cursul 06)
  • Să explicați cele trei etape obligatorii ale conversiei și rolul circuitului de eșantionare și reținere
  • Să aplicați teorema eșantionării și să recunoașteți un caz de aliasing
  • Să calculați pasul de cuantizare și eroarea maximă pentru o rezoluție și o referință date
  • Să explicați de ce tensiunea de referință e o decizie de proiectare, nu un detaliu de configurare
  • Să descrieți pas cu pas algoritmul unui convertor cu aproximări succesive
  • Să configurați și să citiți corect ADC-ul ATmega328P, pe registre, respectând ordinea ADCL-ADCH

2De ce e nevoie de conversie analog-numerică9 min

Fără un ADC (Analog to Digital Converter), un microcontroler ar comunica numai cu dispozitive care vorbesc deja limbajul lui - butoane, LED-uri, magistrale seriale. Toate traductoarele care redau o mărime fizică prin amplitudinea unei tensiuni (termistoare, fotorezistoare, potențiometre, microfoane) ar rămâne în afara sistemului. Convertorul primește o tensiune și livrează un număr întreg, proporțional cu acea tensiune raportată la o referință - din acel moment, valoarea măsurată devine un simplu număr pe care programul îl poate compara, aduma, filtra sau transmite.

Mărimile care compară două convertoare

Rezoluția: numărul de biți ai rezultatului, deci numărul de trepte (2^r). Nu spune nimic despre exactitate, doar despre finețe - un convertor de 16 biți prost proiectat poate fi mai puțin exact decât unul de 10 biți bine făcut. Lățimea de bandă: intervalul de frecvențe pe care convertorul le poate urmări fără distorsiuni, determinată de rata de eșantionare. Raportul semnal-zgomot (SNR): pentru un convertor ideal de r biți, SNR = 6,02·r + 1,76 dB - fiecare bit adăugat aduce ~6 dB, dar valoarea reală e mereu mai mică, din zgomotul alimentării și al referinței. Timpul de conversie: limitează direct rata de eșantionare. Tensiunea de referință: fixează domeniul măsurabil, iar exactitatea ei se transmite integral în rezultate.

Compromisul fundamental Viteza, rezoluția și costul nu pot fi optimizate simultan. Un convertor foarte rapid e scump și cu rezoluție mică; unul de rezoluție foarte mare e lent. Toată varietatea de arhitecturi discutată în acest curs e o colecție de compromisuri diferite între aceste trei mărimi.

3Etapele procesului de conversie13 min

Conversia trece prin trei etape obligatorii: eșantionarea (semnalul continuu în timp e prelevat la momente discrete), cuantizarea (valoarea prelevată e dusă la cel mai apropiat nivel dintr-o mulțime finită) și codificarea cu stocare (nivelul ales e exprimat binar și depus într-un registru). În jurul lor, un filtru trece-jos (anti-alias) înaintea eșantionatorului, și un circuit de reținere care imobilizează valoarea pe durata cuantizării.

Eșantionarea și circuitul sample-and-hold

Ce se întâmplă între două eșantioane e pierdut definitiv - prima și cea mai gravă pierdere de informație din tot lanțul. Convertoarele reale folosesc eșantionarea „cu vârf plat": un comutator, un condensator și un amplificator repetor (sample and hold). Comutatorul închis = achiziție (condensatorul se încarcă la tensiunea de intrare); deschis = reținere (tensiunea rămâne aproape neschimbată).

De ce e nevoie de reținere: eroarea de jumătate de domeniu Un SAR de zece biți execută zece comparații succesive. Dacă tensiunea de intrare s-ar modifica între prima și ultima comparație, deciziile ar privi valori diferite ale semnalului - o variație petrecută la momentul nepotrivit poate falsifica bitul cel mai semnificativ, adică poate produce o eroare de jumătate din domeniul de măsurare. Pe durata conversiei, tensiunea reținută trebuie să rămână neschimbată în limita a mai puțin de jumătate de pas de cuantizare.
Impedanța sursei limitează încărcarea condensatorului de eșantionare

Condensatorul ATmega328P are ~14 pF; el se încarcă prin rezistența internă a comutatorului înseriată cu impedanța sursei. Cu o sursă de 10 kΩ, constanta de timp e 140 ns și încărcarea completă durează ~1,1 µs, sub cele câteva microsecunde de achiziție disponibile. Cu o sursă de 1 MΩ, constanta devine 14 µs, iar încărcarea ar cere peste 100 µs - mai mult decât o conversie întreagă. Rezultatul citit ar fi sistematic prea mic, și dependent de canalul măsurat anterior. De aici recomandarea din foaia de catalog: impedanța sursei sub 10 kΩ.

Cuantizarea

Domeniul, între referința inferioară și superioară, e împărțit în 2^r intervale egale; lățimea unui interval (pasul de cuantizare, sau LSB): q = (VREF+ - VREF-)/2^r. Diferența dintre caracteristica reală (o scară) și cea ideală (o dreaptă) e eroarea de cuantizare - spre deosebire de celelalte erori discutate mai departe, aceasta e o eroare de principiu, care nu poate fi eliminată prin calibrare, ci doar redusă crescând numărul de biți. Prin rotunjire, eroarea e între -q/2 și +q/2; ATmega328P trunchiază, deci eroarea e între 0 și q, cu un offset sistematic de q/2.

Codificarea și stocarea

Nivelul e exprimat ca număr binar și scris într-un registru de rezultat, accesibil printr-o instrucțiune obișnuită. Pe ATmega328P, rezultatul de zece biți e împărțit în ADCH și ADCL - simultan, hardware-ul activează un indicator de terminare și, dacă validată, o întrerupere. Convertorul devine liber pentru o nouă conversie; dacă programul întârzie prea mult, o valoare poate fi pierdută fără niciun avertisment.

Etapele unei conversii analog-numerice: puneti-le in ordine

4Rata de eșantionare și fenomenul de aliasing13 min

Esantionare si aliere - miscati cele doua frecvente

Rata de eșantionare, în eșantioane pe secundă, e limitată de timpul de conversie: R_e = 1/T_c.

Teorema eșantionării (Shannon-Nyquist)
Frecvența de eșantionare trebuie să depășească strict dublul celei mai înalte frecvențe prezente în semnal: f_s > 2·f_max. Frecvența f_s/2 se numește frecvență Nyquist - limita superioară a benzii reprezentabile corect. Motivul intuitiv al factorului doi: o oscilație are, în fiecare perioadă, un maxim și un minim, iar pentru a o distinge de o linie dreaptă e nevoie de cel puțin o observație în vecinătatea fiecăruia.

Când condiția nu e respectată, componentele de frecvență prea înaltă nu se pierd, ci se transformă în componente de frecvență joasă - aliasing - indistinctibile de un semnal legitim: f_alias = min_k |f_in - k·f_s|.

Exercițiu rezolvat - un semnal de 6 kHz eșantionat la 8 kHz

Ce frecvență va avea semnalul reconstituit din eșantioane?

Vezi rezolvarea

Frecvența Nyquist e f_s/2 = 4 kHz; semnalul are 6 kHz, deci teorema e încălcată. Cu k=1: f_alias = |6-8| = 2 kHz (celelalte valori ale lui k dau rezultate mai mari). Frecvența aparentă e 2 kHz.

Verificare pe eșantioane: pentru k=0,1,2,3,4, sinusoida de 6 kHz dă valorile 0,-1,0,+1,0; cea de 2 kHz dă 0,+1,0,-1,0 - identice până la semn. Privind numai eșantioanele, e imposibil de decis dacă la intrare a fost 6 kHz sau 2 kHz cu faza inversată. Componenta de 6 kHz nu a dispărut: s-a mutat, ca un intrus, în mijlocul benzii utile.

Aliasingul nu poate fi corectat după eșantionare

Odată coborâtă în banda utilă, o componentă de frecvență înaltă e indistinctibilă de un semnal legitim, oricât de sofisticată ar fi prelucrarea ulterioară. Singurul remediu e preventiv: un filtru anti-alias, analogic (trebuie să acționeze înainte de eșantionare), plasat între sursă și convertor, cu frecvența de tăiere sub frecvența Nyquist. O celulă RC simplă atenuează lent (20 dB/decadă), motiv pentru care frecvența de eșantionare se ia cu o marjă confortabilă peste dublul benzii utile - în practică de trei până la zece ori banda utilă, nu de exact două ori (supraeșantionare). Rezistorul filtrului se adaugă la impedanța sursei văzută de condensatorul de eșantionare: un filtru cu R=100 kΩ rezolvă aliasingul și creează problema încărcării incomplete - combinația uzuală e câțiva kiloohmi cu un condensator de ordinul nanofarazilor.

5Rezoluția și eroarea de cuantizare11 min

Pasul de cuantizare, q = E_mt/2^r (unde E_mt = VREF+ - VREF-), e cea mai mică variație de tensiune care mai poate produce o schimbare a codului - orice variație mai mică trece neobservată.

Exercițiu rezolvat - pasul, eroarea și codul pentru un convertor de 10 biți

VREF- = 0, VREF+ = 5 V. Calculați pasul de cuantizare, eroarea maximă și codul pentru V_in = 3,742 V.

Vezi rezolvarea

q = 5/1024 ≈ 4,88 mV. Prin rotunjire, eroarea maximă ar fi q/2 ≈ 2,44 mV; ATmega328P trunchiază, deci eroarea e între 0 și 4,88 mV, medie 2,44 mV (offset sistematic).

Codul: 3,742/4,88×10⁻³ ≈ 766,3 → trunchiere → 766. Tensiunea reconstituită: 766×4,88 mV = 3,740 V, abatere de 2 mV, sub un pas, cum era de așteptat.

Observație practică: dacă senzorul are o eroare proprie de 1% (~37 mV), rezoluția de 4,9 mV e de opt ori mai fină decât precizia semnalului - creșterea rezoluției la 12 biți nu ar aduce niciun câștig real.

Rezoluția se alege în raport cu variația utilă a mărimii, nu maximizată abstract Dacă un termocuplu produce 40 µV/grad, un convertor de 10 biți cu referință de 5 V (pas 4,9 mV) nu poate distinge nici măcar o sută de grade. Soluția nu e mai mulți biți, ci un amplificator care aduce semnalul la scara domeniului de măsurare.
Calculator ADC: pas de cuantizare, cod si tensiune reconstituita

6Tensiunea de referință11 min

Tensiunea de referință fixează domeniul de conversie: V_in = VREF- ⇒ N=0, V_in = VREF+ ⇒ N = 2^r - 1. Relația inversă, cea folosită imediat după citirea rezultatului: V_in = VREF- + N·(VREF+ - VREF-)/2^r.

Exercițiu rezolvat

Convertor de 10 biți, VREF- = 0, VREF+ = 5 V. Ce tensiune corespunde codului N=100?

Vezi rezolvarea

V_in = 0 + 100×5/1024 = 488,3 mV. Verificare: 100/1024 ≈ 9,77% din domeniu, 9,77% din 5 V = 0,49 V. Valoarea nu e exactă, ci limita inferioară a intervalului care produce codul 100 - toate tensiunile între 488,3 și 493,2 mV dau același rezultat.

REFS1:0SursăObservații
00Pinul AREF externreferința internă decuplată, domeniu fixat din exterior
01AVCCimplicit pe Arduino, presupune 5 V exact
11Referință internă 1,1 Vindependentă de alimentare, dispersie ±0,1 V
AVCC pare inofensivă tocmai pentru că e implicită

O placă Arduino alimentată prin USB primește, după dioda de protecție, 4,6-4,8 V, nu 5,0 V. Programul care împarte la 1024 și înmulțește cu 5 va da rezultate cu 4-5% mai mari decât realitatea, fără niciun semn de eroare - și dacă alimentarea variază (un motor comandat din același montaj trage curent în impulsuri), referința „respiră" în ritmul consumului.

Măsurătoarea ratiometrică - cazul în care AVCC e alegerea corectă Dacă senzorul e alimentat din aceeași tensiune care servește drept referință (un potențiometru sau un divizor între VCC și masă), tensiunea furnizată e o fracțiune fixă din alimentare - raportul dintre ea și referință nu depinde de valoarea alimentării. Codul citit rămâne corect chiar la 4,7 V în loc de 5 V, pentru că ambele mărimi se modifică proporțional.
Pinul AREF nu se leagă la o sursă externă când REFS selectează AVCC sau referința internă

În acel caz, la AREF apare tensiunea generată intern - conectarea unei surse externe scurtcircuitează cele două referințe și poate distruge circuitul. AREF se leagă, în funcționare normală, numai printr-un condensator de decuplare la masă. Orice zgomot pe referință se regăsește în toate rezultatele: un vârf de 50 mV pe o referință de 5 V reprezintă zece pași de cuantizare la 10 biți, deci face inutili ultimii trei biți ai rezultatului.

7Timpul de conversie9 min

Blocul de conversie al ATmega328P are ceas propriu, obținut din ceasul sistemului printr-un prescaler (biții ADPS2:0). Foaia de catalog cere ca acest ceas să fie între 50 și 200 kHz pentru rezoluția completă de 10 biți - peste 200 kHz, convertorul funcționează, dar ultimii biți devin nesiguri.

O conversie obișnuită durează 13 cicluri ale ceasului ADC (1,5 pentru achiziție, 10 pentru cele zece comparații, restul pentru sincronizare). Prima conversie de după activare durează 25 de cicluri.

Exercițiu rezolvat - ceasul ADC pe Arduino Uno, la 16 MHz

Singura alegere de prescalare care respectă domeniul 50-200 kHz e 128 (celelalte dau frecvențe prea mari).

Vezi calculul complet

f_ADC = 16×10⁶/128 = 125 kHz. T_c = 13/125×10³ = 104 µs - exact durata unui apel analogRead(). Rata de eșantionare: R_e = 1/104µs ≈ 9600 Hz, frecvența Nyquist ~4,8 kHz. Cu marja necesară filtrului anti-alias, banda utilă realistă a unui montaj Arduino care citește continuu o intrare e de ordinul unui kilohertz sau doi - suficient pentru temperaturi sau tensiuni de baterie, insuficient pentru audio. Coborârea prescalerului la 64 dublează rata, cu pierderea ultimilor biți de rezoluție (compromis legitim dacă e declarat conștient).

Un al doilea canal înjumătățește banda utilă a primului Blocul de conversie e unic și multiplexat: eșantionarea alternativă a două canale înseamnă cel puțin 2×104 = 208 µs pe ciclu complet, deci ~4800 Hz pe canal, Nyquist ~2,4 kHz per canal. Resursa partajată nu e pinul, ci blocul de conversie însuși - adăugarea unui senzor reduce banda disponibilă pentru toate celelalte.

8Arhitecturi de implementare13 min

Toate arhitecturile fac același lucru - compară tensiunea de măsurat cu tensiuni cunoscute - diferind prin cum organizează comparațiile.

Elementul comun: comparatorul, un convertor de un singur bit (ATmega328P are unul independent de ADC, util pentru detecția pragurilor fără costul unei conversii complete).

Aproximări succesive (SAR) - arhitectura ATmega328P

Patru blocuri: registru de aproximări, convertor numeric-analogic, referință, comparator. Algoritmul e o căutare binară pe tensiune: se pune pe 1 bitul cel mai semnificativ (tensiune de probă = jumătate din domeniu); dacă intrarea e mai mare, bitul rămâne, altfel se șterge; se trece la următorul bit, care înjumătățește intervalul rămas.

Exercițiu rezolvat - conversia unei tensiuni de 3,6 V, SAR pe 4 biți, referință 5 V
Vezi pas cu pas

Pas de cuantizare: q = 5/16 = 0,3125 V.

Bit 3 (MSB): probă 1000=8 → 2,5 V. 3,6>2,5 → bitul rămâne. Registru: 1000.

Bit 2: probă 1100=12 → 3,75 V. 3,6<3,75 → bitul se șterge. Registru: 1000.

Bit 1: probă 1010=10 → 3,125 V. 3,6>3,125 → bitul rămâne. Registru: 1010.

Bit 0 (LSB): probă 1011=11 → 3,4375 V. 3,6>3,4375 → bitul rămâne. Registru final: 1011 = 11.

Tensiune reconstituită: 11×0,3125 = 3,4375 V, eroare 0,1625 V ≈ 0,52q, sub un pas de cuantizare, cum era de așteptat de la o trunchiere. Intervalul de incertitudine s-a înjumătățit la fiecare pas: 5 → 2,5 → 1,25 → 0,625 → 0,3125 V.

De ce SAR e potrivit pentru microcontrolere Timpul de conversie e proporțional cu numărul de biți (nu cu numărul de coduri) - previzibil și constant. Consum redus, un singur comparator activ. Rezoluția de 10-12 biți la zeci-sute de mii de eșantioane pe secundă acoperă exact nevoile aplicațiilor de măsurare uzuale.
ArhitecturăVitezăRezoluțieUtilizare tipică
Paralel (flash)foarte maremică (≤8 biți)osciloscoape, video, radio numeric
Aproximări succesivemedie-maremedie-mare (10-16)microcontrolere, achiziție de uz general
Rampă (simplă/dublă)micămaremultimetre, laborator
Sigma-deltamicăfoarte mare (16-32)cântare, termometre de precizie, audio

Paralel (flash): compară simultan cu toate nivelele, printr-un divizor rezistiv și 2^r-1 comparatoare - un convertor de 10 biți ar cere 1023 de comparatoare. Cel mai rapid (miliarde de eșantioane/s), dar costul crește exponențial cu rezoluția - se oprește de regulă la 8 biți.

Rampă: un generator de tensiune liniară și un numărător pornesc simultan; comparatorul oprește numărătorul când rampa depășește intrarea. Timpul de conversie depinde de valoarea măsurată, în cel mai defavorabil caz 2^r perioade. Varianta cu dublă rampă elimină dependența de valoarea condensatorului și a ceasului prin simplificare în raport - soluția clasică a multimetrelor digitale.

Sigma-delta: face foarte multe măsurători foarte grosolane (un bit) și obține finețea prin mediere - un modulator cu integrator și comparator produce un flux de biți a cărui densitate e proporțională cu tensiunea, filtrat numeric printr-o fereastră lungă. Rezoluție de 16-32 biți, cu hardware analogic simplu, dar viteză mică și latență mare.

Potriviti arhitectura de convertor cu situatia in care se foloseste

9Erori de conversie7 min

Pe lângă eroarea de cuantizare (de principiu), un convertor real are abateri din imperfecțiunile componentelor, măsurate în multipli ai pasului de cuantizare.

Eroarea de offset: deplasare pe verticală a întregii caracteristici - la intrare nulă, ieșirea nu e codul zero. Provine din tensiunea de decalaj a comparatoarelor și curenții de scurgere; fiind constantă, se compensează ușor prin scăderea unei constante din toate rezultatele.

Eroarea de amplificare (câștig): modificarea pantei caracteristicii - cauza principală e inexactitatea tensiunii de referință. Se determină prin metoda punctelor de capăt și se compensează printr-un factor de corecție determinat la calibrare.

Neliniaritate diferențială (DNL) și integrală (INL)
DNL măsoară cât de neegale sunt treptele: DNL(n) = (W_n - 1 LSB)/1 LSB. DNL = -1 înseamnă o treaptă de lățime nulă, un cod care nu apare niciodată. INL e abaterea maximă cumulată a caracteristicii reale de la dreapta ideală - spre deosebire de offset și câștig, nu se corectează printr-o operație simplă, ci doar printr-un tabel de calibrare punct cu punct, și limitează în final exactitatea reală a convertorului. Pentru ATmega328P, exactitatea absolută e de ordinul a doi pași de cuantizare - din cei 10 biți nominali, aproximativ 9 sunt de încredere.

10Modulul ADC al microcontrolerului ATmega328P11 min

Convertorul ATmega328P e cu aproximări succesive, 10 biți, precedat de un multiplexor cu șase intrări (ADC0-ADC5, pinii A0-A5) - un singur bloc de conversie, canalele se citesc succesiv, nu simultan.

ADMUX: REFS1:0 aleg referința; MUX3:0 aleg canalul (0000-0101 = ADC0-ADC5, plus câteva combinații pentru senzorul intern de temperatură și o referință fixă de 1,1 V); ADLAR aliniază rezultatul la dreapta (implicit) sau la stânga (permite citirea celor mai semnificativi 8 biți dintr-un singur registru).

ADCSRA: ADEN alimentează blocul analogic; ADSC declanșează o conversie și revine la 0 la terminare; ADATE validează declanșarea automată (regim free running); ADIF e indicatorul de terminare, ADIE validează întreruperea (vector ADC_vect); ADPS2:0 fixează prescalarea.

ADCL se citește întotdeauna primul

Rezultatul de 10 biți e împărțit în ADCL și ADCH. Citirea lui ADCL blochează accesul convertorului la perechea de registre; blocarea se ridică la citirea lui ADCH. Dacă programul citește numai ADCH, sau citește ADCL și uită ADCH, registrele rămân blocate și conversiile ulterioare se pierd, fără nicio eroare vizibilă. În C, pseudoregistrul ADCW (sau ADC) generează automat cele două citiri în ordinea corectă.

/* cu functia de biblioteca */
int brut = analogRead(A0);   /* 0..1023, ~104 us */

/* direct pe registre */
void adc_init(void) {
    ADMUX = (1 << REFS0);                                  /* AVCC, aliniat dreapta */
    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); /* prescaler 128 */
    DIDR0 = (1 << ADC0D);                                  /* dezactiveaza bufferul digital */
}
uint16_t adc_citeste(uint8_t canal) {
    ADMUX = (ADMUX & 0xF0) | (canal & 0x0F);   /* pastreaza REFS, schimba doar canalul */
    _delay_us(10);
    ADCSRA |= (1 << ADSC);
    while (ADCSRA & (1 << ADSC)) { ; }
    uint8_t inferior = ADCL;   /* ADCL SE CITESTE PRIMUL */
    uint8_t superior = ADCH;
    return ((uint16_t)superior << 8) | inferior;
}
Transformarea valorii brute în tensiune - virgulă mobilă sau aritmetică întreagă Vin = (brut × V_REF) / 1024.0 în float, comodă dar lentă; sau, mult mai rapid pe un microcontroler fără coprocesor matematic, în întregi: (uint32_t)brut × 5000UL / 1024UL (rezultat în mV). Împărțirea la 1024 (putere a lui doi) devine o simplă deplasare de biți - la 1023, ar cere o rutină de împărțire completă, de zeci de ori mai lentă, pentru un câștig de exactitate sub o miime.

11Greșeli tipice și recomandări practice5 min

  • „Rezultatul citit depinde de canalul citit anterior - trebuie să fie o defecțiune." Aproape sigur nu - e impedanța prea mare a sursei. Un divizor de sute de kiloohmi nu poate încărca în timp util condensatorul de 14 pF, iar rezultatul rămâne sistematic apropiat de valoarea canalului anterior. Coborâți impedanța sursei sub 10 kΩ, sau intercalați un amplificator repetor.
  • „Referința pe AVCC e sigură - alimentarea e oricum 5 V." Fals de multe ori - o placă alimentată prin USB primește adesea 4,6-4,8 V, iar o alimentare care variază face referința să „respire" odată cu consumul, fără niciun mesaj de eroare. Folosiți măsurarea ratiometrică unde e aplicabilă, sau treceți la referința internă de 1,1 V pentru semnale mici.
  • „Citesc de o sută de ori și fac media - rezolvă orice problemă de precizie." Fals - media reduce doar zgomotul aleator (proporțional cu rădăcina numărului de eșantioane), nu corectează nimic din erorile sistematice (offset, referință greșită) și nu elimină o componentă intrată prin aliasing, care nu e zgomot, ci un semnal determinist. Tratați offset-ul și referința separat prin calibrare; folosiți filtrul anti-alias pentru componentele de frecvență înaltă, nu medierea.

12Rezumat și glosar5 min

Conversia analog-numerică traversează trei etape obligatorii - eșantionarea (discretizează timpul), cuantizarea (discretizează amplitudinea) și codificarea (face rezultatul accesibil programului) - încadrate de un filtru anti-alias și un circuit de eșantionare-reținere. Eșantionarea cere ca frecvența de prelevare să depășească dublul celei mai înalte frecvențe din semnal, altfel apare aliasing, ireversibil după eșantionare. Cuantizarea introduce o eroare de cel mult un pas, q=VREF/2^r, iar rezoluția trebuie aleasă în raport cu variația utilă a mărimii măsurate. Tensiunea de referință fixează simultan domeniul și rezoluția efectivă, iar zgomotul sau imprecizia ei se transmit nediminuate în toate rezultatele - alegerea între AVCC, referința internă și una externă e o decizie de proiectare, nu o opțiune de configurare. Arhitectura cu aproximări succesive, folosită de ATmega328P, e o căutare binară pe tensiune, cu timp de conversie proporțional cu numărul de biți - compromisul echilibrat care a făcut-o standardul microcontrolerelor. Pe ATmega328P, ADCL se citește întotdeauna primul, iar reconfigurarea referinței sau a canalului cere o citire de probă aruncată înainte de a avea încredere în rezultat.

Sample and hold
circuit care imobilizează tensiunea de intrare pe durata unei conversii.
Aliasing
transformarea unei componente de frecvență prea înaltă într-una de frecvență joasă, prin subeșantionare.
Pas de cuantizare (LSB)
cea mai mică variație de tensiune care schimbă codul de ieșire.
SAR
Successive Approximation Register - arhitectura cu aproximări succesive.
Măsurătoare ratiometrică
măsurătoare al cărei rezultat nu depinde de valoarea absolută a alimentării, când senzorul și referința sunt alimentate din aceeași sursă.
DNL / INL
neliniaritate diferențială / integrală - abaterea treptelor reale de la caracteristica ideală.

13Întrebări de verificare7 min

  1. Explicați de ce o mărime fizică nu poate fi memorată exact într-un sistem numeric, și în ce sens conversia analog-numerică e o pierdere deliberată de informație.
  2. Descrieți rolul circuitului de eșantionare și reținere. Ce s-ar întâmpla la un SAR de 10 biți dacă intrarea s-ar modifica cu jumătate din domeniu între prima și a doua comparație?
  3. Enunțați teorema eșantionării și explicați intuitiv factorul doi. De ce trebuie inegalitatea să fie strictă?
  4. Un semnal de 6 kHz e eșantionat la 8 kHz. Determinați frecvența aparentă și explicați de ce fenomenul nu poate fi corectat prin prelucrare numerică ulterioară.
  5. Calculați pasul de cuantizare pentru un convertor de 10 biți cu referința de 5 V, respectiv cu referința internă de 1,1 V. Un semnal între 0 și 0,8 V: pe care se măsoară mai bine?
  6. Explicați ce e o măsurătoare ratiometrică și de ce, pentru un potențiometru alimentat din VCC, referința pe AVCC dă rezultate corecte chiar dacă alimentarea nu e exact 5 V.
  7. De ce trebuie citit ADCL înaintea lui ADCH pe ATmega328P? Ce se întâmplă dacă un program citește numai ADCH?

14Direcții de aprofundare2 min

Cursul următor trece de la măsurarea unei tensiuni analogice la schimbul de date digitale între microcontroler și lumea exterioară: comunicația serială asincronă, protocolul UART și formatul unui cadru de date.

Formulele de eșantionare, calculul rezoluției și configurarea directă a ADC-ului din acest curs devin montaj real în Laboratorul 05.