a
La home page di Lorenzo
Home

FidoCAD
    Introduzione
    FidoCAD Win
    FidoCAD FAQ
    FidoCAD sources

Elettronica
    Oscilloscopio
    Misurare la potenza
    CS low-cost
    SMD for dummies
    PIC16x84
    Propic2clone
    IR-displ

Software
    EZ Tunnel
    Varie

Varie
    Segnalare lo spam

Links
Forum
Guestbook
Contattami

Ritirare le truppe italiane dall'IRAQ:

Si

No

Risultati

Blocco di acquisizione analogico

Lo schema del blocco di acquisizione analogico è composto da tre sezioni distinte. Le descrivo brevemente, in seguito dovrò organizzare tutto in modo più ordinato e appronfondito.

1. CPLD e memoria. Questa è la sezione che si occupa della memorizzazione dei dati. Segue una descrizione dei segnali della CPLD e del loro utilizzo:

  • CD0...CD7 (I/O): bus dati esterno, comune a tutti i moduli di acquisizione e al modulo principale.
  • CA0...CA1 (I): segnali di indirizzamento esterni. Per selezionare la CPLD è necessario che sia CA0 che CA1 siano posti a "1". Questa scelta è stata fatta per ridurre al minimo i pin della CPLD utilizzati e per rendere semplice l'impostazione dell'indirizzo di ciascun modulo (bastano un paio di ponticelli). Ovviamente il numero dei dispositivi indirizzabili si riduce considerevolmente rispetto all'utilizzo di una decodifica degli indirizzi "canonica"; considerando ad esempio otto bit, anziché 256 moduli se ne possono indirizzare 28, che comunque è già un buon numero.
    In compenso questo metodo permette di indirizzare contemporaneamente più moduli, rendendo ad esempio possibile la configurazione simultanea con una singola scrittura.
  • RD (I): segnale di controllo per leggere il dato memorizzato nella SRAM nella posizione attuale (a ogni lettura l'indirizzo viene incrementato). Questa funzione deve essere utilizzata soltanto quando l'acquisizione non è in corso (GO="0"). Conoscendo la dimensione della SRAM e il numero di campioni di pre- e post-trigger, è possibile posizionarsi nel punto desiderato della SRAM.
  • WR0 (I): segnale di controllo per scrivere il valore di otto bit che sarà confrontato con i valori campionati dall'ADC per verificare la condizione di trigger.
  • WR1 (I): segnale di controllo per scrivere la "configuration word" di tre bit. Il bit 0 seleziona il fronte sul quale eseguire il trigger ("0"=salita "1"=discesa); il bit 1 è l'enable del trigger ("0"=disabilitato "1"=abilitato; ovviamente soltanto un modulo deve avere il trigger abilitato); il bit 2 è il bit di "sblocco" di GO (una volta che una CPLD pone GO="0", esso non sarà più rilasciato finché non verrà scritto un "1" in questo bit).
  • WR2 (I): segnale di controllo per scrivere la "control word" di quattro bit. I primi tre selezionano il guadagno di ingresso; l'ultimo bit abilita o meno il disaccoppiamento dell'ingresso ("0"=DC "1"=AC).
  • CLOCK (I): il clock che piloterà l'ADC. Esso deve essere già stato impostato alla frequenza desiderata da qualche dispositivo a monte; la CPLD si limita a passarlo inalterato all'ADC e alla SRAM.
  • GO (I/O, open drain): il segnale di sincronizzazione fra i vari moduli. Quando GO="0" significa che un modulo ha richiesto un'interruzione del campionamento (condizione di trigger per i moduli di acquisizione, o scadenza del timeout per il modulo principale).
  • MEMRD (O): segnale di pilotaggio per la lettura della SRAM. Viene generato in base a CA0, CA1 e RD.
  • DATA0...DATA7 (I): bus dati interno del blocco di acquisizione; collega ADC, SRAM e CPLD. La CPLD si limita a "guardare" i dati mentre passano per verificare la condizione di trigger e pilotare opportunamente i segnali di clock e di enable.
  • ADDR0...ADDR15 (O): il bus indirizzi interno del blocco di acquisizione. Serve per indirizzare in modo opportuno la SRAM.
  • CLKOUT (O): pilota l'ADC. Attivo soltanto quando GO="1".
  • CLKOUT (O): pilota la SRAM. La fase è invertita rispetto a CLKOUT per permettere di far stabilizzare il dato in uscita all'ADC, per poi memorizzarlo.
  • CTLOUT0...CTLOUT3 (O): sono i bit della "control word" direttamente riproposti all'esterno.
  • TDI, TDO, TMS, TCK: questi segnali servono per l'interfacciamento al bus JTAG (IEEE-1149.1), necessario per la programmazione della CPLD. Ogni modulo disporrà di uno zoccolo al quale si potrà collegare l'appropriato programmatore.

2. Stadio di ingresso. Il frontend analogico è abbastanza "canonico". L'ingresso è adattato per una normale sonda 10:1 (10 Mohm, compensatore 10-15 pF); dopodiché ci sono i blocchi per eliminare le componenti in continua nel caso che sia selezionata la modalità AC. A questo punto potrebbe seguire un classico amplificatore da strumentazione con ingresso differenziale e guadagno unitario: non tutti gli oscilloscopi dispongono di ingressi differenziali, ma questa funzione si può rivelare utile in parecchie situazioni. Negli schemi ho riportato sia lo stadio di ingresso in versione differenziale che in versione single-ended, anche se credo che nel primo prototipo opterò per quest'ultima soluzione. In ogni caso il resto del capitolo è riferito alla versione differenziale. 

L'uscita (single ended) dell'amplificatore da strumentazione viene amplificata/attenuata da un operazionale in configurazione invertente; il guadagno è determinato dalla resistenza che c'è fra i punti RGAINN e RGAINP, impostata dallo stadio di commutazione del guadagno. Originariamente avevo tentato di impostare il guadagno agendo direttamente sull'amplificatore di strumentazione, secondo questo noto schema (immagine presa da Sedra-Smith, "Microelectronic Circuits" quarta edizione, pag. 90):

Il guadagno è dato dalla formula:

Adiff=(1+2R2/R1)*(R4/R3)

Come si vede si può impostare il guadagno agendo su una singola resistenza, R1. Tale resistenza è anche quella che determina la corrente che scorre su tutto il ramo R2-R1-R2; il suo modulo vale (v1-v2)/R1. Sfortunatamente gli switch utilizzati per commutare le resistenze per il guadagno sono caratterizzati da una certa capacità parassita verso massa; immaginate cosa succederebbe se i capi di R1 fossero collegati a massa tramite due condensatori: se R1 fosse molto alta, una corrente non trascurabile se ne andrebbe attraverso tali capacità. Quindi la corrente sulle R2 aumenterebbe, e con essa il guadagno. Questo fenomeno si può verificare in modo molto chiaro con PSPICE: facendo un'analisi AC si evidenzia un picco alle alte frequenze.

Non mi viene in mente nessun metodo efficace per compensare questo fenomeno in modo "semplice", direttamente su ogni ramo della rete di commutazione del guadagno e senza mettere dei condensatore in serie ad altri componenti (e quindi tagliare le componenti DC, cosa che non vogliamo fare). Utilizzando invece un amplificatore invertente, e ponendo la rete di commutazione al posto della resistenza di retroazione, ci troviamo in questa situazione:

Ho già riportato le due capacità parassite dovute agli switch analogici. Questo schema è spesso utilizzato come esempio dei problemi "tipici" di cui può soffrire un amplificatore operazionale. :-)
Potete trovare molte informazioni sulla compensazione di questo tipo di circuito in due interessanti documenti della National: AN-4 Monolitic Op Amp - The Universal Linear Component e AN-453 LH0024 and LH0032 High Speed Op Amp Applications. Senza scendere troppo nei dettagli dico soltanto che le due capacità riducono il margine di fase del circuito alle alte frequenze, soprattutto per guadagni modesti (R2 piccola). Il circuito si avvicina molto all'instabilità, come si può vedere simulandolo con PSPICE: nel caso dell'operazionale che ho usato, l'AD8057, c'è un picco di risonanza (e quindi un aumento inaccettabile del guadagno) attorno ai 10 MHz.
Per ovviare a questo problema è sufficiente inserire un condensatore in parallelo a R2, introducendo uno zero nell'anello di retroazione e compensando così il polo introdotto dall'operazionale e dalle capacità parassite. Questa per noi è una soluzione ideale, perché di immediata applicazione; sarà sufficiente inserire un condensatore in parallelo a ogni resistenza dello stadio di commutazione del guadagno, con valore calcolato opportunamente in base alla resistenza.

Non so quanto vi interessasse tutto ciò, ma per me (che sono relativamente nuovo al fantastico mondo delle alte frequenze e delle capacità parassite) è stato interessante scoprirlo. Se qualcuno ha voglia di formalizzare queste considerazioni e mostrare analiticamente la loro validità, è il benvenuto: non è assolutamente complicato, basta un modello di operazionale reale per piccoli segnali e qualche formula. Io per ora passo la mano. ;-)

Dopo lo stadio amplificatore/attenuatore c'è infine uno stadio sottrattore, che serve per ripristinare la polarità originaria del segnale (che era stata invertita dallo stadio precedente) e per aggiungere l'offset di 2.5 V necessario per l'ingresso dell'ADC.

Per l'implementazione di questi stadi ho utilizzato l'AD8057 dell'Analog Devices, un operazionale voltage-feedback ad alta velocità e basso costo. Prendendo per buone le simulazioni PSPICE che ho fatto sembra che il dispositivo si difenda piuttosto bene fino a guadagni dell'ordine di dieci volte; dopodiché l'offset di tensione in ingresso non trascurabile e il prodotto GBW non eccessivo iniziano a incidere in modo rilevante sulle performance. Nella prossima sezione comunque riporterò qualche grafico per dare un'idea più precisa dell'entità di questi problemi.

3. Stadio di commutazione del guadagno. Questo stadio è il più semplice, contiene soltanto lo switch per la selezione AC/DC (pilotato da CTLOUT3) e la rete che imposta la resistenza di retroazione dello stadio del guadagno descritto in precedenza. La resistenza voluta è selezionata da un decoder, pilotato a sua volta dai segnali CTLOUT0...2.

Vi sprono a esaminare gli schemi e a considerarli con occhio critico.

 

Qualche grafico delle prestazioni

Utilizzando il modello PSPICE dell'AD8057, fornito direttamente da Analog Devices, ho fatto qualche simulazione AC per verificare le prestazioni dello stadio di ingresso nel range di frequenze che ci interessa (0...30 MHz). Le analisi di PSPICE vanno sempre prese col beneficio del dubbio; ci sono almeno un milione di motivi per i quali la simulazione potrebbe discostarsi in modo considerevole dalla realtà, non ultimo quello che i modelli forniti dai costruttori descrivono soltanto le caratteristiche più "importanti" dei dispositivi: spesso sono utili per analisi molto specifiche, ma falliscono per analisi più complesse. In ogni caso i risultati sembrano piuttosto sensati e confermano tutte le considerazioni fatte in precedenza.

Questa ad esempio è l'analisi AC nel caso che lo stadio di ingresso sia impostato a guadagno unitario:

Si può vedere il picco di risonanza di cui ho parlato in precedenza. In questo caso non è nemmeno così malvagio (permette di guadagnare qualcosina come banda passante) ma per guadagni inferiori a uno diventa inaccettabile. Si noti anche il piccolo flesso dalle parti di 1 kHz: esso è causato dalla non perfetta compensazione della sonda in ingresso (ho utilizzato volutamente un valore leggermente sbagliato per evidenziare il fenomeno e per enfatizzare l'importanza di questa taratura).

Questa è la stessa analisi dopo che è stata inserita una capacità in parallelo alla resistenza di retroazione:

Il risultato ora è soddisfacente. A 30 MHz il guadagno è ancora perfettamente unitario.

Questo invece è l'estremo opposto, guadagno di trentadue volte:

Come si vede le prestazioni sono peggiorate notevolmente. La banda è piatta fino a 2-3 MHz, poi comincia il rovinoso crollo. A 30 MHz abbiamo ormai raggiunto un'attenuazione di 24 dB. Ho provato a fare qualche esperimento per migliorare la situazione (ad esempio mettendo due amplificatori in cascata ognuno con un guadagno più basso), ma sono stati solamente palliativi. La realtà dei fatti è che il dispositivo ha i suoi limiti, ci dobbiamo accontentare oppure spendere più soldi per un modello con prestazioni superiori. A titolo di esempio, usando lo sfarzoso CLC425 della National (8.37 € da RS) abbiamo una risposta pressoché piatta fino a un guadagno di 16 volte, e un'attenuazione di 4-5 dB per un guadagno di 32 volte. Come sempre, tutto dipende da quanto si vuole spendere. ;-)

 

Indice

(precedente) Il firmware della CPLD

(prossimo) La scheda madre