Salta al contenuto
Note per Studenti Architetture di ADC e DAC

Architetture di ADC e DAC

In questa pagina 3

Questa nota descrive come sono fatti dentro i convertitori di cui si usano i parametri in ADC e DAC - risoluzione, SNR, ENOB ed erroriUn convertitore a $n$ bit con fondo scala $FSR$ ha risoluzione $LSB=FSR/2^n$; il codice vale $C=\mathrm{round}(V/LSB)$ e la tensione corrispondente è $V=C\cdot LSB$ con incertezza $\pm\frac12LSB$ (errore di quantizzazione). Con un modello a rumore uniforme di potenza $LSB^2/12$ il SNR di una sinusoide a fondo scala è $6{,}02,n+1{,}76$ dB; dal SNR misurato si ricava il numero di bit efficaci $ENOB=\frac{SNR-1{,}76}{6{,}02}$. Gli errori reali (offset, guadagno, INL, DNL, missing code) abbassano l'accuratezza. Accuratezza ≠ precisione: alta accuratezza implica alta precisione, non viceversa.ADC e DAC - risoluzione, SNR, ENOB ed errori →. Quello che interessa all'esame sono i tempi di conversione e le frequenze di Nyquist consentite.

Convertitori A/D

Flash

Un partitore resistivo di 2n2^n resistenze uguali fornisce 2n−12^n-1 soglie; una schiera di 2n−12^n-1 comparatori confronta in parallelo l'ingresso XX con tutte le soglie producendo una codifica "termometrica"; un encodercircuito che traduce il codice termometrico (tanti 1 consecutivi) in un numero binario la traduce in binario. I bit si formano in parallelo: è lo schema più veloce possibile (centinaia di ps, 10 GS/s). Ma servono molti componenti (255 comparatoricircuiti che confrontano due tensioni e dicono quale è maggiore per soli 8 bit; 4095 per 12), con elevata area, potenza dissipata e sensibilità a bias e offset dei comparatori (principale limite alla linearità, fino al missing code). Si usa per poche cifre (n<10n<10) e frequenze molto alte (fc>100f_c>100 MHz).

A gradinata e a rampa

Nell'ADC a gradinata un contatore binariocircuito che incrementa un numero binario a ogni impulso di clock pilota un DAC; l'uscita del DAC (una "scala") è confrontata dal comparatore con XX. Quando YDAC>XY_{DAC}>X il conteggio si ferma e il codice del contatore è il risultato. Il tempo di conversione dipende da XX e vale al massimo 2n2^n periodi di clock (per X=FSRX=FSR). La precisione è limitata da quella del DAC, il comparatore deve avere offset <12LSB<\frac12LSB. È lento.

Esempio: ADC a gradinata a 10 bit con Fclk=10F_{clk}=10 MHz: Tc,max=1024/10 MHz=102,4T_{c,max}=1024/10\text{ MHz}=102{,}4 µs, fc=9,77f_c=9{,}77 kHz, fNyq=4,88f_{Nyq}=4{,}88 kHz. (Attenzione: in soli 100 ns DAC, contatore e comparatore devono assestarsi.)

L'ADC a rampa sostituisce il DAC con un generatore di rampa analogico (condensatore e generatore di corrente) e conta i periodi di clock mentre la rampa è tra 0 e XX: il codice è proporzionale a XX. Meno complesso ma sensibile alle non idealità del generatore di rampa; Tc,max=2nT_{c,max}=2^n cicli; esistono versioni a doppia rampa.

Ad approssimazioni successive (SAR)

Un registro ad approssimazioni successive pilota un DAC con la logica della ricerca binariametodo che dimezza a ogni passo l'intervallo in cui cercare il valore: all'inizio si pone il bit più significativo a 1 (YDAC=12FSRY_{DAC}=\frac12FSR); se il comparatore dice X>YDACX>Y_{DAC} il bit è confermato, altrimenti si azzera; si prova il bit successivo e così via per nn bit. Il numero di cicli è al più n+1n+1: Tconv=n+1Fclk,fc=Fclkn+1,fNyq=fc2.T_{conv}=\frac{n+1}{F_{clk}},\qquad f_c=\frac{F_{clk}}{n+1},\qquad f_{Nyq}=\frac{f_c}2 . Esempio: SARregistro ad approssimazioni successive: logica di ricerca binaria del codice a 10 bit a 10 MHz: Tc=11/10 MHz=1,1T_c=11/10\text{ MHz}=1{,}1 µs, fc=909f_c=909 kHz, fNyq=455f_{Nyq}=455 kHz, cioè 100 volte la frequenza di Nyquist dell'ADC a gradinata dello stesso esempio. Altro esempio: SAR a 12 bit a 100 MHz: 13/100 MHz=13013/100\text{ MHz}=130 ns, fc=7,69f_c=7{,}69 MHz, fNyq=3,85f_{Nyq}=3{,}85 MHz; con 20 MHz di clock e 8 bit: Tbit=50T_{bit}=50 ns, Tconv=9⋅50=450T_{conv}=9\cdot50=450 ns, fNyq=1,11f_{Nyq}=1{,}11 MHz. Gli ADC SAR sono i più usati, anche integrati nei µC (STM32F334: 12 bit, 5 MS/s; LPC2129: 10 bit, 400 kS/s; dsPIC30F: 10 bit, 500 kS/s). È un buon compromesso tra velocità e complessità, con frequenze di conversione di qualche MHz. Alcuni ADC SAR richiedono un ciclo di clock "a vuoto" per azzerare la macchina a stati; il tempo di conversione non dipende dal fondo scala ma dal numero di bit (nel caso peggiore, un bit in più raddoppia il tempo di conversione per i convertitori a gradinata, ma aggiunge soltanto un ciclo per un SAR).

Sigma-delta

Un comparatore (ADC a 1 bit) e un DAC a 1 bit in retroazione, con un sommatore e un integratorecircuito la cui uscita è l'integrale dell'ingresso. L'anello è in equilibrio solo quando l'ingresso dell'integratore è nullo in media: quando la sequenza di bit prodotta ha media uguale alla tensione di ingresso XX (in unità di FSRFSR). Un filtro passa-basso digitale in uscita estrae il valore medio e lo rende disponibile come parola a nn bit (fino a 20 bit). Sfrutta il sovracampionamento: il convertitore interno lavora a frequenze molto alte (centinaia di MHz, fattore di sovracampionamento da centinaia a migliaia), da cui ottimi SNR pur con campionatore a 1 bit. Si complica la parte digitale per semplificare l'analogica (fino al 90% dell'area è digitale): costo contenuto. Frequenze di conversione fino a centinaia di kHz (per esempio 10 bit con sovracampionamento di circa mille).

Multistadio e pipeline

Si costruisce un convertitore a molti bit collegando in serie ADC a pochi bit. Esempio: un ADC SAR a 12 bit ottenuto con 3 stadi SAR da 4 bit: il primo stadio produce i 4 MSB, un DAC a 4 bit ricostruisce, il residuodifferenza tra l'ingresso e il valore già convertito dallo stadio precedente passa al secondo stadio (via S/H) che produce i 4 bit centrali, e così via. Con una pipeline i tre stadi lavorano su campioni diversi: mentre il primo converte i 4 MSB del nuovo dato, il secondo converte i bit intermedi del precedente e il terzo gli LSB di quello ancora prima. Uno stadio SAR a 4 bit impiega 4+1=54+1=5 cicli, quindi una conversione completa ogni 5 cicli: fc=Fclk5,Tconv, min=3⋅5Fclk (latenza).f_c=\frac{F_{clk}}5,\qquad T_{conv,\,min}=3\cdot\frac5{F_{clk}}\ \text{(latenza)}. Con Fclk=80F_{clk}=80 MHz: stadio da 62,562{,}5 ns, fc=16f_c=16 MHz, fNyq=8f_{Nyq}=8 MHz, tempo minimo di conversione di un dato 187,5187{,}5 ns; il SAR a 12 bit non a pipelineorganizzazione in cui più stadi lavorano insieme su campioni diversi farebbe 13/80 MHz=162,513/80\text{ MHz}=162{,}5 ns, cioè fc=6,15f_c=6{,}15 MHz, fNyq=3,08f_{Nyq}=3{,}08 MHz. In prima approssimazione la pipeline riduce di circa 1/3 il tempo medio per dato rispetto a un SAR a 12 bit (a costo di 2 S/H in più e un po' di logica); funziona bene solo se alimentata con continuità.

Flash multistadio (non è una pipeline: le 3 unità lavorano insieme sullo stesso dato): 3 flash da 4 bit richiedono 3⋅15=453\cdot15=45 comparatori invece di 4095, con tempi più lunghi di uno stadio singolo ma ancora bassissimi; con la pipeline si hanno frequenze di decine di MHz.

Convertitori D/A

  • A resistenze pesate: un amplificatore operazionale sommatore con resistenze R,2R,…,2n−1RR,2R,\dots,2^{n-1}R pilotate dai bit: Vo=−Vref Dn−1+Dn−2/2+⋯+D0/2n−11V_o=-V_{ref}\,\dfrac{D_{n-1}+D_{n-2}/2+\dots+D_0/2^{n-1}}1. Semplice, ma le resistenze sono tutte diverse (l'ultima molto grande, rapporti difficili da garantire), le RONR_{ON} degli interruttori pesano in modo diverso, la corrente assorbita dipende dai bit e lo schema è invertente: poco usato.
  • A traliccio R-2R: solo resistenze di due valori (RR e 2R2R). I deviatori commutano le resistenze da 2R2R tra massa e massa virtualepunto a tensione nulla imposto dalla retroazione di un amplificatore operazionale (entrambe a 0 V): la resistenza vista da VrefV_{ref} è sempre RR, quindi la corrente assorbita non dipende dai bit (dai deviatori). Le correnti nei rami sono Vref2R,Vref4R,…\frac{V_{ref}}{2R},\frac{V_{ref}}{4R},\dots e Vo=−Vref(Dn−12+Dn−24+⋯+D02n)=−Vref C2n,V_o=-V_{ref}\Big(\frac{D_{n-1}}2+\frac{D_{n-2}}4+\dots+\frac{D_0}{2^n}\Big)=-V_{ref}\,\frac{C}{2^n}, con C=∑Di2iC=\sum D_i2^i il codice (con Rf=RR_f=R). Molto usato.
  • Con voltage scaling: una catena di resistenze uguali e interruttori che selezionano una tensione intermedia; usato fino a circa 8 bit (servono molte resistenze); è intrinsecamente monotono, tutte le resistenze uguali, corrente negli interruttori bassissima.
  • Seriale: i bit arrivano uno alla volta dal meno significativo; con C1=C2C_1=C_2 ogni bit a 1 carica C1C_1 a VrefV_{ref} e a ogni "condivisione di carica" C2C_2 prende metà della carica. Per la parola 101101: C2C_2 finisce a 58Vref\frac58V_{ref}. Semplicissimo ed economico, ma lento.

Errori comuni

  • Dire che nel SAR il tempo di conversione dipende dal valore convertito: è sempre n+1n+1 cicli (non così nella gradinata o nella rampa).
  • Contare nn cicli anziché n+1n+1.
  • Dire che la pipeline riduce la latenza: aumenta la frequenza di conversione (fcf_c), non accorcia la conversione di un singolo dato.
  • Credere che il DAC R-2R assorba una corrente che dipende dal codice.

Versione ripasso

Esercizi su questo argomento

Teoria collegata