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