lettura volt arduino

scusate se é gia stato detto ma non lo trovo.

se in ingresso analogico inserisco una tensione ignota da 0 a 5 V,

arduino con alimentatore dedicato,

test = analogRead (A0);
volt = test * (5.0/1023.0) ;

sulla seriale leggo volt 3.37

quanto posso dire che sia precisa la tensione letta?

  1. La precisione della lettura dipende direttamente dalla precisione della tensione di riferimento.
  2. Dipende dalla impedenza interna della fonte di tensione da misurare. Il ADC del Arduino carica per un certo tempo un condensatore ample and hold interno. Se la resistenza della tensione da misurare é troppo alta il condensatore non raggiunerá il valore della tensione da misurare. L' errore é quantificabile. Ripetendo la misura per alcune volte fa che il condensatore ha un tempo piú lungo da caricarsi.
  3. Nonlinearitá e errori di conversione vedi datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf Pagina 250 :

• 0.5 LSB Integral Non-linearity
• ± 2 LSB Absolute Accuracy

Ciao Uwe

alimento l'arduino con una pila da 9V
la tensione di riferimento sono i 5V dell'arduino
quindi se sto misurando la tensione di una batteria e non ha una resistenza elevata (e leggo 3.37),
il calcolo della tolleranza 2 LSB mi è parso che si calcoli così:
3.37 /2 alla decima
quindi errore di 3 millivolt esommato ai 5 millivoltdel gradino del 5/1023

il 3.37V letto potrebbe essere 3.38V oppure 3.36V, giusto?

@ camperos : è sbagliato dividere per 1023. Se ne è discusso tempo fa e trovi i dettagli a partire da QUI in poi. Attenzione alle varie considerazioni che vengono fatte ...

Guglielmo

P.S. : Anche QUESTA vecchia discussione può essere utile :wink:

Avevo dimenticato quella discussione. :grin:

PaoloP:
Avevo dimenticato quella discussione. :grin:

Male, molto male, stasera a letto senza cena :grin:

ok grazie .. /1024 :smiling_imp:

in questi giorni di prove ho riscontrato un problema che mi ha fatto impazzire ma forse è normale,

arduino mega senza nulla collegato tranne una batteria al piombo (7Ah) su A0 con partitore 1/4,
dopo un po di ricariche di sketch la tensione dell'arduino scende da 5.05 volt a 4.96,
quindi per essere sicuro delle modifiche dello sketch devo scollegare l'alimentazione e ricollegarla e la tensione ritorna a 5.05.

la tensione A0 è di circa 3 volt è appunto la tensione dell'alimentazione di 12 volt dell'arduino (jack) ribassata con il partitore .
provato anche con A3, ma non sistematicamente si presenta il problema, magari per 20 ricariche senza scollegare l'alimentazione il 5.05 resta ::slight_smile:

Se vuoi maggior precisione, devi usare il riferimento interno a 1V1, molto più stabile di quello di default, che è legato alla tensione presente su VCC.
Per poterlo utilizzare devi però dimensionare il partitore affinché la tensione massima sul pin dell'Arduino rientri nel campo 0-1,1V. Il riferimento interno è molto stabile e, avendo un valore massimo più basso, permette una maggior risoluzione sulle letture: con i nostri 1024 step hai uno step di 0,0011V

PS:

leo72:
permette una maggior risoluzione sulle letture: con i nostri 1024 step hai uno step di 0,0011V

La risoluzione non cambia, sempre 1024 step sono, quello che cambia è il valore del singolo step, però dato che devi usare un partitore per ridurre la tensione in ingresso alla fine lo step sarà dato dalla tensione massima per cui è calcolato il partitore diviso 1024.
Rammento che i riferimenti interni degli AVR sono si molto stabili però sono molto imprecisi nel loro valore, circa 20% di tolleranza, pertanto se questa tensione non viene misurata in modo preciso, su Aref, non è possibile effettuare un conversione attendile.
Meglio usare la tensione 3.3v di Arduino come riferimento, viene da un regolatore dedicato ed è sia stabile che precisa.

Astro mi smonti un dogma :smiley:
Abbiamo sempre detto che l'AREF interna a 1V1 era la più stabile e precisa. Ora ci dici che hanno una tolleranza del 20% ???

leo72:
Astro mi smonti un dogma :smiley:
Abbiamo sempre detto che l'AREF interna a 1V1 era la più stabile e precisa. Ora ci dici che hanno una tolleranza del 20% ???

Mica è la prima volta che lo dico :slight_smile:
Il reference interno è si stabile e abbastanza pulito dal rumore, però non è preciso, ha una tolleranza del +/-10% (20%) sul valore nominale, sei obbligato a misurare quanto vale sul pin Aref se vuoi ottenere una conversione attendibile.
Datasheet ATmega 328 tabella 29.8 (ADC charatectistics) Vint è compresa tra 1.0 e 1.2 V con valore tipico 1.1 V.
Datasheet ATmega 2560 tabella 30.8 (ADC charatectistics) Vint se settata a 1.1V è compresa tra 1.0 e 1.2 V con valore tipico 1.1 V, se settata a 2.56 V è compresa tra 2.4 e 2.8 V con valore tipico 2.56 V.

E' la classica discussione sulla differenza fra precisione ed accuratezza...