
In quest’articolo si affronterà in dettaglio il metodo per generare una tensione analogica utilizzando un circuito digitale (la rete di resistenza conosciuta come R/2R). Questo metodo necessita di un numero di pin del microcontrollore disponibili da utilizzare soltanto per questo specifico compito. Si tratta di un metodo molto conveniente, in quanto richiede solo un paio di resistenze di soli due valori diversi.
Il circuito mostrato nella Figura 1 descrive un DAC a 8-bit costruita attorno ai pin del microcontrollore disponibili, usando resistenze di 2kOhm e 1kOhm. Per semplificare la “Bill of Materials”, è possibile utilizzare anche solo resistenze da 1kOhm, usando due di loro in serie, invece di ogni resistenza da 2kOhm.

Generare una tensione analogica con un circuito digitale
Il vantaggio di questo circuito, al di là del suo bassissimo costo, è la facilità con cui si attiva. Gli 8 pin del microcontrollore utilizzati hanno le stesse funzioni degli 8 bit di un DAC, dove il pin di sinistra fa da LSB e quello destro da MSB. Il codice digitale applicato dal microcontrollore ai suoi pin rappresenta il valore esatto necessario per un DAC legittimo al fine di generare la tensione richiesta:
0000.0000…………..0.000V 0000.0001…………..0.019V 1000.0000…………..2.481V 1111.1111…………..4.981V
Con questa particolare configurazione è facile aumentare/diminuire il numero di bit del DAC, semplicemente utilizzando più o meno pin del microcontrollore e più/meno rami R/2R. Le immagini che seguono illustrano il valore di uscita simulato per alcuni dei codici digitali che possono essere applicati:

Figura 2 – 8-bit DAC con codice digitale applicato 1111.1111
Figura 3 – 8-bit DAC con codice digitale applicato 0111.1111
Figura 4 – 8-bit DAC con codice digitale applicato 0000.0001
Va rilevato però che qualsiasi desiderio di utilizzare la tensione generata per un’applicazione reale necessiterà di un buffering con un’alta memoria tampone. La ragione di ciò sta nel fatto che qualsiasi ulteriore carico applicato all’uscita di questo DAC disturba il comportamento della rete R/2R, introducendo così errori. Si può usare un semplice ripetitore di tensione come un buffer, ma bisogna fare particolare attenzione per poter utilizzare un amplificatore operazionale rail-to-rail. Usare un normale amplificatore operazionale introdurrebbe semplicemente degli errori nei due estremi della scala, poiché l'amplificatore non sarà in grado di ripetere la tensione di ingresso che viene generata da questo semplice DAC.
Anche se semplice e conveniente, questo DAC può essere utilizzato come uno convenzionale. Applicare i codici successivi all’ingresso, con un tasso di ripetizione fissa, ci permetterebbe di generare praticamente qualsiasi tipo di segnale analogico, la sua frequenza è limitata soltanto dalla frequenza di campionamento in cui il microcontrollore può produrre i codici digitali.
Naturalmente, come in qualsiasi attività di progettazione, il risultato non è perfetto, in quanto è solo un’alternativa tra i vantaggi e gli svantaggi:
-
a) Anche se a basso costo e facile da usare, questa struttura ha anche degli svantaggi: più piccola è la risoluzione, più pin di microcontrollori sono necessari.
b) Inoltre le resistenze della rete devono essere accuratamente selezionate (è preferito l’1% di tolleranza; usare resistenze con una tolleranza del 5% potrebbero introdurre errori inaccettabili).
c)Maggiore è la risoluzione di tale DAC, più lento diventa a causa della larga costante di tempo RC per ogni link di RC aggiunto.
Leggi la versione inglese:Generating Analog Voltage with Digital Circuit (I)

Questo schema e’ molto interessante ed istruttivo, in quanto mostra una valida tecnica per realizzare un semplice ed economico DAC. Come citato nel testo, e’ fondamentale la tolleranza delle resistenze, al fine di limitare il piu’ possibile l’errore di linearita’ del DAC stesso. Anziche’ resistenze singole, si possono inoltre utilizzare quelle gia’ integrate in un unico componente (le “reti” di resistenze nel package SIL).
La tecnica R/2R rappresenta la soluzione più economica e tutto sommato efficiente per munire il proprio circuito a microcontrollore di un convertitore DAC…è bene ricordare questa tecnica data la sua enorme utilità e semplicità di implementazione!! ;)…tempo fa ho utilizzato questa tecnica con un PIC16f628 per implementare un codificatore DTFM…
è come un partitore di tensione gestito in digitale e invece di un selettore la commutazione viene gestita dal DAC.
Per evitare rumore bisogna mettere un buffer come si dice nel.articolo …sapete il costo ?
Se metti un buffer di costa quando il costo di un ADC con una maggior qualità di conversione
comunque sia siamo su intorno ai costi di 0.5 a 1€
Di un DAC! In questo caso abbiamo un convertitore digitale analogico e non il contrario
In questi casi si usa normalmente, come buffer, un operazionale configurato come inseguitore. In questo modo avremo un perfetto adattatore di impedenza (alta in ingresso e bassa in uscita).
Il costo è inferiore ai 20 centesimi per 1 pezzo.
In produzione sarebbe inferiore ai 5/6 centesimi.
Lo scopo del buffer è quello di disaccoppiare il carico dalla rete resistiva R-2R. Se non ci fosse, nel collegare il carico questo andrebbe a porsi in parallelo alla resistenza d’uscita del DAC andando a modificare il valore stesso di tensione d’uscita. Così facendo si avrebbe un convertitore DAC non lineare la cui tensione d’uscita dipende dal carico. Un amplificatore operazionale in retroazione unitaria (inseguitore di tensione) funge da adattatore di impedenza svincolando la tensione in uscita del convertitore DAC dalla suddetta resistenza di carico.
Ottimo convertitore convertitore DAC da utilizzare sopratutto in ambito scolatico, considerando anche il suo basso costo!
un DAC audio stereo della Analog a 16 bit (si veda la serie AD566) si trova per 4-5 euro, garantendo miglior precisione della rete resistiva, mi attrae di piu’ implementare un’interfaccia seriale digitale e affidarmi ad un componente esterno che mi eviti problemi di imprecisione, deriva termica, ecc. e per di piu’ richieda comunque uno stadio di buffering.
Questo schema e’ il classico schema che si studiava a scuola 15 anni fa.
Adesso l’elettronica si e’ evoluta e grazie alle nuove tecnologie di integrazione e ai più moderni circuiti integrati si trovano in commercio soluzioni circuitali stupende.
Il costo e’ sicuramente maggiore rispetto allo schema proposto ma la qualità di conversione, la velocità i problemi legati al rumore alla deriva termica sono minimizzati.
Ritengo che oggi grazie ad internet sia possibile trovare il componente più adatto alle nostre esigenze.
Inoltre sfruttare 8 uscite di un microcontrollore mi sembra uno spreco……ma questo e’ quello che succede oggi: si sprecano risorse hardware anzichè trovare soluzioni ottimizzate.
Rimane questo articolo valido a scopi didattici.
Saluti Giacomo Barresi
è una ottima tecnica usata più di quanto si possa pensare e abbinata ad esempio ad una EPROM si può riprodurre anche una registrazione WAV
http://www.webalice.it/crapellavittorio/electronic/varisch7.htm#dac_
altre applicazioni R2R
http://www.webalice.it/crapellavittorio/electronic/varisch8.htm#updwpwm
http://www.webalice.it/crapellavittorio/electronic/varisch6.htm#pluvio
http://digilander.libero.it/i2viu/rampast6.html