È possibile combinare insieme due DAC a 8 bit per creare un DAC a 16 bit, a ciascuno di essi verrà inviato un byte della parola a 16 bit


16

Per due DAC, uno inviato D0-D7 e l'altro inviato D8-D15, con alimentazione a 5 V, se 5 V viene aggiunto all'uscita del 2 ° DAC e quindi vengono sommate le due uscite DAC, dovrebbe risultare un DAC a 16 bit composto da due DAC a 8 bit.

L'unico problema è che se il secondo DAC ha input 0x00, l'aggiunta 5V deve essere annullata, cosa che non sono sicuro di come fare. Il summing può essere fatto sommando l'amplificatore. Il circuito deve funzionare solo fino a pochi 10s di kHz.

C'è qualcosa di fondamentalmente sbagliato in questa idea?


11
Non c'è nulla di fondamentalmente sbagliato nella tua idea, ma dovrai gestire un progetto di relativa complessità. Innanzitutto non si tratta semplicemente di sommare i risultati in segnale analogico. Prima della somma, dovrai amplificare il DAC MSB in un fattore di x256 perché ogni bit di DAC MSB è equivalente a 256 bit di DAC LSB. Quindi dovrai compensare questo valore in volt full-scale DAC LSB di quanto puoi aggiungere entrambi.
PDuarte

7
Per non parlare del rumore, della distorsione, della capacità di fornitura ...
PDuarte

4
Se fosse così facile, lo farebbero tutti ... Teoricamente, sì, puoi combinare due DAC (hai bisogno di moltiplicazioni invece di aggiunte). Realisticamente, non ti avvicinerai a 16 bit, dal punto di vista delle prestazioni. Basta acquistare un DAC a 16 bit.
uint128_t

2
La compensazione è necessaria se il valore moltiplicato per 256x diventa troppo grande. Supponiamo che i DAC a 8 bit forniscano 1 Volt a fondo scala. Moltiplicare quello per 256 dà 256 V. Non così pratico ;-). È più facile con un DAC che fornisce una corrente, quindi puoi semplicemente collegare le uscite di corrente in parallelo (a condizione che ci sia un carico che manterrà la tensione al giusto valore, una terra virtuale o simile).
Bimpelrekkie

1
E se invece di dividere il segnale in 8 bit in alto e in basso, lo implementiate come approssimazione progressiva a due passaggi (come il modo in cui il rendering progressivo di JPG o PNG), con DAC1 che fornisce (approssimativamente) i bit pari e DAC2 in esecuzione a metà potenza con (di nuovo, approssimativamente) i bit dispari. La matematica sarebbe disordinata, ma penso che puoi ricavarne 15 bit di precisione del segnale.
Foo Bar

Risposte:


28

È possibile, ma non funzionerà bene.

In primo luogo, c'è il problema di combinare le due uscite, con una in scala esattamente 1/256 dell'altra. (Sia che si attenui uno di 1/256, si amplifichi l'altro di 256, o qualche altra disposizione, ad esempio * 16 e / 16, non importa).

Il grosso problema, tuttavia, è che un DAC a 8 bit è probabilmente accurato a qualcosa di meglio di 8 bit: potrebbe avere una specifica "DNL" di 1/4 LSB e una specifica "INL" di 1 / 2LSB. Queste sono le specifiche di non linearità "Differenziale" e "Integrale" e sono una misura di quanto sia grande ogni passaggio tra codici adiacenti. (DNL fornisce una garanzia tra due codici adiacenti, INL tra due codici su tutta la gamma del DAC).

Idealmente, ogni passo sarebbe esattamente 1/256 del valore di fondo scala; ma una specifica DNL da 1 / 4LSB indica che i passaggi adiacenti possono differire di quell'ideale del 25% - questo è normalmente un comportamento accettabile in un DAC.

Il problema è che un errore LSB 0,25 nel DAC MSB contribuisce a un errore 64 LSB (1/4 dell'intero intervallo) nel DAC LSB!

In altre parole, il DAC a 16 bit ha la linearità e la distorsione di un DAC a 10 bit, che per la maggior parte delle applicazioni di un DAC a 16 bit, è inaccettabile.

Ora, se riesci a trovare un DAC a 8 bit che garantisce la precisione a 16 bit (INL e DNL meglio di 1/256 LSB), vai avanti: tuttavia non sono economici da realizzare, quindi l'unico modo per ottenerne uno è iniziare con un DAC a 16 bit!

Un'altra risposta suggerisce "compensazione del software" ... mappando gli errori esatti nel DAC MSB e compensandoli aggiungendo l'errore inverso al DAC LSB: qualcosa a lungo ponderato dagli ingegneri audio ai tempi in cui i DAC a 16 bit erano costosi. ..

In breve, può essere fatto funzionare in una certa misura, ma se il DAC a 8 bit va alla deriva con la temperatura o l'età (probabilmente non è stato progettato per essere ultra-stabile), la compensazione non è più abbastanza accurata da valere la pena complessità e spese.


1
Il tuo punto sulla deriva è buono e renderebbe questo metodo poco pratico per cercare di ottenere ad esempio una precisione di 20 bit combinando due DAC a 8 bit. Penso che cercare di ottenere 13-14 bit utilizzabili da 2x8 sarebbe comunque fattibile.
supercat

19

Un DAC a 8 bit può generare valori diversi.28=256

Un DAC a 16 bit può generare valori diversi.216=65536

Nota come ciò si moltiplica, non è un'aggiunta (come accadrebbe quando sommi le uscite di due DAC a 8 bit).

Se dovessi prendere due DAC a 8 bit e sommare le loro uscite, quali sono i possibili valori?

Risposta: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 e basta!

Un DAC a 16 bit può fare 0,1,2 ..., 65535, 65536 molto di più!

Teoricamente è possibile, ma sarà necessario moltiplicare l'uscita di uno dei DAC a 8 bit per esattamente 256 e collegare i bit LSB al DAC 1x e i bit MSB al DAC 256x. Ma non sorprenderti se soffre di precisione e linearità!


Hmm capisco. Non mi ero reso conto che ...
quantum231

1
Se si utilizza un fattore di moltiplicazione inferiore a 256, è possibile compensare la non linearità nel software. La non linearità differenziale sarà almeno uguale alla dimensione del passo del DAC più piccolo, ma uno che utilizza due DAC a 8 bit si potrebbe gestire realisticamente un DAC monotonico a 14 bit se si può determinare con precisione quali fattori di compensazione applicare
supercat

2
Puoi anche moltiplicare l'output di un DAC per 257/256 e sommarli, se ti piace la sfida matematica di capire quali valori inviare a quale DAC per ottenere un determinato output totale. Altrimenti, i callenges sono gli stessi :)
hobbs

@hobbs: non penso che funzioni abbastanza. Se un DAC emette da 0 a 65280 a passi di 256 e l'altro da 0 a 65535 a passi di 257, uno sarà in grado di raggiungere tutti i valori di uscita tra 65280 e 65535, ma non sarà in grado di raggiungere nessuno nell'intervallo tra ad esempio 32639 e 32768. In realtà non sta andando molto meglio di un singolo DAC a 8 bit.
supercat

@supercat hai ragione, ho fluffato la matematica. Penso che ci sia una versione che funziona se puoi diventare negativa, ma non funziona come l'ho scritta. Comunque è stato soprattutto un tentativo di umorismo.
Hobbs

6

La tecnica è praticabile se la tensione di fondo scala del DAC "interno" è maggiore della dimensione del gradino del DAC esterno e si ha un mezzo per misurare accuratamente (anche se non necessariamente rapidamente) le tensioni di uscita generate da diversi codici di uscita e applicare adeguate regolazioni di linearità nel software. Se la tensione a fondo scala del DAC interno potrebbe essere inferiore alla dimensione del gradino nel caso peggiore tra due tensioni sul DAC esterno (tenendo presente che i passaggi raramente sono assolutamente perfettamente uniformi), potrebbero esserci tensioni che non possono essere ottenute con combinazione di valori DAC interno ed esterno. Se si assicura che vi sia sovrapposizione negli intervalli, tuttavia, l'uso della correzione della linearità del software può consentire buoni risultati.

A proposito, il vecchio design del chip PSOC Cypress (non so di quelli più recenti) emula un DAC a nove bit usando due DAC a sei bit che sono ridimensionati l'uno rispetto all'altro. Non utilizza la correzione della linearità del software, ma sta solo cercando di aggiungere tre bit di precisione a un DAC a sei bit. Cercare di aggiungere più di 3-4 bit di precisione a qualsiasi tipo di DAC senza utilizzare la compensazione software probabilmente non funzionerà molto bene.


4

21 anni fa, quando ero un Poor College Student (e potevo permettermi solo DAC a 8 bit), ho usato questa tecnica per combinare due DAC a 8 bit in un DAC a bit più alto, sapendo che non avrei ottenuto una precisione di 16 bit, perché di non linearità integrale (INL) e non linearità differenziale (DNL). DNL sul DAC a byte più significativo è il killer in questo caso; se si dispone di INL, l'output è distorto ma ancora uniforme. DNL determina la dimensione da un passaggio DAC al successivo e, se varia abbastanza, vedrai discontinuità o inversioni quando attraversi i confini di 8 bit: 0x07ff <-> 0x0800, ad esempio, poiché il DAC MSB cambia da 0x07 <-> 0x08, potrebbe cambiare non dai 256 conteggi ideali del DAC LSB, ma da 384 conteggi o 128 conteggi (± 1/2 del proprio bit meno significativo). Un buon DAC avrà solo 1/2 DNL LSB, un DAC mediocre avrà un DNL peggiore, anche se diventa più difficile quanto più alta è la risoluzione, quindi dovrebbe essere abbastanza facile trovare 1/2 LSB DNL in un DAC a 8 bit ma non in un DAC a 16 bit.

Non ricordo quale sia stata la risoluzione effettiva nel mio caso, forse 12 o 13 bit, e ho dovuto regolare manualmente il guadagno del 2 ° stadio con un potenziometro.


2

L'ho visto in pratica su un rivelatore UV HPLC per aumentare la gamma dinamica. Uno dei DAC è compensato dalla quantità necessaria. Dire che il 1 ° DAC gestisce da 0 a 10 V e il 2 ° manico da 10 a 20 Volt.


1
Questo non aggiungerebbe solo un bit?
Szidor

Sì, questo aggiunge solo un bit. Tuttavia, in termini audio, può essere un compromesso di grande successo. Un DAC "diretto" ha un grosso problema a metà scala in cui tutti i 16 bit si accendono contemporaneamente: l'MSB si accende, tutti gli altri si spengono ed è qui che si verificherà il singolo errore DNL più grande. Su un segnale audio questo errore più grande si trova anche nel punto peggiore possibile - l'attraversamento zero - corrompendo anche i suoni più silenziosi. Ora se un DAC gestisce segnali positivi e l'altro gestisce segnali negativi, è possibile evitare completamente questo problema. Il leggendario DAC Burr-Brown PCM-63 lo ha sfruttato bene.
Brian Drummond,


0

Ho un'idea diversa ... Basta usare un DAC a 8 bit. Hai detto che deve funzionare solo fino a pochi 10s di Hz, quindi potresti usare solo un DAC (che probabilmente può funzionare fino a 100kHz) e usarlo come un modulatore. L'idea di base è quella di produrre 256 cicli del valore MSB più il flag di overflow / carry di un bit da un accumulatore a 8 bit a cui viene aggiunto l'LSB a ogni ciclo. Ottieni solo 254 come MSB massimo a causa del "bit di modulazione" aggiuntivo dell'LSB, ma ciò non riduce molto l'intervallo.

Esempio: se si esegue il ciclo a 30kHz, i 256 cicli si ripetono a 117Hz, quindi è possibile inserire un filtro passa-basso a 50Hz sull'uscita per un segnale abbastanza regolare e preciso che può funzionare fino alla frequenza richiesta.

L'accuratezza di questo metodo dipende molto dalla dimensione dei bit bit, ma non più di qualsiasi altro metodo. L'ho usato per la generazione di tensione di riferimento in passato e funziona sorprendentemente bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.