DAC R-2R audio stereo a 8 bit, è questo un modo giusto per farlo?


8

Sono nuovo nell'ingegneria elettrica e il primo progetto che vorrei fare è realizzare un audioconvertitore da digitale ad analogico. Ho scoperto che un buon modo per farlo è usare una struttura R-2R per la conversione.

Vorrei sfidare me stesso e ricominciare da capo con la parte digitale del circuito, oltre al fatto che non riesco davvero a trovare alcuna soluzione sul web per aiutarla a costruirlo. Ho un programma di simulazione del circuito e ho iniziato a progettare, mentre cercavo sul web tutti i diversi tipi di elettronica che potresti usare per questo.

Ora penso che potrei essere da qualche parte nelle vicinanze della comprensione del principio di un DAC, ma sarebbe utile se qualcuno con esperienza potesse aiutarmi a verificare se effettivamente lo capisco. È questo un posto giusto per chiederlo?

Se è così, ecco il circuito che ho progettato: DAC R-2R audio stereo a 8 bit

Ho usato un registro a scorrimento con fermo di uscita per ciascun canale e ho collegato Q7S l'uno all'altro per alimentare i dati. È giusto che i file audio alternino i canali sinistro e destro, o viceversa, in blocchi? ad es. in un file a 8 bit: 0010 0111 per sinistra dopo 0010 0110 per destra?

I registri a scorrimento che ho usato qui sono 74HC595s. Quando si spostano i bit di innesto, non i pin saranno (momentaneamente) attivi. Quando viene attivato il latch [pin STCP], i bit vengono trasferiti dal registro a scorrimento nel registro di memorizzazione, dove emetteranno direttamente il loro valore sui pin corrispondenti e rimarranno attivi fino a quando non saranno consentiti i successivi 16 bit.

Poi c'è il cristallo, per il quale ho usato un segnale ad onda quadra per imitarne uno con la giusta frequenza di oscillazione: 24.576MHz. Alimenta il contatore in cui la frequenza viene divisa per emettere le frequenze di cui il mio DAC ha bisogno. In questo caso la frequenza di campionamento deve essere 192.000 kHz e quindi la frequenza alla quale vengono spostati i dati deve essere di 3,02 MHz (192.000 x 16 bit). La velocità di clock di 192.000 kHz viene utilizzata per attivare STCP.

La prossima cosa che voglio fare è capire come caricare i dati da una sorgente (ad esempio Raspberry) attraverso forse I2C in un buffer nel DAC e da lì sincronizzare i bit nel circuito che vedi qui.

Se pensi che io sia o non sia sulla strada giusta, sarebbe molto utile farmelo sapere.

Grazie! Rogier

A proposito, ho dimenticato di dire che il DAC che vorrei costruire è di almeno 24 bit per canale a 96kHZ. Occupa solo molto spazio su questa minaccia e non dovrebbe essere difficile aggiungerli in seguito. È lo stesso principio.


2
Progetto buono, difficile. Non ho analizzato tutti i tuoi calcoli ma un audio a 8 bit non suonerà troppo bene. Dovrai deviare a metà fornitura che ti lascia con 7 bit su ciascun lato. Potresti farcela con il parlato compresso in cui la gamma dinamica è fortemente limitata ma i passaggi silenziosi del parlato o della musica avranno una terribile distorsione a causa delle dimensioni grossolane del passo e della risposta logaritmica dell'orecchio. Dalla memoria, la qualità del CD è di 14 bit.
Transistor

1
@transistor mentre non si qualifica ha alta fedeltà, l'audio a 8 bit può essere sorprendentemente ascoltabile se fatto bene, specialmente se la frequenza di campionamento è al di fuori della gamma udibile, che sembra essere in questo caso (con un campione abbastanza alto velocità, puoi persino cavartela con l'uscita a 1 bit ...). Una preoccupazione più seria è se i registri a scorrimento proposti sono "a doppio buffer", o se i bit verranno momentaneamente mostrati sulle uscite sbagliate mentre vengono spostati, qualcosa che potrebbe causare sostanziali distorsioni.
Chris Stratton,

4
Quanto al tuo commento su 24 bit per canale: dimenticalo, dimenticalo ora e non perdere altro tempo a pensarci. Non entrerò in matematica per questo in questo commento, ma sono sicuro che è arrivato qui qualche tempo prima. Altrimenti, ecco cosa ha da dire Wikipedia: en.wikipedia.org/wiki/…
pipe

2
Utilizzando resistori dell'1%, è possibile ottenere una risoluzione accurata a 6 bit (LSB = MSB / 64, quindi errore dell'1% <valore LSB / MSB), ma soprattutto è necessario dimezzare il possibile errore per resistore per ogni ulteriore anche il bit (0,25% per 8 bit) evita che l'errore del resistore possa sovrastare i bit meno significativi.
Robherc KV5ROB,

2
2-23è un numero terribile. come 1 oltre 8 milioni. non sarai in grado di creare un DAC, con una velocità di conversione decente, che abbia un output accurato come quella specifica. il numero onesto di bit è la gamma dinamica in dB (che è il rapporto S / N in dB aggiunto al numero di dB di headroom) diviso per 6,02 dB / bit. che ti darà il numero di bit onesti. il migliore che ho visto nel settore è ancora di circa 20 bit (o circa 120 dB di gamma dinamica).
robert bristow-johnson,

Risposte:


7
  • Sì, questo è esattamente il posto giusto per porre la tua domanda.
  • Sì, la topografia R-2R è il modo più semplice di progettare (e penso sia meglio) per creare un DAC homebrew (senza usare PWM).
  • Per quanto riguarda la tua sfida, mi sembra che tu possa essere masochista quanto me (complimenti per avere il fegato!). Questo è un progetto davvero coinvolgente per un principiante.
  • Le stringhe di resistori R-2R (e probabilmente gli amplificatori operazionali collegati) SONO in realtà i tuoi DAC a 8 bit

Ecco cosa sto pensando:
Scala corretta

Sfortunatamente, la pagina di Wikipedia sui DAC del ladder R-2R non è corretta quando dice che il ladder R-2R funziona come un divisore corrente in questa applicazione. Mentre una scala R-2R può essere utilizzata come divisore di corrente, qui funziona effettivamente come divisore di tensione. Ecco un'analisi dettagliata.

Considera solo l'LSB della scala da solo:

schematico

simula questo circuito - Schema creato usando CircuitLab

Indipendentemente dalla posizione dell'interruttore, la resistenza di Thevenin di questo semplice divisore di tensione è solo R. Il valore della sorgente di tensione di Thevenin è 0V o 1/2 × Vref.

Ora, considera cosa succede quando aggiungi la fase successiva della scala R-2R:

schematico

simula questo circuito

Puoi vedere che questo è lo stesso tipo di divisore di tensione che abbiamo avuto nel primo caso, tranne per il fatto che il numero di combinazioni di tensione è aumentato. Tuttavia, la resistenza di Thevenin di questo circuito è ancora solo R, e la sorgente di tensione di Thevenin è ora 0/4, 1/4, 2/4 o 3/4 × Vref.

Per induzione, puoi vedere che puoi aggiungere qualsiasi numero di stadi alla scala e l'unico effetto è che il numero di scelte per il valore della sorgente di tensione di Thevenin viene moltiplicato per 2 per ogni stadio. La resistenza della sorgente rimane esattamente la stessa per qualsiasi numero di stadi.

Se l'impedenza di carico è infinita, la tensione di uscita della scala corrisponderà esattamente alla tensione di Thevenin. Ma se il carico ha un valore finito di resistenza, l'unico effetto sarà quello di creare un partitore di tensione con la resistenza della sorgente di Thevenin, ridimensionando la tensione di uscita di un rapporto fisso, ma senza altri effetti sulla precisione o linearità di base del DAC.


Si noti che nel circuito originale di Rogier (quello nella domanda), gli opamp sono in una configurazione invertita, il che significa che l'uscita della scala R-2R è collegata direttamente a una terra virtuale. Ciò significa che il valore di uscita è in realtà la corrente che scorre attraverso Rth (che è solo R) e questa corrente scorre anche attraverso il resistore di retroazione dell'opamp. La tensione di uscita dall'opamp è la tensione necessaria per rendere uguali quelle due correnti e raggiunge -Rfb / R × Vth. Poiché usa una resistenza di retroazione di 2R, l'uscita finisce per essere -2 × Vth.


Sembra esserci un po 'di confusione sul fatto che la scala R-2R sia utilizzata come partitore di tensione o partitore di corrente, quindi ecco un'illustrazione di come quest'ultimo può funzionare, al fine di mostrare le differenze chiave tra questo e il circuito dell'OP.

schematico

simula questo circuito

Si noti che le correnti che scorrono attraverso i resistori 2R sono ponderate in modo binario. Questo funziona perché la resistenza effettiva che guarda a destra da una qualsiasi delle tre giunzioni è esattamente 2R. Pertanto, la corrente che scorre da sinistra si divide sempre equamente tra il ramo giù e il ramo destro.

Si noti che un presupposto chiave qui è che tutte le gambe sono legate alla stessa tensione (zero, in questo caso). È anche interessante notare che anche le tensioni sui nodi di giunzione sono ponderate in binario.

Questo può essere usato per costruire un DAC in uscita nel modo seguente:

schematico

simula questo circuito

Le correnti nei resistori in questo circuito sono esattamente le stesse del diagramma precedente, poiché indipendentemente dalla posizione in cui si trova ciascuno degli interruttori, il resistore corrispondente è collegato a una terra reale sul Io fuori¯ bus o verso un terreno virtuale sul Io fuoriautobus. Le correnti sui due bus si sommano sempre a Iref. Un opamp può convertire la corrente di uscita in una tensione e l'intervallo di tensione è semplicemente -Iref × R7.


Ad essere sincero, non so ancora cosa faccia un opamp e perché ne avrei bisogno qui. Ciò che fa (secondo il software di simulazione) è rendere negativo il segnale positivo proveniente dalla scala R-2R con un multiplo di due: ~ 5V in ingresso, -9,96V in uscita. Perché sarebbe necessario?
Rogier Reerink

1
Gli amplificatori operazionali amplificano la differenza tra 2 tensioni di ingresso, quindi il software sta dicendo che l'MSB è collegato all'ingresso invertente (pin segno meno) dell'amplificatore operazionale, facendo sì che l'uscita vari in modo opposto all'ingresso. Il rapporto tra la tensione del segnale di uscita e la tensione di ingresso è controllato dal resistore di retroazione (hai usato 10K) dall'uscita dell'amplificatore operazionale all'input di inversione dell'amplificatore operazionale; maggiore è la resistenza, maggiore è il guadagno che ottieni (cortocircuitando su quella resistenza, quindi spostando la connessione MSB verso l'amplificatore operazionale + ingresso e la connessione LSB a terra dovrebbe risolvere questo problema.
Robherc KV5ROB

Non proprio. Nel diagramma dell'OP, gli ingressi non invertenti degli opamp sono messi a terra. Tutto quello che stai facendo è passare a una configurazione di follower di tensione. Non dimenticare di includere un resistore 5k nel percorso di feedback di ciascuno per bilanciare gli offset della corrente di polarizzazione. Inoltre, la resistenza più in basso in ciascuna delle tue scale R-2R deve essere 10K, non 5K. Anche l'OP aveva questo diritto.
Dave Tweed,

Robherc, 1. Desidero abbandonare i condensatori di accoppiamento. 2. se si mantiene il circuito di follower della tensione non invertito, è necessario aggiungere a terra una resistenza da 10K dal terminale + degli amplificatori operazionali. e la resistenza 5K sul fondo dovrebbe essere 10 K. immagina la sovrapposizione e tutti i bit OFF (o terra). quando sei seduto in uno di quei nodi, dovrebbe essere 10K di resistenza a terra in tutte e 3 le direzioni.
robert bristow-johnson,

Schema aggiornato con messa a terra corretta. @ robertbristow-johnson perché dovresti sbarazzarti dei condensatori che bloccano cc e centrano la tua uscita per proteggere i tranducers in un circuito audio?
Robherc KV5ROB
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.