🔢 Elettronica digitale · Guida 09

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.

Livello: intermedio ADC DAC Campionamento e quantizzazione

Cos’è un ADC?

ADC significa Analog-to-Digital Converter. Il suo compito è convertire una grandezza analogica, tipicamente una tensione, in un numero digitale.

Tensione analogica → codice digitale
Esempio Un sensore produce 2,50 V. Un ADC collegato al microcontrollore converte quella tensione in un numero, per esempio 512 in un sistema a 10 bit con riferimento opportuno.

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.

L’ADC non misura un numero infinito di valori. La tensione continua viene rappresentata utilizzando un numero finito di livelli.

Campionamento

Il campionamento consiste nel misurare il segnale analogico a intervalli regolari. La frequenza con cui vengono acquisiti i campioni è indicata con fs.

fs = numero di campioni al secondo
Esempio fs = 10 kHz significa che l’ADC acquisisce 10.000 campioni ogni secondo.

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.

fs > 2 · fmax Condizione ideale minima di Nyquist.
Se si campiona troppo lentamente compare aliasing. Frequenze alte possono apparire falsamente come frequenze più basse nel segnale digitalizzato.
Nella pratica si usa un filtro anti-aliasing. Un filtro passa-basso analogico prima dell’ADC limita le frequenze che potrebbero violare la condizione di campionamento.

Quantizzazione

Dopo il campionamento, il valore analogico deve essere associato a uno dei livelli disponibili. Questo passaggio prende il nome di quantizzazione.

Numero di livelli = 2N N = risoluzione dell’ADC in bit.
RisoluzioneLivelli
8 bit256
10 bit1024
12 bit4096
16 bit65.536

Risoluzione e valore di un LSB

La risoluzione stabilisce il più piccolo passo teorico distinguibile dal convertitore. Per un ADC ideale unipolare:

LSB ≈ VREF / 2N
ADC a 10 bit con Vref = 5 V
LSB ≈ 5 / 1024 = 4,88 mV.
Più bit = passi più piccoli. A parità di Vref, aumentando la risoluzione possiamo distinguere variazioni di tensione più piccole.

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.

Codice ≈ (VIN/VREF) · (2N − 1)
Esempio teorico Vin = 2,5 V
Vref = 5 V
ADC = 10 bit

Codice ≈ 0,5 × 1023 ≈ 512.
Se Vref cambia, cambia anche il risultato della conversione. Un riferimento rumoroso o instabile si riflette direttamente sui valori digitali.

Errore di quantizzazione

Poiché ogni tensione reale deve essere approssimata al livello disponibile più vicino, un ADC ideale introduce inevitabilmente un errore di quantizzazione.

Errore ideale di quantizzazione ≈ ± 0,5 LSB
È una conseguenza della rappresentazione discreta. Anche un ADC perfetto non può restituire tutti gli infiniti valori di una tensione analogica.

Dalla tensione analogica al codice digitale

Dalla tensione analogica al codice digitale: catena ADC con campionamento quantizzazione e codifica
Catena ADC completa: segnale analogico, filtro anti-aliasing, campionamento, quantizzazione e conversione nel corrispondente 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.

Codice digitale → livello analogico
Esempi di utilizzo Audio, generatori di funzione, controllo di tensione, strumentazione, pilotaggio analogico e sistemi di controllo.

Come funziona un DAC?

Un DAC associa a ciascun codice digitale un determinato livello analogico. Con N bit sono disponibili 2N combinazioni.

VOUT ≈ VREF · Codice / (2N − 1)
DAC a 8 bit con Vref = 5 V Codice = 128

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.

Il vantaggio della rete R-2R è che non richiede una grande varietà di valori resistivi pesati, facilitando la precisione dei rapporti.

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.

Il filtro di ricostruzione attenua le componenti ad alta frequenza associate agli aggiornamenti discreti. È il complemento concettuale del filtro anti-aliasing posto prima dell’ADC.

Dal codice digitale al segnale analogico

Dal codice digitale al segnale analogico: catena DAC con rete R-2R e filtro di ricostruzione
Catena DAC completa: codice binario, conversione digitale-analogica, uscita a gradini e filtro di ricostruzione per ottenere un segnale analogico più continuo.

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.

PWMDAC 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.
PWM filtrato può imitare un DAC in molte applicazioni lente. Ma non va confuso con un convertitore digitale-analogico reale.

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.

int valore = analogRead(A0); // Il risultato rappresenta digitalmente // la tensione presente sul pin analogico.

Le classiche uscite indicate come PWM, invece, non sono necessariamente DAC analogici. La funzione analogWrite() su molte schede genera un segnale PWM.

Le caratteristiche ADC/DAC cambiano da una scheda all’altra. Risoluzione, Vref, velocità di conversione e presenza di veri DAC vanno sempre controllate nella documentazione della scheda.

Parametri reali di ADC e DAC

ParametroSignificato
RisoluzioneNumero di bit e livelli disponibili.
Sample rateVelocità massima di campionamento dell’ADC.
INLErrore di linearità integrale rispetto alla risposta ideale.
DNLErrore nella dimensione dei singoli passi.
Offset errorSpostamento della caratteristica rispetto all’origine ideale.
Gain errorErrore nella pendenza della caratteristica.
ENOBNumero effettivo di bit realmente utilizzabili in presenza di rumore e distorsione.
Settling timeTempo necessario al DAC per stabilizzarsi dopo un cambio di codice.
Un ADC a 12 bit non offre necessariamente 12 bit perfetti di informazione. Rumore e non idealità possono ridurre il numero effettivo di bit, espresso tramite ENOB.

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.