Vai al contenuto
PLC Forum


Precisione Adc Del 16f876a


paperotto

Messaggi consigliati

Buongiorno a tutti sono nuovo del forum.

Volevo proporvi un quesito che non riesco a risolvere.

Ho un termostato che legge la temperatura fornita in mV da un LM35 tramite l'ADC di un Pic 16F876A. La misura viene fatta mediando 20 misure ottenute a distanza di 2 ms una dall'altra. Il problema è che secondo i miei calcoli l'ADC converte dei valori leggermente più bassi di quelli che dovrebbe. Faccio un esempio: con il multimetro misuro dall' LM35 30.3 mV e il risultato della misura è di 30°C invece che di 30.3°C.

Ho provato varie tecniche per operare la conversione, ma il risultato rimane lo stesso sia usando come riferimenti Vdd e Vss sia utilizzando dei Voltage Reference della Analog Devices precisi (REF 195).

Ciò che mi stupisce e che usando 5V come tensione di riferimento a 10 bit ogni bit ha una risoluzione in mV pari a 4,88 e quindi la moltiplicazione per cinque che il programma opera dovrebbe convertire in ECCESSO ma così non è. La connessione viene inoltre sempre fatta in SLEEP usando una frequenza di campionamento interna e la sonda entra con un filtro passa basso tarato per eliminare enventuali rumori a 50Hz. Qualcuno potrebbe dirmi a cosa sia dovuto l'errore o se questo è normale (non è poi così grave e elevato...). Scusate la prolissità e grazie in anticipo per eventuali risposte :lol:

Link al commento
Condividi su altri siti


La prima domanda è con cosa misuri i 33mV ? Hai uno strumento adeguato per fare misure precise ?

Seconda domanda Cosa succede quando metti l'ingresso a zero. c'è un offset ?

Calibra gli offset e prendi un punto di misura a fondo scala.

io faccio così

La conversione è lineare per due punti passa una sola retta....

calibro su due punti uno a inizio e uno a fine scala

metto via le coppie di valori lettura A/D e tensione misurata con strumento e poi nei calcoli utlizzo queste due coppie di valori.

Ovviamente devi fare una procedura di tartatura e devi ricevere ad esempio via seriale il valore misurato con uno strumento.

Meglio ancora se utlizzi un riferimento tarato che colleghi periodicamente all'ingresso per ricalibrare il canale analogico. Di solito si fa una calibrazione di offset e una sul riferimento. ovviamente si complica l'hw (e il costo) del canale anlogico.

Per quanto riguarda il dopo conversione esegui i calcoli con il maggior numero di bit possibile. Tradotto fai sempre prima le moltiplicazioni e poi le divisioni. Se devi scalare il risultato fallo solo alla fine per non perdere risoluzione. Anzi se hai spazio verso l'alto moltiplica pure i valori per una costante priam di fare le operazioni. (10bit = 1024 hai a disposizione 4 bit)

Altro semplice accorgimento per migliorare la precisione quando esegui una divisione: somma prima metà del divisore per avere una migliore approssimazione. Ad esemio se fai 19/5 con un aritmetica intera ottieni 3 se però fai (19+5/2)/5 ottieni 4 che è un'approsimazione migliore. Per un micro è molto semplice implementare questa funzione fai

shift di 1 divisore (divisione per due)

add dividendo + risultato shift

divisione.

Link al commento
Condividi su altri siti

In aggiunta a quanto consiglia accacca ti raccomando vivamente i calcoli in virgola mobile. Se usi un "C" compiler basta eseguire in real, se vai in ASM ci sono routine in virgola mobile della microchip scaricabili dal sito.

Link al commento
Condividi su altri siti

Grazie mille per entrambi i consigli. Siccome il programma è scritto in ASM proverò le routine della microchip. Mi sono dimenticato inoltre che l' errore non è dato da un offset in quanto con ingresso a massa la misura è stabile a 0,0°C. Lo strumento che uso per misurare i mV è un multimetro digitale che potrebbe benissimo essere starato effettivamente ( è MOLTO VECCHIO, lo usava mio zio :ph34r: ). Provando ora ho notato che all'uscita del 7805 mi dà 5,02 V e quindi magari è lui che tende a sovrastimare i mV in uscita dalla sonda (nonostante non siano impossibili i 5.02 V). Ripensandoci pomeriggio mi è venuto in mente di attribuire l'errore al guadagno dell'ADC che non è quello ideale descritto dalla sua funzione di trasferimento. Ho pensato a questo in quanto un gain leggermente errato porterebbe la misura a sbagliare decidendo erroneamente sempre nello stesso verso (cioè più in basso), però ho lo stesso errore su più pic e non credo che possa quindi essere una giusta causa. L'idea per provarlo è di misurare i 5 volt e vedere cosa esce (il gudagno sballa di più per misure più grandi). Cosa ne pensate?

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...