Ridurre instabilità ADC
Salve a tutti ragazzi! Sto lavorando su un firmware per un 18F4550 che si occupa, in breve, di eseguire semplicemente delle letture di tutti gli ingressi analogici e digitali in maniera continua, mostrandole su un programma scritto in vb sul PC (comunico via USB). Per quanto riguarda gli I\O digitali, sto utilizzando i primi 5 canali dell'ADC (10 bit) con dei potenziometri da 10K ma ho notato che le letture sono un po' instabili.
Ho scelto quindi di effettuare una serie di letture e di calcolarne il valore medio (per ogni canale ovviamente) utilizzando le poche righe di codice seguenti:
Eseguo quindi 256 letture per ogni canale ma il problema è che noto un oscillazione dei valori letti di circa +/-1 unità nonostante il numero di letture sia bello consistente. Ho provato anche a farne 512,1024 e anche 2048 ma il problema del +/-1 rimane ed ovviamente il tempo di risposta e la fluidità delle letture in realazione alla rotazione dei potenziometri diminuisce sensibilmente. Ho pensato di filtrare gli ingressi dell'adc collegando un condensatore tra l'ingresso e la massa ma nulla da fare. A questo punto mi chiedevo se posso intervenire via software per attenuare (o meglio evitare) questo fenomeno.
Grazie anticipatamente!!
Ho scelto quindi di effettuare una serie di letture e di calcolarne il valore medio (per ogni canale ovviamente) utilizzando le poche righe di codice seguenti:
- Codice: Seleziona tutto
while(1){
for(count=0;count<=255;count++){
ch1 += Adc_Read(4);
ch2 += Adc_Read(0);
ch3 += Adc_Read(1);
ch4 += Adc_Read(2);
ch5 += Adc_Read(3);
}
ch1 /= count;
ch2 /= count;
ch3 /= count;
ch4 /= count;
ch5 /= count;
......
}
Eseguo quindi 256 letture per ogni canale ma il problema è che noto un oscillazione dei valori letti di circa +/-1 unità nonostante il numero di letture sia bello consistente. Ho provato anche a farne 512,1024 e anche 2048 ma il problema del +/-1 rimane ed ovviamente il tempo di risposta e la fluidità delle letture in realazione alla rotazione dei potenziometri diminuisce sensibilmente. Ho pensato di filtrare gli ingressi dell'adc collegando un condensatore tra l'ingresso e la massa ma nulla da fare. A questo punto mi chiedevo se posso intervenire via software per attenuare (o meglio evitare) questo fenomeno.
Grazie anticipatamente!!