SOMMARIO
Questa tesi descrive la valutazione di schede commerciali basate su convertitori
analogico-digitali ad alta risoluzione al fine dello sviluppo di applicazioni di
sensoristica distribuita a scopo prevalentemente di monitoraggio ambientale. Le
attività sono state svolte durante un periodo di stage presso la ditta SAEE di Amaro,
Italia.
La trattazione è suddivisa in vari capitoli.
La prima parte della tesi illustra le principali caratteristiche e non idealità dei
convertitori A/D con particolare riferimento a quelli cosiddetti di tipo sigma-delta.
In seguito vengono descritti i due specifici convertitori (MSC1211Y5 della Texas
Instruments e CDB5534 della Cirrus Crystal), montati su opportune schedine e
corredati di un microcontrollore che facilita notevolmente lo sviluppo di applicazioni
software.
Nel capitolo seguente vengono riportati i risultati ottenuti in merito alla
programmazione dei convertitori utilizzando i demo per l’acquisizione dati dalle due
schedine, forniti dal costruttore.
Al fine di valutare l’effettivo potere risolutivo dei convertitori in presenza di rumore
ambientale in applicazioni tipiche, sono state eseguite misure statiche e dinamiche
(comunque a bassa frequenza), tramite un ponte resistivo calibrato ad alta
risoluzione. A tal fine sono stati realizzati dei programmi dedicati in linguaggio C,
successivamente scaricati ed eseguiti direttamente sulle schedine.
In ultimo vengono descritti alcuni programmi realizzati in linguaggio Matlab per il
filtraggio dei dati acquisiti dai convertitori ed i risultati raggiunti.
1
INDICE
Sommario
pag. 1
Introduzione
pag. 8
1. Analisi teorica dei convertitori analogico-digitali sigma-delta
1.1
Caratteristiche e parametri dei convertitori A/D
1.2
Principali tipi di convertitori analogico-digitali
1.3
Convertitori analogico-digitali sigma-delta
1.3.1
Sovracampionamento
1.3.2
Modellazione del rumore
1.3.3
Filtro digitale e di decimazione
1.3.4
Vantaggi e svantaggi dei convertitori sigma-delta
1.4
Ingressi single-ended e ingressi differenziali
pag. 9
pag. 9
pag. 13
pag. 18
pag. 24
pag. 27
pag. 32
pag. 38
pag. 38
2. Convertitori MSC1211Y5 e CDB5534
2.1
Schedina MSC1211Y5
2.1.1
Convertitore adc sigma-delta a 24 bit
2.1.2
Microcontrollore 8051
2.2
Schedina CDB5534
2.3
Calibratore
pag. 40
pag. 40
pag. 41
pag. 54
pag. 66
pag. 86
3.
3.1
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
Analisi dei convertitori mediante software demo
Analisi della schedina MSC1211Y5
Descrizione della schedina
Misura sui vari canali dell’ADC
Misura con diversi PGA e impostazioni dell’ADC DATA
Stima del rumore
Considerazioni sulla schedina MSC1211Y5
Analisi della schedina CDB5534
Descrizione della schedina
Misure sulla schedina
Calibrazione del convertitore
Stima del rumore
Misura dei disturbi di rete
Considerazioni sulla schedina CDB5534
pag. 89
pag. 89
pag. 90
pag. 92
pag. 92
pag. 94
pag. 97
pag. 98
pag. 98
pag. 102
pag. 102
pag. 106
pag. 107
pag. 108
4.
4.1
4.2
4.3
Programmazione lato microcontrollore e lato PC
Misure a ponte
Impedenza di ingresso dei convertitori
Acquisizione multicanale di misure a ponte su MSC1211Y5
mediante programmazione del microcontrollore
Analisi di un segnale periodico con MSC1211Y5
Misure a ponte su CDB5534
Analisi di un segnale periodico con CDB5534
pag. 109
pag. 109
pag. 115
4.4
4.5
4.6
pag. 124
pag. 150
pag. 168
pag. 175
2
4.7
4.8
Comparazione dei risultati ottenuti
Note
pag. 176
pag. 182
5.
5.1
5.2
Algoritmi per la riduzione del rumore
Filtro notch
Interpolazione dei dati
pag. 185
pag. 185
pag. 195
Conclusioni
pag. 200
Appendice
pag. 201
Bibliografia
pag. 228
Lista figure:
Figura 1.1: convertitore analogico-digitale
Figura 1.2: campionamento e quantizzazione
Figura 1.3: curva di trasferimento ideale di un ADC (a), errore di
linearità (b), errore di linearità differenziale (c), errore di
guadagno e di offset (d).
Figura 1.4: rappresentazione schematica di un ADC flash
Figura 1.5: rappresentazione schematica di un ADC subranging
Figura 1.6: rappresentazione schematica di un ADC ad
approssimazioni successive
Figura 1.7: rappresentazione schematica di un ADC a doppia rampa
Figura 1.8: modulatore sigma-delta
Figura 1.9: tipi di ADC, risoluzione e larghezza di banda
Figura 1.10: ADC sigma-delta
Figura1.11: rappresentazione schematica del funzionamento di un
ADC sigma-delta
Figura 1.12: convertitore analogico-digitale delta
Figura 1.13: convertitore analogico-digitale sigma-delta
Figura 1.14: funzioni di trasferimento di un convertitore sigma-delta
Figura 1.15: trasformata Z del modulatore sigma-delta
Figura 1.16: schema a blocchi di un modulatore di ordine 2
Figura1.17: schema a blocchi di ADC sigma-delta
Figura 1.18: demodulatore sigma-delta
Figura 1.19: decimazione
Figura 1.20: ingressi single-ended
Figura 1.21: ingressi differenziali
Figura 2.1: architettura del convertitore msc1211y5
Figura 2.2: piedinatura del convertitore msc1211y5
Figura 2.3: schema a blocchi del convertitore msc1211y5
Figura 2.4: buffer di ingresso
Figura 2.5: circuito di campionamento
3
Figura 2.6: configurazione per misura di tensioni oltre il range tipico
0-5V
Figura 2.7: tipi di filtri digitali
Figura 2.8: rete di generazione dei segnali di controllo della schedina
Figura 2.9: architettura della memoria
Figura 2.10: configuration memory
Figura 2.11: register map
Figura 2.12: scratchpad ram
Figura 2.13: programmazione parallela
Figura 2.14: programmazione seriale
Figura 2.15: circuito dell’intera schedina msc1211y5
Figura 2.16: architettura del convertitore CDB5534
Figura 2.17: piedinatura del convertitore msc1211y5
Figura 2.18: schema a blocchi del convertitore msc1211y5
Figura 2.19: circuito di ingresso
Figura 2.20: registri del convertitore CDB5534
Figura 2.21: tensione di riferimento del convertitore CDB5534
Figura 2.22: stato dei piedini di ingresso durante la calibrazione self di
CDB5534
Figura 2.23: stato dei piedini di ingresso durante la calibrazione
system di CDB5534
Figura 2.24: circuito generatore di clock del convertitore CDB5534
Figura 2.25: circuito digitale della schedina CDB5534
Figura 2.26: circuito analogico della schedina CDB5534
Figura 2.27: calibratore digitek
Figura 2.28: circuito per la stima della resistenza di uscita del
calibratore
Figura 3.1: interfaccia grafica della schedina MSC1211Y5
Figura 3.2: interfaccia grafica della schedina CDB5534(1)
Figura 3.3: interfaccia grafica della schedina CDB5534(2)
Figura 3.4: interfaccia grafica della schedina CDB5534(3)
Figura 3.5: disturbi di rete
Figura 4.1: circuito a ponte
Figura 4.2: celle di carico
Figura 4.3: autocompensazione delle variazioni della tensione di
alimentazione
Figura 4.4: correzione dell’offset(1)
Figura 4.5: correzione dell’offset(2)
Figura 4.6: circuito di ingresso di un convertitore
Figura 4.7: modello equivalente di ingresso
Figura 4.8: impedenza di ingresso
Figura 4.9: impedenza equivalente di ingresso
Figura 4.10: impedenza del convertitore e del ponte
Figura 4.11: circuito di disaccoppiamento
Figura 4.12: chopper
Figura 4.13: impedenza di ingresso con buffer on
Figura 4.14: problema dell’aliasing
Figura 4.15: circuito RC in ingresso
4
Figura 4.16: impostazioni della porta seriale
Figura 4.17: interfaccia grafica della porta seriale
Figura 4.18: setup per le misure a ponte
Figura 4.19: cassetta di resistenze
Figura 4.20: processo di media mobile
Figura 4.21: definizione di ENOB(1)
Figura 4.22: definizione di ENOB(2)
Figura 4.23: trasformata di Fourier discreta
Figura 4.24: circuito di condizionamento in ingresso al convertitore(1)
Figura 4.25: circuito di condizionamento in ingresso al convertitore(2)
Figura 4.26: setup di misura(1)
Figura 4.27: setup di misura(2)
Figura 4.28: setup di misura(3)
Figura 5.1: filtro digitale notch
Figura 5.2: rappresentazione di poli e zeri sul piano complesso
Lista grafici: Grafico 1.1: rappresentazione schematica dello spettro di un segnale
campionato
Grafico 1.2 : rumore in banda base
Grafico 1.3: sequenza dei bit in uscita da modulatore delta e
sigma-delta corrispondenti al segnale Vi (1)
Grafico 1.4: sequenza dei bit in uscita dal modulatore delta e
sigma-delta ottenuta con il programma Matlab sviluppato
in questa tesi e riportato in appendice (2)
Grafico 1.5: rappresentazione in frequenza dello spettro di un segnale
Sinusoidale
Grafico 1.6: sovracampionamento
Grafico 1.7: effetto del filtro digitale sul processo di campionamento e
conversione
Grfico1.8: modellazione del rumore
Grafico 1.9: filtro digitale e modellazione del rumore
Grafico 1.10: andamento di SNR in modulatori di vario ordine
Grafico 1.11: confronto del rumore in banda base usando varie
tecniche di campionamento
Grafico 1.12: risposta in frequenza di comb-filter di vario ordine
Grafico 1.13: rumore in uscita dal comb-filter
Grafico 1.14: risposta in frequenza del filtro FIR in cascata al
comb- filter
Grafico 1.15: risposta in frequenza della cascata di comb-filter e FIR
Grafico 1.16: filtro sinc3, risposta in frequenza e espressione analitica
Grafico 2.1: Variazione dell’ENOB in funzione di data-rate,
decimation ratio e fmod
Grafico 2.2: risposta in frequenza dei filtri sinc2, sinc3 e fast
Grafico 2.3: risposta in frequenza del filtro sinc5
Grafico 2.4: ripple del calibratore per l’uscita in millivolt
Grafico 2.5: ripple del calibratore per l’uscita in volt
Grafico 3.1: risposta del convertitore con filtri digitali diversi
5
Grafico 3.2: rumore nel convertitore msc1211y5 interfacciato al
calibratore
Grafico 3.3: calibrazione del convertitore CDB5534(1)
Grafico 3.4: calibrazione del convertitore CDB5534(2)
Grafico 3.5: rumore nel convertitore CDB5534 interfacciato al
calibratore
Grafico 3.6: ripple misurato dal convertitore CDB5534
Grafico 4.1: diagramma temporale degli interruttori
Grafico 4.2: risposta del filtro digitale(1)
Grafico 4.3: risposta del filtro digitale(2)
Grafico 4.4: compatibilità tra dati misurati e calcoli teorici
Grafico 4.5: andamento reale (rosso) e ideale (blu) di Vo in funzione di
dr
Grafico 4.6: misura di Ve(1)
Grafico 4.7: misura di Vo(1)
Grafico 4.8: misura di Ve(2)
Grafico 4.9: misura di Vo(2)
Grafico 4.10: misura di Ve(3)
Grafico 4.11: misura di Vo(3)
Grafico 4.12: misura di Ve(4)
Grafico 4.13: misura di Vo(4)
Grafico 4.14: misura di Ve e Vo(1)
Grafico 4.15: misura di Ve e Vo(2)
Grafico 4.16: misura di Ve con riferimento di tensione esterno
Grafico 4.17: misure e calcoli teorici usando il convertitore
msc1211y5(1)
Grafico 4.18: misure e calcoli teorici usando il convertitore
msc1211y5(2)
Grafico 4.19: misure e calcoli teorici usando il convertitore
msc1211y5(3)
Grafico 4.20: rumore nel convertitore msc1211y5 nelle misure a ponte
Grafico 4.21: acquisizione di una sinusoide
Grafico 4.22: processo di media
Grafico 4.23: sinusoide originale, FFT eseguita con finestre Gauss-topcoombs, Hanning e Flat-top
Grafico 4.24: FFT eseguita con finestre Gauss-top-coombs e Hanning
su segnale mediato
Grafico 4.25: FFT eseguita con finestra di Hanning su segnale mediato
con data-rate di 273sps
Grafico 4.26: FFT eseguita con finestra di Hanning con data-rate di
273sps
Grafico 4.27: diagramma di Bode nel dominio discreto di un filtro
discreto implementante un processo di media mobile
Grafico 4.28: diagramma di Bode nel dominio continuo di un filtro
discreto implementante un processo di media mobile
Grafico 4.29: variazione della banda passante i funzione del numero di
campioni su cui viene eseguita la media
Grafico 4.30: variazione della banda passante i funzione del tempo di
6
campionamento
Grafico 4.31: calibrazione su diversi intervalli di tensione
Grafico 4.32: segnale originale e mediato ottenuto col convertitore
CDB5534
Grafico 4.33: misure e calcoli teorici usando il convertitore CDB5534(1)
Grafico 4.34: misure e calcoli teorici usando il convertitore CDB5534(2)
Grafico 4.35: misure e calcoli teorici usando il convertitore CDB5534(3)
Grafico 4.36: misure e calcoli teorici usando il convertitore CDB5534(4)
Grafico 4.37: rumore nel convertitore CDB5534 nelle misure a ponte
Grafico 4.38: FFT eseguita con finestra di Hanning e flat-top su segnale
sinusoidale originale
Grafico 4.39: comparazione di FFT eseguite in MSC e CDB con finestra
di Hanning
Grafico 4.40: FFT eseguita su MSC con filtro di ingresso
Grafico 4.41: misura della tensione del calibratore eseguita con CDB
Grafico 4.42: misura della tensione del calibratore eseguita con MSC
Grafico 4.43: misura della tensione del calibratore eseguita con MSC e
filtro di ingresso
Grafico 5.1: risposta in frequenza di due filtri notch con posizione dei poli
diversa
Grafico 5.2: segnale sinusoidale originale e sua FFT
Grafico 5.3: rumore all’uscita del filtro e segnale ideale in uscita
Grafico 5.4: FFT del segnale ideale in uscita
Grafico 5.5: risposta in frequenza del filtro notch utilizzato
Grafico 5.6: rumore in uscita del filtro usando un filtro notch con modulo
dei poli ridotto
Grafico 5.7: rumore in uscita del filtro usando un filtro notch con modulo
dei poli elevato
Grafico 5.8: FFT del segnale filtrato ottenuto dall’implementazione del
filtro digitale sul microcontrollore
Grafico 5.9: segnale originale (tratto continuo) e segnale ottenuto coi
polinomi interpolatori (punti) (1)
Grafico 5.10: segnale originale (tratto continuo) e segnale ottenuto coi
polinomi interpolatori (punti) (2)
Grafico 5.11: FFT del segnale originale
Grafico 5.12: FFT del segnale interpolato
Lista tabelle: Tabella 2.1: ENOB e rumore in ingresso al convertitore
Tabella 2.2: tipi di calibrazione
Tabella 2.3: partizione della memoria flash
Tabella 2.4: elenco degli interrupts
Tabella 2.5: uscita binaria in funzione della tensione di ingresso
Tabella 3.1: rappresentazione binaria in uscita in funzione della
tensione di ingresso
Tabella 4.1: impedenze di ingresso dei convertitori con buffer off
Tabella 4.2: impedenze di ingresso dei convertitori con buffer on
7
INTRODUZIONE
I convertitori A/D e D/A stanno assumendo un ruolo sempre più importante
nell’elettronica moderna, in cui è sempre maggiore la tendenza a privilegiare
l’elaborazione digitale del segnale. I campi di applicazione sono sempre più vasti:
dall’acquisizione nei controlli di processo, al campo video, a quello delle
telecomunicazioni.
Al giorno d’oggi un dispositivo elettronico che esegue la conversione analogico
digitale costituisce un componente complesso ed è sovente fornito dai costruttori già
dotato di una schedina elettronica dedicata alla valutazione e del relativo software di
base. I convertitori A/D disponibili raggiungono facilmente i 12-16 bit di risoluzione
ma, per le applicazioni di alta precisione, quali quelle che saranno trattate in questa
tesi, si può arrivare fino a 24 bit di risoluzione. La presenza di rumore e non idealità
nell’apparato elettronico, tuttavia, spesso riduce la risoluzione effettiva ben al di
sotto di quella teoricamente ottenibile dall’hardware a disposizione.
In questa tesi, dopo aver svolto una trattazione tutoriale dei convertitori dal punto di
vista teorico, saranno discusse anche una serie di metodologie per mantenere la
risoluzione dei dispositivi in esame il più possibile vicina al limite teorico ottenibile
dal convertitore.
L’analisi sarà effettuata servendosi sia di strumenti teorici acquisiti nei vari corsi
universitari (utilizzo di programmi C, calcolo di trasformate di Fourier, realizzazione
di filtri digitali ecc.), che di strumenti forniti dai costruttori delle schedine in esame
(interfaccia grafica per l’acquisizione dei segnali).
8
1. ANALISI TEORICA DEI CONVERTITORI ANALOGICODIGITALI SIGMA-DELTA
Questo capitolo intende illustrare la struttura interna di un convertitore A/D sigmadelta e spiegarne il principio di funzionamento.
Si inizierà richiamando alcuni concetti base riguardanti in generale tutti i convertitori
A/D.
1.1 CARATTERISTICHE E PARAMETRI DEI CONVERTITORI A/D
Un convertitore A/D è un dispositivo che converte un segnale elettronico analogico
continuo in un segnale discreto (quindi costituito da un numero finito di possibili
valori) e quindi in una corrispondente sequenza binaria.
Figura 1.1: convertitore analogico-digitale
Denominato x(t) il segnale in ingresso continuo e x*(t) il segnale campionato vale la
seguente relazione:
9
Il seguente schema riproduce un generico processo di conversione analogico-digitale.
In un primo tempo il segnale continuo x(t) viene campionato ad una frequenza Fs
(che deve essere per il criterio di Nyquist maggiore del doppio della frequenza
massima del segnale di ingresso per non incorrere in aliasing) ottenendo il segnale
x*(t) e in seguito viene quantizzato ottenendo il segnale x(n) che è comunemente
rappresentato con un codice binario. Il processo di quantizzazione consiste
nell’approssimare il segnale campionato con uno tra i possibili valori del convertitore
(quello più prossimo al valore campionato). Naturalmente la quantizzazione porta a
un errore che è dell’ordine del passo di quantizzazione e cioè pari alla minima
variazione del segnale di ingresso misurabile dall’ADC. Ad esempio un ADC a 14
bit è in grado di rappresentare il segnale in ingresso con 2^14=16384 diversi livelli di
quantizzazione. Assumendo che il valore massimo rappresentabile sia 1V si ha che il
valore minimo rappresentabile è 1/2^14=61 V.
Figura 1.2: campionamento e quantizzazione
I parametri fondamentali dei convertitori sono:
1) Il segnale analogico: viene fornita una escursione massima (o range) del
segnale di ingresso, con valori tipici attorno alla decina di volt. L’ingresso
può essere unipolare o bipolare (cioè riferito solo a segnali positivi oppure sia
a segnali positivi che negativi).
2) I dati di uscita: è un codice binario. Per segnali unipolari si usa spesso il
binario puro, per segnali bipolari si usa spesso la rappresentazione in
complemento a due.
3) Risoluzione: è la più piccola variazione del segnale analogico di ingresso che
il convertitore è in grado di rilevare e convertire. Spesso si esprime col
numero di bit del codice dei dati in uscita (ad esempio un A/D a 24 bit è in
grado di rilevare oltre 16 milioni di diversi livelli del segnale.
10
4) Tempo di conversione: è il tempo richiesto all’ADC per eseguire una
conversione completa (variabile da alcuni nanosecondi ad alcuni
millisecondi).
5) Precisione: è lo scarto massimo tra valore reale di tensione e valore ideale
richiesto per ottenere un dato digitale in uscita. Questo parametro tiene conto
dell’errore di quantizzazione, del rumore, della non linearità ed è espresso in
LSB.
6) Errore di linearità: dice quanto la curva interpolatrice reale della gradinata
si discosta da quella ideale.
7) Errore di linearità differenziale: indica lo scostamento tra la larghezza
dell’i-esimo gradino ed il suo valore ideale pari a 1 LSB.
8) Errore di linearità integrale: scostamento tra il centro del gradino reale e
quello ideale.
9) Errore di guadagno e di offset: il primo determina una errata pendenza della
curva interpolatrice, il secondo una traslazione che determina il mancato
passaggio per l’origine di tale curva.
10) Impedenza di ingresso: Come dice il termine stesso si tratta dell’impedenza
presentata dal dispositivo di conversione al mondo esterno. La gamma di
valori si estende tipicamente da 1k a 1M .
11) Coefficienti di temperatura: specificano l'instabilità dei parametri del
convertitore al variare della temperatura.
11
Figura 1.3: curva di trasferimento ideale di un ADC (a), errore di linearità (b),
errore di linearità differenziale (c), errore di guadagno e di offset (d).
12
1.2 PRINCIPALI TIPI DI CONVERTITORI ANALOGICO-DIGITALI
Attualmente esistono diversi tipi di convertitori A/D; tuttavia è possibile raggrupparli
in due grandi categorie: quelli che campionano con una frequenza prossima a quella
di Nyquist (leggermente superiore al doppio della frequenza massima del segnale di
ingresso) e quelli che campionano con frequenze molto maggiori a quella di Nyquist.
Il segnale campionato può essere scritto nella seguente forma.
Si ottiene come risultato una funzione a tempo discreto con valori non nulli e pari a
x(t) per tutti i multipli del periodo di campionamento T.
Dalla seconda forma appare chiaro come il campionamento produca una
modulazione: il segnale x(t) è modulato con delle portanti aventi frequenza fs, 2fs,
3fs ecc.
Importante aggiungere che per la conversione sono fondamentali anche un efficiente
circuito di sample and hold e un filtro antialiasing in ingresso.
Il circuito di sample and hold deve campionare il dato in ingresso e mantenerlo
costante durante la lettura dell’ADC; in caso di variazione del dato campionato
durante la lettura, le prestazioni del convertitore possono venire penalizzate.
Il filtro antialiasing evita che a causa di segnali in ingresso a frequenza troppo
elevata gli spettri dei segnali si sovrappongano risultando poi indistinguibili, come
illustrato nell’immagine successiva.
Grafico 1.1: rappresentazione schematica dello spettro di un segnale campionato
E’ bene ora eseguire una analisi più dettagliata sull’errore di quantizzazione per
capire quale sia l’entità dell’errore introdotto.
Supponendo di avere un convertitore con segnale massimo convertibile pari a 1V e
con un numero di bit B, si ha che il minimo valore misurabile dal convertitore è pari
a:
1
q= B
2 −1
Detto e(n) l’errore di quantizzazione, vale la seguente relazione:
13
Per un generico segnale in ingresso e(n) è un valore equiprobabile compreso tra q/2 e
–q/2.
La varianza (aspettazione del rumore) risulta quindi
Supponendo che il rumore sia bianco (e quindi costante in tutto l’intervallo di
frequenza analizzato), si ha che il suo livello di densità di potenza è:
Grafico1.2 : rumore in banda base
Si descrivono ora brevemente, i convertitori A/D più conosciuti ed utilizzati e le loro
caratteristiche essenziali.
1) ADC flash
E’ molto veloce e, allo stato dell’arte, può raggiungere frequenze di
campionamento superiori a 10MSa/s.
14
La conversione viene effettuata grazie a una schiera di comparatori disposti in
parallelo come di seguito illustrato.
Figura 1.4: rappresentazione schematica di un ADC flash
2) ADC subranging
In questo caso la conversione viene effettuata sempre con l’ausilio di
comparatori ma a più passi. A scapito di u n tempo di conversione un po’
maggiore, si ha il vantaggio di un numero minore di comparatori da usare e
una risoluzione più elevata.
La seguente immagine illustra come in un primo tempo vengano calcolati i
bit più significativi e in seguito vengano calcolati i rimanenti bit.
Figura 1.5: rappresentazione schematica di un ADC subranging
3) ADC ad approssimazioni successive
E’ abbastanza veloce e ha una buona risoluzione.
Come si vede dalla seguente immagine si tratta di un dispositivo che esegue
la conversione di un bit per volta, confrontando il segnale in ingresso con un
valore analogico dato da un DAC che riconverte la parte di ingresso fino a
quel momento digitalizzato. Il primo bit è messo a uno o a zero a seconda che
il segnale in ingresso sia maggiore o minore di metà del fondo scala.
15
Figura 1.6: rappresentazione schematica di un ADC ad approssimazioni
successive
4) ADC ad integrazione
Sono lenti ma molto precisi. Sono utilizzati negli strumenti di misura e il più
comune è l’ADC a doppia rampa, di seguito illustrato.
Un integratore riceve sull’ingresso una tensione Vin, che viene integrata per
un periodo Tc fisso. In seguito la tensione all’ingresso dell’integratore viene
portata a un valore Vref con polarità opposta dell’ingresso e quindi la
tensione sull’integratore si scarica in un tempo Td. Ne consegue che il valore
di Vin risulta pari a:
Vin=Td*Vref/Tc
Quindi il valore temporale Td dato dal contatore in termini di sequenza
binaria, sarà proporzionale a Vin.
Figura 1.7: rappresentazione schematica di un ADC a doppia rampa
Grafico 1.3: ADC a doppia rampa
16
5) ADC sigma-delta
Sono dei convertitori di concezione relativamente recente, piuttosto lenti ma
molto precisi; sono i convertitori che saranno presi in considerazione in
questa tesi.
Si basano sul modulatore sigma-delta, di cui qui di seguito riportiamo lo
schema di massima, che quantizza il segnale in ingresso con risoluzione di 1
bit tipicamente a velocità molto grande. In seguito, mediante tecniche di
sovracampionamento e filtraggio, la frequenza di campionamento viene
ridotta e la risoluzione aumentata.
Figura 1.8: modulatore sigma-delta
Figura 1.9: tipi di ADC, risoluzione e larghezza di banda
17
1.3 CONVERTITORI ANALOGICO-DIGITALI SIGMA-DELTA
Il convertitore Sigma-Delta quantizza il segnale analogico di ingresso con bassissima
risoluzione ed elevatissima frequenza di campionamento. E' costituito da un
modulatore Sigma-Delta che fornisce una sequenza seriale di bit con frequenza
elevatissima e di un filtro digitale che presenta in uscita dati digitali di frequenza
inferiore ma con risoluzione molto più ampia. Il modulatore Σ ∆ è costituito da un
anello di reazione negativa in cui sono inseriti un convertitore A/D ad 1 bit, un
convertitore D/A ad un bit, un nodo sommatore ed un integratore.
Funzionamento:La tensione analogica fornita dal DAC viene sottratta al segnale di
ingresso Vi da convertire; il risultato viene integrato e confrontato con zero, ossia
convertito in un bit di valore 1 o 0. Il DAC presenta in uscita una tensione analogica
corrispondente al valore di questo bit, tensione che viene nuovamente sottratta al
segnale di ingresso. Queste operazioni sincronizzate da un segnale di clock, si
ripetono con frequenza elevatissima fc, cosicché all'uscita dell' ADC ad 1 bit, e quindi
del modulatore, si presenta una sequenza seriale di bit con cadenza fc. Il contenuto
informativo sul valore di Vi è rappresentato dal duty cicle del treno di impulsi che si
presenta sull'uscita del modulatore. Quindi la sequenza di bit viene trattata da un
filtro passa basso digitale che calcola il valore medio su un certo numero di campioni
e fornisce ad un registro di uscita, con frequenza fo<fc, dati digitali espressi in parole
ad n bit.
Figura 1.10: ADC sigma-delta
L’immagine successiva illustra 8 passi consecutivi di funzionamento di un adc
sigma-delta:
18
19
Figura1.11: rappresentazione schematica del funzionamento di un ADC sigma-delta
20
I convertitori sigma-delta derivano da una evoluzione di un altro convertitore
denominato delta.
L’immagine successiva illustra il procedimento per passare da un convertitore delta a
uno sigma-delta. E’ sufficiente spostare l’integratore del demodulatore all’inizio del
convertitore; da qui il nome sigma-delta: portare l’integratore (che esegue
l’operazione di somma e quindi sigma) all’ingresso del modulatore delta.
Figura 1.12: convertitore analogico-digitale delta
La seguente immagine costituisce un convertitore sigma-delta completo, ottenuto
dalla precedente, semplicemente applicando le regole dell’algebra degli schemi a
blocchi (per spostare e compattare i due integratori in uno unico).
Figura 1.13: convertitore analogico-digitale sigma-delta
E’ importante sottolineare una differenza sostanziale relativa al funzionamento dei
due convertitori: mentre nel delta la sequenza binaria in uscita è proporzionale (in
termini di bit a 1 rispetto a quelli a 0) alla variazione della tensione di ingresso; nel
convertitore sigma-delta la sequenza binaria in uscita è proporzionale al valore
assoluto della tensione di ingresso.
Ciò è facilmente comprensibile analizzando i seguenti schemi.
21
Grafico 1.3: sequenza dei bit in uscita da modulatore delta e sigma-delta
corrispondenti al segnale Vi (1)
Per dimostrare tale risultato, si è anche provveduto alla simulazione dei modulatori
dei due diversi convertitori, ipotizzando di avere un segnale di ingresso sinusoidale.
In appendice A è riportato il programma di simulazione realizzato in Matlab.
Le seguenti immagini sono i tre grafici ottenuti eseguendo tale programma.
Si nota come nel modulatore delta prevalgano i bit a 1 nel fronte di salita della
sinusoide (variazione positiva), mentre prevalgano quelli a 0 nel fronte di discesa
(variazione negativa).
Nel modulatore sigma-delta invece il numero di bit a 1 è prevalente quando il valore
della sinusoide è positivo, i bit a 0 prevalgono per i valori negativi (uscita
proporzionale al valore assoluto).
22
Grafico 1.4: sequenza dei bit in uscita dal modulatore delta e sigma-delta ottenuta
con il programma Matlab sviluppato in questa tesi e riportato in appendice (2)
L’uscita del modulatore sigma-delta è un flusso dati da 1-bit con una frequenza pari a
quella di campionamento, che può essere dell’ordine dei megahertz. Lo scopo del
filtro digitale e di decimazione è quello di estrarre l’informazione da questo flusso
dati e ridurre la velocità dei dati. In un convertitore A/D sigma-delta, il filtro digitale
esegue una media sul flusso dati, aumenta la risoluzione e rimuove il rumore di
quantizzazione dalla banda d’interesse. Determina quindi la larghezza di banda del
segnale e il tempo di assestamento. Un tipo di filtro molto utilizzato nei convertitori
sigma-delta è quello del tipo Sinc3. Il vantaggio principale di questo filtro, grazie al
tipo di risposta notch, è quello di permettere d’eliminare la frequenza di linea se
opportunamente predisposto. La posizione notch del filtro è legata direttamente alla
velocità dei dati in uscita (frequenza_notch=1/periodo della word). Dato che, Il filtro
23
SINC3 si assesta i tre periodi, con un notch posizionato a 60Hz si ha un tempo
d’assestamento di 3/60Hz = 50ms. Applicazioni che richiedono una risoluzione più
bassa e un tempo d’assestamento più veloce possono beneficiare della possibilità che
permette di scegliere il tipo di filtro (SINC1 or SINC3). Il tempo d’assestamento di
un filtro SINC1 è di una word. Nel caso dell’esempio precedente 1/60Hz = 16.7ms.
La data rate del segnale d’uscita viene quindi ridotta preservando alcuni campioni
dell’ingresso ed eliminando il resto. Questo processo è noto come decimazione di un
fattore M (rapporto di decimazione). M può avere qualsiasi valore intero, purchè la
velocità dati d’uscita sia almeno il doppio della larghezza di banda del segnale. Se il
segnale d’ingresso è stato campionato alla frequenza fs, la velocità dei dati d’uscita
può essere ridotta a fs/M senza perdita d’informazione.
Di seguito, saranno approfonditi alcuni concetti chiave dei convertitori sigma-delta,
in modo da rendere chiaro il motivo per cui sia conveniente il loro uso in
applicazioni ad alta risoluzione quali quelle considerate in questa tesi.
.
La parte analogica del convertitore (costituita da 1 ADC a 1 bit), ha un
funzionamento semplice, come si deduce dalle precedenti pagine. Più complicata è
invece la parte digitale. Per comprendere tale parte, è bene avere chiari i concetti di
sovracampionamento, modellazione del rumore, filtraggio digitale e decimazione.
1.3.1 SOVRACAMPIONAMENTO (oversampling)
Si considera inizialmente l’andamento in frequenza dello spettro di un segnale
sinusoidale campionato da un ADC tradizionale.
Considerando Fs la frequenza di campionamento, per il teorema di Nyquist Fs deve
essere maggiore o uguale al doppio della frequenza massima del segnale di ingresso.
Osservando il risultato della FFT si può vedere come sia presente un singolo tono
alla frequenza della sinusoide e come sia presente il rumore di quantizzazione fino
alla frequenza Fs/2. Tale rumore di quantizzazione deriva dal fatto che il segnale in
ingresso all’ADC è continuo, con infiniti possibili valori mentre quello in uscita è
digitale, con un numero finito di stati possibili. L’entità di questi errori introdotti
dipende e si misura in LSB.
24
Grafico 1.5: rappresentazione in frequenza dello spettro di un segnale sinusoidale
Come si vede dal precedente grafico, il rapporto tra segnale utile e il rumore (SNR)
aumenta all’aumentare del numero di bit usati dall’ADC, in quanto al crescere di N il
LSB assume un valore sempre più piccolo e quindi il rumore introdotto cala.
La seguente immagine è relativa al caso in cui il campionamento venga eseguito con
una frequenza k*Fs (k è il fattore di sovracampionamento). La potenza del rumore
(data dall’area coperta dal rumore) è la stessa del caso precedente, come pure rimane
lo stesso il rapporto segnale-rumore (usando lo stesso numero di bit N); tuttavia la
gamma di frequenze su cui il rumore viene distribuito è più ampia.
Ne consegue che filtrando il segnale a Fs/2, si conserva ancora il segnale utile ma la
potenza del rumore cala; quindi anche il valore SNR migliora (cresce).
Come illustrato di seguito, usando una frequenza di campionamento molto elevata
(Fs>>fB) si vede come la potenza di rumore Nb in banda base si riduca.
25
Grafico 1.6: sovracampionamento
Grafico 1.7: effetto del filtro digitale sul processo di campionamento e conversione
Ne consegue che filtrando il segnale a Fs/2, si conserva ancora il segnale utile ma la
potenza di rumore cala.
A questo punto è importante capire di quanto migliora il rapporto SNR aumentando
il valore di sovracampionamento k. Aumentando N di 1, il valore SNR cresce di
6dB; per aumentare la risoluzione di 1 bit il termine k deve aumentare di un fattore 4.
Ad esempio volendo ottenere una risoluzione di 16 bit, si dovrebbe eseguire un
sovracampionamento di 4^15, che non è fattibile.
I convertitori sigma-delta sormontano tale problema grazie alla modellazione del
rumore (noise shaping) che consente di ottenere un aumento di SNR maggiore a 6dB
per ogni aumento di k di un fattore 4.
26
1.3.2 MODELLAZIONE DEL RUMORE (noise shaping)
I modulatori sigma delta fino ad ora analizzati, sono provvisti di un integratore, di un
sommatore di un DAC e di un comparatore, essi sono detti modulatori del primo
ordine. Esistono degli ADC sigma delta con più stadi di integrazione e di somma e
sono detti ADC sigma-delta di ordine due o superiore.
Come spiegato, indipendentemente dal suo ordine, il modulatore fornisce in uscita
una sequenza di uni e zeri in cui la densità di uni è proporzionale al segnale di
ingresso.
Sommando l’errore di tensione, l’integratore funziona da filtro passa basso per il
segnale di ingresso e passa alto per il rumore di quantizzazione, che rimane sempre
lo stesso ma viene spostato verso le frequenze più elevate.
La spiegazione di tale comportamento è chiara analizzando il modulatore mediante
gli schemi a blocchi, come di seguito riportato.
Figura 1.14: funzioni di trasferimento di un convertitore sigma-delta
27
Grfico1.8: modellazione del rumore
Applicando un filtro digitale al segnale in cui è stato eseguito il sovracampionamento
e la traslazione verso le alte frequenze del rumore, la riduzione del rumore è
maggiore che nel caso di segnale a cui sia stato applicato il solo processo di
sovracampionamento.
Grafico 1.9: filtro digitale e modellazione del rumore
L’entità dello spostamento del rumore di quantizzazione verso le alte frequenze,
dipende dall’ordine del modulatore e cioè dal numero di stadi di modulazione del
primo ordine in cui il segnale viene fatto passare.
Consideriamo la trasformata Z del modulatore sopra trattato. Il modulatore viene
modellato nel seguente modo: l’integratore viene denominato I(z), con espressione
1/(1-Z^-1); il quantizzatore come una sorgente di rumore; viene introdotto un ritardo
28
sulla catena di reazione (considerando che in un sistema discreto l’uscita ad un certo
istante non può dipendere dall’uscita in quello stesso istante ma solo da quelle degli
istanti di campionamento precedenti).
Figura 1.15: trasformata Z del modulatore sigma-delta
Vale la seguente relazione ingresso-uscita:
Scrivendo l’equazione in funzione di Y e sostituendo l’espressione dell’integratore si
ottiene quindi:
Si vede che l’uscita corrisponde all’ingresso più il rumore di quantizzazione
moltiplicato per un termine che corrisponde ad un derivatore. La risposta in
frequenza di un derivatore è quella di un filtro passa alto e di conseguenza il rumore
di quantizzazione viene amplificato alle alte frequenze e ridotto a quelle basse.
Si pensa a questo punto di processare ulteriormente il segnale secondo il seguente
schema a blocchi (in cui Q1 si considera noto e alimenta un blocco modulatore
analogo al primo)
Figura 1.16: efftto noise shaping
Si ottiene la seguente espressione ingresso-uscita:
29
Figura1.16: schema a blocchi di un modulatore di ordine 2
Combinando opportunamente le uscite y1 e y2, come illustrato nel precedente
schema a blocchi, si può ottenere la seguente espressione:
Essendo il rumore di quantizzazione moltiplicato per l’espressione di un derivatore al
quadrato, ne consegue che l’azione di traslazione del rumore verso le frequenze più
elevate sarà maggiore.
E’ ovvio che inserendo un ulteriore blocco di modulazione l’espressione del
derivatore avrà come potenza 3 e così via, portando ad uno spostamento più
significativo del rumore verso le alte frequenze e migliorando quindi il rapporto
segnale-rumore.
Dal seguente grafico si nota come per modulatori del primo ordine SNR migliora di
9 dB al raddoppiare di k; per modulatori del secondo ordine SNR migliora di 15 dB
al raddoppiare di k; ; per modulatori del terzo ordine SNR migliora di 21 dB al
raddoppiare di k.
30
Grafico 1.10: andamento di SNR in modulatori di vario ordine
Questo ultimo grafico riassume infine come si sia ottenuto una riduzione progressiva
del rumore in banda base con varie tecniche: campionando con frequenze
leggermente superiori a quella di Nyquist il rumore in banda base è notevole;
utilizzando un sovracampionamento tale rumore si riduce considerevolmente. Infine,
processando il segnale in un modulatore di ordine via via superiore, si vede come il
rumore di quantizzazione diventi minimo.
Grafico 1.11: confronto del rumore in banda base usando varie tecniche di
campionamento
31
1.3.3 FILTRO DIGITALE E DI DECIMAZIONE
Come spiegato, l’uscita del modulatore è costituita da una sequenza di bit alla
frequenza di campionamento, che è dell’ordine dei megahertz. Gli scopi del filtro
digitale e della decimazione sono fondamentalmente tre:
1) Quello di estrarre l’informazione utile abbassando il data-rate a un valore
utilizzabile.
2) Ridurre il rumore di quantizzazione che in precedenza era stato spostato verso
le alte frequenze dal modulatore.
3) Evitare i problemi di aliasing facendo in modo che l’abbassamento del datarate di un fattore M sia tale che il data-rate conseguente sia maggiore del
doppio della banda del segnale di ingresso, in accordo con Nyquist.
Quindi il filtro ha lo scopo di mediare i bit di uscita, di migliorare la risoluzione
dell’ADC e di eliminare il rumore di quantizzazione fuori dalla banda di
interesse. Ne consegue che il filtro determina la larghezza di banda del segnale, il
tempo di assestamento (settling time) e l’attenuazione dei segnali fuori banda
(stopband rjection).
Figura1.17: schema a blocchi di ADC sigma-delta
La realizzazione di questo filtro digitale e di decimazione non è affatto banale. Infatti
si richiede la realizzazione di un algoritmo in grado di lavorare a frequenze molto
elevate (pari a quelle dei bit in uscita dal modulatore) e in grado di eliminare in modo
efficiente il rumore di quantizzazione alle alte frequenze (che è rilevante nei
modulatori di ordine superiore).
Il più semplice ed economico tra i filtri che possono fare ciò è il comb-filter.
Il principale vantaggio è costituito dal fatto che esso non richiede un moltiplicatore,
avendo già tutti i coefficienti unitari.
Il comb-filter è equivalente a un filtro FIR a finestra rettangolare. Tuttavia a causa
del fatto che questo filtro non è in grado di eliminare in modo efficiente i disturbi che
si trovano a frequenze molto distanti dalla banda base, esso viene utilizzato assieme a
degli altri filtri in cascata.
Consideriamo ad esempio il seguente schema di decimazione digitale.
In esso, il comb-filter è posto in cascata ad un modulatore del terzo ordine, ed è
seguito a sua volta da un filtro FIR.
Il comb-filter provvede alla riduzione di un fattore 16 del rate di uscita. Il filtro FIR
in cascata oltre ad effettuare una ulteriore decimazione di un fattore 4, garantisce il
32
mantenimento di una risposta con fase lineare e un mantenimento quasi intatto
dell’ampiezza delle componenti interne alla banda base.
Figura 1.18: demodulatore sigma-delta
Un comb-filter avente lunghezza N è un filtro FIR i cui N coefficienti hanno valore
unitario.
Di seguito vengono riportate le espressioni di tale filtro nel dominio temporale e in
quello delle trasformate Z
Si nota come il filtro implementi una media mobile.
Nel caso in esame si ha N=16. Il comb-filter esegue quindi una somma di 16
campioni, normalizza il risultato (è sufficiente uno shift a destra di 4) e infine esegue
una decimazione considerando un solo dato ogni 16 bit.
Per ottenere una eliminazione più efficace del rumore fuori banda si usano spesso
delle cascate di comb-filter, come illustrato di seguito.
Grafico 1.12: risposta in frequenza di comb-filter di vario ordine
33
La seguente immagine illustra infine l’ampiezza del rumore in uscita dal
convertitore. Il primo grafico illustra l’andamento del rumore all’uscita del
modulatore, il secondo illustra il comportamento del comb-filter alle varie frequenze.
Essendo i diagrammi in decibel, ne consegue che il rumore in uscita al comb-filter
avrà un andamento dato dalla somma dei moduli dei due grafici precedenti, come
illustrato nella terza immagine. Si nota che il rumore ha un’ampiezza massima di
circa -70dB e questo porta a una risoluzione di 12 bit:
supponendo l’ingresso sempre minore di 1V, si ha che -70dB corrispondono a
316.2 V. Per una risoluzione di questo tipo sono necessari N bit di modo che
2^N=1/316.2
N=12bit
Grafico 1.13: rumore in uscita dal comb-filter
Consideriamo ora l’inserimento di un filtro FIR in cascata al comb-filter. Questo
filtro FIR, se opportunamente progettato oltre ad una ulteriore decimazione 4:1 è in
grado di assicurare una compensazione sul filtro precedente in modo da rendere la
sua risposta piatta in banda base (con un ripple inferiore ai ±0.001dB) . Come si vede
dall’immagine successiva l’attenuazione fuori banda è prossima ai -100dB
(considerando una banda base di 50KHz).
34
Grafico 1.14: risposta in frequenza del filtro FIR in cascata al comb-filter
L’immagine successiva è relativa alla risposta totale data dalla cascata dei due filtri
digitali.
Grafico 1.15: risposta in frequenza della cascata di comb-filter e FIR
In questo modo, l’ampiezza massima del rumore in banda base è sempre inferiore ai 100dB (valore massimo che si osserva nel grafico del rumore in corrispondenza del
limite della banda passante del filtro FIR) e di conseguenza la risoluzione passa da
12 a 16 bit:
35
-100dB=10.0
2^N=1/10.0
N=16bit
Per ottenere una risoluzione più spinta (maggiore ai 20 bit), si procede con delle
ulteriori decimazioni. E’ bene precisare, come già accennato in precedenza, che non
è necessaria una decimazione particolarmente spinta per aumentare la risoluzione.
Mentre il sovracampionamento puro produce un miglioramento di N bit per un
fattore 4^N di sovracampionamento (con successiva decimazione di un fattore 4^N);
oppure, in altri termini, il sovracampionamento di un fattore 2 migliora il rapporto
SNR di 3B; grazie al noise shaping il miglioramento che si ottiene richiede delle
decimazioni molto minori.
Considerando il sovracampionamento puro, ad esempio, per passare dai 16 bit di
risoluzione attuale a 20, sarebbe necessaria una decimazione 256:1
Per aumentare la risoluzione di 4 bit, è necessario un miglioramento del SNR di
circa 24dB
24=10log(x) x=10^2.4=251=2^8= fattore di sovracampionamento e
conseguente decimazione.
Il data-rate passa da 100KHz a 100K/256=400Hz.
Grazie al noise shaping, con un modulatore del primo ordine la risoluzione può
essere portata a 20 bit con una semplice ed ulteriore decimazione 8:1 (quindi il
rapporto SNR migliora di 9dB per un fattore di sovracampionamento di 2).
Il data-rate passa da 100KHz a 100K/8=12.5KHz.
Un tipo di filtro comunemente usato è il sinc3. Tale filtro ha il vantaggio di aver una
risposta di tipo notch e quindi la possibilità di eliminare i disturbi provenienti dalla
rete fissando appunto la posizione del notch alla tensione di rete.
Il tempo di assestamento è di tre volte l’inverso della posizione in frequenza del
notch. Considerando ad esempio un sinc3 con notch sui 50Hz, si ha che il tempo di
assestamento è pari a 3*(1/50)=60msec.
Grafico 1.16: filtro sinc3, risposta in frequenza e espressione analitica
(D=fattore di decimazione, si vede che è costituito dalla cascata di tre filtri
sinc)
36
Nella seguente immagine è riportato un esempio molto semplice di decimazione.
L’uscita del modulatore sigma-delta è una sequenza unica di bit; il decimatore è 16:1
con un ADC a 4 bit. Ogni 16 bit viene eseguita una media (come rapporto tra il
numero di bit a 1 e il numero totale di bit, cioè 16) e rappresentato in binario il valore
mediato. Essendo in questo caso la rappresentazione a 4 bit si ha che il valore binario
di uscita corrisponde con il numero di bit a 1 nella sequenza di ingresso.
Si nota come il processo abbia generato un abbassamento del data-rate, portandolo ad
un valore ragionevole e come la risoluzione sia aumentata (da 1 a 4 bit).
Figura 1.19: decimazione
37
1.3.4 VANTAGGI E SVANTAGGI DEI CONVERTITORI SIGMA-DELTA
Il prezzo da pagare per l’alta risoluzione ottenibile negli ADC sigma-delta, è l’alta
velocità di sovracampionamento a cui deve lavorare anche tutto l’hardware, che è
molto maggiore della frequenza dei segnali di ingresso. Per questo motivo tali
convertitori vengono spesso utilizzati solo in applicazioni di alta risoluzione e con
segnali aventi banda più piccola possibile (altrimenti Fs sarebbe veramente troppo
elevata).
Esiste una grande latenza (oggi in parte ridotta) tra l’avvio del ciclo di
campionamento e l’arrivo in uscita del primo valore. Anche durante il funzionamento
a regime, tra l’uscita digitale e i corrispondenti istanti di campionamento esiste un
rilevante ritardo.
Nonostante questi limiti, gli ADC sigma-delta hanno anche molti vantaggi rispetto ad
altre tecnologie.
Il convertitore è integrato in un unico chip e gran parte di esso è digitale e quindi con
prestazioni scarsamente influenzate da tempo e temperatura. Inoltre il costo di
implementazione è basso e in costante calo.
Non esiste la necessità di circuiti di sample and hold esterni e l’esigenza di filtri antialiasing è minima (spesso sono sufficienti dei circuiti RC).
Il valore di SNR è molto alto e il livello del rumore che determina SNR è
indipendente dall’ampiezza del segnale di ingresso.
Infine i convertitori A/D sigma delta sono altamente lineari ed in generale
presentano solo una lieve non linearità differenziale.
1.4 INGRESSI SINGLE-ENDED E INGRESSI DIFFERENZIALI
E’ bene precisare a questo punto ancora un aspetto sugli ADC sigma-delta, che può
ritenersi però valido in genere per ogni altro convertitore: la modalità di acquisizione
del segnale in ingresso.
Spesso il segnale può essere acquisito in due diverse modalità, di seguito descritte.
Ingressi single-ended.
Generalmente sono sufficienti per molte applicazioni. In questo caso tutti i segnali di
ingresso sono riferiti ad un segnale di massa comune.
La presenza di offset o di rumore lungo il percorso dei segnali provoca una
diminuzione del dinamic range e del segnale di ingresso.
L’immagine successiva mostra un ingresso single-ended per un ADC. Durante la
fase di campionamento (sample) lo switch è chiuso e il segnale di ingresso carica il
condensatore C. Durante la fase di mantenimento (hold) lo switch è aperto e l’ADC
converte in digitale il valore di tensione presente su C.
38
Figura 1.20: ingressi single-ended
Ingressi differenziali.
Come mostra la seguente immagine, utilizzando ingressi differenziali, si ha che
anziché un unico circuito di campionamento RC, ne esistono due. Durante la fase di
campionamento Cs+ e Cs- si caricano ad una tensioni pari a (VAIN+)+VDD/2 e
(VAIN-)+VDD/2 rispettivamente. In questo modo, connettendo assieme Cs+ e Csdurante la fase di mantenimento, all’ingresso dell’ADC è presente una tensione pari
alla differenza tra AIN+ e AIN-.
Questa misura differenziale assicura una eliminazione molto migliore di eventuali
offset e rumore, rispetto al caso single-ended.
Quindi il dinamic range e SNR migliorano.
Figura 1.21: ingressi differenziali
39
2. CONVERTITORI MSC1211Y5 E CDB5534
In questo capitolo verranno presentati in modo dettagliato i due principali
convertitori presi in analisi durante lo svolgimento di questa tesi.
2.1 SCHEDINA MSC1211Y5
Il convertitore della Texas Instruements viene fornito già montato su una schedina di
valutazione MSC1211Y5 che integra oltre all’ADC a 24 bit anche un
microcontrollore 8051.
La seguente immagine rappresenta mediante schema a blocchi il chip sopra citato.
Figura 2.1: architettura del convertitore msc1211y5
Si vede come all’interno del chip siano presenti sulla sinistra i blocchi componenti
l’ADC e sulla destra quelli costituenti il microcontrollore.
L’ADC accetta in ingresso 8 canali (sia in modalità sngle-ended che differenziale).
Tali canali, grazie alla presenza di un multiplexer, vengono passati all’ADC. E’
presente anche un blocco “Temperature sensor”, che fa capire come questo
dispositivo oltre a valori di tensione sia in grado anche di misurare valori di
temperatura. Una volta scelto il canale di ingresso, il relativo segnale arriva al blocco
“buffer”. Il passaggio del segnale attraverso il buffer è facoltativo, dipende
dall’operatore esterno (il buffer serve a disaccoppiare i circuiti che si trovano a
monte e a valle di lui). Il blocco “PGA”, serve ad amplificare (di un valore
impostabile dall’esterno) il segnale di ingresso. In seguito il segnale passa al
modulatore sigma-delta ed al filtro digitale, avente le funzioni spiegate nel capitolo
40
precedente. All’uscita del filtro il segnale di ingresso è ormai diventato una sequenza
binaria di 24 bit e viene memorizzato ed elaborato dal microcontrollore.
Sul lato destro del chip si osservano appunto i principali blocchi del
microcontrollore, costituiti da blocchi di memoria interna flash e SRAM, da un
registro accumulatore a 32 bit, da un registro speciale (SFR) e da varie porte di
comunicazione.
Si nota anche come le alimentazioni digitali e quelle analogiche siano indipendenti.
Saranno analizzati ore in dettaglio i vari blocchi presentati.
Figura 2.2: piedinatura del convertitore msc1211y5
2.1.1 CONVERTITORE ADC SIGMA-DELTA A 24 BIT
La seguente immagine riporta i blocchi di interesse.
Come già detto esistono varie configurazioni possibili di funzionamento (buffer on
oppure buffer off, unipolare o bipolare ecc.). Tali configurazioni sono determinate
dai valori impostati dall’utente nell’SFR
41
Accanto a ogni blocco della seguente immagine è presente il codice esadecimale da
impostare nell’SFR per ottenere una determinata modalità di funzionamento.
Figura 2.3: schema a blocchi del convertitore msc1211y5
MULTIPLEXER DI INGRESSO
Esso provvede a far entrare nell’ADC il segnale desiderato. Può essere scelto come
ingresso differenziale positivo un qualsiasi canale e come ingresso differenziale
negativo un qualsiasi altro; in questo modo si ottengono 8 possibili combinazioni di
canali differenziali. Spesso saranno comunque presi come segnale positivo uno dei
canali da AIN0 a AIN7 e come negativo AINCOM.
SENSORE DI TEMPERATURA
Impostando la modalità DIODE (corrispondente a imporre FFh all’indirizzo D7h del
SFR), il dispositivo è impostato per il rilevamento della temperatura.
BURNOUT
DETECT
CORTOCIRCUITO)
(RILEVATORE
DI
INTERRUZIONE
PER
42
Abilitando il relativo bit, si impone il passaggio di una corrente di circa 2 A sia
sull’ingresso positivo che su quello negativo. Tale modalità di funzionamento è
permessa solo nel caso di buffer abilitato e permette di effettuare la conversione nei
casi limite di circuito aperto e cortocircuito.
BUFFER DI INGRESSO
Abilitando il buffer, l’impedenza di ingresso vista dal segnale è sempre alta,
indipendentemente dal valore di guadagno impostato sul PGA. Questo è un
vantaggio in quanto si ha il disaccoppiamento tra circuito a monte e a valle del
buffer. Lo svantaggio consiste in una lieve diminuzione del range per il segnale di
ingresso e, dal lato analogico, in un aumento nel consumo.
Figura 2.4: buffer di ingresso
INGRESSO ANALOGICO DELL’ADC
Quando il buffer di ingresso non è selezionato, la impedenza di ingresso analogico ha
una impedenza variabile in funzione della Fclock e del PGA.
In generale valgono le seguenti relazioni:
43
Tale formula deve essere applicata al caso in esame.
La seguente immagine schematizza il circuito di ingresso del convertitore.
f MOD =
f CLK /( ACLK + 1)
64
Figura 2.5: circuito di campionamento
Dove Fosc è la frequenza di oscillazione generale (come indicato nella figura della
generazione dei clock) e ACLK è un valore variabile tra 0 e 127, dipendente
dall’impostazione del relativo registro situato nello SFR.
Considerando il fatto che per la maggior parte dei valori di PGA è possibile scrivere
che fsamp=fmod*(PGA/4) e Cs=36pF, l’espressione dell’impedenza di ingresso
diventa:
Ain _ impedance =
1
f sample * Cs
=
f
4
* CLK
PGA
1
/( ACLK + 1)
* 36 p
64
44
Ain_ impedance=
1
1
4 * 64
1M
=
*
*
PGA 36p *1M f CLK /( ACLK + 1)
PGA f CLK /( ACLK + 1)
*
* 36 p
4
64
PGA
Il PGA può assumere i seguenti valori: 1, 2, 4, 8, 16, 32, 64, 128. All’aumentare del
PGA, la risoluzione aumenta ma il range del segnale diminuisce: per PGA=1 lo span
(escursione del segnale) è di 2.5V con risoluzione effettiva di 1.5 V; per PGA=128
lo span è di 19mV con risoluzione effettiva di 75nV.
Al crescere del PGA cala l’impedenza di ingresso.
Risoluzione effettiva = span/2^n
Dove n è il numero di bit validi (ENOB), cioè i bit stabili, non affetti da rumore nella
misura. Come si osserva dalla seguente tabella l’ENOB cala al crescere del PGA, in
quanto l’amplificazione del segnale introduce anche una amplificazione del rumore.
FSR=full-scale range
Tabella 2.1: ENOB e rumore in ingresso al convertitore
Anche i seguenti grafici, evidenziano come il numero di bit effettivi del convertitore
aumenti al diminuire del PGA impostato.
Questi grafici mostrano anche come l’ENOB vari in funzione di altri parametri
impostati.
Si può dire innanzitutto che in generale l’ENOB aumenta al diminuire del data-rate
di uscita, all’aumentare del decimation-ratio e all’aumentare della frequenza di
modulazione fmod (che è proporzionale alla frequenza di campionamento
dell’ingresso fsample).
45
Questi tre elementi (data-rate, decimation-ratio e fmod) sono tra loro dipendenti e
legati dalle seguenti equazioni.
Per ridurre il data-rate, secondo la terza equazione, bisognerebbe usare un alto valore
di Decimation e uno basso di fmod. Tuttavia si deve cercare di mantenere fmod
comunque alta, altrimenti l’ENOB diminuirebbe.
Per ottenere un buon ENOB, è quindi necessario utilizzare un alto valore di fmod
(mantenendo basso ACLK) e un alto valore di Decimation.
E’ utile spiegare a questo punto il motivo per cui l’ENOB aumenta all’aumentare di
fmod e al diminuire del data-rate. Utilizzando una grande fmod, la tensione in
ingresso viene campionata con una conseguente elevata fsamp e quindi
l’informazione in uscita dal modulatore è contenuta in un numero più elevato di bit e
risulta più precisa. Se si impone un basso rate di uscita, il convertitore impiega un
tempo minimo all’elaborazione del dato da fornire in uscita; in caso contrario il
tempo impiegato aumenta a discapito di quello necessario per una lettura migliore
dell’ingresso; inoltre l’uscita deriva da una media fatta su un numero di bit minori
provenienti dal modulatore (ed è quindi meno precisa).
46
Grafico 2.1: Variazione dell’ENOB in funzione di data-rate, decimation ratio e fmod
RANGE
In una configurazione tipica, in cui il segnale viene applicato ad AIN+ e AIN-, ogni
ingresso del convertitore può assumere qualsiasi valore tra AGND-0.5 e AVdd+0.5.
L’ADC misura la differenza tra i due pin selezionati e da in uscita la differenza di
tensione tra questi due piedini. La massima differenza misurabile è detta VFS (full
scale voltage).
L’uscita può essere unipolare o bipolare. In modalità unipolare, l’ingresso Vin+ deve
essere un valore compreso tra 0 e Vref, (refin+-refin-) e maggiore di Vin(assumendo Vin+ e Vin- entrambi compresi tra AGND e AVdd).
In modalità bipolare, AIN+ può essere indifferentemente maggiore o minore di
AIN-. Ne consegue che in modalità unipolare il convertitore darà come uscita un
valore compreso tra 0 e Vref; in modalità bipolare un valore compreso tra –Vref e
+Vref.
MISURA DI TENSIONI OLTRE IL RANGE COMUNE
Pur essendo il valore massimo di tensione di riferimento interna pari a 2.5V, è
possibile effettuare delle misure single-ended nell’intervallo 0-5V.
Il convertitore va impostato come illustrato nella seguente immagine.
Al piedino AIN+ sarà possibile assegnare sempre un valore di tensione compreso tra
0 e 5V rispetto ad AGND. Grazie al collegamento di AIN- alla tensione di VREF
(2.5V), la differenza tra AIN+ e AIN- sarà quindi sempre compresa tra +2.5V e -
47
2.5V. Per AIN+=5V l’uscita sarà pari a 2.5V (5-2.5); per AIN+=0V l’uscita sarà pari
a -2.5 (0-2.5). Sommando 2.5 ad ogni uscita si ottiene qualsiasi valore compreso tra 0
e 5V.
Misura di 0-5v in sigle ended:
Figura 2.6: configurazione per misura di tensioni oltre il range tipico 0-5V
OFFSET DEL DAC
Esiste la possibilità (nel modo di funzionamento bipolare), di fornire un offset al
segnale in uscita al PGA. Tale offset è analogico e può arrivare al massimo a metà
del range dei segnali in ingresso al PGA. L’offset è determinato dal registro di 8 bit
ODAC dello SFR. Il bit più significativo determina il segno (+ o -) dell’offset e i
rimanenti 7 l’entità della traslazione.
Il range di ingresso dell’ADC non viene ridotto a causa di tale offset, dato che
l’offset introdotto non è digitale ma analogico (cioè il range del segnale è sempre
compreso tra +2.5V e -2.5V. Dando ad esempio un offset di -1V, si può applicare
qualsiasi Ving tale da avere una uscita compresa tra +2.5V e -2.5V, nell’esempio in
esame Ving può essere compresa tra 3.5V e -1.5V).
MODULATORE DELL’ADC
E’ costituito da un sistema a singolo loop del secondo ordine.
Esso opera alla frequenza Fmod (derivata da Fclk); il rate di uscita dei dati è:
dove
48
dove ACLK è un valore settato nel registro SFR F6h, mentre Decimation ratio viene
fissato nei registri ADCON2 e ADCON3, facenti sempre parte dell’SFR.
CALIBRAZIONE DELL’ADC
Gli errori di offset o di guadagno possono essere ridotti mediante calibrazione
dell’MSC1211 oppure dell’intero sistema.
Tale procedura è controllabile tramite il registro ADCON1 dell’SFR. La calibrazione
completa richiede 14*t_data periodi.
Come si vede dalla seguente tabella, esistono vari metodi di calibrazione: 4 tipi di
auto-calibrazione e 2 tipi di calibrazione dell’intero sistema.
Tabella 2.2: tipi di calibrazione
Per calibrazioni dell’intero sistema, è richiesto un segnale in ingresso: di valore nullo
per offset calibration, in base al quale l’MSC1211 provvederà a trovare l’offset di
correzione; positivo e pari al valore di fondo-scala per gain calibration.
Naturalmente valori di offset del DAC influiranno sulla calibrazione.
La calibrazione è eseguita sull’ingresso selezionato in quel momento nel convertitore
e i risultati di tale operazione sono salvati nei due registri di offset e guadagno
presenti nel convertitore.
FILTRO DIGITALE DELL’ADC
In questo caso esiste la possibilità di impostare un filtro a scelta tra fast, sinc2 e sin3.
Il seguente grafico illustra le risposte in frequenza dei vari filtri.
49
Grafico 2.2: risposta in frequenza dei filtri sinc2, sinc3 e fast
Oltre alla scelta di uno tra questi tre filtri, esiste la possibilità di utilizzare la modalità
di funzionamento Auto-mode, che provvede a delle acquisizioni successive con vari
tipi di filtro (immagine successiva), in modo da migliorare le prestazioni del
dispositivo: mentre col filtro fast si ottiene una risposta rapida, col sinc3 si ottiene
una risposta caratterizzata da una buona attenuazione del rumore; l’unione di queste
acquisizioni migliora le prestazioni.
Figura 2.7: tipi di filtri digitali
50
TENSIONE DI RIFERIMENTO
Può venire utilizzato sia un riferimento di tensione interno che esterno; la scelta si
effettua settando opportunamente i bit del registro ADCON0 dell’SFR.
Il riferimento interno prevede a sua volta la possibilità di utilizzare due valori di
VREF (1.25V oppure 2.5V, la configurazione predefinita è di 2.5V per riferimento
interno (default)). La tensione analogica AVdd deve essere compresa nel range 2.7V5.5V. In questa configurazione AGND e REFIN- devono essere connessi assieme ed
è consigliato l’inserimento di un condensatore di 0.1 F tra il piedino
REFOUT/REFIN+ e quello di AGND.
In caso di riferimento esterno, è importante osservare che l’assorbimento di corrente
aumenta con elevati valori di PGA e frequenza di modulazione.
DAC
Esiste la possibilità di utilizzare anche un DAC a 16 bit, in cui la tensione in uscita è
pari a:
E’ costituito essenzialmente da una stringa di resistenze di valore R che determinano
la tensione di uscita in base al codice binario di ingresso.
RILEVATORE DI ABBASSAMENTO DI TENSIONE
L’MSC1211 contiene un rilevatore di abbassamento della tensione di alimentazione
che genera un interrupt ogni qual volta si ha una diminuzione di tensione di
alimentazione della sezione analogica o digitale. La soglia al di sotto della quale
viene scatenato l’interrupt, varia a seconda del valore impostato nel registro
AVDCON dello SFR
RESET
Il dispositivo può essere resettato dalle seguenti sorgenti:
51
Il reset esterno avviene tenendo per due periodi di orologio il pin RST a livello alto,
seguito da due periodi di mantenimento a livello basso.
Il reset di tipo software avviene settando in modo opportuno i bit del registro SRTST
dello SFR.
Il watchdog timer reset avviene attraverso il settaggio dei bit dei registri HCR0 e
WDTCON, sempre facenti parte dello SFR.
Il brownout reset è abilitato attraverso il settaggio di HCR1.
I primi tre tipi di resettaggio richiedono 2^17 cicli di clock per essere completati;
l’ultimo solo 2^15.
POWER ON RESET
Il circuito di power on reset (POR) presente sul chip rilascia il dispositivo dalla
condizione di reset quando DVdd=2V.
L’esecuzione del POR avviene quando l’alimentazione scende sotto il valore di 1V
per almeno 200msec. Se l’alimentazione scende sotto il volt per un tempo inferiore ai
200msec possono verificarsi delle operazioni inattese.
Se il brownout reset è on allora il POR non ha effetto.
IDLE MODE E STOP MODE
La modalità idle (ottenuta dall’opportuno settaggio dei bit del PCON), provvede
all’arresto di CPU, timer0, timer1 e USART (porta) ma tutte le altre periferiche e i
vari pin rimangono attivi.
Il dispositivo può essere riportato al funzionamento normale con un interrup interno
o esterno.
Questa modalità di funzionamento viene spesso attivata tra un campionamento
dell’ADC e il successivo per ridurre il consumo di potenza.
La modalità stop (ottenuta sempre dall’opportuno settaggio dei bit del PCON), una
volta attivata blocca tutti i clock interni. In questa configurazione si ha il minimo
consumo di potenza e tutti i pin mantengono il loro valore.
CONSIDERAZIONI SUL RISPARMIO DEI CONSUMI
Per un consumo minore possibile si deve:
1) Usare la minima alimentazione e frequenza di clock consentite per
l’applicazione in esame.
52
2) Quando possibile usare le modalità di funzionamento IDLE.
3) Spegnere le periferiche quando non sono necessarie.
CIRCUITO GENERATORE DI TIMER E CLOCK
La seguente immagine riporta in modo dettagliato la modalità di generazione di tutti i
clock e i timer utilizzati dall’MSC1211, discussi nei precedenti paragrafi.
Figura 2.8: rete di generazione dei segnali di controllo della schedina
53
2.1.2 MICROCONTROLLORE 8051
MAPPATURA DELLA MEMORIA
L’MSC1211 contiene al suo interno i seguenti tipi di memoria:
1) Il registro SFR.
2) La memory flash.
3) La scratchpad SRAM memory.
4) La boot ROM.
5) La SRAM
Il registro SFR (special function register) è utilizzato per il controllo delle
applicazioni e delle periferiche gestite dal microcontrollore 8051.
La memoria flash è usata sia come memoria dati che memoria programmi.
L’utente ha la possibilità di partizionare la memoria in una zona dati e in una
programmi. Ciò viene fatto attraverso il settaggio hardware degli opportuni bit
La memoria è cancellabile e scrivibile in modalità UAM (user application mode).
Esiste poi una protezione, attivabile attraverso configurazione hardware, che assicura
l’impossibilità di cancellare e scrivere 4KB di memoria flash o l’intero spazio di
flash assegnata alla programmazione.
L’MSC1211 contiene anche 1KB di SRAM allocata all’inizio oppure a partire
dall’indirizzo 8400h.
Come si vede dalla seguente immagine, oltre alla memoria on chip, esiste anche una
memoria esterna, o meglio due memorie esterne: una per i dati e una per i
programmi.
Dall’immagine appare chiaro come on chip ci sia 1KB di SRAM per i dati e uno
spazio variabile per i programmi (da un minimo di 4KB per MSC1211Y2 a un
massimo di 32KB per MSC1211Y5, che è il caso in esame).
Esternamente sono disponibili invece altri 64KB di memoria per programmi
(flash/ROM) o 64KB di memoria per dati (flash/RAM). I segmenti di memoria
programmi e memoria dati possono sovrapporsi dato che hanno una diversa modalità
di indirizzamento.
Il fetch della memoria con programmi è eseguito automaticamente da parte del
microcontrollore. Per leggere esplicitamente la regione con programmi si usa
l’istruzione MOVC (istruzione usata ad esempio nella lettura di lookup tables).
L’accesso alla memoria dati avviene invece attraverso l’istruzione MOVX;
l’indirizzo può essere specificato in diversi modi.
La gamma di indirizzi e di dati relativi alla regione on chip si sovrappone ai 64KB
della memoria esterna. Questo si risolve col fatto che quando la memoria on chip è
abilitata, il dispositivo accede alla memoria interna.
L’accesso alla memoria oltre la gamma degli indirizzi interni (cioè all’esterna)
avviene attraverso le porte 0 e 2.
54
Figura 2.9: architettura della memoria
Il partizionamento della memoria e la sua configurazione in generale, avviene
attraverso il settaggio dei bit di due registri: HCR0 E HCR1; essi sono
programmabili solo durante il flash memory programming mode.
La seguente tabella illustra come può essere partizionata la memoria per i vari tipi di
MSC (normalmente è tutta usata per il salvataggio dei programmi).
Tabella 2.3: partizione della memoria flash
55
E’ importante notare come la memoria flash, sia quella dati che quella programmi,
sia leggibile e scrivibile dall’utente attraverso l’istruzione MOVX.
Questa possibilità porta a una grande flessibilità: impostando tutta la memoria in
modalità memoria dati, essa può essere usata tutta come memoria dati. Tuttavia un
utilizzo di questo tipo non è consigliato in quanto potrebbe portare a dei
comportamenti errati da parte del PC.
A questo proposito la possibilità di lettura e scrittura della memoria possono anche
essere eliminati disabilitando gli opportuni bit di HCR0.
MEMORIA DATI
Oltre ai 64KB di memoria dati esterna, l’MSC rende disponibili altri 256 bytes di
memoria Scratchpad on-chip. L’istruzione MOVX è usata per accedere alla memoria
SRAM on-chip formata da ulteriori 1024 bytes.
I valori del bus dati non compaiono sulla porta 0 durante l’accesso alla memoria
interna.
Per scrivere sulla memoria flash viene usata l’istruzione MOVX; per essere scritta la
flash deve prima essere cancellata.
CONFIGURATION MEMORY
L’MSC configuration memory è una parte di memoria molto importante, contenente
anche i registri HCR0 eHCR1, fatta da 128 bytes, come illustrato nella seguente
immagine.
In modalità UAM tutta la configurazione di memoria è leggibile usando la
faddr_data_read Boot ROM routine, CADDR e CDATA; non esiste la possibilità
di scrittura.
In qualsiasi modalità di programmazione (FPM seriale o parallela), tutta la memoria
di configurazione è leggibile e gran parte è anche scrivibile.
Da notare poi come per l’indirizzamento della memoria di configurazione siano
necessari 16 bit in caso di FPM e solo 8 in caso di UAM.
Figura 2.10: configuration memory
56
REGISTER MAP
E’ una zona di memoria completamente separata dalla memoria dati o programmi.
Ci sono 256 potenziali locazioni per registri, accessibili con opportune istruzioni.
In pratica l’MSC ha 256 bytes di scratchpad RAM di cui i primi 128 bytes sono
accessibili in modo diretto (allocando delle variabili) e gli altri 128 bytes sono
accessibili in modo indiretto (usando il nome di uno dei registri) e costituiscono lo
SFR.
Figura 2.11: register map
La scratchpad RAM è disponibile per il salvataggio generico di dati. E’ spesso usata
in sostituzione alla RAM esterna quando i dati sono di dimensioni ridotte.
Accesso ai bit
In aggiunta alla modalità di funzionamento con accesso ai vari registri esiste la
possibilità di accesso ai singoli bit per le locazioni di memoria comprese tra 20h e
2Fh. La modalità di accesso a registro e quella di acceso ai singoli bit si diversificano
attraverso il tipo di istruzione utilizzata.
Registri di lavoro
La prima parte della RAM contiene 4 banchi di registri di lavoro. Essi sono delle
locazioni di memoria generiche indirizzabili in un modo particolare. Essi sono
numerati da R0 a R7.
L’accesso ai banchi avviene attraverso il registro PSW situato nello SFR.
I registi R0 e R1 permettono di utilizzare il loro contenuto per effettuare un
indirizzamento indiretto dei 128 bytes superiori della scratchpad.
57
Figura 2.12: scratchpad ram
STACK POINTER
La scratchpad può essere utilizzata anche per eseguire una programmazione dello
Stack Pointer. L’area riservata a tale programmazione è accessibile a partire dal
registro SP allocato nello SFR. All’arrivo di un interrup o di una call, l’indirizzo di
ritorno viene salvato nello stack. Dopo un reset lo stack assume il valore 7Fh;
l’utente è poi libero di cambiare tale valore.
58
MEMORIA PROGRAMMI
Dopo un reset, la CPU inizia la lettura della memoria a partire dall’indirizzo 0000h.
Tale lettura sarà relativa alla memoria interna se il valore di EA è alto ( EA =DVdd);
altrimenti la lettura sarà relativa alla memoria esterna ( EA =DGND).
ACCESSO ALLA MEMORIA ESTERNA
Usando la memoria esterna le porte 0 e 2 devono essere configurate come linee dati e
indirizzi. In caso contrario le porte 0 e 2 possono essere configurate come linee di
I/O generiche attraverso HCR0 e HCR1.
Volendo impostare le porte 0 e 2 come linee dati e indirizzi si devono porre i due bit
meno significativi di HCR1 a 0. Fatto ciò, l’accesso alla memoria esterna o interna
sarà visibile attraverso le suddette porte. Durante lo scambio dati, la porta 0 sarà
mantenuta a livello basso per questioni di sicurezza (sono necessari 16 bit di
indirizzo e solo 8 di dati).
L’accesso alla memoria esterna può essere di tipo dati oppure di tipo programmi.
L’acceso alla memoria programmi avviene usando il segnale PSEN , quello alla
memoria dati utilizzando i segnali RD o WR .
Esiste anche la possibilità di combinare l’utilizzo della memoria esterna dati o
programmi.
In genere esistono due casi per un accesso alla memoria programmi esterna:
1) EA =DGND.
2) Il contenuto del PC è maggiore allo spazio di indirizzamento della memoria
interna.
Selezionando porta 0 e porta 2 per memoria esterna, ne consegue che tutti i bit di
queste due porte non possono più essere utilizzate per funzioni generiche di I/O.
POROGRAMMAZIONE DELLA MEMORIA FLASH
Esistono quattro sezioni della memoria flash da programmare.
59
BOOT ROM
Esistono 2KB di boot ROM per il controllo delle operazioni durante la
programmazione in seriale o in parallelo.
Previa opportuna abilitazione, l’accesso alle routines del boot ROM è permesso
durante l’user mode.
Le routines sono allocate tra F800h e FFFFh nell’user mode; nei primi 2KB di
memoria di programma nel program mode.
PROGRAMMAZIONE DELLA FLASH
Come già citato in precedenza, esistono due metodi di programmazione: parallelo e
seriale. La distinzione tra queste due modalità dipende dal valore dei pin PSEN e
ALE.
Importante sottolineare che la modalità usata prevalentemente utilizzata nel caso di
schedine fornite di circuiti integrati e collegate al PC è quella seriale. La modalità
parallela è più frequente nei casi di prima programmazione di circuiti integrati che
saranno in seguito montati su schedina.
La modalità seriale è attivata con ALE=1 e PSEN =0.
La modalità parallelo è attivata con ALE=0 e PSEN =1.
Se entrambi i piedini sono alti il dispositivo lavora in modalità UAM.
Se entrambi i piedini sono bassi la modalità di funzionamento è indefinita.
La modalità programmazione è terminata con un reset e la modalità normale
selezionata.
La seguente immagine illustra le modalità di programmazione seriale e parallela. La
programmazione seriale avviene attraverso la porta USART0.
Figura 2.13: programmazione parallela
60
Figura 2.14: programmazione seriale
INTERRUPTS
L’MSC ha tre sistemi di priorità di interrupt. Come illustrato nella seguente tabella
ogni sorgente di interrupt ha una priorità indipendente, bit e flag. Tutti gli interrupts
possono essere abilitati o disabilitati.
La struttura è compatibile con la famiglia 8051.
61
Tabella 2.4: elenco degli interrupts
62
A questo punto, vengono riportati in modo dettagliato i registri HCR0 e HCR1,
frequentemente citati in precedenza e fondamentali nella configurazione hardware
della memoria, delle porte di comunicazione, delle alimentazioni e dei vari tipi di
resettaggio. Si ricorda che tali registri costituiscono la parte più importante dei 128
bytes della configuration memory.
63
I 128 registri dello SFR e le funzioni dettagliate dei relativi bit sono riportati nei data
sheet e non di seguito per motivi di spazio.
In ultimo viene riportato uno schema circuitale di tutta la schedina MSC1211, che
illustra in dettaglio i collegamenti tra i vari blocchi precedentemente citati e le porte
di comunicazione con il mondo esterno.
64
Figura 2.15: circuito dell’intera schedina msc1211y5
65
2.2 SCHEDINA CDB5534
La schedina in esame contiene al suo interno un convertitore sigma-delta a 24 bit e
un microcontrollore 8051. Questi due componenti sono separati, non integrati su un
unico chip come nel caso precedente.
Avendo già discusso in precedenza il funzionamento del microcontrollore, si
presenta in questo capitolo solo il convertitore.
L’immagine successiva è una rappresentazione mediante schema a blocchi del
convertitore usato: il CS5534.
Figura 2.16: architettura del convertitore CDB5534
Si nota subito la struttura generale di un convertitore sigma delta. L’ingresso,
composto da 4 canali differenziali è multiplexato (i canali sono indicati sia in lettere
che in numeri: canale 1 o D, canale 2 o C, canale 3 o B, canale 4 o A). All’uscita del
multiplexer il segnale passa attraverso un PGIA (programmable gain instrumentation
amplifier) e quindi nel modulatore. In seguito i dati vengono filtrati e possono essere
trasmessi mediante interfaccia seriale.
Sono presenti anche un blocco per la generazione dei clock, un latch e un blocco per
il controllo e la calibrazione.
L’ADC è realizzato per la misura di piccoli valori di tensione, sia unipolari che
bipolari. Il PGIA ha un guadagno selezionabile (1, 2, 4, 8, 16, 32, 64) ed è realizzato
in modo da ridurre al minimo l’amplificazione del rumore.
Il modulatore è molto efficiente, essendo del quarto ordine.
L’uscita del filtro digitale fornisce 20 possibili data rate (da 6.5 sample per second a
3840 sample per second).
La seguente immagine illustra invece in modo dettagliato la piedinatura del
convertitore in esame.
66
Figura 2.17: piedinatura del convertitore msc1211y5
INGRESSO ANALOGICO
La seguente immagine è una rappresentazione più dettagliata di alcuni dei blocchi
precedentemente citati.
L’ingresso multiplexato, passa ad un buffer di ingresso nel caso di guadagno
unitario; passa attraverso un amplificatore da strumentazione quando il guadagno
impostato è maggiore all’unità.
Figura 2.18: schema a blocchi del convertitore msc1211y5
Per effettuare una misura rail to rail signal (misure comprese cioè tra un valore
minimo e uno massimo), attivando il buffer per guadagno unitario, la corrente di
ingresso (dovuta al campionamento) è dell’ordine dei 50nA; usando l’amplificatore
da strumentazione, tale corrente è di circa 1.2nA (per temperature di impiego
comprese tra -40°C e +85°C).
La seguente immagine rappresenta dei modelli relativi al buffer di ingresso e
all’amplificatore da strumentazione di ingresso per il calcolo della corrente dinamica
di ingresso.
67
MCLK=master clock frequency (compresa tra 1MHZ e 5MHz e tipicamente di
4.9152MHZ)
Figura 2.19: circuito di ingresso
Escursione del segnale di ingresso
Il massimo segnale che il convertitore può digitalizzare in ingresso è una funzione
del guadagno impostato e della tensione di riferimento scelta.
Lo span in ingresso è dato dalla formula:
Dove G è il guadagno scelto e A è un valore pari a 1 o a 2, a seconda del valore
impostato in un certo registro di controllo, dipendente dal valore di VREF:
VRS=1
A=1
VRS=0 A=2
Il circuito RC posto dopo l’amplificatore di ingresso, costituisce un polo che può
degradare le prestazioni del convertitore.
Per questo motivo, è raccomandato l’inserimento di un condensatore da 22nF
all’ingresso.
Offset DAC
A differenza del convertitore MSC, in questo caso non è prevista la possibilità di
inserire un offset. Tuttavia attraverso la manipolazione del valore dell’offset register
si può ottenere un effetto comparabile con quello che si otterrebbe con la presenza di
un offset DAC.
68
STRUTTURA DEI REGISTRI E MODALITA’ OPERATIVE DELL’ADC
Questo ADC, come già citato è provvisto di un controllore on chip che comprende un
certo numero di registri direttamente accessibili.
Come illustrato nella seguente immagine, i registri sono utilizzati per settare l’offset,
il guadagno e le modalità operative in genere.
Esistono, per ognuno dei 4 canali in ingresso, un registro per l’offset e uno per il
guadagno. Tali registri sono formati da 32 bit ciascuno; possono essere tutti letti e
modificati dall’utente.
Il registro channel setup, composto sempre da 32 bit è invece unico. Attraverso tale
registro, vengono definite delle impostazioni generali, quali il resettaggio, il valore
della VREF, l’utilizzo del latch ecc.
Ogni canale è poi provvisto di un channel setup register (sempre di 32 bit).
Attraverso questi registri, si possono definire diverse modalità di acquisizione:
definire un canale, scegliere la velocità di acquisizione, il valore del guadagno ecc.
Esiste anche la possibilità di funzionamento nella modalità continuos convertion
mode, in cui l’ADC converte continuamente i dati e li salva all’interno di uno Shift
register.
Figura 2.20: registri del convertitore CDB5534
69
Inizializzazione del sistema
Questo ADC non è provvisto di un resettaggio automatico all’accensione.
L’utente deve eseguire un resettaggio software utilizzando la porta seriale.
Trasmettendo la sequenza 0xFF e 0xFE esadecimale, si provvede al resettaggio della
porta seriale.
Per il resettaggio del sistema si deve poi eseguire una procedura che consiste nel
settaggio di alcuni bit del configuration register.
Una volta ultimato il resettaggio, il controllore rimane in attesa dei comandi per
iniziare una conversione.
Le comunicazioni arrivano sottoforma di bytes che entrano nel command register. Di
seguito vengono riportate le pagine più importanti dei data sheet relative alla
decodifica dei bit presenti nel command register.
70
Porta seriale del convertitore
Essa consiste in una linea di trasmissione formata da 4 cavi:
CS è un segnale attivo basso, utilizzato per l’accesso alla porta seriale.
SDI è il conduttore utilizzato per il trasferimento dati al convertitore.
SDO è il conduttore utilizzato per il trasferimento dati dal convertitore.
SCLK costituisce il cavo del segnale di clock.
Lettura e scrittura dei registri
Ogni volta che si desidera scrivere in un particolare registro, si deve prima inviare
una sequenza di bit di comando e in seguito il dato vero e proprio.
Similmente, per la lettura di un dato, si deve prima inviare un comando e quindi
acquisire i bit costituenti il dato.
Oltre all’accesso a un registro per volta, esiste la possibilità di accesso a vettori di
registri. Ciò è possibile per i registri di offset, di gain e di setup.
Ad esempio, per scrivere un valore nei quattro registri di gain, è sufficiente mandare
il bit di comando e poi spedire per 4 volte il dato.
REGISTRO
REGISTER)
DI
CONFIGURAZIONE
(CHANNEL
CONFIGURATION
Questo registro è composto da 32 bit; tuttavia solamente 11 di tali bit possono essere
utilizzati.
Consumo di potenza
Questo ADC supporta tre modalità di funzionamento: normale, standby e sleep.
La modalità di funzionamento tipica, che viene applicata all’accensione è quella
normale; il consumo in questo caso è di 35-70mW.
Le altre due modalità di funzionamento sono finalizzate al risparmio di potenza.
Tali modalità sono attivate se il bit PDW è posto a 1.
Se oltre a imporre tale valore si pone PSS a 0, si ha la modalità di funzionamento
standby in cui il consumo cala a 4mW. In questa modalità l’oscillatore e parte della
zona analogica rimangono attive, in modo da ottenere un rapido ritorno alla modalità
normale una volta che PWD viene riportato a 0.
Ponendo a 1 sia PWD che PWS, si ha il funzionamento sleep in cui il consumo è di
soli 500 W. In questa modalità anche l’oscillatore è disabilitato e il ritorno alla
modalità normal richiede 20mse (a meno che non si usi un oscillatore esterno).
Importante aggiungere poi che durante la modalità normal il consumo di potenza con
guadagno unitario è la metà di quello con guadagno maggiore a uno.
71
Sequenza di reset
Il resettaggio del sistema può essere effettuato in qualunque istante, ponendo a 1 il
bit RS. A questo punto, la logica interna sarà inizializzata ad uno stato di reset.
Quando ciò accade, il bit RV (che è solo leggibile) viene posto a 1. Una volta che RV
è stato letto, viene automaticamente riposto a 0.
A questo punto l’ADC ritorna in attesa di un comando e i registri sono inizializzati
coi seguenti valori.
Short input
Questa modalità aiuta l’utente ad eseguire internamente un collegamento a massa per
tutti i canali. E’ molto utile per capire le prestazioni di collegamento a massa
dell’ADC e per eliminare eventuali rumori dovuti a componenti esterni.
Guard signal
E’ un bit che modifica il tipico funzionamento di A0, che diventa un pin di guardia
con tensione pari alla tensione di modo comune dell’amplificatore da
strumentazione. Tale funzionamento è utile nel caso in cui l’utente voglia collegare
ad una protezione esterna contro i leakage la tensione di modo comune.
Selettore di tensione di riferimento (voltage reference select)
Il bit VRS seleziona la dimensione del condensatore utilizzato per campionare la
tensione di riferimento.
Il valore del bit deve essere scelto anche in base al valore della VREF.
La seguente immagine illustra come i modelli per impedenze e correnti di ingresso
varino a seconda del valore di VRS.
72
Figura 2.21: tensione di riferimento del convertitore CDB5534
La tensione tra VREF+ e VREF- può essere un qualsiasi valore compreso tra 1V e la
alimentazione analogica; comunque non è possibile che VREF+ superi Va+ e VREFscenda sotto Va-.
Piedini in uscita dal latch (output latch pins)
I piedini A1-A0 equivalgono come valore ai bit D21-D20 (equivalenti ai D5-D4) del
channel setup register se il bit OLS (output latch select) è posto a 0.
Se OLS è posto a 1 A1 e A0 equivalgono all’output latch bit impostato nel
configuration register.
In questo modo l’uscita del latch può variare ad ogni acquisizione di un diverso
canale (concordemente col relativo channel setup register) oppure rimanere fisso ad
ogni acquisizione, secondo quanto stabilito nel configuration register.
In entrambi i casi A1 e A0 possono essere utilizzati come bit di controllo per
multiplexer o altri componenti logici esterni al convertitore.
Selezione di offset e guadagno
Il bit OSG è utilizzato per scegliere la fonte di calibrazione da utilizzare per un
determinato canale (esistono 4 canali che possono o meno essere associati a quattro
registri di calibrazione). Ponendo OGS a 0 si ha che il guadagno e l’offset da
considerare saranno quelli relativi al canale fisico in questione (determinato da CS0CS1 del channel setup register); con OSG pari a 1, saranno presi in considerazione
offset e guadagno del canale individuato dai bit OG0-OG1 del channel setup register.
Selezione del rate in uscita dal filtro
Il bit FSR permette, a seconda del suo valore di ottenere diversi valori di data rate in
uscita, lavorando con un cristallo oscillante a 4,9152MHz. Se FSR=0, si hanno i
seguenti possibili valori di data rate. 7.5, 15, 30, 60, 120, 240, 480, 960, 1920, o
3840 Sps e una reiezione a 60Hz (per la tensione di rete americana). Con FRS=1 tutti
i precedenti valori vengono moltiplicati per 5/6, dando i seguenti data rate: 6.25,
73
12.5, 25, 50, 100, 200, 400, 800, 1600, o 3200 Sps e una reiezione a 50Hz (per la
tensione di rete europea).
Di seguito viene riportata la struttura del configuration register e la descrizione
dettagliata del settaggio dei singoli bit.
74
CHANNEL SETUP REGISTER
Il CS5534 ha a disposizione 4 possibili registri di setup (CSR). A sua volta, ogni
CSR contiene al suo interno 2 distinti registri di 16 bit; in totale si possono avere
quindi 8 setup da utilizzare per varie acquisizioni con vari canali.
Ogni setup permette di definire i seguenti parametri:
1) Il canale su cui effettuare la conversione.
2) Il guadagno PGIA voluto.
3) Il word rate scelto per la conversione.
4) La modalità bipolare o unipolare.
5) Lo stato del latch di uscita.
6) Il tempo di ritardo per l’inizio della conversione tale da garantire
l’assestamento del latch.
7) L’attivazione o meno della modalità open circuit detect. Applicando tale
modalità si immette nel canale positivo una corrente costante di circa 300nA.
Tale applicazione è particolarmente usata nelle termocoppie per misure vicine
alla condizione di circuito aperto (forzando una corrente nella termocoppia, si
è in grado di capire se essa è rotta o meno. Se è rotta e quindi interrotta, la
corrente imposta non può circolare e il convertitore può andare incontro a una
saturazione; in caso contrario si ha una lettura corretta, compresa nel range di
lavoro del convertitore).
Anche in questo caso viene riportato in dettaglio il CSR e la descrizione dei vari bit.
75
76
CALIBRAZIONE
La calibrazione serve ad eliminare eventuali offset e a correggere la pendenza della
retta rappresentante il guadagno dell’ADC.
Esiste la possibilità di eseguire sia delle calibrazioni self che system.
E’ importante aggiungere che dopo il resetaggio, il dispositivo può anche non venir
calibrato, nel qual caso le misure vengono eseguite considerando una correzione di
offset nulla e una pendenza della retta del guadagno unitaria.
Registri di calibrazione
Il convertitore CS5534, ha al suo interno un registro per calibrazione di offset e uno
per calibrazione di guadagno per ogni canale di ingresso.
Tali registri, vengono utilizzati sia per le calibrazioni di tipo self che per quelle di
tipo system.
77
Di seguito vengono riportati un registro di calibrazione per l’offset e un registro di
calibrazione del guadagno.
Il registro di calibrazione del guadagno può essere impostato ad un qualsiasi valore
compreso tra 0 e 64-2^-24, rappresentante il coefficiente moltiplicativo di correzione
per la retta di guadagno dell’ADC. Di norma, dopo il resettaggio l’unico bit a 1 è il
D24, in modo da avere un fattore correttivo della pendenza della retta di guadagno
unitario.
Il registro di calibrazione dell’offset ha 23 possibili bit da settare, in modo da
impostare l’offset presente all’ingresso. Il convertitore sottrarrà quindi tale valore
all’ingresso, per avere offset nullo.
L’offset può essere sia positivo che negativo (la rappresentazione è in complemento
a due, col primo bit avente funzione di segno).
Il bit meno significativo rappresenta una porzione pari a 1.835008*2^-24 del segnale
di ingresso.
Come valore predefinito, dopo il resettaggio, tutti i bit del registro assumono valore
nullo in modo che venga considerato nullo l’offset sull’ingresso.
Esecuzione di calibrazioni
Per eseguire una calibrazione, l’utente deve spedire un command byte (attraverso il
command register) avente MSB=1, i bit CSRP2-CSRP0 con l’indirizzo del setup da
calibrare e i bit CC2-CC0 per la scelta del tipo di calibrazione da effettuare.
L’esecuzione della calibrazione attraverso l’invio di un byte di comando presuppone
che il CSR sia già stato inizializzato.
Il tempo necessario per l’esecuzione di una calibrazione è leggermente inferiore a
quello richiesto per una singola conversione e sono un po’ diversi anche a seconda
del valore del bit FSR del CSR; comunque l’ordine di tempo delle calibrazioni e
delle conversioni è di qualche decina di migliaio di cicli di clock.
78
Al completamento della conversione il pedino SDO (serial data output) va basso e il
risultato viene automaticamente memorizzato nei registri di calibrazione del canale
calibrato (se OGS=0 nel CSR). Con OGS=1 il risultato della calibrazione viene
salvato nei registri del canale specificato dai bit OG1-OG0 del CSR.
SDO rimane basso fino al prossimo comando. All’esecuzione di una ulteriore
eventuale calibrazione, il risultato della nuova calibrazione rimpiazza quello della
precedente.
Per la calibrazione contemporanea di tutti i canali, è necessario l’invio di ulteriori
byte di comando.
Self calibration
Questo tipo di calibrazione può essere eseguita sia per il guadagno che per l’offset.
Per quella relativa all’offset, il convertitore collega assieme i piedini
dell’amplificatore e li connette al pin AIN negativo (per una self calibration più
efficiente i piedini devono essere esattamente alla tensione di modo comune).
Questa calibrazione è relativa al solo caso di guadagno del PGIA unitario.
Una calibrazione self offset per i guadagni tra 2 e 64 può essere eseguita ponendo a 1
il bit IS del configuration register e eseguendo poi una system offset calibration; in
seguito IS va riportato basso.
Durante la self calibration gain si ha che i pin di ingresso positivo e negativo
vengono collegati rispettivamente a VREF+ e a VREF-. Questa calibrazione non è
più valida se (VREF+ - VREF-) > 2.5V.
In questa calibrazione l’esecuzione avviene senza considerare le impostazioni del
guadagno fatte nel setup register, considerando il guadagno del PGIA unitario.
Gli errori di guadagno nei casi di PGIA compreso tra 2 e 64 non sono corretti da
questo metodo. Per PGIA>2 e(VREF+ - VREF-) > 2.5V possono essere invece
eseguite delle calibrazioni di sistema.
Figura 2.22: stato dei piedini di ingresso durante la calibrazione self di CDB5534
System calibration
In questo caso l’utente deve fornire delle tensioni nulle e di fondo scala sui piedini di
ingresso. Per quanto riguarda l’offset la calibrazione richiede una tensione di
ingresso nulla; per il guadagno è richiesta una tensione in ingresso pari al valore di
fondo scala.
79
Figura 2.23: stato dei piedini di ingresso durante la calibrazione system di CDB5534
La calibrazione avviene ad una velocità pari a quella dell’output word rate (impostata
tramite i bit WR2WR0 del CSR). Per ottenere la massima precisione, la calibrazione
dovrebbe essere effettuata ad un word rate più basso possibile.
Considerando i word rate divisi in due categorie (alta per valori maggiori o uguali a
240Sps e bassa per valori minori o uguali a 120Sps) esiste infatti la possibilità di
eseguire la calibrazione per un certo word rate al word rate minimo presente nel
gruppo di appartenenza del word rate di uscita.
Per una precisione massima, l’utente dovrebbe aspettare il completamento di ogni
passo della calibrazione prima di scrivere o leggere dalla porta seriale.
Esiste anche la possibilità di salvare in memoria i risultati delle calibrazioni.
La precisione massima si ha effettuando sia la calibrazione dell’offset che del
guadagno.
CONVERSIONE DEI SEGNALI
Esistono due modalità di conversione dei segnali: single conversion mode e
continuos coversion mode.
Single conversion mode
Basandosi sulle informazioni fornite dal CSR, dopo che l’utente ha trasmesso
l’opportuno byte di comando, questa conversione ha luogo.
Il byte di comando include un puntatore all’indirizzo del setup register da usare
durante la conversione.
80
Trasmesso il comando, la porta seriale entra nella modalità data e vi rimane fino a
quando la conversione è ultimata. Al completamento della conversione, il segnale
SDO va basso e sono necessari 40 TSCLK per la lettura del dato. In questa modalità
l’utente è costretto a leggere il dato, visto che il segnale SDO rimane basso fino alla
fine dei 40 cicli di clock e alla fine della lettura la porta ritorna nella modalità
command mode. Il tempo necessario all’esecuzione della conversione è leggermente
superiore di quello relativo alla modalità continuos conversion mode e varia
leggermente anche a seconda del valore di FRS.
Continuos conversion mode
La modalità di inizializzazione per questo tipo di conversione è uguale alla
precedente (naturalmente è diverso il valore del byte di comando da assegnare).
Inviando il segnale 00h durante i primi 8 TSCLK necessari per la conversione si fa in
modo che il convertitore continui a convertire il canale selezionato, anziché eseguire
la lettura del dato nei successivi 32TSCLK.
Il valore convertito non deve quindi essere necessariamente letto ogni volta ma può
essere letto solo quando l’applicazione corrente lo richiede, SDO può trovarsi nello
stato alto oppure in quello basso per indicare la disponibilità o meno di un nuovo
dato.
L’uscita da questo stato richiede 32 cicli di SCLK e si ottiene inviando il comando
FFh entro i primi 8 cicli (dei 40 richiesti per una conversione) di SCLK.
Si aggiunge che esiste la possibilità di utilizzare più ADC insieme per le applicazioni
che richiedano la conversione sincrona di molti canali.
CODICE DEL DATO IN USCITA
La lettura di una conversione si esegue mediante la lettura del data register. Tale
registro ha una lunghezza di 32 bit e manda in uscita per primo il bit più
significativo. L’ultimo byte del registro contiene delle informazioni relative alle flag:
i bit CI1 e CI0 indicano il canale convertito, il bit OF determina se la conversione
corrente è valida o meno.
L’uscita ha una rappresentazione in complemento a 2 operando in modalità bipolare
e binaria pura operando in modalità unipolare.
VFS+ si riferisce al valore di fondo scala positivo e VFS- al valore di fondo scala
negativo.
81
Il range dell’ingresso differenziale è 0 +VFS per segnali unipolari e –VFS +VFS per
segnali bipolari.
La seguente tabella illustra i valori letti dal convertitore in esadecimale (sia nel caso
unipolare che bipolare) in funzione delle varie tensioni applicate in ingresso.
Tabella 2.5: uscita binaria in funzione della tensione di ingresso
Di seguito viene riportato in dettaglio il contenuto del conversion data register
FILTRO DIGITALE
Il CS5534 usa un filtro digitale programmabile per ottenere in uscita il desiderato
word rate (impostato nel CSR).
82
Il filtro utilizzato è un sinc5, come illustrato nella seguente immagine. Tale filtro
permette di ottenere dei word rate in uscita di 3200Sps o 3840Sps.
Grafico 2.3: risposta in frequenza del filtro sinc5
Altri 18 valori di word rate sono ottenibili usando in serie al filtro sinc5 un filtro
sinc3.
In realtà il numero dei word rate è doppio, in quanto esiste la possibilità di scalarli di
un fattore 1/6 settando opportunamente il bit FRS (per ottenere una reiezione a 50Hz
anziché a 60Hz).
GENERATORE DI CLOCK
Il CS5534 è fornito di un amplificatore invertente on chip da collegare ad un cristallo
esterno per la generazione del clock principale del convertitore, come di seguito
illustrato.
Figura 2.24: circuito generatore di clock del convertitore CDB5534
Il cristallo esterno va connesso ai terminali OSC1 e OSC2. Di norma si usa un
cristallo di 4.9152MHz ma sono permessi cristalli con valori compresi tra 1MHz e
5MHz.
83
ALIMENTAZIONI
Il CS5534 è progettato per funzionare con 1 o 2 alimentazioni analogiche e una
digitale. Sono possibili le seguenti connessioni.
I valori di Va+ e Va- devono essere mantenuti a questi valori con un massimo del
±5% di tolleranza; il range di VD+ può essere allargato a 2.7V 5.5V soddisfando la
restrizione [(VD+) - (VA-)< 7.5 V].
NOTE
Per il corretto funzionamento, dopo l’accensione è necessaria una attesa di 20msec
affinché il cristallo entri in funzione.
Non disponendo di un resettaggio automatico all’accensione l’ADC deve essere
opportunamente inizializzato dall’utente attraverso gli opportuni comandi. Prima di
tutto va inizializzata la porta seriale, in seguito va resettata la logica interna e quindi
scegliere la VREF attraverso il VRS bit del configuration register. In seguito vanno
impostati i vari setup register e offset register.
Per un funzionamento corretto il convertitore dovrebbe essere interamente
posizionato sopra un piano di massa comune
Di seguito vengono riportati due schematici, contenenti la parte digitale e quella
analogica della schedina CDB5534. La parte digitale contiene un microcontrollore
8051 un circuito di reset e varie interfacce. La parte analogica è costituita dal
convertitore, dai canali di ingresso e dalle alimentazioni.
84
Figura 2.25: circuito digitale della schedina CDB5534
Figura 2.26: circuito analogico della schedina CDB5534
85
2.3 CALIBRATORE
Il calibratore è uno strumento che è stato molto utilizzato durante lo svolgimento
della tesi.
Con tale strumento, si sono impostati i valori in ingresso al convertitore, in modo da
verificare che la lettura di quest’ultimo fosse corretta.
Come illustrato nella seguente immagine, esso consiste in un dispositivo in grado di
fornire delle uscite di tensione in volt oppure in millivolt (oltre ad altre grandezze
non utilizzate).
Le uscite in volt e millivolt hanno delle boccole distinte. Il valore desiderato viene
impostato agendo su due pulsanti che fanno aumentare o diminuire la tensione di una
unità per volta. La minima variazione imponibile per l’uscita in volt è di 10mV, per
quella in millivolt di 10 V.
Figura 2.27: calibratore digitek
Lo strumento funziona tramite batterie ricaricabili. In questo modo, durante il suo
funzionamento non è soggetto a eventuali disturbi provenienti dalla tensione di rete.
Importante aggiungere infine che la tensione fornita sulle uscite è caratterizzata da un
certo ripple, varie volte misurato e variabile a seconda della uscita utilizzata.
Essendo questo strumento un dispositivo non commerciale, non sono disponibili
molti dati tecnici su di esso. In base alle misure effettuate, si può comunque
affermare che l’incertezza dello strumento è dell’ordine della decina di millivolt per
l’uscita in volt e dell’ordine della decina di microvolt per l’uscita in millivolt.
Il tempo di riscaldamento dello strumento è di circa 15 minuti.
Lo strumento, al momento dello spegnimento memorizza l’ultimo valore impostato
sul display e lo ripropone alla nuova accensione.
Variando la tensione impostata in uscita, sono necessari circa 3 secondi affinché lo
strumento vada a regime.
Da aggiungere poi che il calibratore può essere utilizzato anche per la misura di
tensioni, di correnti e di termocoppie.
Non essendo nota l’impedenza di uscita del dispositivo, è stata effettuata una stima di
tale parametro, utilizzando un semplice circuito, di seguito riportato:
86
Figura 2.28: circuito per la stima della resistenza di uscita del calibratore
E’ immediato dimostrare che valgono le seguenti relazioni.
A vuoto
V=E (V=V1)
A carico
V=E*Rl/(Rin+Rl)
Effettuando una prima misura di V a vuoto (in cui si pensa l’impedenza di ingresso
del convertitore infinita. Ipotesi valida essendo tale impedenza dell’ordine dei MΩ)
si calcola E.
In seguito si esegue la misura di V a carico. A questo punto la resistenza di uscita del
calibratore vale:
Rin=Rl*(E-V)/V
Stima di Rin usando l’uscita in volt:
Ponendo Rl=10Ω
E=100mV
Si è misurato V=E=100mV (a vuoto)
V=98mV (a carico)
Quindi Rin=10*(100m-98m)/98m=0.204Ω
Stima di Rin usando l’uscita in millivolt:
Ponendo Rl=40Ω
E=20 V
Si è misurato V=E=20.14 V (a vuoto)
V=20.11 V (a carico)
Quindi Rin=40*(20.14 -20.11 )/20.11 =0.059Ω
87
La scelta dei valori di Rl e di E derivano dalla necessità di non superare il limite
massimo di corrente erogabile dal convertitore, da quella di avere valori di resistenze
con un numero di ordini di grandezza di differenza minore possibile e da quella di
ottenere una lettura col convertitore con un numero massimo di cifre possibili.
Di seguito vengono riportate le tensioni in uscita dal calibratore, misurate col
convertitore CDB, impostando un data-rate di 12.5Hz, con una calibrazione di tipo
self (le rimanenti impostazioni iniziali del convertitore sono quelle predefinite).
Questa prima immagine si riferisce all’uscita in millivolt. Il valore impostato è di
1.00mV; si vede che l’uscita è centrata sul valore di 1.005mV con scostamento
massimo da tale valore di ±0.002mV. Le variazioni dal valore ideale hanno un
andamento a dente di sega (ripple).
Grafico 2.4: ripple del calibratore per l’uscita in millivolt
Questa seconda immagine si riferisce invece all’uscita in volt. Il valore impostato è
di 2.00V; si vede che l’uscita è centrata sul valore di 1.9993V con scostamento
massimo da tale valore di ±0.3mV. La tensione ha un andamento a dente di sega
(ripple).
Grafico 2.5: ripple del calibratore per l’uscita in volt
88
3. ANALISI DEI CONVERTITORI MEDIANTE SOFTWARE
DEMO
In questo capitolo verranno descritte le prime prove eseguite sulle due schedine
utilizzando i due software demo forniti dai costruttori.
3.1 ANALISI DELLA SCHEDINA MSC1211Y5
Per questa schedina il programma demo fornito è relativo all’MSC1210 che è
comunque per molte parti simile all’MSC1211Y5 (ad esclusione di alcuni particolari,
come le dimensioni della memoria interna del miocrocontrollore).
Dopo installato il demo, compare sul desktop la seguente icona:
Cliccando sopra tale icona, si apre una schermata come quella di seguito
rappresentata.
Figura 3.1: interfaccia grafica della schedina MSC1211Y5
89
Questa schermata consente di visualizzare i dati in uscita dal convertitore e
l’impostazione di varie modalità di conversione.
La comunicazione avviene mediante porta seriale, che va naturalmente collegata al
PC e alla schedina prima di lanciare la schermata sopra riportata. La schedina viene
alimentata utilizzando un opportuno alimentatore collegato al connettore di
alimentazione.
3.1.1 DESCRIZIONE DELLA SCHEDINA
Segue ora una breve descrizione di tutte le possibili impostazioni che possono essere
effettuate sulla schedina.
1) Clock frequency: deriva dalla frequenza di oscillazione del quarzo fosc (può
essere uguale ad essa oppure una sua frazione) e nel nostro caso è stata quasi
sempre lasciata al valore predefinito di 22MHz.
2) ACLK register: in base al valore impostato in questo registro, si determina la
frequenza del modulatore, come funzione di fclk e ACLK.
3) Decimation ratio: è il fattore di decimazione scelto per il filtro digitale posto
in serie al modulatore. In base ad esso e a fmod viene implicitamente stabilita
anche la frequenza di uscita dei dati dal convertitore.
4) PGA gain: è il guadagno dell’amplificatore di ingresso (variabile tra 1 e 128).
5) Buffer: è un amplificatore di guadagno unitario posto all’ingresso del
convertitore. Il suo inserimento è facoltativo e serve a disaccoppiare il
circuito a monte e a valle dell’ingresso del convertitore per garantire dei
valori adeguati di impedenza di ingresso del convertitore.
6) Burn out detect: come il buffer anche l’inserimento di questo dispositivo è
facoltativo. Il suo utilizzo è raccomandato nei casi di misure vicine alle
condizioni di corto circuito o di circuito aperto.
7) Offset dac: è il registro che permette di traslare la tensione in ingresso di un
certo valore positivo o negativo.
8) Reference: determina il valore di alimentazione (interna o esterna) dell’ADC.
9) Polarity: permette di acquisire segnali che saranno rappresentati in uscita
come valori positivi e negativi (in complemento a due), oppure
esclusivamente come positivi.
Tabella 3.1: rappresentazione binaria in uscita in funzione della tensione di
ingresso
10) Calibration: garantisce la possibilità di effettuare una tra le seguenti
calibrazioni per l’ADC.
90
11) Filter: determina il filtro digitale che sarà usato in uscita al modulatore.
12) Input channel: si deve scegliere tra l’acquisizione di una temperatura e quella
di una tensione analogica. Per l’acquisizione di una temperatura ingresso
positivo e negativo vanno tutti impostati nella configurazione diode. Per
l’acquisizione di tensioni, a seconda della modalità di ingresso (single-ended
o differenziale) si utilizzano gli otto canali da AIN0 a AIN7. In modalità
single-ended l’ingresso positivo è un qualsiasi canale tra AIN0 e AIN7;
quello negativo è fisso ad AINCOM. In modalità differenziale ingresso
positivo e negativo sono scelti tra i vari canali AIN0 e AIN7.
13) ADC data: esiste la possibilità di determinare anche la modalità di
visualizzazione dei dati in uscita. Si possono rappresentare le uscite in
decimale, esadecimale e in volt. Il campionamento può essere continuo, alla
frequenza impostata (continuos mode); avvenire per un solo dato (once
mode) oppure acquisendo una finestra di n campioni alla volta e
visualizzando per ogni finestra la sua media, che sarà quindi una media
scorrelata tra finestre successive (sample mode) . Oltre alla rappresentazione
in cifre il dato viene anche visualizzato su di una finestra contenente un
numero di campioni impostabile. Di tali campioni viene anche visualizzata la
deviazione standard (in termini di variazioni di count del LSB) e l’enob
(effective number of bit). I dati in uscita possono o meno essere ulteriormente
elaborati a seconda della modalità scelta tra none, averaging (media mobile) e
di filtering(implementa un filtro digitale passa-basso riportato in appendice
B). Infine un ultimo grafico rappresenta la distribuzione statistica del rumore.
Deviazione _ s tan dard =
( xi − x ) / n
i
Una volta definiti tutti i precedenti parametri (che sono stati spiegati nella parte di
presentazione teorica del convertitore), l’adc va avviato premendo il tasto RUN
ADC.
91
Il dispositivo può venire resettato premendo l’opportuno tasto. Una volta fatto ciò il
dispositivo assume come impostazioni per l’acquisizione dei segnali quelle
predefinite dal sistema quando esso viene acceso o resettato (ogni registro dello SFR
ha un suo valore di default).
3.1.2 MISURA SUI VARI CANALI DELL’ADC
La prima misura effettuata è stata l’acquisizione di un segnale di 2,00mV (fornito
attraverso il calibratore) in modalità single-ended di tutti gli 8 canali del convertitore,
per una analisi qualitativa della precisione del dispositivo.
L’uscita del calibratore è stata collegata ai vari ingressi dell’ADC attraverso due
cavetti da strumentazione banana-coccodrillo, paralleli e distanziati tra di loro di 1-2
cm.
Le impostazioni del convertitore non sono state variate rispetto a quelle contenute
nella precedente figura, ad esclusione della sezione adc-data in cui i campioni non
sono stati mediati ma rappresentati direttamente come campionati.
Si sono ottenuti i seguenti risultati.
AIN0-AINCOM
AIN1-AINCOM
AIN2-AINCOM
AIN3-AINCOM
AIN4-AINCOM
AIN5-AINCOM
AIN6-AINCOM
AIN7-AINCOM
2,02mV-2,04mV
2,04mV-2,07mV
2,07mV-2,09mV
2,03mV-2,05mV
2,04mV-2,07mV
2,04mV-2,06mV
1,94mV-1,96mV
1,95mV-1,97mV
Inoltre per i vari canali si sono trovati i seguenti risultati
ENOB 19-20
Deviazione standard
20-30
3.1.3 MISURE CON DIVERSI PGA E IMPOSTAZIONI DELL’ADC-DATA
In seguito, lavorando esclusivamente sul canale AIN0 (e AINCOM), si sono
effettuate delle misure utilizzando diversi valori di PGA e variando la modalità di
elaborazione dei dati nella sezione adc-data.
Tralasciando la misura impostata sul calibratore e i dati rilevati dall’ADC si sono
ottenuti i seguenti risultati.
PGA=1, adc data NONE
Deviazione standard=18, ENOB=20
92
PGA=16, adc data NONE
PGA=128, adc data NONE
Deviazione standard=60, ENOB=18
Deviazione standard=240, ENOB=16
PGA=1, adc data AVERAGING
Deviazione standard=4, ENOB=22
PGA=16, adc data AVERAGING
Deviazione standard=16, ENOB=20
PGA=128, adc data AVERAGING
Deviazione standard=140, ENOB=17
Da questi risultati si possono ricavare le seguenti informazioni:
1) L’esecuzione di un processo di media sui dati campionati porta a dei risultati
migliori di quelli ottenuti considerando i dati campionati e non ulteriormente
elaborati.
2) L’aumento del guadagno impostato per l’amplificatore in ingresso porta a dei
dati in uscita peggiori.
Il primo punto è spiegabile col fatto che una operazione di media riduce la presenza
del rumore; il secondo col fatto che aumentando il guadagno si ha una amplificazione
del segnale utile ma anche del rumore in ingresso all’ADC.
Risposta dei filtri
La seguente immagine riporta l’andamento della tensione misurata dal convertitore
con l’utilizzo di vari filtri digitali (filtro fast, caratterizzato dalla sua velocità e filtro
sinc3, caratterizzato dall’alta reiezione del rumore). Per valutare le loro risposte,
mediante un generatore di funzioni si è dato in ingresso un segnale ad onda quadra
bipolare, con periodo T=0.5sec, privo di offset e con ampiezza di 2.4V.
Supponendo trascurabile il tempo di transizione del segnale in ingresso, si nota come
le risposte siano diverse: mentre il filtro fast presenta un solo dato tra i due livelli del
segnale; il sinc3 ne ha 3. Osservando le immagini, può sembrare che sulle transizioni
manchino alcuni dei campioni appena descritti; ciò è dovuto al fatto che essi possono
essere situati immediatamente vicino al valore alto o basso del segnale e quindi non
risultare chiaramente visibili.
Quanto osservato, corrisponde con le specifiche del convertitore, in cui sia parlava di
un periodo di conversione per l’assestamento del filtro fast e di tre periodi di
conversione per l’assestamento del filtro sinc3.
Essendo i segnali esaminati tutti stazionari o lentamente variabili, si userà sempre il
filtro sinc3 per ottenere una buona reiezione del rumore.
93
Grafico 3.1: risposta del convertitore con filtri digitali diversi
3.1.4 STIMA DEL RUMORE
Le seguenti misure sono state eseguite con le stesse impostazioni presenti nella
immagine rappresentante l’interfaccia grafica dell’MSC1210 demo.
L’obiettivo era in questo caso una stima del rumore esterno.
Impostando col calibratore una tensione in uscita di 0,00mV si sono rilevati i
seguenti scostamenti per i valori in uscita (sempre sul canale AIN0).
PGA=1 25-30 V
PGA=128 5-15 V
La stessa misura è stata effettuata con i cavetti di collegamento tra calibratore e ADC
intrecciati anziché paralleli e si sono trovati i seguenti scostamenti.
PGA=1 5-15 V
PGA=128 0,5-5 V
Si nota come il segnale misurato si scosti maggiormente dal valore impostato per
valori di PGA bassi. Ciò è dovuto al fatto che per PGA=1 il convertitore ha una
94
risoluzione meno spinta rispetto al caso di PGA=128, cioè la lettura è più
“grossolana” (nonostante il calo dell’ENOB).
Con i cavi intrecciati la misura migliora in quanto l’area compresa tra i due cavetti di
collegamento, che nella misura con cavi paralleli era notevole, si riduce di molto e in
questo modo diminuisce la superficie che poteva dare luogo a degli accoppiamenti
dovuti a disturbi esterni.
In tutte le misure si nota la presenza di un certo offset e di un certo rumore. L’offset è
in questo caso sempre positivo ed è responsabile della traslazione verso valori
positivi dei valori misurati; il rumore è invece responsabile dell’oscillazione della
misura tra i due valori di volta in volta indicati.
Una riduzione dell’offset è possibile effettuando una misura differenziale anziché
single-ended e utilizzando altre modalità di taratura dell’offset.
Il rumore, prevalentemente termico (dedotto dall’andamento della distribuzione
statistica dei dati che è una gaussiana), è riducibile aumentando il numero di
campioni mediati.
Di seguito sono riportati i risultati di misure differenziali con calibration system
offset, imponendo 0,00mV e average 256. La misura sarebbe peggiore con self
calibration (darebbe risultati analoghi alla precedente).
PGA=1 2-4 V
PGA=128 0,2-2 V
Importante aggiungere che il valore impostato di 0,00mV viene fornito dal
calibratore con una incertezza di alcuni V e quindi non bisogna aspettarsi che la
misura del convertitore dia esattamente zero.
Analisi del rumore
Mediante il software demo fornito, è possibile ottenere anche l’istogramma delle
misure effettuate.
Per valutare il tipo di rumore, si è impostato un segnale in ingresso nullo, si è
calibrato il convertitore con la modalità system offset (essendo una misura prossima
allo zero) e si sono intrecciati i cavetti in ingresso al convertitore.
Impostando una finestra di osservazione molto ampia (512 campioni), si sono
ottenuti dei valori riportati nel seguente istogramma.
Si nota come la distribuzione sia approssimabile con una gaussiana e quindi il
rumore possa essere effettivamente considerato bianco.
L’andamento di tale funzione è il seguente:
1 x − xmed
f ( x) =
* exp− *
2
σ
σ * 2 *π
1
2
95
( x − xmed ) 2
N
σ=
xmed=media
=scarto quadratico medio o deviazione standard
^2=varianza
Nel caso in esame si è trovato:
xmed=0
=2.5
si considera media nulla
il 68% dei valori compreso tra ± ; il 99% tra ±3*
85
80
75
70
65
60
55
50
45
40
35
ColonnaE
30
25
20
15
10
5
0
-9 -8,1 -7,2 -6,3 -5,4 -4,5 -3,6 -2,7 -1,8 -0,9 0
0,9 1,8 2,7 3,6 4,5 5,4 6,3 7,2 8,1
9
Grafico 3.2: rumore nel convertitore msc1211y5 interfacciato al calibratore
Si nota come la maggior parte dei valori sia compresa tra ±5 V, come riportato
anche in precedenti misure.
96
3.1.5
CONSIDERAZIONI DULLA SCHEDINA MSC1211Y5
A seguito delle varie misure in precedenza effettuate si possono trarre diverse
conclusioni.
Volendo ottenere dei valori in uscita con la più piccola incertezza possibile, si deve
usare un PGA elevato; tuttavia si deve fare attenzione al fatto che l’ENOB cala al
crescere del PGA e quindi si deve sempre cercare un compromesso tra i due aspetti.
Volendo ottenere un risultato con incertezza più piccola possibile, il filtro da usare in
serie al modulatore è il sinc3. Tale filtro pur richiedendo un tempo di processamento
del segnale maggiore a tutti gli altri è quello che permette di ottenere una risoluzione
più spinta.
Per ottenere un ENOB più elevato, come si può osservare dai fogli tecnici, il valore
del decimation ratio deve essere più grande possibile. Ciò è anche intuitivo, in
quanto imporre un decimation ratio grande significa avere un data rate in uscita
basso (che è accettabile per segnali in ingresso lentamente variabili) e quindi lasciare
al convertitore un tempo di elaborazione più elevato, che lo porta a un risultato più
preciso.
Per la riduzione di offset e rumore si devono invece utilizzare opportune tecniche di
calibrazione dell’offset e delle operazioni di media sui dati campionati.
Un ulteriore motivo della variazione dell’uscita è da imputare anche al calibratore
che per come è realizzato presenta una uscita caratterizzata da un certo ripple, varie
volte misurato e in precedenza riportato.
Una riduzione dei disturbi provenienti dalla rete è possibile impostando il filtro
digitale in modo da avere la frequenza notch (posizionata alla stessa frequenza del
data-rate) a 50Hz o a una frequenza sottomultipla di essa. Tale operazione va
eseguita agendo opportunamente su ACLK e Decimation-ratio.
Ad esempio:
FClk=22M, ACLK=10,Decimation ratio=625 fdata=50Hz si elimina col notch la
frequenza di rete.
La risoluzione e l’intervallo di tensione misurabili dipendono dal fatto che il
convertitore sia in modalità unipolare o bipolare. (modulatore a singol-loop del
secondo ordine).
VREF=2.5
FSR=2.5-(-2.5)/(PGA) nel bipolare
FSR=2.5/(PGA) nell’unipolare
Esempio
PGA=1 FSR unipolare=2,5 FSR bipolare=±2.5=5
Risoluzione 5/2^24 bipolare 2.5/2^24 unipolare
97
3.2 ANALISI DELLA SCHEDINA CDB5534
Per questa schedina il programma demo fornito è l’Eval5531.
Dopo installato il demo, compare sul desktop la seguente icona:
Cliccando sopra tale icona, si apre una schermata come quella di seguito
rappresentata.
Figura 3.2: interfaccia grafica della schedina CDB5534(1)
3.2.1 DESCRIZIONE DELLA SCHEDINA
Questa finestra ha diversi menu a disposizione. Help e Quit servono rispettivamente
per avere delle informazioni sul demo e per terminarlo.
Dal menu Options si scelgono le porte di comunicazione tra PC e ADC (seriale) e il
convertitore da utilizzare (nel nostro caso il CS5534).Tale menu offre anche la
possibilità di eseguire un test per verificare il funzionamento del convertitore.
Dal menu Window si possono accedere a tre diverse schermate: quella descritta ora
(Start-Up), quella per impostare la modalità di acquisizione dei dati (Setup Window)
e quella per l’acquisizione e rappresentazione grafica dei campioni (Data Collection
Window). Tali Finestre sono rappresentate di seguito e come si può vedere ognuna di
esse è fornita di un menu che permette il passaggio da una alle altre due.
98
Figura 3.3: interfaccia grafica della schedina CDB5534(2)
Terminate le precedenti impostazioni, si passa all’inizializzazione dei registri del
convertitore per specificare le modalità di conversione attraverso la finestra Setup
Window.
I registri accessibili sono il Configuration Register, 4 Channel Setup Register, 4
Offset Register e 4 Gain Register. L’ordine con cui impostare i vari registri è lo
stesso di quello di elencazione precedente.
Tutti i registri sono direttamente accessibili bit per bit (in rappresentazione
esadecimale) ed inoltre per il Configuration Register e i 4 Channel Setup Register il
loro valore viene impostato automaticamente in seguito al settaggio delle voci
presenti nella loro stessa sottofinestra (ad esempio variando il valore di VREF Select
varierà di conseguenza anche il valore del Configuration Register).
In questo caso, il significato dei vari bit dei vari registri è già stato spiegato nella
parte di presentazione teorica della schedina.
La precedente finestra contiene poi altri pulsanti. Update register, se premuto, fa in
modo che i valori dei registri vengano aggiornati; Reset Serial Port e Reset Part
servono a resettare rispettivamente la porta seriale e il convertitore. Cliccando su
Read Data si da il via alla acquisizione e conversione di dati da parte dell’ADC. Tali
dati vengono rappresentati in forma esadecimale (Last Conversion). Vengono
rappresentati poi i valori massimo e minimo misurati, la deviazione standard, il
canale attualmente in uso e l’eventuale overflow dovuto al superamento del range di
ingresso da parte del segnale. Esiste poi la possibilità di mediare i dati campionati
99
(solo nell’analisi in frequenza) e scegliere 8 diversi Setup con varie modalità di
acquisizione.
E’ presente pure una forma di acquisizione dei dati grafica, utilizzabile selezionando
la schermata riportata nella seguente immagine. Qui i dati sono rappresentati in
formato decimale.
Figura 3.4: interfaccia grafica della schedina CDB5534(3)
Esiste la possibilità di analizzare i dati nel tempo, in frequenza oppure la loro
distribuzione statistica mediante un istogramma.
L’acquisizione inizia cliccando su Collect (naturalmente dopo aver scelto il Setup da
utilizzare nell’acquisizione). Inoltre le immagini possono essere ingrandite.
La rappresentazione nel dominio temporale permette di scegliere il numero di
campioni da analizzare, ne rappresenta il valore massimo e quello minimo.
La rappresentazione in frequenza è la FFT. Essa viene rappresentata nella finestra tra
f=0 e f=output_word_rate/2. Vengono poi fornite varie grandezze relative alla
finestra in esame.
SNR
signal to noise ratio
E’ il rapporto di potenza tra segnale e rumore
100
A causa dell’elevato dinamic range (rapporto tra segnale massimo e minimo) che
spesso interessa i segnali l’espressione è data in decibel.
S/D
Signal to distortion ratio
SINAD
Il SINAD è un parametro che deriva dal rapporto tra SNR e THD. La formula per il
calcolo è quella riportata sotto:
SINAD = -20*Log(sqrt(10-SNr/10 + 10THD/10))
THD
La distorsione armonica totale è intesa come il rapporto tra il valore
quadratico medio della somma delle prime componenti armoniche del segnale di
uscita e l’ampiezza del segnale ricostruito.
Il numero di armoniche prese in considerazione può variare da produttore a
produttore ma normalmente vengono considerate le prime sei armoniche.
Nel momento in cui si compara il THD tra più produttori di AD è fondamentale
verificare su quante armoniche è stato calcolato perché alcuni produttori usano
riferirlo alle sole prime tre armoniche riportando così dei valori di THD
artificiosamente molto piccoli.
S/PN
Peak signal to noise ratio
E’ il rapporto tra la potenza massima di un segnale e la potenza del rumore.
La rappresentazione ad istogramma contiene varie grandezze statistiche: la
deviazione standard, la varianza, il valore medio, quello massimo e quello minimo.
101
3.2.2 MISURE SULLA SCHEDINA
La prima misura effettuata, è stata anche per questo convertitore, l’acquisizione di un
segnale di 2,00mV (fornito attraverso il calibratore) in modalità differenziale di tutti i
4 canali del convertitore, per una analisi qualitativa della precisione del dispositivo.
L’uscita del calibratore è stata collegata ai vari ingressi dell’ADC attraverso due
cavetti da strumentazione banana-coccodrillo, paralleli e distanziati tra di loro di 1-2
cm.
Il convertitore è stato inizializzato in modalità bipolare, con un data-rate di 15Hz e
una calibrazione self (sia per offset che per guadagno). La definizione dei rimanenti
parametri è stata quella predefinita.
CANALE D (CANALE 1)
CANALE C (CANALE 2)
CANALE B (CANALE 3)
CANALE A (CANALE 4)
2,021mV-2,024mV
2,004mV-2,007mV
2,103mV-2,106mV
1,997mV-2,000mV
3.2.3 CALIBRAZIONE DEL CONVERTITORE
La calibrazione del convertitore, come illustrato nella parte teorica, può essere di vari
tipi (self o system) e avviene formalmente attraverso l’invio di vari comandi sul
command register.
Tuttavia, non essendo possibile agire su tale registro attraverso il demo, si è utilizzata
una calibrazione manuale.
Tale calibrazione, consiste in una stima prima dell’offset e poi del guadagno e in una
loro successiva compensazione.
Pensando alla transcaratteristica del convertitore come a una retta la cui pendenza
rappresenta il guadagno e l’ordinata in corrispondenza dell’ascissa nulla l’offset,
senza una taratura si ha una situazione del seguente tipo.
102
Grafico 3.3: calibrazione del convertitore CDB5534(1)
Senza calibrazioni, il registro del guadagno ha valore 1 e quello dell’offset ha valore
nullo (per ognuno dei 4 registri dai calibrazione presenti nel convertitore). Tuttavia, a
causa di disturbi esterni, si osserva una transcaratteristica del convertitore come
quella sopra illustrata, in cui offset e guadagni non sono quelli desiderati.
Tali scostamenti, sono variabili da canale a canale. Inoltre variano anche utilizzando
sempre un canale e variando le sue impostazioni (ad esempio il PGIA).
La calibrazione manuale consiste nella misura della tensione di uscita dando un
segnale di ingresso nullo. In questo modo viene calcolato l’offset e in seguito
corretto. Successivamente, si esegue una lettura sul fondo scala e si analizza lo
scostamento tra valore teorico e misurato. In base a tale scostamento si esegue il
calcolo per trovare il fattore di compensazione per il guadagno e si corregge anche
quest’ultimo.
In conclusione la transcaratteristica risulta così fatta.
103
Grafico 3.4: calibrazione del convertitore CDB5534(2)
Vengono riportati ora i calcoli eseguiti per la calibrazione del canale A del
dispositivo (canale 4).
PGIA=1
Misura per Vin=0 Vout = -1862 decimale
L’uscita in volt si ricava dalla proporzione:
-1862:8388608=x:2.5 x = -555 V
dove 8388608 è il valore decimale di fondo scala dell’ADC (7FFFFF in esadecimale)
e 2.5 è il valore in volt di fondo scala dell’ADC.
La presenza di un offset negativo viene risolta scrivendo tale valore nel registro di
calibrazione degli offset. L’ADC lo sottrarrà ad ogni nuova misura.
Il valore di offset da inserire nel registro di calibrazione va convertito nella
rappresentazione opportuna utilizzata da tale registro.
Come spiegato nella parte teorica tale rappresentazione è in complemento a due
(quindi il primo bit ha funzione di segno) e i bit successivi hanno un valore da 2^-1 a
2^-24.
Il valore -555 V va quindi inserito nel registro trovando in un primo tempo la
rappresentazione binaria del suo valore assoluto e in seguito convertendola nel
corrispondente valore negativo col complemento a due.
555
(-2^-14)*5*1.835
104
Il valore binario da inserire nel registro, corrispondente a 555 sarebbe quindi
00000000000000100000000000000000 che in esadecimale è 00040000
Come detto il valor da inserire è negativo e quindi deve essere calcolato il
complemento a due del precedente valore che è FFFBFFFF+1=FFFC0000
Inserendo tale valore nel registro, si ottiene che la transcaratteristica passa per
l’origine.
A questo punto rimane da correggere il guadagno. Tale correzione si effettua
eseguendo un confronto tra valore di tensione imposto e valore misurato dal
convertitore in prossimità del fondo scala. In realtà, essendo l’uscita del calibratore
impostata sui millivolt con valore massimo imponibile pari a 60.00mV e il fondo
scala pari a 2.5V, si è eseguita una misura ad un valore molto minore del fondo scala.
In realtà, si sarebbe anche potuto eseguire la lettura sul fondo scala, impostando
l’uscita del calibratore sui volt ma la misura sarebbe in questo caso meno precisa,
essendo l’incertezza dello strumento maggiore quando è selezionata l’uscita in volt
rispetto a quando è selezionata l’uscita in millivolt. In realtà la calibrazione del
guadagno è stata eseguita con entrambe le precedenti modalità e si è verificato che il
risultato è molto simile.
Misura per Vin=58.00mV
Vout =195858 decimale=58.37mV
Fattore correttivo del guadagno = 58/58.37=0.99366
0.99366 2^-1+2^-2+2^-3+2^-4+2^-5+2^-6+2^-7+2^-10+2^-11
Il
valore
da
inserire
nel
registro
del
guadagno
00000000111111100110000000000000=00FE3000 esadecimale.
è
quindi
A questo punto, si sono eseguite delle misure e si è verificato che lo scostamento tra
valore impostato sul calibratore e valore in uscita dall’ADC risulta molto minore
rispetto alle misure effettuate prima della calibrazione.
Usando l’uscita in millivolt del calibratore si sono eseguite le seguenti misure.
Imponendo 0.04mV si misura 0.0411mV
Imponendo 0.4mV si misura 0.404mV
Imponendo 4mV si misura 4.004mV
Imponendo 40mV si misura 39.992mV
Usando l’uscita in volt del calibratore (per verificare l’effetto della calibrazione
sull’intero intervallo misurabile) si sono eseguite le seguenti misure.
Imponendo 0.2V si misura 0.200297V
Imponendo 0.8V si misura 0.800146V
Imponendo 1.5V si misura 1.499647V
Imponendo 2.4V si misura 2.398999V
105
Tenendo in considerazione la risoluzione del convertitore (che è dell’ordine della
decina di microvolt per l’uscita in millivolt e dell’ordine della decina di millivolt per
l’uscita in volt), si può affermare che grazie alla calibrazione la tensione letta dal
convertitore coincide con la tensione in uscita dal calibratore.
3.2.4 STIMA DEL RUMORE
Anche in questo caso è stata eseguita la stima del rumore mediante software demo.
I risultati ottenuti sono riportati nell’istogramma successivo. Si può anche in questo
caso pensare il rumore come bianco.
Dai calcoli eseguiti si ha una media nulla (realmente di alcune decine di nanovolt) e
una deviazione standard di 0.893 V.
xmed=0
=0.893
si considera media nulla
il 68% dei valori compreso tra ± ; il 99% tra ±3*
Si nota come la maggior parte dei valori sia compresa tra ±1 V.
130
120
110
100
90
80
70
ColonnaC
60
50
40
30
20
10
0
-2,38 -2,09 -1,79 -1,49 -1,19 -8,94 -5,96 -2,98 0,00 2,98 5,96 8,94 1,19 1,49 1,79 2,09 2,38
EEEEEEE- EE+00 E- EEEEEEE006 006 006 006 006 007 007 007 0
007 007 007 006 006 006 006 006
Grafico 3.5: rumore nel convertitore CDB5534 interfacciato al calibratore
106
Gran parte di queste variazioni, come illustrato nella seguente immagine, sono in
realtà dovute al ripple del calibratore. Quindi la risoluzione del convertitore, risulta
ancora migliore di questa. (considerando una variazione massima reale di ±0.5 V
risulterebbe un ENOB di 23).
4
3,5
3
2,5
2
1,5
1
Colonna B
0,5
0
-0,5
-1
-1,5
-2
-2,5
-3
Grafico 3.6: ripple misurato dal convertitore CDB5534
3.2.5 MISURA DEI DISTURBI DI RETE
Impostando un word-rate che non sia un sottomultiplo della frequenza di rete, è
possibile vedere come nelle misure sia presente una riga spettrale a 50Hz e ai suoi
multipli.
La finestra successiva si riferisce al caso di un word-rate di 120Hz (con FFT visibile
quindi tra 0Hz e 60Hz). A 50Hz è presente una riga di ampiezza pari a circa –100dB
a cui corrisponde una sinusoide di disturbo con ampiezza di una decina di microvolt.
Con un word-rate sottomultiplo di 50Hz tale riga viene invece di molto attenuata.
Purtroppo, essendo il range di frequenza della FFT compreso tra 0 e 0.5*word-rate,
non è possibile osservare come si riduce la riga a 50Hz quando il word-rate è
inferiore alla frequenza di rete.
107
Figura 3.5: disturbi di rete
CONSIDERAZIONI DULLA SCHEDINA CDB5534
Le considerazioni fatte per il convertitore MSC, possono in linea di massima
considerarsi valide anche in questo caso, salvo alcune.
In questo caso, la possibilità di agire direttamente sui registri di calibrazione permette
di ottenere dei risultati migliori.
I disturbi di rete possono essere eliminati anche in questo caso centrando il filtro
notch alla frequenza di rete. Questa operazione risulta più semplice in quanto è
possibile scegliere direttamente il data-rate di uscita.
La risoluzione e l’intervallo di tensione misurabili dipendono dal fatto che il
convertitore sia in modalità unipolare o bipolare. (modulatore del quarto ordine).
VREF=2.5
Span=vref+-vref-/(PGIA*A) (A=2 essendo VREF<=2.5) nel bipolare
Span=vref/(PGIA*A) nell’unipolare
(A=2 essendo VREF<=2.5)
Esempio
PGA=1 FSR unipolare=2,5 FSR bipolare=±2.5=5
Risoluzione 5/2^24 bipolare 2.5/2^24 unipolare
108
4. PROGRAMMAZIONE LATO MICROCONTROLLORE E
LATO PC
Una volta analizzata la parte teorica dei convertitori ed ultimate le precedenti misure
si è passati alla programmazione del microcontrollore delle due schedine in modo da
poter utilizzare i convertitori per le applicazioni desiderate.
Il primo studio effettuato è stato quello di una misura a ponte di resistenze per testare
la sensibilità dei convertitori.
L’idea è quella di realizzare un ponte di Wheatstone, collegare la sua uscita al
convertitore e verificare che la variazione di resistenza di una delle quattro resistenze
del ponte si ripercuota in una corretta variazione della tensione misurata dal
convertitore.
Nella pratica, molto spesso i convertitori vengono usati per eseguire delle misure sui
ponti. In questo caso si vuole fare il contrario, testare l’ADC mediante variazioni di
resistenza del ponte.
4.1 MISURE A PONTE
Un ponte di resistenze è costituito da 4 resistenze tra loro collegate come sotto
riportato.
Figura 4.1: circuito a ponte
Il ponte viene alimentato tramite la tensione Ve e la sua uscita è Vo=(Vo+)-(Vo-)
I ponti sono stati inizialmente utilizzati per la misura di resistenze senza il bisogno di
tensioni o correnti di riferimento particolarmente precisi.
Il legame tra uscita e alimentazione è
Vo=Ve*(R2/(R1+R2)-R3/(R3+R4))
109
La sensibilità nelle misure a ponte è maggiore quando Vo+ e Vo- sono vicini al
valore di Ve/2. Per questo motivo si usano spesso 4 resistenze aventi tutte valore
nominale R e scostamento dR da tale valore.
Una applicazione tipica e attuale dei ponti resistivi è quella delle celle di carico che
usano 4 estensimetri. Il ponte è costituito da 4 resistenze applicate ad un corpo
deformabile; a causa della variazione di una grandezza esterna (ad esempio della
forza peso) il corpo comincia a deformarsi e pure le resistenze, essendo ad esso
incollate.
Figura 4.2: celle di carico
In questo modo si ha una variazione dR delle resistenze suddette (variazione positiva
o negativa a seconda del metodo di applicazione delle resistenze all’oggetto
deformante). Ne consegue che si avrà una variazione della tensione in uscita dal
ponte proporzionale alla grandezza esterna agente sull’estensimetro.
La variazione di resistenza, a seconda di come è realizzato il ponte, può interessare 1,
2 o tutte e 4 le resistenze del ponte (nel nostro caso si ha solo R1 variabile). Tali
resistenze variabili sono dette resistenze attive.
Vengono riportate di seguito le relazioni tra variazione dR delle resistenze e uscita
del ponte in vari casi
1 R attiva
Vo=dR*Ve/(4R+2dR)
2 R attive
Vo=dR*Ve/(2R+dR)
4 R attive
Vo=dR*Ve/R
La relazione è lineare solo nel caso di ponte con tutte resistenze attive.
Negli altri due casi la non linearità (presenza de dR al denominatore) può essere
compensata via software oppure essere trascurata se dR<<R.
Da notare poi come una stessa variazione di dR si ripercuota in una variazione della
Vo sempre minore al calare delle R attive (la Vo nel caso di 2 R attive è la metà del
caso di 4 R attive e la Vo nel caso di 1 R attiva è un quarto del caso di 4 R attive).
Inoltre, essendo l’uscita proporzionale a dR/R piuttosto che a dR, si ha che la
sensibilità cala al crescere della differenza dell’ordine di grandezza tra dR e R ( Vo
è maggiore quanto minore è lo scostamento in termini di ordine di grandezza tra dR e
R).
110
In genere, il rapporto tra dR e R, nei ponti in commercio è al massimo del 2 per
mille. Questo significa che per una R di 1MΩ il valore massimo di dR è di 2kΩ.
Volendo ad esempio misurare delle variazioni di R di 1ppm (1 parte per milione),
cioè di dR=1Ω con R=1MΩ si dovrà utilizzare un convertitore con 20 bit.
Infatti 2^20 è la minima potenza di 2 avente valore maggiore a 1M e la variazione
minima, quella del bit meno significativo, rappresenta la variazione di 1ppm.
Importante è anche l’effetto della temperatura sul ponte: le variazioni termiche
possono provocare delle variazioni indesiderate della Vo paragonabili a quelle
provocate dalla variazione della grandezza in ingresso da misurare. Tuttavia tali
variazioni diventano insignificanti nel caso in cui le quattro resistenze del ponte
siano fatte dello stesso materiale. Così facendo, esse risentono delle variazioni
termiche allo stesso modo, eliminando quindi tale effetto.
Vengono presentati ora i 4 aspetti chiave relativi alle misure a ponte.
Tensione di eccitazione
Essa è proporzionale a Vo e quindi deve esser precisa almeno come la precisione
della misura che si desidera effettuare.
Per tale motivo si eseguono diversi tipi di compensazione della Ve.
Il metodo più semplice per ottenere una compensazione della tensione di
alimentazione è quello di ottenere la tensione di riferimento del convertitore
attraverso una partizione della tensione Ve, come di seguito illustrato.
Figura 4.3: autocompensazione delle variazioni della tensione di alimentazione
In questo modo, le variazioni di Ve e di Vref sono tra loro proporzionali e i disturbi
sulla tensione di alimentazione vengono annullati, in quanto la tensione di uscita
dipende dal rapporto Vin/VREF (se Vin e quindi VREF cambiano di un fattore k
qualsiasi, il loro rapporto rimane invariato e pure l’uscita).
In alternativa, si può utilizzare un canale dell’ADC per la misura dell’alimentazione
e in seguito compensarne le variazioni attraverso la formula:
Vo_ideale:Vo_misurata=Ve_ideale:Ve_misurata
Vo_ideale= Vo_misurata * Ve_ideale / Ve_misurata
111
Tensione di modo comune
L’uscita del ponte è data dalla differenza tra Vo+ e Vo-. La misura è quindi
differenziale. Tuttavia, a tale tensione ne è sovrapposta una di modo comune pari a
½*Ve.
Tale tensione è spesso sfruttata per ottenere un riferimento di massa.
Importante aggiungere poi che il CMRR del sistema deve essere superiore ai 100dB
(verificato dai fogli tecnici dei convertitori) per ottenere delle buone limitazioni della
tensione di modo comune, che è pari a ½*Ve con variazioni massime dell’1 di Ve
considerando Vo massima pari al 2 di Ve.
In alternativa, per ottenere le prestazioni desiderate, è possibile inserire un circuito di
condizionamento tra ponte e ADC, in genere costituito da amplificatori operazionali.
CMRR
Il CMRR (Common Mode Rejection Ratio) è una figura di merito di un
amplificatore operazionale, è il rapporto di reiezione del modo comune ed esprime il
rapporto tra la sensibilità ai segnali differenziali e la sensibilità ai segnali di modo
comune. È espresso in dB e in un amplificatore operazionale ideale è infinito, in un
amplificatore operazionale reale si attesta su valori che vanno da 80 a 120 dB.
Tensione di offset
L’offset, assieme al rumore, costituisce uno dei problemi più importanti nei circuiti a
ponte.
Oltre al problema dell’offset come traslazione fissa verso l’alto o il basso di una
lettura, esiste anche il problema della sua deriva, cioè di una variazione che si
manifesta al passare del tempo e che in genere è indicata in alcuni microvolt per
mese.
Esistono anche in questo caso varie tecniche di compensazione.
Correzione hardware dell’offset
Integrati all’interno dell’amplificatore, gli amplificatori “auto zero”, rappresentano
una soluzione puramente hardware, che consiste in un circuito di campionamento che
continuamente provvede a mantenere una differenza minima tra i piedini di ingresso.
112
Correzione software dell’offset
In questo caso la compensazione si effettua eseguendo due misure sul ponte. Una
prima misura viene effettuata col ponte in equilibrio (cioè lasciando le celle senza
carico), la seconda misura viene invece effettuata quando il ponte ha una uscita non
nulla conseguente all’applicazione di un carico esterno. La differenza tra le due
letture da un risultato privo di offset (viene eliminato sia l’offset del convertitore che
quello del ponte).
Questa tecnica può essere naturalmente utilizzata solo quando il risultato si basa su
una variazione dell’uscita del ponte e non per misure assolute.
Correzione hardware/software dell’offset
Aggiungendo alla parte software un adeguato circuito, si ottiene la possibilità di
eseguire qualunque tipo di misura (anche statica) priva di offset.
Nella seguente immagine è rappresentato un circuito in cui l’interruttore permette di
collegare in cortocircuito gli ingressi dell’amplificatore (posizione B). In questo
modo viene misurato l’offset presente sugli ingressi dell’amplificatore mantenendo il
potenziale dei due ingressi alla tensione di modo comune.
Figura 4.4: correzione dell’offset(1)
Con l’interruttore in posizione A si esegue la misura desiderata a cui verrà tolto
l’offset precedentemente misurato.
In questo modo, l’offset compensato non comprende quello del ponte.
Il seguente circuito, leggermente più complicato del precedente, è in grado di
eliminare completamente l’offset (sempre tramite misura differenziale) ed inoltre di
aumentare di un fattore 2 il rapporto segnale rumore.
113
Figura 4.5: correzione dell’offset(2)
In questo caso, facendo la differenza tra la misura con gli interruttori in posizione B e
quella con gli interruttori in posizione A, si ottiene una uscita pari 2*Vo*GAIN.
Rumore
Il rumore, è uno degli aspetti fondamentali da considerare nelle applicazioni a ponte.
Oltre al rumore termico, data la bassa frequenza dei segnali considerati, un rumore da
tenere in considerazione è il rumore flicker, detto anche rumore 1/F.
Per una buona riduzione del rumore si devono rispettare i quattro seguenti aspetti:
1) Tenere il rumore fuori dal sistema mediante l’uso di schermi e cablaggio
adeguati.
2) Ridurre il rumore generato dal sistema (utilizzando architetture e componenti
adeguati).
3) Ridurre il rumore elettronico (filtri analogici e simili).
4) Usare eventuali compensazioni software.
La riduzione del rumore avviene praticamente in tre modi.
Il primo è la riduzione del rumore attraverso il filtro digitale che elimina il rumore
alle alte frequenze e riduce quello alle basse frequenze attraverso l’azione di
spostamento delle linee di rumore verso le alte frequenze.
Il secondo metodo di riduzione del rumore deriva dall’alta reiezione di modo comune
(spesso maggiore a 100dB), che riduce il rumore generato dai cavetti di connessione
del ponte e del rumore generato dalla alimentazione del ponte.
Il terzo metodo, consiste in una ripetuta calibrazione dell’offset, che consente una
diminuzione dei disturbi dovuti al rumore 1/F.
114
Linear technology
Mediando si ottiene una notevole riduzione del rumore. Con una media a 64
campioni, ad esempio, il rumore è ridotto di un fattore 8 e quindi da una risoluzione
di 1 parte per 10000 si passa ad esempio alla risoluzione di 1 parte per 80000.
In alcune applicazioni (ad esempio per la misura di grandi pesi) anziché una unica
cella di carico, ne vengono usate molte. L’uscita di tali celle viene in seguito
sommata e passata all’ADC e altri circuiti di elaborazione. L’operazione di somma
riduce di un fattore pari alla radice quadrata il rumore.
4.2 IMPEDENZA DI INGRESSO DEI CONVERTITORI
Nell’esecuzione di misure a ponte, un ingresso del convertitore viene collegato
all’uscita del ponte. In questo modo, se le resistenze del ponte hanno valore elevato
(MΩ nel nostro caso), l’impedenza di ingresso del convertitore diventa elevata. Ne
consegue, che a causa di questa variazione dell’impedenza di ingresso (che si traduce
in una variazione della costante di tempo del circuito di campionamento), il
funzionamento dell’ADC può non essere più quello ideale.
A questo proposito, di seguito viene presentato in dettaglio il circuito di ingresso
dell’ADC e viene discusso come varia l’impedenza di ingresso a seconda della scelta
delle impostazioni eseguite sul convertitore.
Considerando il convertitore inizializzato con le impostazioni predefinite, si ha che il
circuito di ingresso è così realizzato.
Figura 4.6: circuito di ingresso di un convertitore
115
L’ingresso viene campionato usando dei condensatori interni che vengono
continuamente caricati e scaricati.
In seguito l’ingresso viene integrato con campioni della tensione di riferimento. Il
segnale passa poi attraverso un secondo integratore e infine attraverso un
comparatore. Alla fine, si ha che l’uscita del comparatore è un segnale con densità
proporzionale alla Vin.
Il circuito ha un solo valore Vin di ingresso, nella realtà il circuito è a ingressi
differenziali con la presenza sia di Vin+ che di Vin-.
Il seguente circuito rappresenta un modello per l’ingresso dell’ADC precedentemente
descritto.
Cb è la capacità equivalente, rappresentante la capacità Cin; CA1 e CA2 modellano
il trasferimento di carica dal condensatore di campionamento all’integratore.
Figura 4.7: modello equivalente di ingresso
Il seguente diagramma temporale rappresenta lo stato degli interruttori S1 e S2: essi
vengono chiusi in maniera complementare ad ogni ciclo di clock.
Grafico 4.1: diagramma temporale degli interruttori
Per definire una impedenza di ingresso, si considera inizialmente il seguente circuito
con condensatori ed interruttori.
116
Figura 4.8: impedenza di ingresso
Il condensatore C accumula e perde una certa quantità di carica, a seconda dello stato
di S1 e S2.
Considerando la definizione di corrente media come:
Ne consegue che l’impedenza di ingresso data da rapporto fra tensione e corrente
vale:
Si ha quindi che in ultima analisi il circuito di ingresso può essere rappresentato
utilizzando tre impedenze equivalenti.
Figura 4.9: impedenza equivalente di ingresso
Praticamente si considerano ZeffA1 e ZeffA2 uguali e pari a metà di ZeffB.
La velocità degli interruttori di ingresso non coincide con la frequenza del clock.
Infatti essi commutano a una velocità dipendente dal PGA selezionato, da fosc e dal
valore dello speed bit.
Le seguenti tabelle illustrano i valori delle varie impedenze al variare dei parametri
sopra citati. I dati sono qualitativi perché riferiti ai componenti ADS ma sono
generalizzabili anche ai componenti MSC.
117
Tabella 4.1: impedenze di ingresso dei convertitori con buffer off
Si vede come al crescere del PGA il range di tensione in ingresso al convertitore cali
e la frequenza di campionamento cresca con conseguente diminuzione delle relative
impedenze equivalenti.
L’impedenza di ingresso, in base al circuito equivalente precedente, può essere
calcolata attraverso la seguente formula:
La formula per il calcolo di tale impedenza nel caso dell’MSC1211 è un po’ più
elaborata ma deriva da considerazioni simili alle precedenti.
In particolare, impostando opportunamente i vari parametri, si possono ottenere nei
due casi dei risultati molto simili.
118
Esempio:
Cin=9pF, fclock=8MHz, PGA=1, SPEED bit=0, ACLK=1
1.77MΩ
MSC
ADS
1.78MΩ
E’ importante notare a questo punto come le impedenze di ingresso abbiano dei
valori che vanno dal centinaio di kΩ alla decina di MΩ.
Consideriamo quindi un ponte con resistenze dell’ordine del MΩ.
Figura 4.10: impedenza del convertitore e del ponte
Zponte=(R1//R2)+(R3//R4)=1MΩ
Per quanto visto in precedenza, si ha che Zponte e Zadc hanno quindi ordini di
grandezza molto simili.
Ne consegue che il convertitore può non funzionare più in modo ideale in quanto la
sua Zing e quindi la sua costante di tempo di campionamento viene modificata.
La soluzione a questo problema consiste nell’attivazione del buffer di ingresso. Tale
buffer è fondamentalmente un AO a guadagno unitario che serve a disaccoppiare il
ponte dal circuito di campionamento del convertitore.
119
La seguente immagine illustra il circuito di ingresso seguito dal segnale quando
viene attivato il buffer.
Il chopper (circuito che commuta tra di loro Vin+ e Vin-) è utilizzato per la riduzione
del rumore 1/f introdotto dal buffer stesso.
Figura 4.11: circuito di disaccoppiamento
Figura 4.12: chopper
A causa delle commutazioni tra Vin+ e Vin- le capacità parassite in ingresso al
buffer vengono continuamente caricate a Vin+ e Vin-. Ne consegue che l’impedenza
di ingresso ha un valore elevato ma non infinito. Si ha quindi un circuito equivalente
del tipo:
Figura 4.13: impedenza di ingresso con buffer on
120
A differenza del caso in cui il buffer era disattivato si ha che il circuito di ingresso
equivalente è provvisto solo di una impedenza differenziale, mentre sono assenti le
impedenze di modo comune.
La seguente tabella riporta i valori di impedenza di ingresso al variare della
frequenza di orologio del sistema.
Tabella 4.2: impedenze di ingresso dei convertitori con buffer on
Si nota come il valore dell’impedenza di ingresso sia aumentata di 3 ordini di
grandezza rispetto al caso col buffer disattivato.
Range del convertitore con buffer off
In queste condizioni, ogni ingresso del convertitore può assumere qualsiasi valore tra
AGND-0.5 e AVdd+0.5. L’ADC misura la differenza tra i due pin selezionati e da in
uscita la differenza di tensione tra questi due piedini. La massima differenza
misurabile è detta FSV (full scale voltage).
Buffer on
In questo caso, non esistono problemi relativi all’impedenza di ingresso del
convertitore ma si deve tener conto che:
1) La potenza analogica aumenta.
2) Il range di ingresso viene limitato.
3) La calibrazione non è possibile quando REFIN+ è maggiore di AVdd-1.5.
4) Aumenta il rumore introdotto.
Con buffer off i pin possono assumere qualsiasi valore tra AGND e AVdd; con
buffer on i pin sono compresi in un intervallo più ristretto: da 50mV a AVdd-1.5V.
121
Risposta del filtro SINC
Il filtro sinc serve a decimare il dato campionato dal convertitore e ottenere così un
valore ad alta risoluzione. La risposta del filtro è di tipo notch e può essere quindi
utilizzato anche per la rimozione di segnali indesiderati. Ad esempio possono essere
eliminati eventuali disturbi a 50Hz oppure a 60Hz. Esiste anche la possibilità di
ottenere la reiezione di entrambe queste 2 frequenze, impostando un data rate di
10Hz, essendo il filtro periodico.
L’utilizzo principale del filtro è relativo a segnali quasi stazionari.
Il seguente diagramma di Bode evidenzia come esista la possibilità di sentire l’effetto
di disturbi ad alta frequenza, dovuti al tipo di risposta del filtro sinc. In questo caso
campionando a 14400Hz, con data-rate di 60Hz (e quindi decimazione pari a 240), si
vede come il filtro sinc (con espressione (1-z^(-240))/(1-z^-1) e Tc=1/fsample)
presenti un andamento notch alle frequenze multiple di 60Hz (data-rate) e delle righe
di ampiezza unitaria alle frequenze multiple di 14400Hz (frequenza di
campionamento del dato in ingesso al modulatore). Eventuali disturbi a tali
frequenze, possono contribuire a una maggior rumorosità del segnale.
Grafico 4.2: risposta del filtro digitale(1)
La seguente immagine illustra l’effetto di due filtri analogici usati per l’eliminazione
dei disturbi: il filtro a due poli elimina i disturbi in modo molto più efficiente rispetto
a quello a singolo polo.
Grafico 4.3: risposta del filtro digitale(2)
122
Oltre all’aliasing dovuto alla frequenza di campionamento, deve essere fatta
attenzione a quello eventualmente provocato dal data rate di uscita.
La decimazione, che si può pensare come un ulteriore campionamento a 60Hz
(corrispondente a una periodicizzazione a 60Hz in frequenza), può portare alla
presenza in banda base dei disturbi a frequenze superiori a metà del data-rate (in
questo caso 30Hz).
Supponendo ad esempio di avere una frequenza di uscita dei dati pari a 60Hz, un
segnale di disturbo a 55Hz potrebbe essere portato a 5 Hz per l’aliasing della fdata
danneggiando così il risultato finale.
Figura 4.14: problema dell’aliasing
La soluzione per entrambi i generi di aliasing, potrebbe essere un semplice circuito
RC da inserire in ingresso.
Da notare come in assenza di buffer la soluzione del circuito RC dia sempre dei
problemi di adattamento dell’impedenza di ingresso.
Figura 4.15: circuito RC in ingresso
123
4.3 ACQUISIZIONE MULTICANALE DI MISURE A PONTE SU
MSC1211Y5 MEDIANTE PROGRAMMAZIONE DEL
MICROCONTROLLORE
Terminato lo studio teorico sui ponti di resistenze e sulle impedenze di ingresso del
convertitore, si è passati all’acquisizione della tensione di uscita e di alimentazione
del ponte. In questo caso è stato necessario realizzare dei programmi per il
microcontrollore, per l’acquisizione contemporanea di più canali, dato che il demo
fornito era in grado di acquisire un unico canale alla volta.
La necessità di acquisire alimentazione e uscita del ponte contemporaneamente, è
dovuta al fatto che si vuole verificare se esiste correlazione tra le variazioni della
tensione di alimentazione del ponte e le variazioni dell’uscita; inoltre avendo a
disposizione entrambe le misure si possono eseguire delle eventuali compensazioni.
La stesura dei programmi avviene utilizzando il linguaggio C.
Tra il materiale software della schedina esiste anche il Keil, che è un ambiente di
programmazione che rende disponibili un editor e un compilatore.
Una volta compilato un programma, esso va scaricato sulla schedina attraverso un
downloader (anch’esso presente tra il software fornito) avente la seguente interfaccia
grafica.
Figura 4.16: impostazioni della porta seriale
Come si vede, l’interfaccia richiede di selezionare il programma che si desidera
scaricare sul microcontrollore, di impostare la frequenza del clock della schedina, di
scegliere la porta di comunicazione e il relativo baud-rate. Nel nostro caso si è
sempre usato un clock di 22MHz e la comunicazione avveniva mediante la seriale
COM1 9600bps.
Una volta definite tali impostazioni si scarica il programma sulla schedina;
automaticamente, appena terminata tale operazione, viene aperta un’altra interfaccia
grafica che illustra l’andamento della comunicazione seriale tra PC e schedina. I dati
su interfaccia seriale, possono essere salvati in tempo reale su di un file di testo (.txt).
124
Figura 4.17: interfaccia grafica della porta seriale
Circuito per le misure a ponte
Viene di seguito presentato il circuito realizzato per l’esecuzione delle misure a
ponte.
Secondo l’analisi teorica sulle misure a ponte e sulle impedenze di ingresso dei
convertitori viste in precedenza, si è deciso di realizzare la misura nel seguente
modo.
Si è considerato un ponte con una sola resistenza attiva.
E’ stato inserito il buffer in ingresso al convertitore.
Il convertitore funziona in modalità differenziale.
125
Figura 4.18: setup per le misure a ponte
Ve
2.00V (valore tipico di alimentazione dei ponti è di alcuni volt. Tale valore è
stato scelto anche per il fatto che è un valore misurabile dall’ADC; valori maggiori a
2.5 non sono misurabili).
R2, R4 1MΩ (con precisione dell’uno per mille).
R3
1.022MΩ (dato dalla serie di 2 resistenze da 511kΩ con precisione dell’uno
per mille).
R1
cassetta di resistenze con le seguenti caratteristiche.
126
Figura 4.19: cassetta di resistenze
Vo=Ve*(R2/(R1+R2+dr)-R3/(R3+R4))
All’equilibrio
Vo=0,
dr=0
R2/(R1+R2)=R3/(R3+R4)
R2*R3+R2*R4=R3*R1+ R3*R2 R2*R4=R1*R3 R2/R1=R3/R4
La condizione di equilibrio è quindi R2/R1=R3/R4
Essendo
R3/R4=1.022M/1M=1.022
R1=R2/1.022=1M/1.022=978473.58Ω
all’equilibrio
Questo valore è solo indicativo, data la tolleranza delle altre resistenze e le variazioni
delle condizioni di prova, si ha che tale valore di equilibrio potrà variare leggermente
da prova a prova.
Importante aggiungere che le prove sono state eseguite utilizzando come supporto
per le resistenze una basetta mille fori. Il cablaggio è costituito da dei cavetti bananacoccodrillo oppure banana-banana da un ventina di centimetri ciascuno tra di loro
intrecciati.
L’esperimento è stato eseguito in un primo tempo connettendo i cavetti direttamente
ai reofori delle resistenze montate su basetta; in seguito è stata costruita una cassetta
di plastica con all’interno montata la basetta mille fori e provvista di opportune
boccole per il collegamento dei cavetti. Questa seconda soluzione è stata realizzata al
fine di capire se con un miglior setup della misura vi fosse una riduzione ulteriore del
rumore. Si è notato che i risultati erano abbastanza simili a parte il fatto che il valore
127
letto nel caso di setup con cassetta era leggermente più stabile (l’uscita del ponte, in
termini di risultato a video, aveva una variazione attorno a un valore di equilibrio di
alcune decine di microvolt).
Si è cercato, per quanto possibile, di mantenere i cavetti di segnale più distanziati
possibile da quelli di alimentazione per ridurre eventuali disturbi.
Si analizza ora in dettaglio l’espressione che lega la tensione di uscita del ponte alla
variazione imposta su R1, cercando di semplificarla e in particolare di renderla
lineare.
Vo/Ve=[R2/(R2+R1+dr)]-[R3/(R3+R4)]
Vo R 2
=
*
Ve R1
1
R3
1
−
*
R 2 + dr R 4
R3
1+
1+
R1
R4
Vo
α
α
=
−
Ve 1 + α + dr / R1 1 + α
Vo
α * dr / R1
≈−
Ve
(1 + α ) 2
Vo
dr
≈−
Ve
f (r )
posto
si pone ora R2/R1 R3/R4=
ne consegue che
(1 + α ) 2
= f (r ) si ha che
α / R1
che è proprio la relazione lineare che si cercava.
Il rapporto Vo/Ve ottenuto dalle misure fatte col convertitore, andrebbe confrontato
col rapporto dr/f(r) (imposto) per valutare la bontà dell’ADC.
Il problema sta nel fatto che mentre dr viene imposto, f(r) non è noto a priori. Tale
valore può essere ricavato in due modi diversi: come risultato di una espressione
algebrica su R1, R2, R3 ed R4 oppure da una misura del convertitore in cui si
impone dr, si misura Vo e Ve e si calcola f(r).
Si deve scegliere il metodo che comporta un minor errore possibile nella stima finale.
Calcolo di f(r) in base a R1, R2, R3 ed R4
f (r ) =
(1 + α ) 2
=3914355 con errore di 16kΩ
α / R1
128
Calcolo di f(r) in base alla misura di Vo e Ve
dr * Ve
=3934921 con errore di 26K (con dr=-1k e Vo=508 V; l’errore
Vo
cresce a 150k per dr=100 dove ho solo 54micro di vo sempre con incertezza di 2
micro)
f (r ) = −
Si sceglie quindi il primo metodo per la stima di f(r).
Si tratta a questo punto, di realizzare delle misure e verificare che il rapporto -dr/f(r)
dato dalla variazione teorica dr corrisponda al rapporto Vo/Ve, ottenuto dalle misure
pratiche fatte con l’ADC.
In pratica, con i risultati ottenuti, si realizzano dei grafici di Vo in funzione di dr
(Vo=-dr*Ve/f(r)). Il Vo misurato avrà una incertezza determinata dall’ENOB; il Vo
teorico una incertezza calcolata con le formule della propagazione degli errori per
misure indirette. Alla fine, rappresentando dati teorici e misurati, con relative
incertezze, i risultati dovranno intersecarsi.
Grafico 4.4: compatibilità tra dati misurati e calcoli teorici
La seguente figura (ottenuta mediante la prima parte del programma Matlab di
appendice C), riporta l’andamento di Vo in funzione di f(r).
La linea rossa rappresenta l’andamento di Vo ottenuto con la formula esatta del
partitore di tensione su Ve; la linea blu l’andamento di Vo ottenuto con la formula
approssimata lineare Ve*dr/f(r).
Si vede che le linee differiscono tra di loro per tensioni inferiori al microvolt quando
la dr è inferiore al KΩ. Dato che le misure sono effettuate tutte in questo intervallo,
non viene considerato alcun errore di non linearità.
129
Grafico 4.5: andamento reale (rosso) e ideale (blu) di Vo in funzione di dr
Di seguito vengono riportati vari programmi realizzati per la acquisizione dei valori
di Vo e di Ve.
Acquisizione multicanale di base
Tale programma, è molto semplice ed è uno dei programmi esempio forniti assieme
al demo.
Esso è riportato in appendice D e sarà ora dettagliatamente discusso, in quanto sarà
utilizzato anche nella stesura dei successivi programmi.
Le prime istruzioni sono relative all’inclusione delle librerie necessarie per la
realizzazione del programma.
In seguito viene definita la frequenza XTAL del clock pari a 11.0592MHz (in realtà è
già definita in un altro file e risulta pari a 22.1184MHz).
La definizione successiva riguarda la scelta della velocità di comunicazione con la
porta seriale: viene definito un baud-rate di 9600bps e il fattore T2RELOAD, da
utilizzarsi come valore iniziale del timer2, in seguito definito.
Il clock analogico (A_CLK), viene definito pari a 1MHz; la decimazione scelta porta
ad un data rate di 10Hz.
Vengono a questo punto definiti 3 fattori di conversione. Tali fattori servono a
tradurre in una tensione la lettura eseguita dall’ADC (che è un valore binario a 32
bit). I tre fattori di conversione riguardano la parte intera della tensione di uscita, la
130
parte decimale più significativa (millivolt) e quella decimale meno significativa
(microvolt).
La union denominata res, è composta da un vettore di 4 char e un unsigned long.
Essa serve all’acquisizione dei dati provenienti dall’ADC. La scelta di questa union,
(in cui i membri che ne fanno parte condividono lo stesso spazio in memoria) è una
alternativa alle comuni variabili, per un risparmio dello spazio occupato in memoria.
Si ha a questo punto l’inizio del programma vero e proprio, con l’istruzione void
main(void) che definisce un programma privo di argomenti passati o ricevuti da
tastiera.
Vengono poi definite delle variabili int e char che sono dei contatori e delle variabili
utilizzati durante il programma.
Le istruzioni successive servono a definire, in base alla frequenza di clock del
sistema e all’impostazione dei alcuni registri, le unità temporali di 1 s, 1ms.
Utilizzando una combinazione di queste unità temporali viene poi impostato
l’interrupt dei secondi e dei millisecondi. Sfruttando questi tempi si imposta infine il
tempo di scrittura e di cancellazione della memoria flash.
Seguono a questo punto varie linee contenenti istruzioni per l’impostazione della
modalità di acquisizione dell’ADC.
Prima di tutto (attraverso l’istruzione CKCON = 0), viene fissata la lunghezza
temporale dei timer 0, 1 e 2 in termini di frazione della frequenza del clock del
sistema; inoltre viene scelta la lunghezza delle istruzioni di read e write nell’accesso
a memoria dati mediante movx.
Attraverso l’istruzione T2CON = 0x34 il timer2 viene abilitato e fatto funzionare in
modalità baudrate: l’overflow del timer2 è usato per determinare il baudrate in
ricezione e trasmissione del dato. All’overflow di timer2 (fatto dai registri T2HT2L), si verifica autoreload, cioè il caricamento nel timer2 del valore contenuto nei
registri RCAP2H-RCAP2L. Il valore di tali registri è calcolato in modo che una volta
caricati sul timer2, si arrivi a una condizione di overflow (del timer2) in un tempo
pari a quello del baud-rate (intervallo di attesa per l’invio di un bit sulla porta
seriale).
L’istruzione SCON0=0x50 provvede ad abilitare alla ricezione in modalità asincrona
la porta seriale SERIAL0.
Imponendo PCON |=0x80 (cioè PCON=0x30 | 0x80 = 0xB0) si ottiene il
raddoppiamento del baudrate per la porta UART0.
Agendo sul registro P3DDRL &= 0xF0
P3DDRL |= 0x07; si specifica lo
standard di input e di output per la porta P3 (che è collegata alla porta seriale
SERAL0).
Mediante PDCON si impostano altre caratteristiche, di cui la più importante è
l’accensione dell’ADC.
Segue poi l’abilitazione della global interrupt flag EA (che permette di scatenare un
determinato interrupt previa abilitazione di tale interrupt).
Nel programma in esame non esistono routines di gestione degli interruptus in
quanto essi non sono mai abilitati. Il microcontrollore è però realizzato in modo che
esista la possibilità di leggere il valore della flag di un interrupt nell’opportuno
registro senza la necessità di scatenare un evento di interrupt al suo verificarsi (che
richiederebbe una routine per la sua gestione).
In seguito, si ha uno stato di attesa e l’abilitazione di una porta seriale per
l’esecuzione di un eventuale debug (non utilizzato mai in questi programmi), al cui
131
termine si ha una stampa a video sull’interfaccia seriale che riporta il nome del
convertitore.
Infine si hanno una serie di istruzioni necessarie alla definizione dettagliata della
modalità di acquisizione come la scelta del valore del PGA, del tipo di calibrazioni e
altro (fondamentali in questo caso i registri ADCON0 e ADCON1).
A questo punto, con l’istruzione while (1) ha inizio un ciclo infinito che esegue
l’acquisizione dei segnali provenienti dal convertitore.
Ogni ciclo comincia con la stampa sull’interfaccia grafica di due righe che
descrivono i vari parametri che saranno in seguito stampati (canale, valore
esadecimale ecc.).
Annidato in questo while, si ha un ciclo for, che viene ripetuto quattro volte, in modo
da effettuare per ogni ciclo while la conversione dei risultati di tutti e quattro i canali
dell’ADC (che è impostato in modalità differenziale con valori letti nei canali AIN0AIN1, AIN2-AIN3, AIN4-AIN5, AIN6-AIN7).
La scelta dei canali da convertire si fa mediante l’impostazione opportuna del
registro ADMUX.
Quando un valore in ingresso è stato convertito ed è pronto per essere utilizzato dal
miocrocontrollore, viene messo a 1 il relativo bit di interrupt nel registro AIE
(l’interrupt non viene invece scatenato in quanto, come spiegato prima non è stato
abilitato); tale interupt permette da uscire dallo stato di attesa imposto dall’istruzione
while (!(AIE & 0x20)).
Il risultato della conversione è un valore a 24 bit memorizzato in 3 registri da 8 bit
ciascuno (ADRESH, ADRESM, ADRESL). Tale valore viene salvato nella variabile
res.
La conversione viene effettuata 5 volte (ulteriore ciclo for nidificato) in modo da
permettere l’assestamento del filtro digitale dopo la calibrazione e il passaggio ad un
altro canale di ingresso (la calibrazione è ripetuta ogni volta che viene cambiato
canale, essendo disponibile nel convertitore un solo registro di calibrazione di
guadagno e di offset, da usare per tutti i canali). L’istruzione successiva è una
ulteriore stampa a video di parametri, quali il canale in esame e il valore esadecimale
rilevato su tale canale.
Le ultime istruzioni riguardano la stampa a video del valore convertito sottoforma di
tensione. Innanzitutto viene stampato il segno del valore convertito (+ se il primo bit
del risultato è uno 0, - se è un 1, essendo il valore in complemento a due).
In seguito, il risultato res viene convertito in un valore positivo in caso in cui fosse
negativo.
Essendo stati definiti in precedenza i valori fV, fmV, f V (che definiscono il valore
esadecimale corrispondente a 1V, a 1mV e a 1 V), si ha che la parte intera del
risultato è ottenibile come res.l / fV . Il risultato per risparmiare spazio in memoria
viene salvato come un char, dato che si tratta di un valore intero pari a 0, 1 o 2.
Successivamente in res.l viene salvato il resto di tale divisione, come valore
esedecimale di resto dato dalla sottrazione della parte esadecimale rappresentante i
volt al valore originale (la traslazione a sinistra di due serve ad avere più cifre
significative, in particolare è usata per lavorare sempre con 24 bit e avere una
precisione più grande. La traslazione è proprio di 2 perché nel risultato, la parte in
volt occupa i 2 bit più significativi). Eseguendo res.l/ fmV si ottiene la parte di
tensione in mV (la traslazione a sinistra è in questo caso di 10 perché sono usati 10
132
bit nella rappresentazione dei millivolt). Analogamente si ottiene la parte in V della
tensione di uscita eseguendo res.l/ f V.
Il risultato ottenuto viene infine stampato a video.
A questo punto, il programma è stato scaricato sulla schedina mediante il downloader
e l’interfaccia seriale. Come scritto nel programma, è stata utilizzata la porta seriale
comunicante con la porta P3 del convertitore.
Acquisizione diretta dei campioni
Il primo programma realizzato per l’acquisizione dei segnali, è equivalente a quello
precedentemente descritto, ad esclusione del fatto che i canali acquisiti sono due
anziché quattro.
Inoltre agendo sui registri ADCON0 e ADCON1, si è attivati il buffer di ingresso,
scelto il filtro digitale sinc3 e calibrazione di tipo system offset (che elimina l’offset
dell’intero sistema. La calibrazione del guadagno non è importante, almeno per la
Vo, in quanto le misure sono eseguite in prossimità dello zero).
Una ulteriore modifica al programma originale, consiste nell’eliminazione della
stampa su interfaccia seriale dei vari parametri del convertitore ad ogni conversione.
Il nome del convertitore, dei vari canali e dei parametri settati, viene stampato su
interfaccia seriale solo all’inizio del programma; di seguito , su due colonne distinte
si ha solo la stampa dei valori di tensione Ve e Vo. Quest’ultima operazione è stata
eseguita esclusivamente per il fatto che i dati su interfaccia seriale potevano essere
salvati in una forma che rendeva più semplice la loro successiva elaborazione
mediante i programmi Excel o Matlab.
L’immagine seguente riporta l’andamento delle tensioni misurate impostando sulla
cassetta di resistenze una R1_equilibrio=977360Ω.
Si nota come il calibratore abbia un andamento a dente di sega (variazione massima
di circa 500 V) e come la tensione di uscita sia poco stabile. La Vo presenta infatti
delle variazioni di una settantina di microvolt; tali variazioni sono dovute alla
presenza di rumore esterno (non alla variazione di Ve, non essendoci correlazione tra
Vo e Ve all’equilibrio). Si nota poi anche come la Vo non si muova attorno allo zero
ma abbia sempre valori negativi. Ciò e dovuto a una imprecisa equilibratura del
ponte.
133
2,016200
2,016150
2,016100
2,016050
2,016000
2,015950
Colonna J
2,015900
2,015850
2,015800
2,015750
2,015700
0
2,5
5
7,5
10
12,5
15
17,5
20
22,5
25
27,5
30
Grafico 4.6: misura di Ve(1)
-1,0E-05
-1,5E-05
-2,0E-05
-2,5E-05
-3,0E-05
-3,5E-05
-4,0E-05
-4,5E-05
Colonna K
-5,0E-05
-5,5E-05
-6,0E-05
-6,5E-05
-7,0E-05
-7,5E-05
-8,0E-05
-8,5E-05
0
2,5
5
7,5
10
12,5
15
17,5
20
22,5
25
27,5
30
Grafico 4.7: misura di Vo(1)
134
Acquisizione dei campioni mediata (media semplice)
In base a quanto osservato in precedenza, si è deciso di realizzare un programma che
renda l’uscita del ponte più immune al rumore. I campioni di uscita, anziché essere
direttamente stampati a video subiscono una operazione di media.
La realizzazione di tale programma avviene mediante l’utilizzo del registro SUMR.
Tale registro, è in realtà composto da quattro registri da 8 bit ciascuno (SUMR3,
SUMR2, SUMR1 e SUMR0). La parte di dato più significativa è contenuta in
SUMR3, quella meno significativa in SUMR0).
L’utilizzo di questo registro è regolato da un ulteriore registro: SSCON.
Di seguito, viene riportata in dettaglio la rappresentazione di SSCON. Si vede come
impostando opportunamente i relativi bit sia possibile far lavorare il registro SUMR
in varie modalità. Esiste la possibilità di cancellare il contenuto del registro di
somma, eseguire delle somme, delle sottrazioni, delle traslazioni oppure delle somme
seguite da delle traslazioni. Quest’ultimo caso è quello di interesse in quanto
eseguendo una somma del valore di ingresso per un numero di volte pari a una
potenza di due (2^n) e in seguito una traslazione a destra sempre per n, si ottiene
come risultato la media dei valori letti in ingresso.
135
Ne consegue che la procedura per ottenere come dato l’uscita mediata sarà la
seguente. Prima di tutto si dovrà azzerare il registro SUMR e in seguito predisporlo
per la modalità di funzionamento somma-traslazione (mediante SSCON); in seguito
attendere che l’operazione di media sia conclusa (attendendo che venga posto a 1 il
relativo bit di interrupt del registro AIE). In seguito verranno salvati i valori dei
registri SUMR2, SUMR1 e SUMR0, in quanto contenenti il dato mediato. Il valore
contenuto in SUMR3 viene ignorato, in quanto i dati in uscita sono a 24 bit e la
necessità di utilizzare 32 bit deriva solo dal fatto che durante l’operazione di somma
il valore sommato può occupare una dimensione maggiore a 3 byte.
Di seguito viene riportata la parte di programma che realizza quanto spiegato. La
parte rimanente del programma è analoga a quelli precedentemente realizzati: una
prima parte di impostazione del convertitore seguita da una parte finale di stampa a
video del risultato.
136
#include <REG1210.H>
#include <stdio.h>
#include "ISD51.H"
.
.
.
.
while (1) {
// Repeat Conversions Forever
// printf("\nInput -2.5V to +2.5V on AINx channel pairs\n\n");
// printf("Chan. Dec. Rate Hex Value Voltage\n");
for (chan=0; chan<2; chan++) { // Channels Loop
ADMUX = 0x32 + 0x44*chan; // AINP = AIN7/3, AINN = AIN6/2
// Read Input Volatage
for (k=0; k<5; k++) {
calibration
SSCON = 0x00
SSCON = 0xED;
while (!(AIE & 0x40));
// ignore 4 conversions for filter to settle after
//averaging for 64 values
// Wait for data ready
res.c[0] = SUMR2;
res.c[1] = SUMR1;
res.c[2] = SUMR0;
res.c[3] = 0;
}
// printf ("%2bd-%bd %6d %3dHz ", (4*chan+3), (unsigned char) (4*chan+2),
(int) DECIMATION, (int) CONV_FREQ);
// printf ("0x%06lX ", (res.l >> 8));
.
.
.
.
}
I seguenti grafici riportano l’andamento della tensione di alimentazione e di uscita
del ponte impostando sulla cassetta di resistenze una R1_equilibrio=977360Ω.
137
2,038400
2,038350
2,038300
2,038250
2,038200
2,038150
2,038100
Colonna E
2,038050
2,038000
2,037950
2,037900
2,037850
2,037800
2,037750
1
2
3
4
5
6
7
8
9
10
Grafico 4.8: misura di Ve(2)
-0,000008
-0,000009
-0,000010
-0,000011
-0,000012
-0,000013
-0,000014
-0,000015
-0,000016
-0,000017
-0,000018
-0,000019
-0,000020
-0,000021
-0,000022
-0,000023
-0,000024
-0,000025
Colonna F
1
2
3
4
5
6
7
8
9
10
Grafico 4.9: misura di Vo(2)
Si nota come ora le variazioni della tensione di uscita siano molto più ridotte. La Vo
ha una variazione massima di una quindicina di microvolt (tra due uscite successive),
a fronte di una variazione della Ve del calibratore di circa 600 V.
Bisogna aggiungere però che anche una variazione di questo genere è sintomo di un
livello di rumorosità ancora troppo influente.
Inoltre tramite questo metodo, l’effettivo data rate in uscita dall’ADC è molto ridotto
a causa della grande elaborazione che deve essere effettuata. I grafici precedenti sono
riferiti al caso di una media a 32 campioni. In questo caso, l’intervallo temporale tra
138
l’uscita di due risultati dal convertitore è di parecchi secondi; per medie a pacchetti
di 64 di diversi minuti.
Acquisizione dei campioni mediata (media mobile scorrelata)
Si è realizzato un programma in grado di risolvere i problemi dati dal precedente:
ottenere un data rate effettivo più elevato e una variazione tra due uscite successive
limitata a pochi microvolt (1 o 2).
In particolare si è utilizzato un diverso tipo di mediazione dei risultati. Mentre in
precedenza venivano acquisiti n campioni, la cui media veniva data in uscita e quindi
si passava all’acquisizione di altri n campioni e alla loro mediazione e così via, in
questo caso di fronte a ogni acquisizione si ha un valore in uscita, come illustrato
nella seguente immagine.
Figura 4.20: processo di media mobile
Di seguito vengono descritte le parti fondamentali del programma, che è riportato in
appendice E1 (le parti mancanti sono le solite inizializzazioni e stampa a video dei
risultai).
Si nota, dopo la solita inizializzazione del convertitore, precedente al main, la
dichiarazione di varie funzioni (rx_byte, deltasigma ecc.). Tali funzioni sono
utilizzate a loro volta dalla funzione adc_mave, che provvede ad eseguire la media
mobile.
In particolare la funzione rx_byte e tx_int servono rispettivamente per la ricezione e
trasmissione di dati, deltasigma provvede all’acquisizione di un campione da parte
del convertitore, adc_win implementa la media mobile e putcr provvede a far passare
a capo il cursore.
Il programma main dopo il settaggio dei vari registri del convertitore, si limita a
richiamare la funzione di media mobile, passando come dato il numero di bit su cui
eseguire la media. La funzione di media mobile, viene eseguita alternativamente una
volta per la tensione Ve e una volta per la tensione Vo (selezionando opportunamente
i piedini di ingresso del convertitore).
139
All’inizio di tale funzione vengono dichiarate diverse variabili: dei puntatori e dei
contatori.
Dopo aver inizializzato tali variabili, si esegue un ciclo while la cui conclusione è
controllata dalla variabile count (settata in modo che la media mobile venga eseguita
per un migliaio di volte) e dal fatto che il dato sia disponibile sulla porta di
comunicazione (RI=0) .
L’operazione di media mobile è regolata dalla seguente espressione:
adcsum=adcsum+adc_win(mod_ptr)
adcsum contiene la somma dei vari campioni da mediare, che viene aggiornato
all’acquisizione di ogni nuovo campione. La funzione adc_win provvede
all’aggiornamento di adcsum, togliendo il campione più vecchio e aggiungendo
l’ultimo acquisito al vettore *win_ptr, che è un vettore circolare di dimensione pari al
numero di termini della media mobile.
Le altre funzioni, che come adc_win, sono dichiarate all’inizio del programma,
vengono utilizzate all’interno di adc_win stessa e sono delle funzioni contenute nella
memoria ROM del convertitore e scritte in linguaggio ASSEMBLER; per questo
motivo all’inizio è necessaria la loro inclusione attraverso l’espressione #include
"rom1210.h".
In seguito viene eseguito il calcolo della media mobile attuale mediante l’espressione
res.l=adcsum / fill_ptr;
Segue la solita stampa a video del risultato e l’aggiornamento finale dei contatori.
fill_ptr di norma ha un valore pari al numero di elementi su cui eseguire la media, nel
caso in esame 16. Tuttavia, nelle prime fasi del programma il suo valore è minore
(parte da 1 e cresce fino a 16, coincide cioè con il numero di campioni acquisiti), in
modo da ottenere un risultato di media corretto. mod_ptr è invece l’indice del vettore
circolare win_ptr. Esso viene aggiornato di volta in volta, in modo che punti alla
locazione dell’ultimo dato acquisito.
Un ultimo commento sulla forma di presentazione delle variabili: assieme al loro tipo
(long, int, unsigned) viene scritta anche la parola idata o xdata. Si specifica in questo
modo la zona di memoria in cui sono salvate le variabili. Di norma il programma
viene scaricato nella flash da 32kB del convertitore. I dati invece vengono salvati
nella RAM. Scrivendo idata o data, il dato è salvato nei 256 byte interni al nucleo
del microcontrollore oppure nel Kb di memoria on-chip del convertitore. Di norma i
piccoli dati sono salvati nel nucleo del convertitore, quelli più grandi nella RAM on–
chip, come fatto in questo programma. L’accesso alla RAM esterna avviene
definendo le variabili come xdata e con opportuno settaggio dei registri HCR0 e
HCR1 (nel caso in esame tali registri sono già impostati per tale funzionalità essendo
opportunamente definiti su un altro file).
140
I seguenti grafici riportano l’andamento della tensione di alimentazione e di uscita
del ponte impostando sulla cassetta di resistenze una R1_equilibrio=977450Ω.
2,038820
2,038800
2,038780
2,038760
2,038740
2,038720
Colonna G
2,038700
2,038680
2,038660
2,038640
2,038620
2,038600
0
10
20
30
40
50
60
70
80
90
Grafico 4.10: misura di Ve(3)
0,000125
0,000124
0,000123
0,000122
0,000121
0,000120
0,000119
Colonna F
0,000118
0,000117
0,000116
0,000115
0,000114
0,000113
0
10
20
30
40
50
60
70
80
90
Grafico 4.11: misura di Vo(3)
141
Si vede come ora il risultato in termini di Vo vari molto poco tra due uscite
successive (al massimo di un microvolt alla volta), pur essendo la media eseguita a
pacchetti di 16 anziché di 32. Questo miglioramento è da legare al tipo di media
eseguito, alla correlazione esistente tra i vari risultati mediati.
Si nota poi anche come la variazione massima di Vo sia di una decina di microvolt,
anche perché ora la Vo ha una variazione massima di soli 200 V.
L’unico problema per questo programma è la mancanza di correlazione tra i risultati
di Vo e di Ve. Essendo la media mobile eseguita in intervalli temporali scorrelati per
Vo e VE, non è possibile capire come le variazioni di Ve si riperquotano su Vo.
Acquisizione dei campioni mediata (media mobile correlata)
La soluzione al precedente problema è stata ottenuta mediante l’implementazione del
programma riportato in appendice E2.
Esso è molto simile al precedente, ad esclusione del fatto che la media mobile viene
eseguita contemporaneamente per Vo e Ve. Di seguito vengono riportate le parti
salienti del programma.
Dopo la solita parte di inizializzazione si ha la dichiarazione di due unioni e della
funzione di media. Il main in questo caso contiene solo le istruzioni di settaggio del
convertitore e il richiamo della funzione di media mobile.
Le due union si differenziano per il fatto che una è di tipo unsigned long (cioè
unsigned long int) e l’altra long int. La necessità di avere due union così fatte deriva
dai tipi di calcolo eseguiti con la funzione di media mobile.
Una volta invocata la funzione adc_maverage il programma la esegue per un numero
infinito di volte. Tale funzione è costituita da due parti fondamentalmente identiche,
una per il calcolo della media di Ve e una per il calcolo della media di Vo.
All’inizio vengono infatti dichiarate diverse coppie di variabili, da usarsi per Vo e Ve
rispettivamente. La funzione di media mobile viene eseguita nel seguente modo:
viene acquisito un campione per Ve, aggiornata la relativa media e stampato a video
il risultato; in seguito viene acquisito un campione per Vo, aggiornata la relativa
media e stampato a video il risultato; quindi si passa di nuovo all’acquisizione di Ve
e così via.
Da notare la necessità di utilizzo della union dat, (che utilizza un dato long int)
durante l’esecuzione di somme e divisioni del campione acquisito (che può essere sia
positivo che negativo); diversa dalla union res (che utilizza un dato unsigned long)
che serve solo alla stampa a video del risultato col solito algoritmo.
La differenza rispetto al programma precedente sta nel fatto che adesso la media non
è eseguita da una funzione già esistente ma da un algoritmo implementato all’interno
del programma. Tale algoritmo, come si vede in seguito, funziona in maniera molto
142
simile a quello della funzione di media mobile presente in libreria, solo per due
medie anziché una sola. Non è stato possibile modificare la funzione preesistente di
media mobile e adattarla al caso di due medie contemporanee a causa del fatto che
essa è scritta in linguaggio ASSEMBLER e non è di facile comprensione.
I seguenti grafici riportano l’andamento della tensione di alimentazione e di uscita
del ponte impostando sulla cassetta di resistenze una R1_equilibrio=976704Ω.
2,037885
2,037880
2,037875
2,037870
2,037865
2,037860
2,037855
2,037850
2,037845
Colonna D
2,037840
2,037835
2,037830
2,037825
2,037820
2,037815
2,037810
2,037805
0
10
20
30
40
50
60
70
80
90
100
Grafico 4.12: misura di Ve(4)
-0,000010
-0,000011
-0,000011
-0,000011
-0,000011
-0,000012
-0,000012
-0,000012
Colonna E
-0,000012
-0,000013
-0,000013
-0,000013
-0,000013
-0,000014
-0,000014
-0,000014
0
10
20
30
40
50
60
70
80
90
100
Grafico 4.13: misura di Vo(4)
143
Si vede come la variazione di Vo tra una media e la successiva sia al massimo di
1 V e in assoluto di 4 V, sia per il fatto che la media include molti campioni (64)
che per il fatto che la Ve ha una variazione inferiore ai 100 V.
Acquisizione dei campioni mediata (compensata)
Si è cercato, attraverso il seguente programma di eliminare l’eventuale dipendenza
della Vo dalla Ve. All’equilibrio perfetto una variazione di Ve non si ripercuote su
Vo, essendo quest’ultima sempre nulla. Con ponte lievemente sbilanciato, una
variazione della Ve dovrebbe provocare una variazione della Vo.
Es.
Considerando il caso ideale di R3=1.022MΩ R2=R4=1MΩ
E uno sbilanciamento massimo di 1KΩ si ha
ve=1mV
R1=978474Ω
Vo= Ve*(R2/(R1+R2+dr)-R3/(R3+R4))=0.255 V
Si vede come tale variazione sia del tutto ininfluente ai fini dei calcoli in esame, in
quanto essa è inferiore di circa un ordine di grandezza all’ENOB del convertitore.
Anche in questo caso si è comunque realizzato il programma che implementi una
compensazione della variazione di Ve, applicando la semplice proporzione:
Vo_ideale:Vo_misurata=Ve_ideale:Ve_misurata
Vo_misurata e Ve_misurata sono le variabili da misurare con l’ADC, Ve_ideale si
considera pari a 2V e Vo_ideale viene calcolata di conseguenza.
Non viene riportato il listato del programma in quanto identico al precedente ad
esclusione di alcune righe in più per il calcolo della Vo compensata. Si aggiunge solo
che per evitare problemi dovuti alla dimensione della variabili in memoria e per
ottenere un risultato preciso, in un primo tempo si è eseguita l’operazione
Vo_misurata*Ve_ideale promuovendo il risultato a un tipo float e in seguito il
risultato è stato diviso per Ve_misurata.
Di seguito sono riportati i grafici ottenuti dalle misure effettuate.
I primi due grafici sono relativi al caso di R1=R_eq+1000, a seguito di cui si ha una
Vo negativa.
Gli ultimi due grafici sono relativi al caso di R1=R_eq-1000, a seguito di cui si ha
una Vo positiva.
Si nota come la formula di compensazione introdotta porti in realtà a un
peggioramento: mentre prima la dipendenza di Vo da Ve era molto blanda, la
formula di compensazione crea una correlazione tra le due grandezze.
In particolare, per Vo negative, l’andamento di Vo è concorde a quello di Ve; per Vo
positive l’andamento di Vo è opposto a quello di Ve
144
R1=976445+1000
2,038140
2,038130
2,038120
-0,000035
2,038110
-0,000038
2,038100
-0,000040
2,038090
-0,000043
2,038080
-0,000045
2,038070
Colonna D
2,038060
-0,000048
2,038050
-0,000050
2,038040
Colonna E
-0,000053
2,038030
-0,000055
2,038020
-0,000058
2,038010
2,038000
-0,000060
0
10
20 30 40
50 60
70 80 90 100 110
0
10 20 30 40 50 60 70
80 90 100 110
Grafico 4.14: misura di Ve e Vo(1)
R1=976445-1000
2,038020
0,000013
2,038015
0,000012
2,038010
0,000011
2,038005
0,000010
2,038000
0,000009
2,037995
0,000008
2,037990
0,000007
2,037985
Colonna E
2,037980
0,000006
2,037975
0,000005
2,037970
0,000004
2,037965
0,000003
2,037960
0,000002
2,037955
0,000001
2,037950
Colonna F
0,000000
0
20
40
60
80
100
120
140
0
20
40
60
80
100
120
140
Grafico 4.15: misura di Ve e Vo(2)
145
Acquisizione dei campioni mediata (riferimento esterno)
Questo programma intende utilizzare il riferimento di tensione esterna, in cui le
eventuali variazioni di Ve dovrebbero essere automaticamente compensate.
Il programma è lo stesso del caso media mobile correlata ad esclusione
dell’impostazione della tensione di riferimento esterna (mediante il registro
ADCON0) e di alcune variazioni hardware su alcuni pin della schedina.
La VREF esterna, coincide in questo caso con la tensione di alimentazione del ponte
Ve, che essendo prossima al valore di fondo scala, non è stata misurata.
Tuttavia, analizzando l’andamento di Vo di seguito riportato si nota come le
variazioni siano superiori al millivolt.
Questo fenomeno è spiegabile anche col fatto che la VREF è ora meno stabile
rispetto ai casi precedenti in cui si usava un riferimento interno e di conseguenza le
misure sono peggiori
Ne consegue che questo metodo è peggiore dei precedenti.
0,000700
0,000600
0,000500
0,000400
0,000300
0,000200
0,000100
Colonna D
0,000000
-0,000100
-0,000200
-0,000300
-0,000400
-0,000500
-0,000600
0
5
10
15
20
25
30
35
40
45
50
55
Grafico 4.16: misura di Ve con riferimento di tensione esterno
Acquisizione dei campioni mediata (calibrata)
Il seguente programma è molto simile a quello denominato “Acquisizione dei
campioni mediata (media mobile correlata)”.
L’unica differenza sta nel tipo di calibrazione utilizzata. In particolare, mentre in
precedenza si erano utilizzate le calibrazioni system offset, in questo caso si è optato
per una calibrazione che opera direttamente sui registri di guadagno e di offset.
Mentre per la schedina CDB operare sui registri di calibrazione è semplice, dato che
il loro significato è ben spiegato nei manuali; per la schedina MSC non è altrettanto
146
banale. In questo caso infatti non viene chiaramente spiegato il significato dei vari bit
interni a detti registri.
Si precisa fin da ora che i registri di calibrazione (sia offset che guadagno) sono
composti da 3 registri da 8 bit ciascuno (uno contenente la parte più significativa
della calibrazione, uno quella media e uno quella meno significativa)
Dopo varie prove, si è deciso di operare nel seguente modo.
OFFSET
E’ l’ordinata della retta Vi-Vo per Vi=0. Teoricamente è nulla,
corrispondente al valore esadecimale 000000 (OCH=00, OCM=00, OCL=00).
La calibrazione si esegue misurando Vo per Vi=0 (tramite system offset calibration)
e quindi scrivendolo nel registro dell’offset pensando che questo sia fatto da 24 bit .
GUADAGNO
E’ la pendenza della retta Vi-Vo. Teoricamente ha valore unitario,
corrispondente al valore esadecimale 5FEC5A (GCH=5F, GCM=EC, GCL=5A).
Calibrato l’offset, il guadagno esatto avrà un valore leggermente superiore o inferiore
a 1 (5FEC5A esadecimale). Il valore esadecimale da inserire nel registro si ottiene
dalla proporzione 1: 5FEC5A=guadagno reale:valore esadecimale.
La calibrazione è stata effettuata per entrambi i canali destinati ad acquisire Vo e Ve
ed è naturalmente diversa da canale a canale.
I risultati che si ottengono con questo programma sono i migliori e infatti questo è il
programma utilizzato per la stima delle prestazioni del convertitore.
Anlalisi delle prestazioni de convertitore
Utilizzando il precedente programma, si sono effettuate varie misure sul ponte di
resistenze.
La resistenza di equilibrio è pari a 976124Ω.
Per migliorare il risultato la media mobile è stata fatta su pacchetti contenenti un
numero più elevato di campioni (256). Questo implica anche un maggior tempo nelle
misure in quanto l’uscita di un singolo dato avviene con un data rate effettivo di circa
2Hz e a fronte di ogni variazione di R1 si devono attendere 256 valori in uscita
all’ADC affinché il risultato vada a regime.
147
Si riportano ora l’andamento teorico di Vo in funzione di dr. La linea blu è
l’andamento di Vo determinato dal calcolo teorico Vo=-dr*Ve/f(r). Anche essa ha un
errore, non rappresentato nel grafico.
I punti verdi sono i risultati delle misure; ognuno di essi ha due punti rossi
rappresentanti il margine di errore nella lettura (sono collocati a distanza di 2 V
dalla misura e coincidono con l’incertezza del convertitore determinata dall’ENOB,
pari a 21-22).
Grafico 4.17: misure e calcoli teorici usando il convertitore msc1211y5(1)
Le immagini seguenti sono una vista ingrandita della parte centrale del grafico: si
nota come valori teorici e pratici siano compatibili tra di loro.
148
Grafico 4.18: misure e calcoli teorici usando il convertitore msc1211y5(2)
Grafico 4.19: misure e calcoli teorici usando il convertitore msc1211y5(3)
149
100
90
80
70
60
50
Colonna E
40
30
20
10
0
-60 -54 -48 -42 -36 -30 -24 -18 -12 -6
0
6
12 18 24 30 36 42
48 54 60
Grafico 4.20: rumore nel convertitore msc1211y5 nelle misure a ponte
Il precedente grafico è una misura del rumore presente quando viene utilizzato il
circuito a ponte. Si vede come esso sia molto maggiore di quello misurato quando il
calibratore era direttamente interfacciato col convertitore. Il motivo di questo
fenomeno è dovuto alla complessità del setup di misura, che a causa dei numerosi
cavetti utilizzati, introduce un rumore notevole. E’ spiegato così anche il motivo per
cui una media mobile di 256 campioni non è in grado di produrre un ENOB pari a
22; mentre nelle prove con interfacciamento diretto tra ADC e convertitore, una
media a 32 campioni garantiva un ENOB superiore a 22.
4.4 ANALISI DI UN SEGNALE PERIODICO IN MSC1211Y5
Oltre che per l’acquisizione di segnali stazionari o lentamente variabili, i convertitori
in esame possono venire utilizzati per l’acquisizione di segnali a basse frequenze.
Si intende a questo punto, effettuare una analisi delle prestazioni del convertitore
quando esso viene impiegato per l’acquisizione ad esempio di un segnale
sinusoidale.
L’acquisizione del segnale può avvenire sia utilizzando il programma “acquisizione
multicanale” (precedentemente descritto e modificato in “acquisizione_sinusoide”
per l’acquisizione su di un unico canale), che utilizzando il software demo fornito.
Di seguito, viene riportato il risultato dell’acquisizione di un segnale sinusoidale
avente i seguenti dati.
Tensione di picco=1V
Frequenza=0.1Hz
150
Grafico 4.21: acquisizione di una sinusoide
Il
grafico
è
relativo
all’acquisizione
mediante
il
programma
“acquisizione_sinusoide”. Il risultato è praticamente identico utilizzando il software
demo fornito.
Da specificare subito che il numero di campioni per periodo dipende sia dalla
frequenza dell’onda sinusoidale che dal data-rate impostato nel convertitore. In
generale il numero di campioni per periodo è maggiore al calare della frequenza del
segnale in ingresso e all’aumentare del data rate del convertitore.
Effetto della media sul segnale sinusoidale acquisito
Si vuole a questo punto eseguire delle operazioni di media sul segnale acquisito, per
cercare di eliminare il rumore ad esso sovrapposto.
A differenza dell’analisi in regime stazionario (o quasi stazionario) effettuata in
precedenza, per segnali periodici non vale il concetto che applicare una media su un
numero maggiore di campioni porta a un risultato migliore. Questo è dovuto al fatto
che per un segnale periodico (e nel nostro caso a valor medio nullo), al crescere del
numero di campioni su cui si esegue la media, si ottiene un segnale in uscita sempre
più attenuato. Se il numero di campioni su cui eseguire la media diventa pari al
numero di campioni presenti in un periodo, si ottiene addirittura l’annullamento del
segnale.
151
Grafico 4.22: processo di media
In realtà ciò non accade mai a causa dell’inevitabile asincronia presente tra frequenza
di campionamento e frequenza della sinusoide (è impossibile avere un data-rate
multiplo esatto della frequenza della sinusoide).
L’immagine precedente è relativa all’esecuzione di una media correlata e non
mobile. Si sono effettuate delle misure utilizzando sia i programmi di media correlata
che di media mobile. Tuttavia le analisi più significative, per comodità di calcolo,
sono state effettuate sui segnali ottenuti da un processo a media mobile.
Per capire quale sia il limite massimo di campioni su cui effettuare la media tali che
permettano di ottenere un segnale molto simile all’originale (cioè non distorto e con
attenuazione ridotta) si è effettuata una analisi in frequenza.
La grandezza per valutare il miglioramento ottenuto dalla media sarà l’ENOB.
Si precisa inoltre che il calcolo dell’ENOB può essere visto almeno in due modi
diversi.
•
La definizione sempre usata fino ad ora (e presente nei fogli tecnici dei
convertitori in esame) è quella di differenza tra ampiezza dell’intervallo
massimo di misurazione (±2.5V e quindi 5V di intervallo) e livello del
rumore presente.
152
Esempio.
Considerando un ADC a 24 bit, un livello di rumore di -100dB, ne consegue che
l’ENOB, secondo questa definizione vale:
13dB-(-100dB)=113dB (dove 13dB è il valore corrispondente allo span di ingresso
di 5V).
113=20log(Vspan/noise) Vspan/noise=10^(-5.65)= 447kvolte. Quindi l’ENOB
in questo caso sarebbe 19 in quanto 2^(19) è la minima potenza in grado di risolvere
447k livelli diversi (524k livelli).
Questo significa che ci sono 19 bit che contengono delle informazioni valide, non
deteriorate dal rumore.
Figura 4.23: definizione di ENOB(1)
•
Considerando invece l’ampiezza del segnale in ingresso attuale, si può dare
una definizione di ENOB come differenza tra ampiezza del segnale in
ingresso e del rumore.
Esempio.
Sia Vin=0.1V (cioè -20dB) e il rumore sempre di -100dB.
Secondo la nuova definizione si avrà
-20-(-100)=80=20log(Vin/noise) Vin/noise=10^(4)= 10kvolte. Quindi l’ENOB
in questo caso sarebbe 14 in quanto 2^(14) è la minima potenza in grado di risolvere
10k livelli diversi (16k livelli).
In questo caso, i bit di risoluzione dell’ADC, sono sempre 19 ma quelli contenenti
informazione utile sono solo 14. I 5 bit più significativi sono nulli e quindi non
contengono informazione (secondo questa definizione di ENOB).
Figura 4.24: definizione di ENOB(2)
Analisi in frequenza del segnale sinusoidale mediante FFT
La prima operazione effettuata, è l’analisi del segnale campionato originale in
frequenza.
Lo strumento principale per l’analisi di un segnale a tempo discreto in frequenza è la
trasformata di Fourier discreta (DFT).
Essa, come noto dalla teoria è data dalla seguente formula.
153
X DFT (k ) =
1
* ( x * w(nTs )) DTFT
N
con f=k/Tw
Si tratta quindi dell’esecuzione della trasformata di Fourier a tempo discreto eseguita
non sul segnale x(t) ma sulla sua versione finestrata. La finestratura consiste nella
moltiplica di x(t) per una finestra w. La finestra w è un segnale che può avere vari
andamenti (finestra rettangolare, di Hanning ecc.) ed è composto da un numero N
finito di campioni.
Se il segnale x(t) è un segnale periodico esso deve essere contenuto nella finestra un
numero di volte intero (cioè la frequenza di x(t) deve essere un multiplo intero della
frequenza di campionamento 1/Ts). Se questa condizione è verificata, la DFT è
caratterizzata da un diagramma con la o le armoniche del segnale. La loro ampiezza
può coincidere o meno con quella del segnale originale, a seconda del tipo di finestra
utilizzato. Se invece il segnale non è contenuto nella finestra un numero di volte
intero la DFT produce anche del leakage, cioè le armoniche del segnale originale non
sono ben definite e presentano delle “sbavature”.
Il motivo della presenza di queste armoniche indesiderate, è facilmente spiegabile col
fatto che la trasformata di Fourier viene eseguita su un tratto di N campioni del
segnale originale, pensando che questo si ripeta poi periodicamente. Se il tratto in
esame non contiene un numero intero di periodi, è ovvio che la sua ripetizione
periodica sarà un segnale distorto, diverso da quello originale e quindi contenente
delle armoniche spurie.
Figura 4.25: trasformata di Fourier discreta
154
Il programma per l’esecuzione della DFT, è quello riportato in appendice F.
Esso inizia con la definizione del vettore x, rappresentante i campioni del segnale
sinusoidale misurati dall’ADC.
In seguito si definisce un vettore dei tempi e delle frequenze di dimensione uguale a
quello del vettore x (1024).
Ts rappresenta il tempo si campionamento del segnale sinusoidale (calcolato con una
certa approssimazione, in base al data-rate del convertitore). Tw è il tempo di
osservazione del segnale, detto anche tempo di finestra. In base a questi parametri si
definiscono quindi i vettori temporali (1024 istanti temporali separati tra loro da un
intervallo Ts per una durata complessiva pari a Tw) e delle frequenze (definita
Df=1/Tw l’unità di frequenza della finestra, detta anche BIN, la scala delle frequenze
si ottiene dal prodotto n*Df).
Di seguito vengono definite due finestre e per ognuna di esse si esegue il calcolo
della DFT.
Si nota come il numero di campioni delle finestre sia sempre una potenza di due.
Questo è molto utile per il calcolatore, che ha un algoritmo molto efficiente per il
calcolo della DFT per un numero di campioni pari a 2^n. Tale algoritmo è noto come
FFT o DFT veloce.
Le finestre usate sono due: una quella di Hanning, una è la flat-top. Per le loro
caratteristiche, la prima è utilizzata per l’analisi di segnali con molte armoniche, in
modo da rendere visibili anche le armoniche di ampiezza ridotta vicine in frequenza
ad armoniche con ampiezza molto più elevata (con altre finestre le armoniche minori
rischiano di essere inglobate dal leakage delle superiori e quindi risultare invisibili).
La flat-top, viene invece utilizzata nel caso in cui le armoniche siano distanti tra di
loro per ottenere una lettura molto precisa della loro ampiezza.
A volte, è stata utilizzata anche la finestra Gauss-top-coombs per la sua capacità di
minimizzare il più possibile l’effetto del leakage.
Da sottolineare inoltre il fatto che la frequenza di campionamento deve essere
sempre maggiore a due volte la frequenza del segnale sinusoidale altrimenti si
incorre nel problema dell’aliasing e i grafici della DFT risultano incomprensibili.
Di seguito vengono riportati i tre grafici ottenuti dal programma.
155
156
Grafico 4.23: sinusoide originale, FFT eseguita con finestre Gauss-top-coombs,
Hanning e Flat-top
Nel primo grafico si nota come il segnale sinusoidale finestrato non sia composto da
un numero intero di periodi. Questo provoca del leakage, visibile in entrambi i
successivi grafici.
Il primo grafico della DFT è realizzato attraverso la finestra di Hanning, il secondo
con la finestra flat-top.
Si nota come la flat-top produca un leakage molto più consistente della Hanning, che
tende quindi a coprire le armoniche più piccole.
In questo caso, essendo le armoniche superiori molto ridotte (inferiori ai -75dB), la
flat-top non permette di vederle in quanto produce un leakage con la fondamentale
che risulta in ampiezza sempre maggiore al valore delle armoniche superiori (i lobi
secondari della flat-top hanno ampiezza maggiore ai -60dB per un intervallo di
frequenze pari a 50 bins) .
D’altro canto, la flat-top ha una precisione nella ampiezza superiore alla Hanning.
Considerando infatti l’armonica fondamentale del segnale sinusoidale (posta a
0.1Hz) e ingrandendo i grafici si possono leggere i seguenti valori.
Hanning -6.45dB
Flat-top -6.13dB
Premettendo che il valore ideale sarebbe di -6dB (in quanto il segnale originale ha
valore pari a 1V, corrispondente a 0dB, che si traducono in due righe spettrali a 1Hz
e a -1Hz di -6dB); ne consegue che la precisione in ampiezza è molto migliore
utilizzando la finestra flat-top. In particolare, la lettura di -6.13dB della flat-top può
considerarsi come livello reale in ampiezza del segnale in ingresso, che a causa di
una calibratura non efficiente può essere diverso dai -6.0dB teorici.
Le armoniche superiori (poste a 0.1Hz, 0.2Hz ecc.), sono dovute alla distorsione
armonica del generatore di funzioni.
A questo proposito, risulta molto interessante il calcolo della distorsione armonica in
base al valore delle fondamentali e delle superiori.
157
THD (total harmonic distortion)
THD =
H 2 2 + ... + Hn 2
H 1 + ... + Hn
2
2
≅
H2
H1
Eseguendo il calcolo in dB si ha THD=-6dB-(-76dB)=70dB
20*log10(x)=-70 x=316,2 volte (con x rapporto tra H2 e H1)
Considerando l’ampiezza di H1 pari a 1V, ne consegue che H2 sarà proprio pari a
316,2 V.
Si esegue a questo punto il calcolo dell’ENOB che si ha a disposizione utilizzando
questo generatore di funzioni.
In questo caso si usa una definizione delll’ENOB come differenza tra segnale attuale
in ingresso e conseguente armonica superiore, considerando il generatore in grado di
cambiare la sua risoluzione al variare dell’ampiezza del segnale in ingresso e delle
conseguente armoniche superiori.
Nel caso in esame, per risolvere 316,2 V è necessario che ci siano a disposizione
N=12 bit infatti 1/2^12=244 V, che è la minima potenza (negativa) di 2 in grado di
scendere sotto i 316.2 V.
Quindi ENOB=12
Il generatore di funzioni ha infatti a disposizione una porta di comunicazione
parallela a 12 bit: considera il segnale utile con una risoluzione pari all’ampiezza
raggiunta dalle armoniche superiori.
Un motivo fondamentale per cui è stato eseguito uno studio in frequenza è il calcolo
dell’ENOB del convertitore.
Secondo la definizione data nei fogli tecnici, l’ENOB dipende dal rapporto tra fullscale-range del convertitore e il valore efficace del livello di rumore.
Osservando la FFT, si può stimare un livello di rumore di circa -130dB. Tuttavia, tale
valore non è quello da utilizzare nel calcolo dell’ENOB.
Infatti, stimando di avere in ingresso un rumore bianco con varianza , ne consegue
che l’ENOB deriva dal rapporto FSR/( ) (dove si è considerato il valore efficace
del rumore). Dai calcoli teorici, dato un rumore in ingresso con varianza , ne
consegue che il livello di rumore della FFT risulta * (ENBW/N) (dove N è il
numero di campioni su cui è eseguita la FFT e ENBW è la banda equivalente,
dipendente dalla finestra usata, avente valore di qualche unità).
Quindi, maggiore è N, più risulta basso il livello del rumore. Ne consegue che la
FFT, effettua già intrinsecamente una operazione di media sul rumore, abbassandone
il livello.
Per avere il valore di riferito al rumore misurato dal convertitore, bisogna applicare
il seguente calcolo al livello di rumore della FFT
=fft_noise* (N/ENBW)
Nel caso in esame, in mancanza delle armoniche superiori l’ENOB avrebbe il
seguente valore
fft_noise=-135dB
158
=178n* (2048/1.5)=6.58
ENOB=log2(FSR/( ))=log2(5/6.58 )=19.5
Questo valore di ENOB è proprio quello ottenuto nelle misure iniziali della schedina
MSC in cui la conversione avveniva senza medie.
In queste analisi, si farà quindi riferimento al livello del rumore per il calcolo
dell’ENOB e non a quello delle armoniche secondarie, nel qual caso l’ENOB sarebbe
sempre pari a 12 e i risultati ottenuti saranno sempre relativi al caso di sinusoidi
ideali, prive di armoniche superiori (in cui sia presente cioè solo la fondamentale e il
rumore di fondo).
Il grafico successivo è invece relativo al caso di media mobile a pacchetti di 256.
159
Grafico 4.24: FFT eseguita con finestre Gauss-top-coombs e Hanning su segnale
mediato
fft_noise=-160dB
=10n* (2048/1.5)=370n
ENOB=log2(FSR/( ))=log2(5/392n)=23.7
Si nota però anche come l’ampiezza dell’armonica fondamentale sia di molto
attenuata. Ciò significa che il segnale mediato è molto attenuato rispetto all’originale
e questo non è un risultato accettabile.
Un risultato migliore può essere ottenuto da un compromesso tra la risoluzione
dell’ADC e la riduzione del rumore. Come illustrato nella parte teorica dei
convertitori, all’aumentare del data-rate si ottiene una riduzione dell’ENOB e cioè un
aumento dell’incertezza delle misure. Tuttavia, aumentando il data-rate, è ovvio che
la media mobile può essere eseguita considerando dei pacchetti con un numero N di
campioni maggiore senza attenuare considerevolmente il segnale in ingresso
(essendo aumentato il numero dei campioni acquisiti nell’unità di tempo e cioè
essendo la sinusoide acquisita costituita da un numero molto più elevato di
campioni).
Di seguito viene riportato il grafico della FFT riferito a un data-rate di 300Hz (a cui
corrisponde un ENOB di 14-15) e con una media mobile eseguita a pacchetti di
N=256 campioni.
160
Grafico 4.25: FFT eseguita con finestra di Hanning su segnale mediato con data-rate
di 273sps
Si nota come il livello del rumore sia di molto ridotto (circa -150dB) mentre il valore
dell’armonica fondamentale sia praticamente invariato rispetto all’originale
(ingrandendo il grafico si nota che l’ampiezza della fondamentale è di circa -6dB).
Adesso
fft_noise=-150dB
=31.6n* (16384/1.5)=3.3
ENOB=log2(FSR/( ))=log2(5/3.3 )=20.5
questo risultato è molto importante in quanto dimostra come il numero di bit utili del
convertitore, mediante l’operazione di media, sia stato portato da un valore teorico di
14-15 (dai data-sheet si vede che l’enob per un data-rate di 300 scende a 14-15) a
uno di 20, recuperando ben 6 bit al rumore.
Da notare anche la presenza dell’armonica di rete (a 50Hz) e dei suoi multipli a causa
del fatto che in base al data-rate scelto, ora il filtro digitale è un notch alla frequenza
di 240Hz e multipli; quindi non filtra le armoniche di rete. In realtà, grazie alla media
mobile, i disturbi a 50Hz sono comunque attenuati.
Considerando invece il caso di acquisizione di un segnale a un data-rate di 300Hz ma
senza mediare si ottiene il seguente grafico:
161
Grafico 4.26: FFT eseguita con finestra di Hanning con data-rate di 273sps
Adesso il calcolo dell’ENOB diventa
fft_noise=-110dB
=3.16 * (16384/1.5)=329
ENOB=log2(FSR/( ))=log2(5/329 )=14.0
valore compatibile con quello dei data-sheet.
Analisi in frequenza del segnale sinusoidale mediante digrammi di Bode
Per riuscire a capire quale sia il limite massimo di campioni da mediare, tali che
permettano una riduzione del rumore ma che consentano di conservare il segnale
originale, si è eseguita un’analisi del sistema discreto utilizzando le trasformate Z.
Considerando una media a 4 campioni, l’espressione della media mobile nel tempo è
la seguente:
y(n)=[x(n)+x(n-1)+x(n-2)+x(n-3)]/4 ;
Si nota subito come l’espressione sia quella di un generico filtro digitale (in questo
caso FIR).
Come noto dalla teoria, l’espressione generica di un filtro è
y ( n) =
N
k =1
a k * y (n − k ) +
M
r =0
br * x(n − r )
Per i filtri FIR è presente solo la seconda sommatoria, per quelli IIR entrambe.
162
Sfruttando la linearità della trasformata Z e il fatto che un ritardo temporale –n
corrisponde a un esponenziale z^-n nelle trasformate si ottiene:
M
H (Z ) =
Y (Z )
=
X (Z )
br * z − r
r =0
N
1−
k =1
a k * z −k
Nel caso di media a quattro termini si ha:
Y (Z ) z 3 + z 2 + z + 1
H (Z ) =
=
X (Z )
4* z3
Lo strumento utilizzato per valutare l’espressione sono i diagrammi di Bode.
Di seguito viene riportato il programma realizzato per ottenere tali diagrammi.
%tempo discreto
%y(n)=(x(n)+x(n-1)-x(n-2)+x(n-3))/8;
%trasformata z
% num/den=1/4+1/4*z^-1+1/4*z^-2+1/4*z^-3
clear
clc
num=[1,1,1,1];
den=[4,0,0,0];
% % num=[1];
% % den=[1,1];
%
% sys=tf(num,den);
Z = TF('z',0.1);
H=(Z^3+Z^2+Z+1)/4*Z^3; %fa bode di discreto trasformata z con z=e(jwTc)
figure(1);
bode(H);
% si nota come al calare di Tc la bp diventi più ampia in quanto ho più campioni per
sinusoide e la media di un pacchetto da 8 attenua molto poco il segnale
%al crescere del numero di componenti su cui si esegue la media la bp
%viceversa cala
163
figure(2);
[numc,denc]=d2cm(num,den,0.1,'tustin'); %fa bode di continuo con s=jw=j2pif
bode(numc,denc);
Grafico 4.27: diagramma di Bode nel dominio discreto di un filtro discreto
implementante un processo di media mobile
Si nota come la media sia effettivamente un filtro con andamento passa-basso. In
questo caso, la banda passante è di circa 8Hz. Alle frequenze superiori si hanno varie
frequenze di risonanza, in corrispondenza alle pulsazioni per cui il numeratore si
annulla. Ad esempio per =10* rad/sec si ha *Tc= e il numeratore
Z^3+Z^2+Z+1 (con Z=e(j )) diventa in modulo pari a 0. Essendo l’andamento di
e(j ) periodico ne consegue che saranno periodici pure i picchi di risonanza.
La seguente immagine riporta l’andamento del filtro in esame nel dominio del tempo
continuo. Esso è stato ottenuto convertendo il diagramma a tempo discreto tramite
opportune istruzioni Matlab (in questo caso la variabile complessa è S=j )
Naturalmente l’andamento è sempre quello di un filtro passa basso.
164
Grafico 4.28: diagramma di Bode nel dominio continuo di un filtro discreto
implementante un processo di media mobile
I seguenti diagrammi intendono illustrare come la banda passante del filtro media
mobile tenda a crescere al calare del periodo di campionamento Tc e come tenda a
calare al crescere del numero di elementi N su cui viene eseguita la media mobile.
La spiegazione di questo fenomeno è abbastanza intuitiva: calare Tc significa che il
numero di campioni acquisito per ogni sinusoide aumenta e quindi la media mobile
(a parità di elementi N su cui eseguire la media) ha un effetto meno rilevante dal
punto di vista dell’attenuazione e dello sfasamento sul segnale originale; viceversa, a
parità del numero di campioni acquisiti per sinusoide (dipendenti da Tc), si ha che al
crescere di N (numero di elementi su cui eseguire la media) il segnale originale è
soggetto a una maggiore attenuazione e sfasamento.
Questa analisi, essendo teorica (non utilizza dati provenienti dal convertitore), può
considerarsi generale, valida per entrambi i convertitori in esame.
La scelta di considerare nei seguenti grafici la banda passante come limite accettabile
per pensare ancora valido il segnale di ingresso è del tutto arbitraria ed è stata
utilizzata per il fatto che la banda passante è un valore convenzionale frequentemente
adottata per caratterizzare i filtri. A seconda della precisione voluta nel risultato
finale, può essere scelto come limite massimo un valore inferiore alla banda
passante: anziché considerare valido il risultato in uscita fino a quando il segnale ha
una attenuazione che non supera i -3dB si può scegliere un valore inferiore, anche
delle frazioni di dB. In particolare, per le applicazioni in esame (ad alta risoluzione),
è ovvio che il limite massimo di attenuazione dovrà essere inferiore ai -3dB, magari
dell’1% o anche meno).
165
Grafico 4.29: variazione della banda passante in funzione del numero di campioni su
cui viene eseguita la media
166
Grafico 4.30: variazione della banda passante in funzione del tempo di
campionamento
167
4.5 MISURE A PONTE SU CDB5534
Le esperienze effettuate sulla schedina MSC, sono state ripetute per la schedina
CDB. Di seguito vengono riportati i risultati conseguiti. E’ bene precisare fin da ora,
che in queste misure si sono considerate valide le impostazioni utilizzate per le
precedenti. Inoltre, non essendo possibile per motivi tecnici per la schedina in esame
programmare il microcontrollore (che richiederebbe una schedina di
programmazione opportuna), si sono realizzati in Matlab dei programmi equivalenti
a quelli eseguiti in precedenza in C da applicare ai dati ottenuti dalle misure sulla
schedina CDB.
Misure a ponte
In questo caso, utilizzando lo stesso circuito a ponte in precedenza descritto, si sono
eseguite delle misure con ponte in equilibrio e ponte non in equilibrio (fornendo una
variazione dr alla resistenza R1).
L’acquisizione dei dati è stata effettuata impostando un data-rate di 12.5Hz. In
questo caso, a differenza di quello con il convertitore MSC il data-rate impostabile
non è un valore qualsiasi ma può essere scelto tra una decina di valori possibili. Il
valore 12.5Hz è quello più prossimo possibile ai 10Hz utilizzati nella precedente
misura a ponte, in modo da avere delle condizioni di misura più simili possibili.
Il filtro digitale è in questo caso costituito da una cascata di sinc5 e sinc3; non è
presente invece il buffer di ingresso. Il convertitore CDB è stato impostato per il
resto in modo esattamente uguale a quello MSC: funzionamento bipolare, PGIA=1,
tensione di riferimento di 2.5V.
Una volta determinato il valore di R1 di equilibrio (in questo caso pari a 977280 ) si
è misurata la tensione di uscita del ponte con diversi valori di R1.
In questo caso, dovendo utilizzare il programma demo fornito, si è potuto misurare la
tensione di un solo canale per volta. In particolare, si è sempre misurato Vo. La
misura di Ve (importante per determinare il valore di Vo teorico da comparare poi
con quello sperimentale) è stata eseguita un’unica volta, dato che come si è visto in
precedenza non esiste una relazione importante tra Vo e Ve una volta introdotta la
media.
Da precisare anche che il canale per l’acquisizione dei dati è stato calibrato
manualmente: una misura a Vin=0 permette di determinare l’offset, una misura a
fondo scala permette di trovare il fattore di correzione del guadagno. Per una
calibrazione migliore il guadagno non è stato calcolato con una misura di fondo scala
ma con una misura pari all’incirca al massimo valore misurato (circa 0.5mV).
In questo modo, come si osserva dalla seguente immagine, lo scostamento massimo
tra curva ideale e curva reale è più ridotto.
168
Grafico 4.31: calibrazione su diversi intervalli di tensione
Una volta eseguite le misure della Vo per diversi valori di R1 (per ogni valore di
resistenza sono stati misurati 512 campioni), su tali misure è stato implementato un
programma di media mobile in Matlab (riportato di seguito).
Si vede come i dati campionati vengano in un primo momento convertiti da valore
decimale in tensione e di seguito venga implementato il solito procedimento di media
mobile.
Per sapere poi quale sia il valore più ricorrente dei dati mediati, da considerarsi come
valore di uscita del ponte per il valore di R1 in esame, si è eseguito su di essi una
ulteriore media.
dati=[-1672
-1659
-1692
-1757
169
-1678
-1895
.
.
.
-1631
-1714
-1596];
dati=dati.*(2.5/8388608);
media(1)=dati(1);
for i=2:length(dati)
if i<=256
media(i)=((i-1)*media(i-1)+dati(i))/i;
else
media(i)=(256*media(i-1)+dati(i)-dati(i-256))/256;
end
end
figure(1);
plot (media);
sum=0;
for i=257:512
sum=sum+media(i);
end
media_di_media=sum/256
Tale programma, permette di ottenere dei dati in uscita molto più immuni al rumore,
come si può osservare dal seguente grafico (riferito a uno scostamento di R1
dall’equilibrio pari a -30 ).
I campioni originali presentano delle variazioni considerevoli (fino a 250 V come
scostamento massimo); dopo aver applicato la media mobile lo scostamento massimo
è di soli 2 V (trascurando la prima parte del grafico, in cui l’effetto della media
mobile non è rilevante a causa del numero limitato di campioni su cui viene
eseguita).
170
Grafico 4.32: segnale originale e mediato ottenuto col convertitore CDB5534
Considerando accettabile il modello dell’approssimante lineare Vo=-dr*Ve/f(r), si è
passati anche in questo caso al confronto tra i valori teorici e quelli misurati di Vo, in
funzione di dr.
In questo caso si sono considerati i seguenti valori.
Ve=2.006574V (ottenuta a sua volta dal programma di media mobile, su una misura
di Ve scorrelata da Vo)
2
(1 + α )
f (r ) =
=3909583
α / R1
Grafico 4.33: misure e calcoli teorici usando il convertitore CDB5534(1)
171
Grafico 4.34: misure e calcoli teorici usando il convertitore CDB5534(2)
Si nota come i valori teorici e pratici siano anche in questo caso tra loro compatibili,
anche se con un margine di errore lievemente maggiore al caso del convertitore
MSC.
Essendo il convertitore in esame privo di buffer di ingresso, si è ipotizzato che il
motivo degli errori nelle misure possa essere dovuto all’eccessivo valore della
impedenza di ingresso (dell’ordine dei MΩ col ponte usato).
Si è a questo punto costruito un ponte utilizzando delle resistenze di valore più
ridotto. In particolare risono utilizzate resistenze da 39KΩ, in modo che l’impedenza
di ingresso fosse inferiore ai 100KΩ e cioè di un ordine di grandezza in meno
rispetto al ponte iniziale).
Utilizzando un ponte diverso, ne consegue che cambierà anche il parametro f(r)
utilizzato per linearizzare la relazione tra tensione di uscita del ponte e variazione dr
della resistenza R1.
Essendo ora R1=R2=R3=R4 si ha R2/R1 R3/R4= =1
Ne consegue che
(1 + α ) 2
= f (r ) =156KΩ
α / R1
Vo
dr
≈−
Ve
f (r )
I due seguenti grafici riportano le misure ottenute.
Si nota come in questo caso le misure (rappresentate dagli asterischi) e le rette
teoriche siano tra loro compatibili.
172
Per fare in modo che la caratteristica lineare tra Vo e dr approssimi bene quella
ideale, è necessario imporre uno scostamento dr inferiore al caso del ponte con
resistenze da 1MΩ. Questo è dovuto al fatto che ora f(r) non è più dell’ordine dei
MΩ ma delle centinaia di KΩ. Per fare in modo che la caratteristica lineare sia
accettabile è quindi necessario ridurre di almeno un ordine di grandezza lo
scostamento dr. Osservando i grafici, si nota come gli scostamenti dr siano in questo
caso compresi tra un minimo di 0.1Ω e un massimo di 10Ω (nel convertitore MSC
erano compresi tra 10Ω e 1000Ω). Quindi la caratteristica lineare tra Vo e dr è
accettabile, essendo ridotto il valore di dr massimo non di un ordine di grandezza ma
addirittura di due.
Da notare poi come siano apprezzabili anche le variazioni di R1 dell’ordine del
decimo di ohm. Scalando le resistenze del ponte di un fattore 10 (in realtà la
riduzione è un po’ maggiore: da 1MΩ a 39KΩ la riduzione è di 25volte) a parità di
ENOB la variazione minima sentita dal convertitore dovrebbe essere ottenuta agendo
sulla decade immediatamente precedente (meno significativa) a quella dei 10Ω cioè
su quella degli ohm. Invece anche le variazioni dell’ordine delle centinaia di mΩ
sono apprezzabili. Questo è dovuto al fatto che il convertitore CDB, come visto nelle
misure iniziali ha un ENOB maggiore all’MSC. Tale situazione non era verificata
nelle misure con ponte a resistenze di MΩ a causa dell’eccessiva impedenza di
ingresso al convertitore CDB sprovvisto di buffer iniziale.
In definitiva, si può affermare che le misure effettuate sono tutte caratterizzate da una
incertezza inferiore al microvolt (nei grafici ogni misura è contrassegnata da un
limite superiore e uno inferiore distanti 1 V) e quindi l’ENOB risulta pari a 22-23.
Grafico 4.35: misure e calcoli teorici usando il convertitore CDB5534(3)
173
Grafico 4.36: misure e calcoli teorici usando il convertitore CDB5534(4)
1
0
0
90
80
70
60
50
C
olonnaC
40
30
20
10
0
-5
,3
6 -4
,77 -4,1
7 -3,5
8 -2,9
8 -2
,38 -1,7
9 -1,1
9 -5
,9
6
E
E
E
E
E
E
E
E
E
0
0
6 0
06 0
0
6 0
0
6 0
0
6 0
06 0
06 0
0
6 00
7
0
5
,9
6 1
,19 1
,79 2,3
8 2
,9
8 3
,58 4
,1
7 4
,7
7 5
,3
6
E
E
E
E
E
E
E
E
E
0
07 0
06 0
0
6 00
6 0
06 0
06 0
0
6 0
0
6 0
06
Grafico 4.37: rumore nel convertitore CDB5534 nelle misure a ponte
Il precedente grafico è una misura del rumore presente quando viene utilizzato il
circuito a ponte. Si vede come esso sia molto maggiore di quello misurato quando il
calibratore era direttamente interfacciato col convertitore. Il motivo di questo
fenomeno è dovuto alla complessità del setup di misura, che a causa dei numerosi
cavetti utilizzati, introduce un rumore notevole. E’ spiegato così anche il motivo per
cui una media mobile di 256 campioni produce un ENOB pari a 22-23; mentre nelle
prove con interfacciamento diretto tra ADC e convertitore, senza alcuna media
mobile l’ENOB era già pari a 22-23.
174
4.6 ANALISI DI UN SEGNALE PERIODICO CON CDB5534
Anche per questo convertitore è stata eseguita l’analisi in frequenza per un segnale
sinusoidale.
Pur esistendo la possibilità di ottenere la FFT direttamente dal programma demo
fornito, si è preferito farlo autonomamente, utilizzando gli stessi programmi Matlab
usati nell’analisi MSC, in modo da utilizzare un procedimento di analisi più simile
possibile per entrambi i convertitori.
I seguenti grafici rappresentano la DFT eseguita sul segnale sinusoidale (avente
sempre ampiezza pari a 1Vp e frequenza pari a 0.1Hz). Il data rate di uscita, e stato
impostato a 12.5Hz, che è il valore più prossimo possibile a 10Hz (rate usato col
precedente convertitore) e che permette l’eliminazione del disturbo dato dalla
frequenza di rete
fft_noise=-150dB
=31.6n* (2048/1.5)=1.16
ENOB=log2(FSR/( ))=log2(5/1.75 )=22.0
175
Grafico 4.38: FFT eseguita con finestra di Hanning e flat-top su segnale sinusoidale
originale
Si nota anche in questo caso come la finestra di Hanning permetta di vedere bene le
armoniche superiori (anche se con una incertezza non trascurabile sull’ampiezza)
mentre la finestra Flat-top a causa del leakage elevato che introduce, impedisca di
vedere altre armoniche oltre alla fondamentale (la quale ha però una precisione in
ampiezza notevole).
4.7 COMPARAZIONE DEI RISULTATI OTTENUTI
Si procede ora ad una comparazione dei risultati ottenuti.
Per quanto riguarda le misure a ponte con resistenze di 1MΩ si osserva un risultato
lievemente migliore utilizzandoli convertitore MSC.
La spiegazione di questo fenomeno può essere imputata al fatto che la scheda CDB
non ha un buffer di ingresso mentre la scheda MSC si. La presenza di un buffer di
ingresso è molto importante nel caso di misure con impedenze di sorgente
comparabili a quelle di ingresso al convertitore e questo è proprio il caso delle
misure a ponte, in cui l’impedenza del ponte e dell’ADC sono dell’ ordine del M .
Per questo motivo la calibrazione del convertitore deve essere eseguita con
particolare attenzione. Mantenendo il canale da calibrare collegato all’uscita del
ponte, si è fornita una tensione di ingresso Ve di 2V con ponte in equilibrio, cui
corrisponde una Vo nulla (per calcolare l’offset). In seguito, imponendo la Ve di 2V
e una variazione dr su R1 si è misurata Vo; confrontata poi con la Vo teorica per il
calcolo del guadagno.
Le misure a ponte con resistenze di 39kΩ invece, hanno portato a un notevole
miglioramento dei risultati per il convertitore CDB mentre nel caso dell’MSC le
176
misure sono simili al caso di ponte con resistenze di 1MΩ (per questo motivo non è
stato riportato alcun grafico riferito a tale misura). Questa considerazione conferma
ulteriormente la validità del buffer in ingresso per ponte con resistenze elevate.
Per quanto riguarda le misure con segnale sinusoidale in ingresso è possibile notare
delle differenze tra le diverse FFT ottenute con i due convertitori.
I valori delle armoniche superiori sono in entrambi i casi inferiori ai -70dB (circa 78dB in entrambi i casi).
E’ invece evidente come il livello del rumore di fondo sia molto più basso nel CDB
rispetto all’MSC (-135dB in MSC e -150dB in CDB).
Grafico 4.39: comparazione di FFT eseguite in MSC e CDB con finestra di Hanning
La spiegazione di tale fenomeno è costituita dalla presenza di un circuito di
condizionamento in ingresso ad ogni canale del convertitore.
177
Tale circuito consiste in un filtro passa basso RC del primo ordine con una banda
passante di circa 50KHz.
Tale circuito, è di seguito riportato. Si nota la presenza di due filtri: uno per i disturbi
di modo comune (R17-C32 e R18-C33), l’altro per quelli di modo differenziale
(R17-R18-C2).
Figura 4.43: circuito di condizionamento in ingresso al convertitore(1)
L’effetto di questo filtro è quello di attenuare i segnali aventi frequenze maggiori ai
50KHz; ne consegue che i segnali a bassa frequenza (di interesse) rimangono
invariati, quelli ad altra frequenza (rumore) vengono attenuati.
Si è realizzato a questo punto un circuito di condizionamento del segnale da inserire
in ingresso al convertitore MSC, in modo da verificare che così facendo si ottengano
dei risultati più simili al CDB. Il circuito (di seguito riportato) è identico al
precedente per quanto riguarda l’azione di filtro; sono state poi aggiunte una
resistenza di pull-up e una di pull-down per permettere l’applicazione di una tensione
di modo comune in ingresso pari a metà del range operativo del convertitore (2.5V).
Tale tensione dovrebbe portare a un miglioramento della uscita in quanto il
convertitore lavora nella zona centrale del suo range.
178
Figura 4.44: circuito di condizionamento in ingresso al convertitore(2)
Di seguito viene riportato l’andamento della FFT ottenuta col convertitore MSC
fornito di filtro in ingresso e con tensione di modo comune di 2.5V.
Il risultato è molto simile al caso dell’MSC originale, non sono presenti delle
differenze significanti. Questo è dovuto al fatto che la FFT si limita a rappresentare
le componenti a bassa frequenza; a frequenze più elevate sarebbe ben visibile
l’effetto del filtro di ingresso (che ha una banda dell’ordine dei kHz) che
contribuirebbe ad una riduzione del rumore.
Da sottolineare poi il fatto che la riduzione del rumore di fondo è molto maggiore nel
convertitore CDB per la presenza di un filtro digitale sinc5 anziché uno sinc3 come
nell’MSC).
Grafico 4.40: FFT eseguita su MSC con filtro di ingresso
179
Un metodo per evidenziare le differenze tra i due convertitori è quello di analizzare
una acquisizione di un segnale proveniente direttamente dal calibratore.
In particolare, si vuole evidenziare maggiormente come il convertitore CDB grazie al
suo filtro di ingresso e al filtro digitale sinc5 in assenza di problemi dovuti a
impedenze di ingresso troppo elevate sia molto più preciso del convertitore CDB.
Naturalmente, per avere un segnale più preciso possibile si è scelta l’uscita in
millivolt del calibratore anziché quella dei volt (caratterizzata da una incertezza
maggiore).
Questo primo grafico si riferisce all’acquisizione di un segnale col convertitore CDB
(con VCM di 2.5V) avente una ampiezza di 1mV.
Si nota come la variazione massima del segnale sia inferiore ai 3 V. Questo non
significa che il convertitore abbia un rumore di fondo di circa 3 V, in quanto tale
valore, come si osserva dal grafico, coincide con il ripple del calibratore.
In questo caso, si può dire che il rumore di fondo è di circa 0.5 V, che è la
variazione massima del convertitore tra due uscite successive (questo porta a un
ENOB di 22-23).
Grafico 4.41: misura della tensione del calibratore eseguita con CDB
Il seguente grafico, si riferisce invece all’acquisizione di un segnale di 1mV col
convertitore MSC originale (con sola VCM di 2.5V). In questo caso, a causa della
rumorosità in lettura del convertitore non è assolutamente visibile il ripple generato
dal calibratore. La gran parte dei dati letti, si scostano all’incirca di ±15 V da quello
centrale. Considerando quindi un livello di rumore di una ventina di microvolt, sia
arriva ad un ENOB di 19, che è molto minore rispetto a quello precedente.
180
Grafico 4.42: misura della tensione del calibratore eseguita con MSC
Questo ultimo grafico è riferito sempre al convertitore MSC. E’ stato utilizzato un
filtro di condizionamento del segnale di ingresso identico a quello già presente sul
CDB. L’effetto di riduzione del rumore è notevole, si riesce ad intravedere
l’andamento del ripple del calibratore e lo scostamento della maggior parte delle
misure dal valore centrale è di ±5 V. L’ENOB risulta quindi pari a 20.
Grafico 4.43: misura della tensione del calibratore eseguita con MSC e filtro di
ingresso
Il rumore si ridurrebbe ulteriormente se l’MSC fosse fornito di un filtro digitale sinc5
anziché di uno sinc3.
181
4.8 NOTE
Si vogliono fare a questo punto alcune precisazioni su termini e circuiti di misura
utilizzati nelle esperienze descritte.
Spesso, si sono utilizzati come sinonimi, per entrambi i convertitori le parole wordrate e data-rate, per indicare il numero di tensioni date in uscita dal convertitore ogni
secondo.
Un discorso analogo vale per i termini FSR (full-scale range) e SPAN, per indicare in
volt, l’escursione massima del segnale in ingresso.
La schedina MSC, integra al suo interno, su di un unico chip il convertitore e il
microcontrollore. Tale chip funziona con un cristallo avente frequenza di 22MHz. La
schedina CDB, invece, è fornita di convertitore e di microcontrollore costituiti da due
circuiti integrati distinti. Il convertitore utilizza un quarzo di frequenza pari a
4.95MHz, il microcontrollore uno da 22MHz.
Spesso, durante la descrizione della schedina CDB, è stato citato il registro command
register ma la modifica diretta dei suoi bit non è possibile. Esso è il registro che
provvede a generare i vari comandi necessari alla definizione delle varie modalità di
acquisizione del convertitore e di visualizzazione dei risultati. In realtà, tale registro
non è accessibile dall’interfaccia demo fornita e quindi, esso può essere collocato ad
un livello più basso, come registro che assume determinati valori in funzione a quelli
inseriti dall’utente nei registri accessibili (channel setup register, configuration
register ecc.).
Vari programmi realizzati per il microcontrollore della schedina MSC e varie misure
effettuate con entrambi i convertitori non sono stati riportati in questo documento,
per non appesantirlo ulteriormente, ci si è limitati a descrivere i risultati principali e
più importanti.
SI è verificato praticamente il valore di potenza assorbita dalle due schedine in
condizioni di funzionamento normale: 50-80mW per la schedina MSC; 60-70mW
per la schedina CDB.
In ultimo, una doverosa precisazione va fatta sui tipi di setup utilizzati nelle
principali misure effettuate.
Misure iniziali con convertitore direttamente interfacciato al calibratore
In questo caso, utilizzando sempre come ingresso negativo del convertitore il
piedino AINCOM (opportunamente connesso ad AGND, per ottenere delle
calibrazioni corrette), si assicura che la tensione imposta dal calibratore sia compresa
tra AGND e il valore impostato sul calibratore (sempre inferiore a 2.5V).
Figura 4.26: setup di misura(1)
182
Misure con alimentatore e generatore di funzioni (analisi di segnale periodico)
Per le misure di segnali sinusoidali, si è utilizzato il generatore di funzioni, anziché il
calibratore.
Un setup di misura come quello precedente, non garantiva in questo caso un corretto
funzionamento del sistema. Il problema sta nel fatto che il generatore di funzioni, a
differenza del calibratore, è collegato alla alimentazione di rete e quindi la tensione
in uscita dai morsetti + e – avrà un certo potenziale rispetto alla terra. Il generatore di
funzioni va collegato al convertitore, facendo attenzione che il potenziale di AIN- e
AIN+ sia sempre compreso nei limiti stabiliti (cioè tra AGND e AVDD).
Alimentando il convertitore con il suo alimentatore, è si possibile generare una
tensione di modo comune di 2.5V a cui sovrapporre il segnale sinusoidale; tuttavia
potrebbe nascere un problema di riferimenti di tensione, data la possibile differenza
di tensione rispetto alla terra del generatore di funzioni e del convertitore. Se invece
la tensione di modo comune di 2.5V viene generata attraverso l’utilizzo della terra, la
tensione sinusoidale del generatore viene forzata a sovrapporsi ad una tensione di
modo comune di 2.5V rispetto alla terra (attraverso una variazione delle impedenze
interne al generatore di funzioni, che determinano il potenziale dei suoi morsetti di
uscita rispetto alla terra).
Utilizzando il seguente circuito, in cui il convertitore è alimentato utilizzando non il
suo alimentatore ma uno da banco, in cui è impostabile la tensione, è possibile
utilizzare un riferimento di massa comune. Collegando AGND del convertitore, Vdel calibratore GND del ponte alla terra dell’alimentatore, si è certi di ottenere un
segnale di riferimento comune. Il segnale sinusoidale è sovrapposto ad una tensione
di modo comune di circa 2.5V che garantisce la possibilità di operare all’interno del
range consentito anche con buffer on (in cui AIN+ e AIN- devono essere entrambi
maggiori a 50mV ed inferiori ad AVDD-1.5V).
Figura 4.27: setup di misura(2)
Misure con calibratore e alimentatore (misure a ponte)
Una impostazione dello stesso tipo è stata utilizzata nelle misure a ponte. Da
sottolineare, come in questo caso non sia strettamente necessario l’utilizzo
dell’alimentatore da banco per ottenere dei riferimenti di tensione corretti. Il
183
calibratore, non essendo connesso alla rete ha un riferimento flottante e collegando il
morsetto negativo ad AGND (e imponendo 2V sul morsetto positivo), si garantisce
che i morsetti costituenti Vo si trovino a una tensione compresa tra AGND e
AGND+2V, rispettando i limiti imposti.
Figura 4.28: setup di misura(3)
184
5. ALGORITMI PER LA RIDUZIONE DEL RUMORE
5.1 FILTRO NOTCH
In questa sezione vengono presentati alcuni algoritmi per ottenere una migliore
risoluzione possibile, riducendo il rumore delle misure attraverso opportune
operazioni di filtraggio.
La prima tecnica utilizzata consiste nel sottrarre alle misure finali la maggior parte
possibile del rumore presente, mediante un algoritmo che implementi il seguente
schema circuitale.
Figura 5.1: filtro digitale notch
Da questo schema, risulta evidente come si intenda ridurre il rumore eseguendo la
differenza tra segnale originale e rumore (ottenuto eliminando dal segnale originale
la frequenza desiderata attraverso l’ausilio del filtro notch).
Come noto dalla teoria, un filtro notch risulta caratterizzato dalla seguente
espressione temporale:
y(n) = 2 * r * cos(2πf 0 ) * y(n − 1) − r 2 * y(n − 2) + x(n) − 2 * cos(2πf 0 ) * x(n − 1) + x(n − 2)
a cui corrisponde la seguente funzione di trasferimento:
185
H (Z ) =
1 − 2 * cos(2πf 0 ) * Z −1 + Z −2
1 − 2 * r * cos(2πf 0 ) * Z −1 + r * Z − 2
f0=frequenza normalizzata = frequenza segnale/frequenza campionamento
Al numeratore della funzione di trasferimento sono presenti 2 zeri che annullano
l’uscita alla frequenza del segnale di ingresso e a tutte le frequenze superiori di
valore 2*n* . I due poli al denominatore vengono inseriti per fare in modo che per le
frequenze maggiori e minori di quella da eliminare la risposta in frequenza abbia
modulo unitario.
Si precisa fin da ora che essendo il filtro causale (uscita dipendente dagli ingressi
precedenti) considerando i poli con modulo sempre inferiore a 1, esso risulta stabile.
In particolare, è necessario che il modulo dei poli tenda al valore unitario per avere la
migliore uscita possibile (se i poli hanno modulo esattamente unitario, l’azione di
filtro notch viene meno e la risposta in frequenza è piatta).
Il modulo della funzione di trasferimento, data una pulsazione w qualsiasi,
corrispondente ad un determinato punto sulla circonferenza di raggio unitario, può
essere sempre pensata in termini di un rapporto tra prodotto di distanze degli zeri dal
punto in esame e del prodotto delle distanze dei poli dal punto in esame come
illustrato nel seguente grafico e nella seguente formula.
Figura 5.2: rappresentazione di poli e zeri sul piano complesso
| H ( Z ) |=
∏ (1 − Z
∏ (1 − Z
−1
−1
* zi )
* pi )
=
∏ dZi
∏ dPi
Ponendo uno zero sulla circonferenza di raggio unitario, alla frequenza desiderata, si
ha che in corrispondenza di tale valore la distanza tra zero e punto sarà nulla e quindi
il modulo diventerà zero.
Per gli altri punti della circonferenza, più i poli sono vicini agli zeri, più il
denominatore e il numeratore tenderanno allo stesso valore, dando modulo unitario.
186
Dai seguenti grafici, è facile comprendere questo fenomeno: il primo diagramma è
relativo al caso di poli aventi modulo 0.6; il secondo è relativo al caso di poli aventi
modulo 0.95. E’ evidente come nel secondo caso il modulo sia quasi unitario al di
fuori della frequenza da eliminare e la fase sia distorta solo nell’intorno di tale
frequenza.
Da aggiungere che la risposta in frequenza nel caso di poli vicini alla circonferenza
di raggio unitario è poco smorzata ma questo non è un problema in quanto il sistema
viene sollecitato con una sinusoide a bassa frequenza. Se in ingresso venisse imposto
un segnale ad elevato contenuto armonico (come un’onda quadra) invece le
sovraelongazioni della risposta potrebbero risultare fastidiose.
Grafico 5.1: risposta in frequenza di due filtri notch con posizione dei poli diversa
In appendice G viene riportato il programma Matlab che implementa l’algoritmo in
considerazione.
187
Una volta definito in un vettore il segnale di ingresso (acquisito questa volta col
convertitore MSC), si procede al solito calcolo della FFT con le finestre di Hanning e
Flat-top.
Di seguito, viene estrapolato mediante un ciclo for il rumore (utilizzando il filtro
notch precedentemente descritto).
Il passo successivo è il calcolo del segnale utile in ingresso (x_fil). Di seguito viene
ricalcolata la FFT sul segnale finestrato ed infine il diagramma di Bode del filtro
notch utilizzato.
Di seguito vengono riportati i vari grafici ottenuti nel programma (trascurando i
grafici delle FFT ottenute con la finestra Flat-top che sono prive di informazioni
rilevanti).
Questo primo grafico rappresenta il segnale di ingresso originale.
Quello successivo è il risultato della FFT eseguita con la finestra di Hanning. Si nota
come il rumore sia pari a circa -135dB (avendo utilizzato nell’acquisizione il
circuito di ingresso con filtro passa-basso e tensione di modo comune illustrato nei
capitoli precedenti).
Grafico 5.2: segnale sinusoidale originale e sua FFT
188
fft_noise=-135dB
=178n* (2048/1.5)=6.58
ENOB=log2(FSR/( ))=log2(5/6.58 )=19.5
Questo terzo grafico illustra l’andamento del rumore isolato dal segnale originale; il
grafico successivo contiene il segnale sinusoidale puro, privo di rumore. Non è
apprezzabile la differenza tra di esso e quello originale, data l’ampiezza ridotta del
rumore.
Grafico 5.3: rumore all’uscita del filtro e segnale ideale in uscita
189
Il quinto grafico è la FFT (eseguita con la finestra di Hanning) sul segnale
sinusoidale privo di rumore. Si nota come il livello del rumore si sia ridotto di una
quindicina di decibel.
L’ultimo grafico rappresenta la risposta in frequenza del notch (con poli di modulo
pari a 0.9).
Il livello di rumore è notevolmente diminuito. Il motivo per cui esso ha un
andamento lievemente ascendente al crescere della frequenza (in vicinanza della
fondamentale) sta nel fatto che il filtro notch, oltre a eliminare l’armonica principale
elimina anche un po’ del rumore presente vicino ad essa. Quindi, sottraendo al
segnale originale questo segnale filtrato, è presente in uscita anche parte del rumore
vicino alla sinusoide principale.
Grafico 5.4: FFT del segnale ideale in uscita
fft_noise=-145dB
=56.2n* (2048/1.5)=2.08
ENOB=log2(FSR/( ))=log2(5/2.08 )=21.2
190
Grafico 5.5: risposta in frequenza del filtro notch utilizzato
E’ importante osservare come vari il tipo di rumore isolato al variare del modulo dei
poli.
La seguente immagine si riferisce al caso di poli con modulo di 0.6
Il filtro notch ha una attenuazione di circa 180dB alla frequenza del segnale in
ingresso e una attenuazione inferiore ai -50dB per le frequenze immediatamente
limitrofe.
Il segnale filtrato è privo della sinusoide di ingresso: è un rumore con variazione
massima di circa 200 V
191
Grafico 5.6: rumore in uscita del filtro usando un filtro notch con modulo dei poli
ridotto
La seguente immagine si riferisce al caso di poli con modulo di 0.95
Il filtro notch ha una attenuazione di circa 140dB alla frequenza del segnale in
ingresso (più contenuta rispetto al caso precedente) e l’attenuazione per le frequenze
immediatamente vicine è molto contenuta.
Il segnale filtrato ha una ampiezza considerevole (dell’ordine dei millivolt) e non è
affatto un rumore bianco: è presente un segnale sinusoidale simile a quello di
ingresso. La spiegazione di questo fenomeno sta nel fatto che a causa della selettività
del filtro notch, è sufficiente che la frequenza del segnale originale sia leggermente
differente da quella voluta che il filtraggio di tale componente non avviene
completamente. Per questo in uscita, oltre al rumore è presente anche traccia del
segnale utile.
192
Grafico 5.7: rumore in uscita del filtro usando un filtro notch con modulo dei poli
elevato
In base alle considerazioni precedenti, si è trovato un buon compromesso utilizzando
dei poli con modulo pari a 0.9.
Se il modulo dei poli è maggiore a 0.9 il notch è piatto e quindi il rumore viene
estrapolato esattamente ma a causa della selettività del filtro viene eliminata anche
una parte del segnale utile (la fondamentale nella FFT finale ha modulo inferiore
rispetto alla fft originale di alcuni decimi di dB).
Se il modulo dei poli è minore a 0.9 il notch attenua su una vasta gamma di
frequenze e quindi il rumore non viene estrapolato totalmente. Il segnale utile viene
in compenso eliminato totalmente.
E’ importante poi fare una ulteriore considerazione. Scegliendo di considerare il caso
con i poli a modulo minore di 0.9 si ha che il filtraggio produce in uscita un segnale
in cui come si è detto in precedenza sembra praticamente assente la sinusoide
fondamentale. Tuttavia questo segnale di uscita (che dovrebbe essere un rumore
puro) ha una ampiezza rilevante, che non scende mai sotto i 100 v di ampiezza.
Considerando la FFT del segnale originale, si ha però che il livello del rumore è di
circa -120dB a cui corrisponde un ENOB (considerando la fondamentale unitaria) di
193
18-19. Secondo tale valore, il rumore presente dovrebbe essere inferiore ai 5 v.
Quindi sembra esserci una notevole differenza tra questo valore di rumore e quello
estrapolato tramite il filtro (che come si è detto aveva variazione superiore ai 100
v). La spiegazione di questo fenomeno sta nel fatto che il filtro notch, essendo
selettivo elimina solo l’armonica posta esattamente a 0.1Hz; scostandosi da tale
frequenza di soli pochi centesimi di hertz, l’attenuazione è molto più ridotta.
Considerando che la sinusoide in ingresso abbia uno scostamento minimo da tale
valore (cosa possibile dato che anche il generatore di funzioni ha una precisione nella
frequenza del segnale generato di qualche decimo di mHz), si ha che la sua
attenuazione non è massima (ad esempio è di soli -70dB anziché -140dB) e quindi è
inevitabile trovare parte di questa componente sovrapposta al rumore.
Inoltre, considerando poli con modulo maggiore di 0.9, è possibile ottenere una
riduzione ulteriore del rumore (fino a -160 nella FFT finale) a discapito però di una
attenuazione del segnale principale di alcuni decimi di decibel. Si ribadisce che ciò è
dovuto alla selettività del notch: una percentuale di segnale utile andrebbe a
sommarsi al rumore estratto dal filtro e quindi sarebbe sottratta al segnale utile.
Di seguito viene riportata la FFT ottenuta implementando il programma Matlab
precedentemente illustrato sul microcontrollore del convertitore MSC (allegato in
appendice I). I due risultati sono comparabili in termini di ampiezza dell’armonica
fondamentale, di quelle superiori e del livello di rumore. Alcune differenze a livello
di rumore possono essere dovute al fatto che le misure sono inevitabilmente
scorrelate.
Grafico 5.8: FFT del segnale filtrato ottenuto dall’implementazione del filtro digitale
sul microcontrollore
194
5.2 INTERPOLAZIONE DEI DATI
Un altro metodo per cercare di ottenere la massima risoluzione da parte del
convertitore è quella di interpolare i dati forniti dall’ADC.
Si è presa in considerazione l’interpolazione col metodo dei minimi quadrati.
Tale teoria, è caratterizzata dal calcolo di una funzione (polinomio di grado m) in
grado di interpolare un numero di punti misurati n (con m<n) di modo che sia
minima la somma della distanza al quadrato tra punti misurati e teorici (dati dal
polinomio approssimante).
Formalmente, dati gli n punti (xi,yi) i=1,2,...,n, dove yi=f(xi) è il valore assunto dalla
funzione f in xi, consideriamo il polinomio di grado m
e cerchiamo gli m+1 valori j che minimizzano
Derivando la precedente espressione rispetto ad k (k=0,1,...,m) ed uguagliando a
zero le m+1 equazioni (una per ogni coefficiente del polinomio) che si ottengono si
ha
che, scritto in forma matriciale e con dei semplici calcoli (appendice H1) porta al
calcolo delle incognite (che sono i coefficienti m del polinomio in esame).
α =M*y
con
195
M matrice rettangolare con m+1 righe e n colonne
Da sottolineare come la soluzione di questo problema esista sempre solo per m<n. In
questo caso, si ha che M è quadrata per n=m+1 o rettangolare con un numero di righe
minore a quello delle colonne se n>m+1.
Se n<=m si ha che il sistema è indeterminato in quanto i coefficienti incogniti sono
maggiori al numero dei punti noti e quindi non è possibile la scrittura di un sistema a
soluzione unica.
Da aggiungere infine che solo nel caso in cui n=m+1 la soluzione è esatta e cioè il
polinomio approssimante passa esattamente sui punti di misura iniziali; in caso
contrario, il polinomio passa vicino ai punti originali ma non li attraversa.
Nel nostro caso, utilizzando il programma Matlab tutti questi calcoli possono essere
demandati al PC utilizzando dei semplici comandi.
In appendice H2 viene riportato il programma realizzato. Tale programma ha come
obiettivo quello di sostituire ai punti misurati dal convertitore quelli dei polinomi
approssimanti, in modo da rendere le misure più continue, livellando il rumore.
Una volta acquisito il segnale, viene calcolata la sua FFT originale. In seguito, si
passa al calcolo dei polinomi. Viene eseguita una intera scansione del vettore
contenente il segnale originale; dividendolo in sottovettori aventi lunghezza
determinata dalla variabile punti. (Tale operazione viene eseguita anche per il
corrispondente vettore temporale). Ottenuti quindi i sottovettori temporali x e di
tensione y, si passa al calcolo dei coefficienti dei polinomi approssimanti del
sottovettore x mediante la funzione polyfit (polinomi aventi grado determinato dalla
variabile grado). Di seguito si determina il valore dei polinomi approssimanti negli
istanti temporali di interesse (quelli relativi alle misure di tensione originali),
mediante la funzione polyval. Alla fine del ciclo for, che esegue la scansione del
vettore originale signal, è stato creato un vettore valo_tot contenente i valori dei
polinomi approssimanti.
In seguito viene eseguito nuovamente il calcolo della FFT sul segnale valo_tot, da
confrontare con quella eseguita sul segnale originale signal.
La seguente immagine si rappresenta su uno stesso grafico il segnale originale (tratto
continuo) e quello approssimato coi polinomi (solo nei punti di misura originali).
In questo caso il data-rate è di 10Hz e si nota come segnale originale e approssimato
coincidano; quindi l’operazione di interpolazione non ha portato a dei vantaggi
significativi.
In questo caso, si è trovato un polinomio interpolatore di grado 2 ogni 4 punti
acquisiti. Il grado è sufficientemente elevato per un numero così ridotto di punti. Il
196
numero di punti non può essere maggiore in quanto a causa del basso data-rate,
usando troppi punti da interpolare, si rischierebbe di degradare la forma sinusoidale
del segnale.
10hz
Grafico 5.9: segnale originale (tratto continuo) e segnale ottenuto coi polinomi
interpolatori (punti) (1)
La seguente immagine, contiene gli stessi grafici della precedete, solo riferiti al caso
di data-rate pari a 300Hz. Si nota bene in questo caso come il segnale originale sia
molto rumoroso (a causa dell’elevato data-rate) e come i polinomi approssimanti
generino un netto miglioramento nel segnale finale.
In questo caso, si è trovato un polinomio interpolatore di grado 4 ogni 64 punti
acquisiti. Il grado è sufficientemente elevato per il numero di punti usati. Il numero
di punti è in questo caso molto maggiore al caso di data-rate pari a 10 in quanto il
data-rate è molto più elevato e quindi la porzione di sinusoide considerata per ogni
polinomio è sufficientemente ridotta, tale da non creare distorsioni significative nel
segnale originale.
197
300hz
Grafico 5.10: segnale originale (tratto continuo) e segnale ottenuto coi polinomi
interpolatori (punti) (2)
In questo caso è stata riportata anche la FFT del segnale originale e di quello finale
(approssimato coi polinomi). Si vede come il livello del rumore di fondo sia
nettamente diminuito (una ventina di decibel) nel segnale approssimato. Si nota
anche la scomparsa delle armoniche di rete e dei loro multipli.
Grafico 5.11: FFT del segnale originale
198
fft_noise=-110dB
=3.16 * (16384/1.5)=117
ENOB=log2(FSR/( ))=log2(5/117 )=15.4
Grafico 5.12: FFT del segnale interpolato
fft_noise=-125dB
=562n* (2048/1.5)=20.8
ENOB=log2(FSR/( ))=log2(5/20.8 )=17.9
199
CONCLUSIONI
In questa tesi si è in primo luogo inteso fornire una panoramica abbastanza completa
sulle caratteristiche e sulle prestazioni dei convertitori sigma-delta ad alta
risoluzione.
Successivamente si sono presi in considerazione due specifici convertitori con
risoluzione nominale paragonabile, e si è effettuato un dettagliato confronto delle
loro architetture, prestazioni nominali, ed implementazioni, rivolta al comprendere
con maggior dettaglio i pregi e difetti di uno e dell’altro e come la presenza o la
mancanza di alcune caratteristiche nell’uno o nell’altro si rifletta in prestazioni più o
meno buone.
Nella seconda parte della tesi si è proseguita l’analisi delle caratteristiche dei
convertitori attraverso prove sperimentali in regime statico e dinamico a bassa
frequenza, utilizzando opportuni generatori di segnale e cassette di resistenze tarate.
Inoltre, utilizzando elementi teorici acquisiti in parte durante i corsi universitari e in
parte durante lo svolgimento della tesi stessa, sono state implementate alcune
tecniche di filtraggio digitale per verificare il miglioramento della risoluzione
introdotto da tale filtraggio.
Dai risultati ottenuti appare evidente come la risoluzione del convertitore CDB5534
sia migliore rispetto al convertitore MSC1211Y5 di circa 2 bit. Questo risultato
dipende da vari fattori. Innanzitutto il convertitore CDB5534 è fornito di un
modulatore di ordine superiore rispetto al convertitore MSC1211Y5, come riportato
nella parte teorica della tesi. Inoltre nel dispositivo della Cirrus Crystal è presente un
circuito in ingresso per il condizionamento del segnale, ed è fornito di un filtro
digitale più selettivo. Tutti questi elementi contribuiscono ad un miglioramento del
rapporto segnale-rumore e quindi ad un aumento della risoluzione. Va ricordata
anche la possibilità per il convertitore CDB5534 di eseguire una calibrazione
manuale diretta e completa della scheda, che porta a dei risultati migliori in termini
di correzione dell’offset e del guadagno.
Tuttavia, la risoluzione della scheda CDB5534 cala notevolmente, diventando
inferiore a quella della scheda MSC1211Y5 nel caso di sorgenti con elevate
impedenze. La spiegazione sta nel fatto che la scheda MSC1211Y5 è munita di uno
stadio disaccoppiatore in ingresso (buffer) mentre la scheda CDB5534 no. A favore
della scheda MSC1211Y5 va poi anche il fatto di integrare su di un unico chip
convertitore e microcontrollore, riducendo notevolmente l’area occupata. Tenendo
conto proprio di questo ultimo dato, e, considerando comunque che la perdita di
pochi bit di risoluzione in un convertitore che ne possiede più di 20 è abbastanza
insignificante, per l’applicazione finale è stata scelta la scheda della Texas
Instruments.
200
APPENDICE
APPENDICE A
clear
clc
N=256;
Ts=1e-01; n=[0:N-1];
TW=N*Ts;
t=n*Ts; %scala tempi discreta Ts=100msec
Df=1/TW;
f=n*Df; %scala frequenze discreta
Tsin=40*Ts;
x=2.5*cos((2*pi/Tsin)*t);
figure(1);
plot(t,x);
%SIMULAZIONE SIGMA-DELTA
vref=2.5;
outcomp=0;
outint1=0;
outintr=0;
y=[];
%valori iniziali e costanti
for i=1:N
diff=x(i)-outintr;
outint1=outint1+diff;
if outint1>=0
outcomp=1;
else
outcomp=0;
201
end
if outcomp==1
outintr=vref;
else
outintr=-vref;
end
y=[y,outcomp];
end
figure(2);
plot(n,y,'.',n,x);
%SIMULAZIONE DELTA
vref=2.5;
outcomp=0;
outintr=0;
y=[];
ind_sens=5;
%valori iniziali e costanti
%indice di sensibilità: più è grande più è sensibile alle variazioni
for i=1:N
diff=x(i)-outintr;
if diff>=0
outcomp=1;
else
outcomp=0;
end
if outcomp==1
outintr=outintr+vref/ind_sens;
else
outintr=outintr-vref/ind_sens;
202
end
y=[y,outcomp];
end
figure(3);
plot(n,y,'.',n,x);
APPENDICE B
Espressione temporale del filtro
y ( n) = n * [ y (n − 1) − x( n)] / 256 + x( n)
Espressione equivalente in trasformata Z
H (Z ) =
1 − n / 256
1 − (n / 256) * Z −1
Il grafico successivo è il diagramma di Bode del filtro implementato. Si nota come
esso sia effettivamente un passa basso.
La banda passante si riduce al crescere di n. Al crescere di n inoltre, come osservato
da una acquisizione utilizzando questo filtro, il tempo di andata a regime dell’uscita
aumenta.
203
APPENDICE C
clc
clear
Ve=2;
R1=978474;
R2=1000000;
R3=1022000;
R4=1000000;
fr=3914375;
dr=-100000;
for i=1:20001
Vo_teo(i)=Ve*(R2/(R1+R2+dr)-R3/(R3+R4));
Vo_ide(i)=-Ve*dr/fr;
dR(i)=dr;
dr=dr+10;
end
figure(1); %plot di caratteristica Vo-dr reale e ideale
plot(dR,Vo_teo,'r',dR,Vo_ide,'b');
grid on;
%misure
%
dr
Ve
misure=[0
100
0.000058+0.000005
10
1000
-10
-100
0.000006
-1000
20
30
0.000019+0.000003
50
0.000034+0.000007
-20
-30
Vo
1.998940
1.998940
0.000000
-
1.998940
1.998940
1.998940
1.998940
-0.000007
-0.000516
0.000005
0.000059-
1.998940
1.998940
1.998940
0.000508
-0.000013
-
1.998940
-
1.998940
1.998940
0.000010
0.000016
204
-50
0.000002];
1.998940
0.000029-
figure(2); %plot di Vo-dr teoriche e misurate (retta teorica (di cui non è
rappresentato l'errore con altre 2 rette) e misure in verde coi relativi margini di
errore in rosso)
plot(dR,Vo_ide,'b',
misure(:,1),misure(:,3)+0.000002,'*r',misure(:,1),misure(:,3)0.000002,'*r',misure(:,1),misure(:,3),'*g');
grid on;
%errore su fr
err_R1=1111;
err_R2=1000;
err_R3=1022;
err_R4=1000;
alfa=R3/R4; %oppure R2/R1
fr1=(1+alfa)^2/(alfa/R1);
err_alfa=(err_R4/R4+err_R3/R3)*alfa;
err_num=2*err_alfa;%(err_alfa/alfa+err_alfa_alfa)*alfa
err_den=(err_alfa/alfa+err_R1/R1)*(alfa/R1);
err_fr_calcolato=(err_num/(1+alfa)^2+err_den/(alfa/R1))*fr1
dr=1000;
err_dr=1;
Ve=1.998940;%2.008142;
err_Ve=2e-6;
Vo=-516e-6;
err_Vo=2e-6+1e-6;
fr2=-dr*Ve/Vo;
err_num=(err_dr/dr+err_Ve/Ve)*(dr*Ve);
err_fr_misurato=(err_num/(dr*Ve)+err_Vo/abs(Vo))*abs(fr2)
205
APPENDICE D
/*-----------------------------------------------------------------------------AD4Input.C: MSC 1210 A/D Conversion for 4 input signals (-2.5V ... +2.5V)
Inputs pairs AIN0-AIN1 AIN2-AIN3 AIN4-AIN5 AIN6-AIN7
Copyright 2003 Keil Software, Inc.
------------------------------------------------------------------------------*/
#include <REG1210.H>
#include <stdio.h>
#include "ISD51.H"
#ifndef XTAL
// if no XTAL defined use:
#define XTAL 11059200
// XTAL frequency 11.0592 MHz
#endif
// defines for UART BAUDRATE
#define BAUDRATE
9600
// 9600bps communication baudrate
#define T2RELOAD (65536-(XTAL/32/BAUDRATE))
// defines for A/D Converter setup
#define A_CLK
(((XTAL+500000)/1000000)-1) // about 1MHz Analog Clock
#define ANA_CLK (XTAL/(A_CLK+1))
// precise Analog Clock
#define DECIMATION (ANA_CLK/64/10)
// 10 Hz Decimation
#define CONV_FREQ (ANA_CLK/64/DECIMATION) // Conversion Frequency
// defines for conversion to Volts
#define fV (0xFFFFFF00UL/5)
// Factor for Volts caluculation: 1V=33333300,
inter division is equal to shift (/2/3=>>1, /4/5/6/7=>>2..)
#define fmV ((fV << 2) / 1000) // Factor for mVolts 346dc5
#define fuV ((fmV << 10) / 1000) // Factor for uVolts 35afe4
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
unsigned long l;
// unsigned long
} res;
void main(void) {
unsigned char k, chan, V;
unsigned int mV, uV;
CKCON = 0;
// 0 MOVX cycle stretch
206
// Setup Serial Interface
T2CON = 0x34;
// Use Timer 2 as baudrate generator */
RCAP2H = (T2RELOAD >> 8);
// baudrate reload factor
RCAP2L = T2RELOAD;
SCON0 = 0x50;
PCON |= 0x80;
P3DDRL &= 0xF0;
output
P3DDRL |= 0x07;
// enable serial uart & receiver
// double baudrate for UART0
// set port pins of UART to input/strong drive
// set port pins of UART to input/strong drive output
#ifdef ISD51
// The following settings are important for ISD51 (enable flash programming, disable
watchdog)
USEC = ((XTAL+500000)/1000000)-1; // USEC timer factor
ONEMS = (XTAL/1000)-1;
// (MSECH+MSCL) MS Timer counting at
1.0ms
HMSEC = 100-1;
// Hundred MS Timer to 100.0ms
SECINT = (10-1) | 0x80;
// SECINT= 10 * HMS Timer Rate = 1 sec
// '0x80' will set the MSB for write immediate
MSINT = (10-1) | 0x80;
// MSINT = 10ms for Tone period time base
FTCON = 0xA5;
#endif
PDCON = 0x14;
Watchdog
EA = 1;
#ifdef ISD51
ISDwait();
#else
TI = 1;
#endif
// setup flash programming times
// ON -> ADC-Vref, SPI Systimers. OFF -> PWM,
// Enable global interrupt flag
// wait until ISD51 connects
// enable serial output
printf("\nMSC1210 Analog/Dignal Converter Test\n\n");
// Setup ADC
ADMUX = 0x08;
DAC
ACLK = A_CLK;
ADCON0 = 0x30;
// (AIN+ = AIN0), (AIN- = AINCOM) Voltage from
// set ACLK factor for about 1MHz
// Vref On, Vref Hi, Buff off, BOD off, PGA
ADCON2 = DECIMATION & 0xFF;
// LSB of decimation
207
ADCON3 =(DECIMATION>>8) & 0x07; // MSB of decimation
ADCON1 = 0x01;
// bipolar, auto, self calibration (offset, gain)
while (1) {
// Repeat Conversions Forever
printf("\nInput -2.5V to +2.5V on AINx channel pairs\n\n");
printf("Chan. Dec. Rate Hex Value Voltage\n");
for (chan=0; chan<4; chan++) { // Channels Loop
ADMUX = 0x01 + (chan*0x22); // AINP = AIN0/2/4/6, AINN = AIN1/3/5/7
// Read Input Volatage
for (k=0; k<5; k++) {
calibration
while (!(AIE & 0x20));
res.c[0] = ADRESH;
res.c[1] = ADRESM;
res.c[2] = ADRESL;
res.c[3] = 0;
}
// ignore 4 conversions for filter to settle after
// Wait for data ready
printf ("%2bd-%bd %6d %3dHz ", chan, (unsigned char) (chan+1),
(int) DECIMATION, (int) CONV_FREQ);
printf ("0x%06lX ", (res.l >> 8));
// print sign
printf ("%c", (res.c[0] & 0x80) ? '-' : '+');
if (res.c[0] & 0x80) {
res.l = -res.l;
// make positiv
}
// Convert Result to Volts
V = res.l / fV;
// Volts part, char because V have only 1digit (0 or 1 or 2)
res.l %= fV;
res.l <<= 2;
mV = res.l / fmV;
res.l %= fmV;
res.l <<= 10;
// Millivolts part
uV = res.l / fuV;
// Microvolts part
printf ("%bd.%03d%03d\n", V, mV, uV);
}
}
}
208
APPENDICE E1
/*-----------------------------------------------------------------------------AD2Input.C: MSC 1210 A/D Conversion for 2 input signals (-2.5V ... +2.5V)
Inputs pairs AIN2-AIN3 AIN6-AIN7
Copyright 2003 Keil Software, Inc.
------------------------------------------------------------------------------*/
#include <REG1210.H>
#include <stdio.h>
#include "ISD51.H"
#include "rom1210.h"
.
.
.
.
.
.
extern char rx_byte(void);
extern signed long deltasigma(void);
extern signed long adc_win(unsigned char);
extern void tx_int(signed long);
extern void putcr(void);
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
unsigned long l;
// unsigned long
} res;
// N point Moving Average of adc conversion////////////////
void adc_mave(unsigned int n)
{
int ave;
int count=0;
unsigned char V;
unsigned int mV, uV;
unsigned char xdata *winptr;
209
long int idata adcsum;
unsigned int fill_ptr=1, mod_ptr=0 ;
adcsum=0; deltasigma(); // dispose one conversion
for (winptr=0;winptr<(n<<2);winptr++) *winptr=0;
while (RI==0 && count<1000) {
adcsum=adcsum+adc_win(mod_ptr);
// printf ("0x%061X\n
", adcsum);
res.l=adcsum / fill_ptr;
res.l=res.l<<8;
//printf ("0x%06lX\n
", (res.l >> 8));
// print sign
printf ("%c", (res.c[0] & 0x80) ? '-' : '+');
if (res.c[0] & 0x80) {
res.l = -res.l;
// make positiv
}
// Convert Result to Volts
V = res.l / fV;
// Volts part
res.l %= fV;
res.l <<= 2;
mV = res.l / fmV;
res.l %= fmV;
res.l <<= 10;
// Millivolts part
uV = res.l / fuV;
// Microvolts part
printf ("%bd.%03d%03d\n\n", V, mV, uV);
putcr();
if (fill_ptr==n) fill_ptr=n; else fill_ptr++;
if (mod_ptr==(n-1)) mod_ptr=0; else mod_ptr++;
count++;
}
//rx_byte();
// Flush serial byte, se attivato
blocca il programma al primo ciclo conversione
//RI=0;
}
210
void main(void) {
unsigned char k, chan;
CKCON = 0;
// 0 MOVX cycle stretch
// Setup Serial Interface
T2CON = 0x34;
// Use Timer 2 as baudrate generator */
RCAP2H = (T2RELOAD >> 8);
// baudrate reload factor
RCAP2L = T2RELOAD;
.
.
.
.
.
.
for (chan=0; chan<2; chan++) { // Channels Loop
????????
ADMUX = 0x32 + 0x44*chan; // AINP = AIN7/3, AINN = AIN6/2
??????????
printf ("%2bd-%bd %6d %3dHz
", (4*chan+3), (unsigned char) (4*chan+2),
//??????
(int)
DECIMATION, (int) CONV_FREQ);
adc_mave(0x10);
}
}
}
211
APPENDICE E2
/*-----------------------------------------------------------------------------AD2Input.C: MSC 1210 A/D Conversion for 2 input signals (-2.5V ... +2.5V)
Inputs pairs AIN2-AIN3 AIN6-AIN7
Copyright 2003 Keil Software, Inc.
------------------------------------------------------------------------------*/
#include <REG1210.H>
#include <stdio.h>
#include "ISD51.H"
#include "rom1210.h"
.
.
.
.
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
unsigned long l;
// unsigned long
} res;
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
long int l;
// unsigned long
} dat;
// N point Moving Average of adc conversion////////////////
void adc_maverage(unsigned int n)
{
unsigned char V;
unsigned int mV, uV, i, k;
unsigned long xdata buf1[64],buf2[64], adcsum1=0, adcsum2=0;
unsigned int fill_ptr1=1, mod_ptr1=0;
212
unsigned int fill_ptr2=1, mod_ptr2=0;
for (i=0;i<(n);i++) buf1[i]=0;
for (i=0;i<(n);i++) buf2[i]=0;
while (RI==0 ) {
ADMUX = 0x32;
for (k=0; k<5; k++) {
calibration
while (!(AIE & 0x20));
dat.c[0] = ADRESH;
dat.c[1] = ADRESM;
dat.c[2] = ADRESL;
dat.c[3] = 0;
}
// ignore 4 conversions for filter to settle after
// Wait for data ready
dat.l=dat.l>>8;
adcsum1=adcsum1-buf1[mod_ptr1]+dat.l;
buf1[mod_ptr1]=dat.l;
res.l=adcsum1 / fill_ptr1;
res.l=res.l<<8;
//sum=sum-window[pointer] +adc_new; // window is a circular buffer of size N
//window[pointer]=adc_new;
//output = sum / window_size;
// print sign
printf ("%c", (res.c[0] & 0x80) ? '-' : '+');
if (res.c[0] & 0x80) {
res.l = -res.l;
// make positiv
}
213
// Convert Result to Volts
.
.
.
.
if (fill_ptr1==n) fill_ptr1=n; else fill_ptr1++;
//printf ("\n\n%d\n\n", mod_ptr1);
if (mod_ptr1==(n-1)) mod_ptr1=0; else mod_ptr1++;
ADMUX = 0x76;
for (k=0; k<5; k++) {
calibration
while (!(AIE & 0x20));
dat.c[0] = ADRESH;
dat.c[1] = ADRESM;
dat.c[2] = ADRESL;
dat.c[3] = 0;
}
// ignore 4 conversions for filter to settle after
// Wait for data ready
dat.l=dat.l>>8;
adcsum2=adcsum2-buf2[mod_ptr2]+dat.l;
buf2[mod_ptr2]=dat.l;
res.l=adcsum2 / fill_ptr2;
res.l=res.l<<8;
printf (" %c", (res.c[0] & 0x80) ? '-' : '+');
if (res.c[0] & 0x80) {
res.l = -res.l;
// make positiv
}
214
// Convert Result to Volts
.
.
.
.
if (fill_ptr2==n) fill_ptr2=n; else fill_ptr2++;
if (mod_ptr2==(n-1)) mod_ptr2=0; else mod_ptr2++;
}
}
void main(void) {
CKCON = 0;
// 0 MOVX cycle stretch
// Setup Serial Interface
T2CON = 0x34;
// Use Timer 2 as baudrate generator */
RCAP2H = (T2RELOAD >> 8);
// baudrate reload factor
RCAP2L = T2RELOAD;
.
.
.
.
printf("\nInput -2.5V to +2.5V on AINx channel pairs\n\n");
printf("Chan. Dec. Rate Hex Value Voltage\n");
adc_maverage(64);
// Repeat Conversions Forever
}
215
APPENDICE F
x=[-0.438827
-0.381963
-0.323390
.
.
.
.
+0.614680
+0.662721
+0.708003
+0.751045
+0.790241]';
N=2048;
Ts=1e-01; % 100 campioni ogni sinusoide che dura 10 sec e quindi
Ts=10/1000=0.1sec
n=[0:N-1];
TW=N*Ts;
t=n*Ts; %scala tempi discreta; rappresenta un TW=100sec con intervalli di
Ts=100msec
Df=1/TW;
f=n*Df; %scala frequenze discreta; rappresenta un f=1MHz con intervalli di
1KHzA=1;
figure(1);
plot(t,x);
% definisco la finestra cos a 3 termini di Hanning -> coerent gain di 0.5
a0=0.5;
a1=-0.5;
a2=0;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w); %normalizzazione per avere la sinusoide di ampiezza ideale; ciò è
possibile solo in assenza di leakage. In presenza di leakage l’ampiezza quasi ideale è
data dalla flat-top
spec=fft(x.*w)./N;
figure(2);
216
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA, è meglio
in bins
%% definisco la finestra cos a 3 termini di Flat-top -> coerent gain di 0.5
a0=0.281;
a1=-0.521;
a2=0.198;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w);
spec=fft(x.*w)./N;
figure(3);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA, è meglio
in bins
APPENDICE G
x=[+0.802540
+0.837373
.
.
.
-0.558013
-0.608055]';
N=2048;
217
Ts=1e-01; % 100 campioni ogni sinusoide che dura 10 sec e quindi
Ts=10/100=0.1sec
n=[0:N-1];
TW=N*Ts;
t=n*Ts; %scala tempi discreta; rappresenta un TW=100sec con intervalli di
Ts=100msec
Df=1/TW;
f=n*Df; %scala frequenze discreta; rappresenta un f=1MHz con intervalli di
1KHzA=1;
figure(1);
plot(t,x);
% definisco la finestra cos a 3 termini di Hanning -> coerent gain di 0.5
a0=0.5;
a1=-0.5;
a2=0;
.
.
.
spec=fft(x.*w)./N;
figure(2);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA
rumore=zeros(length(x),1);
rumore(1)=0;
rumore(2)=0;
r=0.9;
f0=0.1/10;
for i=3:length(rumore)
rumore(i)=2*r*cos(2*pi*f0)*rumore(i-1)-r^2*rumore(i-2)+x(i)2*cos(2*pi*f0)*x(i-1)+x(i-2);
end
figure(4);
plot(t,rumore);
x_fil=x'-rumore;
218
figure(5);
plot(t,x_fil);
% definisco la finestra cos a 3 termini di Hanning -> coerent gain di 0.5
a0=0.5;
a1=-0.5;
a2=0;
.
.
.
spec=fft(x_fil'.*w)./N;
figure(6);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA
Z = TF('z',0.1);
H=(1-2*cos(2*pi*f0)*Z^-1+Z^-2)/(1-2*r*cos(2*pi*f0)*Z^-1+r^2*Z^-2); %fa bode
di discreto trasformata z con z=e(jwTc)
figure(7);
bode(H);
APPENDICE H1
Scrivendo in modo esteso, la seguente derivata si ottiene:
219
α0 : [( f (x1) −α0* x10 −...−αm* x1m ) * x10 + ...+ ( f (xn) −α0* xn0 −...−αm* xnm ) * xn0 ] = 0
.
.
.
αm : [( f (x1) −α0* x10 − ...−αm* x1m ) * x1m + ...+ ( f (xn) −α0* xn0 −...−αm* xnm ) * xnm ] = 0
Raggruppando i vari termini si può scrivere:
n
n
f (xi) * xi0 =
i =1
n
α0* xi0 +
i =1
n
α1* xi1 +
i =1
α 2* xi2 + ...+
i =1
n
αm* xim
i =1
.
.
.
n
f (xi) * xim =
i =1
n
α0* xim +
i =1
n
α1* xim+1 +
i =1
n
α2* xim+2 + ...+
i =1
n
αm* xi2m
i =1
Chiamando f(xi)=yi, è immediata la seguente scrittura in forma matriciale:
x10
...
xn 0
...
x1m
... ... * ... = ...
... xn m
yn
x1m
y1
x10
...
xn 0
x10
... ... * ...
... xn m
xn 0
...
x1m
α0
... ... * ...
... xn m
αm
In forma compatta si ha V T * Y = V T * V * α
Semplificando e invertendo si ottiene
=M*Y dove M=V ¹
220
APPENDICE H2
clear
clc
N=2048;
Ts=1e-01; % 100 campioni ogni sinusoide che dura 10 sec e quindi
Ts=10/100=0.1sec
n=[0:N-1];
TW=N*Ts;
t=n*Ts; %scala tempi discreta; rappresenta un TW=100sec con intervalli di
Ts=100msec
Df=1/TW;
f=n*Df; %scala frequenze discreta; rappresenta un f=1MHz con intervalli di
1KHzA=1;
% Tsin=100*Ts;
%
% signal=1*sin((2*pi/Tsin)*t);
signal=[+0.011305
+0.073326
+0.135110
+0.196336
.
.
.
.
+0.382019
+0.323957
+0.264726]';
% definisco la finestra cos a 3 termini di Hanning -> coerent gain di 0.5
a0=0.5;
a1=-0.5;
a2=0;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w);
spec=fft(signal.*w)./N;
figure(1);
specdB=20*log10(abs(spec));
221
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA, è meglio
in bins
%% definisco la finestra cos a 3 termini di Flat-top -> coerent gain di 0.5
a0=0.281;
a1=-0.521;
a2=0.198;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w);
spec=fft(signal.*w)./N;
figure(2);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA, è meglio
in bins
figure(3);
plot(n,signal,'-r');
figure(4);
plot(t,signal,'-b');
punti=4; %su cui interpolare --> polinomio di grado punti-1 (punti potenza di 2
perchè il programma funzioni!!!!!!!!!!)
grado=2;
valo_tot=[];
for i=1:(N/punti) %%1 polinomio ogni 8 punti
x=zeros(1,punti);
x=t((i-1)*punti+1:(i-1)*punti+punti);
y=zeros(1,punti);
y=signal((i-1)*punti+1:(i-1)*punti+punti);
222
coef=polyfit(x,y,grado);
for j=1:punti
valo(j)=polyval(coef,x(j));
end
valo_tot=[valo_tot,valo];
end
figure(5);
plot(t, valo_tot,'*', t,signal,'-r');
% definisco la finestra cos a 3 termini di Hanning -> coerent gain di 0.5
a0=0.5;
a1=-0.5;
a2=0;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w);
spec=fft(valo_tot.*w)./N;
figure(6);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA
%% definisco la finestra cos a 3 termini di Flat-top -> coerent gain di 0.5
a0=0.281;
a1=-0.521;
a2=0.198;
w=a0+a1*cos(2*pi*n./N)+a2*cos(4*pi*n./N);
w=N*w./sum(w);
spec=fft(valo_tot.*w)./N;
figure(7);
specdB=20*log10(abs(spec));
plot(f,specdB,'g'); %metto n per scala in BINS, f per scala in FREQUENZA
223
APPENDICE I
#include <REG1210.H>
#include <stdio.h>
#include <math.h>
#include "ISD51.H"
#ifndef XTAL
// if no XTAL defined use:
#define XTAL 11059200
// XTAL frequency 11.0592 MHz
#endif
// defines for UART BAUDRATE
#define BAUDRATE
9600
// 9600bps communication baudrate
#define T2RELOAD (65536-(XTAL/32/BAUDRATE))
// defines for A/D Converter setup
#define A_CLK
(((XTAL+500000)/1000000)-1) // about 1MHz Analog Clock
#define ANA_CLK (XTAL/(A_CLK+1))
// precise Analog Clock
#define DECIMATION (ANA_CLK/64/10)
// 10 Hz Decimation
#define CONV_FREQ (ANA_CLK/64/DECIMATION) // Conversion Frequency
// defines for conversion to Volts
#define fV (0xFFFFFF00UL/5) // Factor for Volts caluculation
#define fmV ((fV << 2) / 1000) // Factor for mVolts
#define fuV ((fmV << 10) / 1000) // Factor for uVolts
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
unsigned long l;
// unsigned long
} res;
// Helper structure to read in ADC values
union {
unsigned char c[4];
// bytes
long int l;
// unsigned long
} dat;
// segnale originale x(i)
void main(void) {
unsigned char k, chan, V;
unsigned int mV, uV, i=1;
long int xing[3]=0, rum[3]=0;
x(i-2) r(i) r(i-1) r(i-2)
float r=0.9, pi=3.141593, f0=0.01;
CKCON = 0;
//segnale x e rumore: x(i) x(i-1)
// 0 MOVX cycle stretch
224
// Setup Serial Interface
T2CON = 0x34;
// Use Timer 2 as baudrate generator */
RCAP2H = (T2RELOAD >> 8);
// baudrate reload factor
RCAP2L = T2RELOAD;
SCON0 = 0x50;
PCON |= 0x80;
P3DDRL &= 0xF0;
output
P3DDRL |= 0x07;
.
.
.
#ifdef ISD51
ISDwait();
#else
TI = 1;
#endif
// enable serial uart & receiver
// double baudrate for UART0
// set port pins of UART to input/strong drive
// set port pins of UART to input/strong drive output
// wait until ISD51 connects
// enable serial output
printf("\nMSC1210 Analog/Dignal Converter Test\n\n");
// Setup ADC
ADMUX = 0x00;
ACLK = A_CLK;
ADCON0 = 0x30;
// (AIN+ = AIN0), (AIN- = AINCOM) Voltage from DAC
// set ACLK factor for about 1MHz
// Vref On, Vref Hi, Buff off (on=38), BOD off, PGA=1
ADCON2 = DECIMATION & 0xFF;
// LSB of decimation
ADCON3 =(DECIMATION>>8) & 0x07; // MSB of decimation
ADCON1 = 0x31;
// bipolar, sinc3, self calibration
printf("\nInput -2.5V to +2.5V on AINx channel pairs\n\n");
printf("Chan. Dec. Rate Hex Value Voltage\n");
ADMUX = 0x46;
while (1) {
// Repeat Conversions Forever
// Read Input Volatage
for (k=0; k<1; k++) {
while (!(AIE & 0x20));
// Wait for data ready
dat.c[0] = ADRESH;
225
dat.c[1] = ADRESM;
dat.c[2] = ADRESL;
dat.c[3] = 0;
}
dat.l=dat.l>>8;
if (i==1)
{
xing[2]=dat.l;
i++;
}
if (i==2)
{
xing[1]=dat.l;
i++;
}
if (i>=3)
{
xing[0]=dat.l;
rum[0]=2*r*cos(2*pi*f0)*rum[1]-r*r*rum[2]+xing[0]2*cos(2*pi*f0)*xing[1]+xing[2];
}
res.l=xing[0]-rum[0];
res.l=res.l<<8;
// print sign
printf ("%c", (res.c[0] & 0x80) ? '-' : '+');
if (res.c[0] & 0x80) {
res.l = -res.l;
// make positiv
}
// Convert Result to Volts
V = res.l / fV;
// Volts part
res.l %= fV;
res.l <<= 2;
mV = res.l / fmV;
res.l %= fmV;
res.l <<= 10;
// Millivolts part
226
uV = res.l / fuV;
// Microvolts part
printf ("%bd.%03d%03d\n", V, mV, uV);
rum[2]=rum[1];
rum[1]=rum[0];
xing[2]=xing[1];
xing[1]=xing[0];
}
}
227
BIBLIOGRAFIA
[1] E. Cuniberti, L. De Lucchi, “Tecnologie Disegno Progettazione”, Torino, Petrini
editore, 2000, capitolo 2.9.
[2] Data sheets Texas Instruments “msc1211y4.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/ds/symlink/msc1211y4.pdf, 21/07/2006.
[3] Data sheets Texas Instruments “sbaa090.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/an/sbaa090/sbaa090.pdf, aprile 2003.
[4] Data sheets Texas Instruments “sbaa097b.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/an/sbaa097b/sbaa097b.pdf, maggio 2004.
[5] Data sheets Texas Instruments “sbaa111b.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/an/sbaa111b/sbaa111b.pdf, giugno 2005.
[6] Data sheets Motorola “Principles of sigma-delta modulation for analog-to-digital
converters”, reperibile alla pagina web
http://www.numerix-dsp.com/appsnotes/APR8-sigma-delta.pdf, 12/07/2006.
[7] Data sheets Cirrus logic, “CS5531-32-33-34_F2.pdf”, reperibile alla pagina web
http://www.cirrus.com/en/pubs/proDatasheet/CS5531-32-33-34-AS_F3.pdf,
novembre 2006.
[8] Data sheets Cirrus logic “cs5531eb-2.pdf”, reperibile alla pagina web
http://www.cirrus.com/en/pubs/rdDatasheet/cs5531eb-2.pdf, luglio 2001.
[9] Data sheets Cirrus logic “an150-2.pdf”, reperibile alla pagina web
http://www.cirrus.com/en/pubs/appNote/an150-2.pdf, settembre 2001.
[10] Application note 1108, reperibile alla pagina web
http://www.maxim-ic.com/appnotes.cfm/an_pk/1108, 14/06/2002.
[11] Application note 1870, reperibile alla pagina web
http://www.maxim-ic.com/appnotes.cfm/appnote_number/1870, 31/01/2003.
[12] Data sheets Texas Instruments “sbaa134.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/an/sbaa134/sbaa134.pdf, giugno 2005.
[13] Data sheets Texas Instruments “sbau086.pdf”, reperibile alla pagina web
http://focus.ti.com/lit/ug/sbau086a/sbau086a.pdf, aprile 2003.
[14] Data sheets Linear Technology “241418fa.pdf”, reperibile alla pagina web
http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1001,C115
2,P2187,D2549, 2005.
[15] Data sheets Linear Technology “an86.pdf”, reperibile alla pagina web
http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1005,C115
7,P1763,D4177, gennaio 2001.
[16] Data sheets Linear Technology “an96.pdf”, reperibile alla pagina web
http://www.linear.com/pc/downloadDocument.do?navId=D6637, gennaio 2005.
[17] Data sheets Maxim “an3426_Maxim”, reperibile alla pagina web
http://pdfserv.maxim-ic.com/en/an/AN3426.pdf, 01/12/2004.
[18] Data sheets Time Electronics Ltd “1051_Decade.pdf”, reperibile alla pagina
web http://www.timeelectronics.co.uk/download/1051v5.pdf, 28/08/2006.
228
Scarica

sommario