1 / 64

Cosa è un DAC?

Vcc. Vref. output analogico (Vout). D[n-1]. Convertitore D/A. D[n-2]. D[0]. gnd. Cosa è un DAC?. Digital-to-Analog converter dispositivo “mixed signal”: Input digitale (parola a n bit) Output analogico: tensione o corrente. Vcc. Vref. output analogico (Vout). D[n-1].

brasen
Download Presentation

Cosa è un DAC?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vcc Vref output analogico (Vout) D[n-1] Convertitore D/A D[n-2] . . . D[0] gnd Cosa è un DAC? • Digital-to-Analog converter dispositivo “mixed signal”: • Input digitale (parola a n bit) • Output analogico: tensione o corrente

  2. Vcc Vref output analogico (Vout) D[n-1] Convertitore D/A D[n-2] . . . D[0] gnd La tensione di output è

  3. Vcc Vref (8V) output analogico (Vout) D[2] Convertitore D/A D[1] D[0] gnd Cosa fa esattamente un DAC? Per un DAC a 3 bit ci sono 8 possibili codici di input D[2..0] Vout 000 0V 001 1V 010 2V 011 3V 100 4V 101 5V 110 6V 111 7V

  4. 4 DAC in un singolo chip: GND REFA REFB REFC REFD DATA DCLK 14 13 12 11 10 9 8 VDD LDAC DACA DACB DACC DACD LOAD 1 2 3 4 5 6 7 REFA, REFB, REFC, REFD Tensioni di riferimento fissate a 2.5 V DACA, DACB, DACC, DACD Tensioni di output Il DAC sulla scheda di laboratorio

  5. Sono controllati dalla FPGA GND REFA REFB REFC REFD DATA DCLK 14 13 12 11 10 9 8 VDD LDAC DACA DACB DACC DACD LOAD 1 2 3 4 5 6 7 FPGA configurazione DATA, LDAC, LOAD, DCLK Segnali di Input per programmare il DAC

  6. 11 impulsi DCLK DATA A1 A0 RNG D6 D5 D4 D3 D2 D1 D0 D7 Identificatore del DAC: A1A0 = 00  DAC0 A1A0 = 01  DAC1 A1A0 = 10  DAC2 A1A0 = 11  DAC3 Codice digitale (è trasmesso prima il MSB) La tensione di output è Protocollo di configurazione (circuito da implementare nella FPGA) Il codice digitale a 8 bit viene trasmesso dalla FPGA al DAC in modo seriale tramite la linea DATA assieme a un treno di impulsi di sincronizzazione lungo la linea DCLK

  7. DCLK Sempre basso LDAC DATA A1 A0 RNG D6 D5 D4 D3 D2 D1 D0 D7 LOAD Le linee LDAC e LOAD sono usate dal DAC per caricare i bit ricevuti lungo la linea DATA in un registro interno e per aggiornare la tensione di output La tensione di output viene aggiornata con questo impulso Il codice digitale a 8 bit viene trasmesso dalla FPGA al DAC in modo seriale tramite la linea DATA assieme a un treno di impulsi di sincronizzazione lungo la linea DCLK

  8. DAC_interface clk DCLK res DATA DAC_interface SW0 LDAC D[7..0] LOAD A[1..0] • Una macchina a stati parte quanto SW0 viene premuto (segnale di inizio configurazione) • Genera un treno di 11 impulsi DCLK • Successivamente genera un impulso LOAD • La linea LDAC è tenuta sempre bassa • La parola in ingresso D[7..0] deve essere serializzata: su ogni fronte di salita di DCLK viene messo un nuovo bit (il primo trasmesso è il MSB)

  9. False partenze: 1. non va bene generare un segnale largo 11 cicli di clock e usarlo in AND col segnale di clock della FPGA Questo si chiama “gating” del clock e in generale è meglio evitarlo

  10. Diagramma degli stati corretto ed “elegante” che genera un treno di impulsi attraverso un loop o ciclo Il numero di cicli è controllato da un contatore che genera un segnale Cout quando ha raggiunto il giusto numero di conteggi (cicli) Se l’enable del contatore (CNT_EN) è asserito nello stato S0, a quale valore del conteggio il contatore deve generare Cout?

  11. Cambiamo i nomi degli input: DAC[7..0] corrisponde a D[7..0] DAC[8] corrisponde a RNG DAC[10..9] corrisponde a A[1..0]

  12. Esternamente (nel foglio dove posizioniamo il simbolo DAC_INTERFACE) possiamo fare questi collegamenti

  13. Abbiamo ancora il problema che DAC[10..0] deve essere serializzata Su ogni fronte di salita di DCLK deve essere messo un bit lungo la linea DATA DCLK DATA A1 A0 RNG D6 D5 D4 D3 D2 D1 D0 D7 Convertitore parallelo/seriale DAC[10] DAC[9] DAC[8] DAC[7] DAC[6] DAC[5] DAC[4] DAC[3] DAC[2] DAC[1] DAC[0]

  14. Stesso contatore usato dalla Macchina a stati

  15. I bit cambiano sul fronte di discesa di DCLK anzichè su quello si salita

  16. II soluzione: Il clock del contatore che incrementa SEL è DCLK Qui i bit cambiano su ogni fronte di salita di DCLK Il problema è che sul primo fronte SEL diventa 1 e appare quindi DAC[9] mentre DAC[9] dovrebbe apparire sul secondo

  17. III soluzione: Cerchiamo di usare uno shift register e facciamo scorrere i bit con DCLK Questo potrebbe funzionare se i bit DAC[10..0] sono preventivamente caricati nei Flip-Flop prima che arrivi il treno di impulsi DCLK Quanti FF ci vogliono? Problema: come faccio a caricare i FF con i bit?

  18. Devo mettere davanti a ogni FF dello shift register un blocco di logica combinatoria con un input LOAD_SHREG che serve a caricare il FF LOAD_SHREG potrebbe essere generato modificando la macchina a stati.Come? Per caricare il FF è necessario anche un impulso sull’input di clock del FF? Come posso fare?

  19. Caricamento dei FF tramite l’input PRES dei FF Un inconveniente è che PRES (come RES) è un input asincrono attivo indipendentemente dal segnale di clock

  20. Vediamo che problemi si potrebbero verificare con input asincroni (N.B. questo è illustrato per i segnali CNT_RES e LOAD, non per il caricamento dei FF) Assegnamo a ciascuno dei 4 stati il codice indicato nelle bolle

  21. Per un breve transiente lo stato è STATE[1..0]=11 (S2) e CNT_RES e LOAD vengono asseriti (creando problemi) La macchina a stati parte con START_DAC. Nel diagramma temporale sono indicati i due bit dello stato Nella transizione da STATE[1..0]=01 (S0) a STATE[1..0]=10 (S1) entrambi i bit cambiano, ma non simultaneamente

  22. Possibile soluzione: facciamo passare CNT_RES e LOAD attraverso un FF. Poichè il FF campiona il suo input solo sul fronte di salita del clock, il glitch non viene campionato (è filtrato) Ma N.B. L’impulso generato dopo è ritardato così di un ciclo di clock

  23. Altra soluzione: usiamo un codice per gli stati in modo tale che da una transizione all’altra cambi solo un bit per volta In questo modo non è possibile generare glitch Codice Gray a 2 bit 00  0111 10 In ogni caso potrebbe essere sempre preferibile cercare dei codici in cui cambi un solo bit per volta il più possibile

  24. Serve un MUX in cui la linea di selezione è LOAD_SHREG Tornando al caricamento dei FF è preferibile un caricamento sincrono

  25. Vcc Vref Out[n-1] Input analogico (Vin) Convertitore A/D Out[n-2] . . . Out[0] gnd Cosa è un ADC? • Analog-to-Digital Converter dispositivo “mixed signal”: • Input analogico (tensione o corrente) • Output digitale: parola a n bit

  26. Vcc Vref Out[n-1] Input analogico (Vin) Convertitore A/D Out[n-2] . . . Out[0] gnd • Può essere considerato un partitore • L’output ci dice: che frazione di Vref è l’input Vin? • Output:

  27. Vcc Vref(8V) Out[2] Input analogico (Vin) Convertitore A/D Out[1] Out[0] Esempio: se Vin=5.5 V e Vref=8 V  Out[2..0] = 101 gnd Cosa fa esattamente un ADC? Per un ADC a 3 bit ci sono 8 possibili codici di output Vin Out[2..0] 0-1 000 1-2 001 2-3 010 3-4 011 4-5 100 5-6 101 6-7 110 7-8 111

  28. Vcc Vref(8V) Out[2] Input analogico (Vin) Convertitore A/D Out[1] Out[0] gnd Risoluzione L’ADC risolve due tensioni diverse se differiscono per più di 1 V producendo due codici diversi  La risoluzione dell’ADC è 1 V (Vref/23) Vin Out[2..0] 0-1 000 1-2 001 2-3 010 3-4 011 4-5 100 5-6 101 6-7 110 7-8 111 Il bit meno significatico (LSB) rappresenta 1 V

  29. Risoluzione e range dinamico La risoluzione di un ADC dipende dal numero di bit e da Vref: Fissata Vref, maggiore è il numero di bit, migliore è la risoluzione. Se n=8 (anzichè n=3) la risoluzione sarebbe 8/28~31 mV  formulazione alternativa: (fissata Vref) la risoluzione di un ADC è il numero di bit. La tensione Vref determina il range dinamico dell’ADC A parità di bit, minore è la tensione Vref, più fine è la suddivisione dell’intervallo Vref(=Vin max)-0 per cui la risoluzione migliora. Ad esempio, se Vref=0.8 (anzichè 8 V) la risoluzione sarebbe 100 mV. Il miglioramento va però a scapito del range dinamico.

  30. ADC tracking Descrizione a grandi linee: il codice a 8 bit di un contatore viene convertito da un DAC in una tensione analogica che viene quindi confrontata con la tensione di input. Il contatore viene incrementato fino a quando la tensione del DAC raggiunge quella in input. A questo punto il conteggio raggiunto dal contatore è il codice richiesto.

  31. ADC tracking: implementazione FPGA DCLK Vanno ai DAC DATA DAC interface LDAC Vanalog LOAD DAC count[7..0] CNT_EN Contatore a 8 bit comparatore Vanalog comp CNT_EN Vin Start_conv sm_ADC comp Tensione in ingresso da convertire

  32. Il comparatore (analogico) confronta due tensioni e produce in output un segnale logico: Se Vin > Vanalog comp = 0 Se Vin < Vanalog comp = 1 Collegamento comparatore-ADC

  33. Soluzione alternativa: aspetta che l’interfaccia del DAC asserisca il segnale LOAD che va al DAC

  34. si ripete il ciclo

  35. ADC[7..0] è collegato a due cifre del display

  36. Per un’eventuale nuova conversione Le macchine a stati vanno disegnate usando verilog

  37. Altri dettagli Vref dei DAC fissa Vref dell’ADC. Nella scheda Vref = 2.5 V Vin (COM_IN) può provenire da un generatore di tensione tramite un connettore LEMO Si deve impiegare il terzo DAC (CMREF) corrispondente ad A[1..0]=10 Il comparatore è un amplificatore operazionale (più dettagli in seguito)

  38. Limitazioni dell’ADC tracking La limitazione principale è che è lento: Poichè il contatore parte sempre da zero, Il tempo di conversione è variabile Maggiore è Vin maggiore è il tempo di conversione: se Vin = Vref è necessario ripetere il ciclo di incremento del contatore 256 volte!

More Related