ESERCIZI - SERIE N. 3 ACQUISIZIONE SEGNALI ANALOGICI Problema: acquisire una grandezza fisica analogica e rappresentarla in formato binario all'interno di un'unità di elaborazione realizzata con tecnologia a funzionalità programmabile. Punti essenziali da tenere presente per un corretto interfacciamento: 1. Scelta delle strutture di conversione e normalizzazione dei segnali 1.1. Circuiti per convertire la grandezza fisica in segnale elettrico 1.2. Convertitore corrente-tensione 1.3. Filtro passa basso per eliminare i disturbi in alta frequenza 1.4. Potenziamento del segnale elettrico con amplificatori lineari 1.5. Schemi circuitali per ottenere dei segnali standard 1.6. Sfruttamento dell'intera dinamica del convertitore 1.7. Correzione dell'offset di zero 1.8. Taratura del fondo scala 2. Strutture e logiche per l'acquisizione di più grandezze fisiche analogiche 2.1. Multiplexer analogico o digitale 2.2. Amplificatori a guadagno programmabile 2.3. Circuito campionatore e mantenitore 2.4. Velocità di variazione del segnale e teorema di Shannon 2.5. Indirizzamento dei dispositivi fisici della catena d'acquisizione 2.6. Risoluzione dei convertitori 2.7. Gestione a polling o a interrupt del convertitore 4. Ritardo complessivo H/S introdotto dalla catena d'acquisizione 4.1. Ritardo Hardware dovuto a: selezione del canale, prelievo del campione, conversione del segnale 4.2. Ritardo Software con la gestione a polling e a interrupt : tempo di archiviazione del risultato della conversione Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 1 - 13 Esercizi 1) Un trasduttore di temperatura fornisce una corrente che varia con la temperatura secondo la legge I = KpT dove: T è la temperatura in °K, Kp = 1 µA/°K. Dimensionare i componenti in modo che la tensione d'uscita vari tra 0 e 10 V per variazioni della temperatura tra 0 °C e +80 °C. Progetto - Per ottenere Vo(0 °C) = 0 V; occorre che: I1(0 °C) = Is(0 °C) - I = 0; ne segue il calcolo di: R1 + R3 = Vcc / I(0 °C) = 43,9 kΩ; val. comm.: R3 = 39 kΩ; R1 = 10 kΩ; - Per ottenere Vo(80 °C) = 10 V; essendo: I1(80 °C) = Is(80 °C) - I = 80 µA; si determina: R4 + R2 = Vo(80 °C) / I1(80 °C) = 125 kΩ; val. comm.: R4 = 82 kΩ; R2 = 47 kΩ; - Circuito di conversione (corrente-tensione) e di condizionamento Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 2 - 13 2) Un trasduttore di temperatura resistivo inserito in un sistema a ponte fornisce una tensione variabile linearmente tra -0,5 V e 1 V quando la temperatura varia da 0 °C a 30 °C. Proporre uno schema circuitale e dimensionare i componenti in modo che la tensione d'uscita vari tra 0 e 5V - Transcaratteristica in presenza dell'offset di zero a) e in assenza b) - Modulo di condizionamento Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 3 - 13 3) Si vuole acquisire un solo segnale sinusoidale, di frequenza 180 Hz, mediante una catena d'acquisizione per la quale è stato scelto un convertitore ADC a N = 10 bit avente tempo di conversione Tconv = 25 µs e una tensione di fondo scala VFSR di 10 V. Si vuole stabilire quale ampiezza massima può avere il segnale affinché possa essere acquisito correttamente senza usare un modulo S&H. Progetto - Deve essere soddisfatta la condizione: |∆V|max ≤ 1LSB = VFSR / 2N = 9,8 mV; - Imponendo la condizione nel punto di massima pendenza (per t = 0): |∆V|max = |d(Vmaxsin(wt)) / dt|t=0Tconv = wVmaxTconv ≤ 1LSB; - Si ricava: Vmax ≤ 347 mV; - Relazione tra variazione del segnale e tempo di conversione - Schema per l'acquisizione di un solo segnale con presente il S&H Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 4 - 13 4) Per acquisire un segnale si è scelto di utilizzare: un convertitore ADC a 10 bit avente fondo scala VFSR = 10 V e un S&H ad anello aperto avente capacità di Hold C = 800 pF, resistenza dell'interruttore RON = 200 Ω e ROFF = 100 MΩ. Si determini il tempo d'acquisizione TACQ e il tempo massimo di conversione dell'ADC TCONV assumendo l'ipotesi che, i ritardi temporali in fase di Sample e la scarica del condensatore in fase di Hold, siano dovuti solamente ai limiti imposti dall'interruttore del S&H. Determinare, inoltre, l'abbassamento di tensione nella fase di Hold se in fase di Sample è stato campionato un segnale di +3 V. Progetto - Fase Sample, calcolo del tempo per caricare il condensatore fino a fondo scala (tempo di acquisizione del massimo segnale): Vc (TACQ) = Vmax - 1LSB/2 = Vmax(1- e-t/τ ); Da cui si ricava: τ = RONC; TACQ = τ ln (2n+1) = 1,21 µs; - Fase Hold, il condensatore (carico con tensione VFSR) perde la sua carica attraverso la resistenza dell'interruttore, equazione di scarica: Vc (t) = Vmaxe-t/τ; τ = ROFFC; - Eseguendo la derivata discreta si ha: ∆Vc = ( ∆t / τ )Vmaxe-t/τ ≈ ∆t Vmax / τ; - Ponendo la condizione: Vmax = VFSR; e ∆Vc < VFSR / 2n+1; - Dalla relazione: ∆Vc ≈ ∆t Vmax / τ; - Si ricava: ∆t = TCONV = 39 µs - Calcolo caduta di tensione in fase Hold per Vi = 3 V ∆Vc = TCONV Vi / τ = 1,46 mV; 1LSB = 9,76 mV Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 5 - 13 - Scarica del condensatore in fase di Hold - Modulo S&H ad anello aperto - Modulo di S&H ad anello chiuso - Confronto tra S$H ad anello aperto e quello ad anello chiuso: - L'anello chiuso ha una banda passante più estesa e, pertanto, un tempo di risposta più breve - L'anello chiuso presenta due problemi: l'amplificatore A1 si porta in saturazione nella fase di Sample e possono sorgere problemi d'instabilità nell'anello (si eliminano inserendo una resistenza in serie al condensatore) Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 6 - 13 5) Si devono elaborare in tempo reale 32 canali analogici; si sa che il periodo di campionamento è pari a TCAMP = 125 µs. Calcolare la massima frequenza del segnale d'ingresso ed il tempo di conversione che deve avere il convertitore A/D. Progetto - Condizione di Shannon: fCAMP ≥ 2fsegnale; => fsegnale ≤ 4 KHz - Dovendo scandire tutti i canali vale la relazione: TCAMP = NcanaliTconv - Si ricava: Tconv = 3,9 µs - Catena d'acquisizione multicanale Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 7 - 13 6) Si devono acquisire con un sistema a microprocessore 4 segnali analogici e si utilizza un solo ADC avente: risoluzione N = 8 bit, fondo scala VFSR = 5 V e tempo di conversione Tconv = 20 µs. Il campionamento dei segnali deve avvenire allo stesso istante. Si calcoli la massima pendenza dei segnali d'ingresso se si vogliono acquisire con un'accuratezza di 2LSB. Se i segnali sono sinusoidali calcolare la massima frequenza nell'ipotesi che presentino Vmax = 4 V. Progetto - Periodo di campionamento: TCAMP = Ncanali Tconv = 80 µs; - Ampiezza del quanto: q = 1LSB = VFSR / 2n ≈ 20 mV; - Errore tollerato: Ea = 2LSB ≈ 40 mV; - Massima pendenza del segnale d'ingresso: pMAX = Ea / TCAMP; = 0,2 [mV / µs]; - Massima frequenza dei segnali sinusoidali: Ea = wVmax TCAMP ; => w = 12,5 [rad/s] - Segnali d'ingresso campionati allo stesso istante Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 8 - 13 - Schema d'acquisizione sincrona - Schema d'acquisizione asincrona Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 9 - 13 - Ripartizione tipica del tempo totale d'acquisizione - Confronto tra le velocità di acquisizione del modo normale e del modo overlap (sovrapposizione) Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 10 - 13 7) Si vuole simulare l'azione di un filtro esponenziale (filtro Arma del primo ordine) per attenuare i disturbi presenti in un segnale sinusoidale. - Modello discreto del filtro: U(k) = I(k) + cf*( U(k-1) - I(k)); - Costante di tempo: CT = T / (1 - cf); - Per approfondimenti vedi dispense Prof. Mezzalira Cap. 8. - Studiare e provare il programma allegato. Esso genera una sinusoide con sovrapposti disturbi; filtra la sinusoide calcolando il valore corrente come media con il precedente e il seguente (filtro non causale, off-line); salva su file process.dat il tempo, il valore non filtrato e quello filtrato. Infine si può caricare il file process.dat in Excel e creare i grafici delle forme d'onda non filtrata e filtrata. - Si chiede di modificare il programma in modo da: implementare il filtro esponenziale, consentendo all'utente la scelta della costante di tempo CT , e provare il comportamento utilizzando Excel. - Tabella Excel di process.dat 0.000 0.010 0.020 0.030 0.040 0.050 0.060 0.070 0.080 0.090 0.100 0.110 0.120 0.130 0.140 0.150 0.160 0.170 0.180 0.190 -0.200 -0.337 -0.374 0.388 -0.249 -0.086 0.377 0.239 0.902 0.965 0.228 0.690 0.553 0.815 0.778 1.241 0.603 1.066 1.328 1.590 -0.200 -0.304 -0.108 -0.078 0.018 0.014 0.177 0.506 0.702 0.698 0.628 0.490 0.686 0.715 0.945 0.874 0.970 0.999 1.328 1.457 Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 11 - 13 - Grafico della sinusoide in presenza dei disturbi 15000 10000 5000 0 0 500 1000 1500 -5000 -0.200 0.337 0.374 0.388 0.249 0.086 - -10000 -15000 - Modello di programma #include #include #include #include <stdio.h> <stdlib.h> <string.h> <math.h> #define #define #define #define #define #define #define DIM ALFA N T DT W YP 1100 6.28 1000 10.0 T/N ALFA/T 10 void init_data(double valori[][3], int size) { int i, j; for(i=0; i<size; i++) { for(j=0; j<3; j++) valori[i][j]=0.0; } } void out_data(double valori[][3], int size) { FILE *fp; int i, j; fp=fopen("process.dat","w"); for(i=0; i<size; i++) { for(j=0; j<3; j++){ fprintf(fp,"%10.3lf\t", valori[i][j]); } fprintf(fp,"\n"); } fclose(fp); } Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 12 - 13 void init_signal(double valori[][3], int size) { double dy, t; int i; for(i=t=0; i<size; i++, t=t+DT){ dy=rand()%10/10.0-0.5; valori[i][0]=t; valori[i][1]=YP*sin(W*t)+dy; } } void media_signal(double prima, double dopo, double *val) { double media; media=(prima+dopo+*val)/3.0; *++val=media; } void filtra_signal(double valori[][3], int size) { double prima, dopo, *val; int i; valori[0][2]=valori[0][1]; for(i=0; i<size-1; i++){ prima=valori[i][1]; val=&valori[i+1][1]; dopo=valori[i+2][1]; media_signal(prima, dopo, val); } valori[i][2]=valori[i][1]; } void main(void) { int cmd, size=N; double valori[DIM][3]; srand(time(NULL)); do{ clrscr(); printf("Esercizi - Serie 3: Miniprogetto 1\n"); printf("\n\t\t Pigia 0 per uscire, return per continuare: "); fflush(stdin); cmd=getchar(); if(cmd!='0') { printf("\nSimulazione eseguita, vedi file process.dat\n"); init_data(valori, size); init_signal(valori, size); filtra_signal(valori, size); out_data(valori, size); fflush(stdin); getchar(); } }while(cmd!='0'); } Esercizi serie N. 3 - Ingressi analogici - Informatica Industriale N. O. - G. Rigano 13 - 13