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