Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ridurre instabilità ADC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Ridurre instabilità ADC

Messaggioda Foto Utentedany192 » 14 lug 2012, 10:01

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:

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!!
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[2] Re: Ridurre instabilità ADC

Messaggioda Foto UtenteTardoFreak » 14 lug 2012, 10:08

Puoi eliminare i disturbi di rete a 50Hz campionando ogni 20ms. esatti.
In questo modo elimini il 50Hz e tutte le sue armoniche.
Il +/-1 te lo tieni comunque, è normale averlo.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Ridurre instabilità ADC

Messaggioda Foto Utentedany192 » 14 lug 2012, 10:53

Possono esserci delle componenti a 50 Hz anche se l'alimentazione proviene dalla presa USB di un PC?
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[4] Re: Ridurre instabilità ADC

Messaggioda Foto UtenteDirtyDeeds » 14 lug 2012, 10:57

TardoFreak ha scritto:Puoi eliminare i disturbi di rete a 50Hz campionando ogni 20ms. esatti.


Non proprio: se per esempio campioni sui picchi ti becchi un errore sistematico. Meglio prendere più campioni ogni 20 ms e poi mediare.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[5] Re: Ridurre instabilità ADC

Messaggioda Foto Utentedany192 » 14 lug 2012, 13:50

Il problema è che a me serve molta rapidità. Avete presente quando muovete un joystick da PC? I movimenti sono fluidi e vengono subito registrati...il dispositivo deve comportarsi esattamente così per quanto riguarda la parte degli ingressi analogici.
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[6] Re: Ridurre instabilità ADC

Messaggioda Foto UtentePaolino » 14 lug 2012, 14:10

Potresti fare anche dithering.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: Ridurre instabilità ADC

Messaggioda Foto Utentedany192 » 14 lug 2012, 19:45

Dunque, ho fatto varie prove nel pomeriggio per cercare di ridurre questo problema ma non ho avuto risultati. Ho provato ad applicare un semplice algoritmo che consisteva nel salvare in un array di n elementi le varie letture di ogni canale, ordinare ogni array con un bubble sort e fare la media aritmetica in una finestra "centrale" di ogni array ma purtroppo il problema rimane, quindi sono tornato alla mia soluzione iniziale (256 campionamenti per ogni canale e successiva media).

Paolino ha scritto:Potresti fare anche dithering.

Ciao.

Paolo.


Premetto che non conoscevo il dithering fino a quando non ho letto il tuo post. Ho fatto una ricerca in merito ed ho capito in linea di massima il funzionamento ma non come potrei implementarlo nella mia applicazione :mrgreen:
Ultima modifica di Foto Utentedany192 il 14 lug 2012, 20:12, modificato 1 volta in totale.
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

0
voti

[8] Re: Ridurre instabilità ADC

Messaggioda Foto UtenteTardoFreak » 14 lug 2012, 19:46

Per fare la media non hai bisogno di ordinare i valori.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: Ridurre instabilità ADC

Messaggioda Foto Utentedany192 » 14 lug 2012, 20:02

TardoFreak ha scritto:Per fare la media non hai bisogno di ordinare i valori.


Lo so, mi serviva ordinarlo solo per poter escludere i valori "esterni" dal calcolo della media. Esempio: su 16 campioni escludo i primi 4 e gli ultimi 4...comunque non ha funzionato ugualmente...ho provato tante altre varianti ma quel maledetto valore continua ad oscillare sempre di +/- 1 unità
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[10] Re: Ridurre instabilità ADC

Messaggioda Foto UtentePaolino » 14 lug 2012, 20:48

Oggi sono un po' telegrafico: puoi provare con una media mobile.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti