Pages: [1] 2   Go Down
Author Topic: ADC più preciso  (Read 1677 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti mi ricordo di una libreria che permette di rendere la conversione analogico digitale di Arduino più precisa, in quanto calcola la giusta tensione di alimentazione della scheda. Non riesco più a trovarla. Qualcuno riuscirebbe a darmi il link??
Grazie
Monty
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vuoi una lettura più precisa puoi utilizzare la tensione di riferimento interna a 1,1V: ovviamente dovrai con un partitore portare la tensione da legge nel range 0-1,1.
Con questa, la precisione è di 1,1/1024=0,001V.
http://arduino.cc/en/Reference/AnalogReference
Logged


0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il mio problema è  dato dalla tensione di alimentazione che non è sempre 5V precisi. Quindi questo influisce nelle misurazioni, in quanto 1023 letto da analogRead() non corrisponde a 5V ma magari a 4.95. In alternativa come si può leggere la tensione di alimentazione in un dato istante?
Stefano
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai letto la pagina che ti ho linkato? Probabilmente no perché altrimenti avresti visto che c'è la possibilità di usare come riferimento la tensione presente sul pin AREF  smiley-razz
Se colleghi quel pin alla linea di alimentazione poi hai come riferimente la tensione letta lì quindi se vai a 5V il valore di 1023 sarà per 5V, se sei a 4,95V il valore di 1023 sarà per 4.95V ecc..
Logged


0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho letto ho letto. Il mio problema è capire quanto vale la tensione di riferimento attraverso software.
Monty
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se colleghi quel pin alla linea di alimentazione poi hai come riferimente la tensione letta lì quindi se vai a 5V il valore di 1023 sarà per 5V, se sei a 4,95V il valore di 1023 sarà per 4.95V ecc..

Logged


0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse mi sono spiegato male io o non ho capito. A causa di vari fattori la tensione di alimentazione di Arduino può variare senza che io lo sappia quindi il valore 1023 non so mai a cosa corrisponda esattamente. Può corrispondere a 5V ma dopo un paio di secondo potrebbe essere 4.95 o 5.02 ecc ecc.. Questo problema è amplificato se Arduino viene connesso con l'USB al PC.
A questo punto io voglio fare una lettura di tensione con analogRead(). Leggo, ad esempio, il valore 345 lo devo dividere per 1023 e poi moltiplicare per 5? per 4.95? per 5.02? ecc ecc
Monty
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse non ho capito io il problema ho forse non hai capito tu la spiegazione.

Vediamo di ricapitolare. Se colleghi la tensione di alimentazione al pin AREF il tetto MASSIMO che avrai, cioè 1023, sarà sempre legato alla tensione che circola nel circuito. Per cui se lavori a 5V, 1023 corrisponde a questo valore, se lavori a 4,95V allora 1023 corrisponde a quest'altro.
Ma devi: 1) collegare il pin AREF come detto; 2) impostare analogReference(EXTERNAL) per agganciare il comparatore al valore di AREF.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

altra strada?abbassi la tensione del segnale da misurare ,con un partitore resistivo(di cui misuri precisamente gli ohm),alla massima tensione supportata dagli internal reference..questi sono poco dipendentii dalla tensione di alimentazione,se ricordo bene..

leo: forse il suo problema è che a priori non sa la tensione di alimentazione..quindi dovrebbe misurarla..oppure usare un internal reference,che dovrebbe essere stabile..
« Last Edit: September 30, 2012, 09:50:38 am by m_ri » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, gliel'avevo già suggerito io nel 1° reply, oltretutto ha anche una risoluzione maggiore. Però sta spiegando che la tensione massima del segnale potrebbe oscillare.
Con l'AREF risolve: il massimo letto corrisponde sempre al valore massimo del segnale.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si..all'aref dovrebbbe però collegarli una sorgente di tensione nota(tranne in alcuni casi..)
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il max valore che può leggere corrisponde a Vcc, basta collegare Vcc ad AREF.
Se il valore da leggere ha una tensione massima diversa allora è un altro paio di maniche.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@ Monty: in parole povere se i 5V che alimentano Arduino (a prescindere dalla loro provenienza: USB o esterno) sono gli stessi che vengono applicati al sensore/partitore o addirittura direttamente al pin di Arduino, collegando ARef al pin +5V di Arduino, avrai sempre una lettura corretta in relazione all'alimentazione, senza che tu ti debba preoccupare di quant'è in realtà, perché in ogni istante il valore letto è RELATIVO al valore di alimentazione in quel momento. UN esempio pratico, immaginando di collegare l'alimentazione direttamente al pin ADC:
Istante A: alimentazione 5V esatti, lettura 512 = 50% di ARef = 2,50V
Istante B: alimentazione 4,95V, lettura 512 =  50% di ARef = 2,48V
Ciò significa che a partire dal SOLO valore di lettura ADC NON potrai MAI risalire alla tensione di alimentazione (e quindi a quella letta), ma soltanto al rapporto percentuale, quindi non potrai tradurre 512 in 2,50 o 2,48 ma in "50% della tensione di alimentazione".
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 54
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ Monty: in parole povere se i 5V che alimentano Arduino (a prescindere dalla loro provenienza: USB o esterno) sono gli stessi che vengono applicati al sensore/partitore o addirittura direttamente al pin di Arduino, collegando ARef al pin +5V di Arduino, avrai sempre una lettura corretta in relazione all'alimentazione, senza che tu ti debba preoccupare di quant'è in realtà, perché in ogni istante il valore letto è RELATIVO al valore di alimentazione in quel momento. UN esempio pratico, immaginando di collegare l'alimentazione direttamente al pin ADC:
Istante A: alimentazione 5V esatti, lettura 512 = 50% di ARef = 2,50V
Istante B: alimentazione 4,95V, lettura 512 =  50% di ARef = 2,48V
Ciò significa che a partire dal SOLO valore di lettura ADC NON potrai MAI risalire alla tensione di alimentazione (e quindi a quella letta), ma soltanto al rapporto percentuale, quindi non potrai tradurre 512 in 2,50 o 2,48 ma in "50% della tensione di alimentazione".

E' proprio questo il problema in quanto se io alimento tramite USB il risultato viene parecchio sballato. Ad esempio un sensore di temperatura mi rileva 3°C in meno rispetto a quando viene alimentato con un alimentatore.
Monty
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20298
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ritornando all inizio:
Ci sono 2 tipi di sensori
1) quelli che cambiano la loro resistenza e quelli li metti in serie a una resistenza e ottieni un partitore. Quello lo colleghi ai 5V e a massa. La lettura con il AREF interno di 5V é sempre giusta perché entrambi cambiano la tensione nello stesso modo. Questo vale se le variazioni non hanno una frequenza troppo alta. per i 50Hz non ci sono problemi. Per qualche kHz ci sono problemi perche durante la misura cambia la tensione di riferimento.
2) Sensori che danno una tensione proporzionale al valore leddo indipendente dalla loro alimentazione. Un cambio della tensione di alimentazione/riferimento cambia la lettura. Soluzioni:
* attivare il riferimento interno da 1,1V e diminuire la tensione da leggere con un partitore resistivo.
* misurare con un entrata analogica i 3,3V presenti sull' Arduino e calcolarne la tensione di 5V correggere con quel fattore la misura del sensore.

Ciao Uwe

Logged

Pages: [1] 2   Go Up
Jump to: