ADC e DAC: conversione analogico-digitale
ADC e DAC sono i circuiti che permettono al mondo analogico e a quello digitale di comunicare. L’ADC trasforma una tensione analogica in un valore numerico elaborabile da un microcontrollore, mentre il DAC esegue il processo opposto e genera un livello analogico partendo da un codice digitale. Per comprenderli davvero bisogna conoscere campionamento, quantizzazione, risoluzione e tensione di riferimento.
Cos’è un ADC?
ADC significa Analog-to-Digital Converter. Il suo compito è convertire una grandezza analogica, tipicamente una tensione, in un numero digitale.
Le fasi della conversione ADC
1. Campionamento
Il valore analogico viene osservato in istanti discreti.
2. Quantizzazione
Ogni campione viene associato al livello digitale più vicino.
3. Codifica
Il livello scelto viene espresso come numero binario.
Campionamento
Il campionamento consiste nel misurare il segnale analogico a intervalli regolari. La frequenza con cui vengono acquisiti i campioni è indicata con fs.
Più la frequenza di campionamento è elevata, più rapidamente possiamo seguire le variazioni del segnale, ma aumentano anche la quantità di dati e le prestazioni richieste al convertitore.
Teorema di Nyquist e aliasing
Per ricostruire correttamente un segnale limitato in banda, la frequenza di campionamento deve essere maggiore del doppio della massima frequenza presente nel segnale.
Quantizzazione
Dopo il campionamento, il valore analogico deve essere associato a uno dei livelli disponibili. Questo passaggio prende il nome di quantizzazione.
| Risoluzione | Livelli |
|---|---|
| 8 bit | 256 |
| 10 bit | 1024 |
| 12 bit | 4096 |
| 16 bit | 65.536 |
Risoluzione e valore di un LSB
La risoluzione stabilisce il più piccolo passo teorico distinguibile dal convertitore. Per un ADC ideale unipolare:
LSB ≈ 5 / 1024 = 4,88 mV.
Tensione di riferimento Vref
La tensione di riferimento stabilisce l’intervallo che l’ADC usa per associare tensioni e codici digitali. Una Vref stabile e precisa è fondamentale per misure accurate.
Vref = 5 V
ADC = 10 bit
Codice ≈ 0,5 × 1023 ≈ 512.
Errore di quantizzazione
Poiché ogni tensione reale deve essere approssimata al livello disponibile più vicino, un ADC ideale introduce inevitabilmente un errore di quantizzazione.
Dalla tensione analogica al codice digitale
Cos’è un DAC?
DAC significa Digital-to-Analog Converter. Il DAC riceve un codice digitale e genera una tensione o corrente analogica proporzionale.
Come funziona un DAC?
Un DAC associa a ciascun codice digitale un determinato livello analogico. Con N bit sono disponibili 2N combinazioni.
Vout ≈ 5 × 128/255 ≈ 2,51 V.
DAC a rete R-2R
Una delle architetture classiche per realizzare un DAC utilizza una rete di resistori con soli due valori: R e 2R.
I singoli bit contribuiscono all’uscita con pesi binari differenti, dal bit più significativo MSB al meno significativo LSB.
Ricostruzione del segnale analogico
L’uscita di un DAC ideale cambia a gradini quando cambia il codice digitale. Se vogliamo ricostruire un segnale continuo, per esempio audio, può essere necessario un filtro analogico di ricostruzione.
Dal codice digitale al segnale analogico
PWM e DAC: sono la stessa cosa?
No. Il PWM produce un segnale digitale che alterna HIGH e LOW variando il duty cycle. Filtrandolo con un passa-basso possiamo ottenere una tensione media che si comporta in modo simile a un’uscita analogica.
| PWM | DAC vero |
|---|---|
| Uscita digitale pulsata. | Uscita analogica a livelli discreti. |
| Spesso richiede filtro RC. | Può fornire direttamente una tensione analogica. |
| Il ripple dipende dal filtro e dalla frequenza PWM. | Errore legato a risoluzione, linearità e rumore. |
| Molto comune nei microcontrollori. | Non sempre presente nei microcontrollori. |
ADC e DAC con Arduino
Su molte schede Arduino la funzione analogRead() utilizza l’ADC interno per trasformare una tensione in un numero.
La risoluzione e il riferimento dipendono dalla scheda utilizzata.
Le classiche uscite indicate come PWM, invece, non sono necessariamente DAC analogici.
La funzione analogWrite() su molte schede genera un segnale PWM.
Parametri reali di ADC e DAC
| Parametro | Significato |
|---|---|
| Risoluzione | Numero di bit e livelli disponibili. |
| Sample rate | Velocità massima di campionamento dell’ADC. |
| INL | Errore di linearità integrale rispetto alla risposta ideale. |
| DNL | Errore nella dimensione dei singoli passi. |
| Offset error | Spostamento della caratteristica rispetto all’origine ideale. |
| Gain error | Errore nella pendenza della caratteristica. |
| ENOB | Numero effettivo di bit realmente utilizzabili in presenza di rumore e distorsione. |
| Settling time | Tempo necessario al DAC per stabilizzarsi dopo un cambio di codice. |
Errori comuni
- confondere campionamento e quantizzazione;
- pensare che più bit significhi automaticamente maggiore accuratezza assoluta;
- ignorare la tensione di riferimento;
- campionare senza rispettare la banda del segnale;
- ignorare il filtro anti-aliasing;
- confondere PWM e DAC;
- pensare che il DAC generi una forma perfettamente continua senza gradini;
- dimenticare l’errore di quantizzazione;
- ignorare INL, DNL, offset e gain error nei convertitori reali;
- applicare all’ADC una tensione oltre il range ammesso.

