Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-6@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-5-copia-5@8x-100-scaled
Tavola-disegno-5-copia-6@8x-100-scaled
Tavola-disegno-5-copia@8x-100-scaled
Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-3@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
previous arrow
next arrow

Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-6@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-5-copia-5@8x-100-scaled
Tavola-disegno-5-copia-6@8x-100-scaled
Tavola-disegno-5-copia@8x-100-scaled
Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-3@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
previous arrow
next arrow

Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-6@8x-100-scaled
Tavola-disegno-5-copia-3@8x-100-scaled
Tavola-disegno-5-copia-5@8x-100-scaled
Tavola-disegno-5-copia-6@8x-100-scaled
Tavola-disegno-5-copia@8x-100-scaled
Tavola-disegno-5-copia-8@8x-100-scaled
Tavola-disegno-3@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
Tavola-disegno-5-copia-7@8x-100-scaled
previous arrow
next arrow

Aumentare la risoluzione dell’ADC con il supercampionamento

da | 12 Gen, 21 | Embedded, Tutorial |

Esiste una tecnica con cui è possibile migliorare la risoluzione di qualsiasi convertitore analogico-digitale (ADC). Tale tecnica si chiama supercampionamento. Vediamo di cosa si tratta e di come implementarla nel nostro progetto. Si presuppone una conoscenza basilare delle tecniche di acquisizione delle tensioni analogiche con i sistemi ADC.

Il supercampionamento

Gli esempi riportati in articolo si riferiscono al campionamento con Arduino, ma la tecnica è identica per qualsiasi tipologia di sistema dotato di porte ADC. Quando si effettua una lettura da una porta analogica, il dato di tensione letto è relativo a quel particolare momento. Il seguente esempio:

val = analogRead(0);

legge il valore della tensione analogica dalla porta 0 e la assegna, in formato digitale (ossia da 0 a 1023 nel caso di ADC a 10 bit o da 0 a 4095 nel caso di ADC a 12 bit) alla variabile numerica intera “val”. Effettuare una sola lettura non è mai una cosa saggia, anche se risulta estremamente semplice e intuitivo. Proprio in quel momento, infatti, il sistema potrebbe essere stato affetto da rumore, interferenza, picco e la lettura sarebbe poco affidabile. La situazione migliora di molto eseguendo due letture consecutive della stessa porta, sommando i due valori acquisiti e calcolando la media aritmetica. Il seguente esempio esegue due letture consecutive, riducendo di molto il rumore e le interferenze.

val1 = analogRead(0);
delay(1);
val2 = analogRead(0);
delay(1);
media = (val1 + val2) / 2;

Ci possiamo rendere conto che ulteriori operazioni di lettura e di media migliorano di tanto la bontà del segnale acquisito. Il diagramma di figura 1 ci dà una buona idea del miglioramento dei risultati con l’aumento del numero di letture. Si supponga che il primo campione acquisito dell’esempio sia un rumore. Tale lettura sarà, ovviamente non attendibile. Ma se si continua il processo di acquisizione con ulteriori letture (supponendo che esse contengano il valore reale della tensione, senza rumore) e si effettua un calcolo della somma e poi della media, il risultato sarà molto più attendibile e veritiero.

Figura 1: aumentando il numero di letture si migliora la bontà del segnale acquisito

Eseguendo diverse letture, aumenta, in pratica la risoluzione poiché viene eliminato il comportamento digitale del sistema e i livelli di incertezza vengono convertiti in livelli reali di valori. In pratica più letture vengono effettuate e più aumentano gli ordini di grandezza nella risoluzione del mondo reale. Ovviamente non si possono utilizzare tante variabili numeriche per diverse letture. Risulta più conveniente racchiudere le operazioni all’interno di un ciclo “FOR”, come evidenziato nell’esempio di seguito:

somma=0;
volte=100;
for(k=1;k<=volte;k++) {
   lettura=analogRead(0); // una lettura = 100 microsecondi
   somma=somma+lettura;
}
somma=somma/volte;

Questo esempio esegue ben 100 letture, le somma tra loro e, infine, ne calcola la media. Tale metodo, in effetti, migliora di molto il rapporto segnale/rumore dell’ADC. In pratica il supercampionamento viene implementato per migliorare le prestazioni di un convertitore analogico-digitale (ADC). Quando si sovracampiona di un fattore pari a N, la gamma dinamica aumenta anche di un fattore N perché ci sono N possibili valori per la somma. Pertanto, quando dobbiamo eseguire delle acquisizioni analogiche, evitiamo di effettuare una sola lettura, ma preferiamo acquisire più campioni e calcolarne la media.

Categorie

Archivi

    ISCRIVITI ALLA NEWSLETTER












    Array


    The reCAPTCHA verification period has expired. Please reload the page.


    *Tutti i campi sono obbligatori



    Apri la chat
    1
    Ciao come possiamo aiutarti?
    Ciao come possiamo aiutarti?