Sto utilizzando un microcontrollore, wemos d1 mini lite, il cui pin analogico a0, ammette una tensione massima di 3.2v. Devo monitorare una batteria al litio da 3.7 nominale, la cui tensione a carica massima è di 4.27v ( utilizziamo il valore 4,22v che quello che ho al momento nella batteria )
Utilizzo due resistenze da 100k per fare un partitore di tensione e applicando la formula ( Vr2 = V * R2 / (R1+R2)) mi aspetto che che la tensione che arrivi al pin sia di 2,11v. 4,22 * 100000/200000 = 2,11
Faccio le misurazioni in un circuito senza il microcontrollore ed effettivamente la misura sulla seconda resistenza mi da 2,09v ( direi che ci siamo ); poi faccio le misurazione sul pin a0 (collegando il pin a0 con il punto in cui si uniscono le due resitenza e ed il gnd ) e mi da 1,815v e già questo non me lo spiego.
In cascata anche il codice utilizzato mi restituisce una tensione non corretta
Se controlli lo schema elettrico del Wemos, puoi vedere che sull'ingresso analogico c'è già un partitore di tensione 220k/100k (quindi con 3,3V hai 1V su A0) di cui devi tenere conto se aggiungi altre resistenze esterne.
Per fare quello che chiedi, ti basta aggiungere in serie al segnale una resistenza da 100k in modo che il partitore alla fine diventi 320k/100k in modo che con il tuo fondo scala di 4,3V hai un livello massimo su A0 di 1V.
Intanto grazie per la risposta.
Ho messo in serie la resistenza da 100k, collegando quindi il polo positivo della batteria con un capo della resistenza e l'altro capo della resistenza al pin a0 ed il capo negativo della batteria al gnd.
La lettura sul pin a0 mi da
1024 nel caso di una batteria che ha voltaggio 4,22
739 nel caso di una batteria che ha voltaggio 2,87
se nello sketch di prima imposto R1 a 320000 ricevo
il valore 12,80v per la prima
il valore 9,24v per la seconda
quindi il calcolo non va, allora ho pensato di farlo più semplice e fare
ilmagowalter:
Secondo te, si riesce ad essere più precisi, visto il risultato della seconda batteria ?
Invece di usare il map, prova a fare una semplice moltiplicazione.
Tu hai un fondo scala di 4220mV ed una risoluzione di 10bit == 1024 valori discreti 0 compreso.
Questo significa che puoi apprezzare una variazione minima di 4220/1023 = 4,125122 mV
double Vbatt = analogRead(A0) * 4.125122L;
Edit:
Rifacendo meglio i conti però.... con una livello di tensione di 2,87V dovresti leggere sul pin analogico un valore di circa 700 e non 739.
Tensione batteria con il tester 2.86v
Tensione al pin con il tester 2.15v
Lettura pin ( facendo stavolta una media tra 100 letture ) -> 734
Voltaggio calcolato 2.93v
Tensione batteria con il tester 4.16v
Tensione al pin con il tester 3.14v
Lettura pin ( facendo stavolta una media tra 100 letture ) -> 1024
Voltaggio calcolato 4.10v
anche se ci siamo avvicinati direi che c'è qualcosa che non va nel codice
se io faccio con la calcolatrice
caso 1 -> 734 * (4220/1023) / 1000 = 3,02V
caso 2 -> 1024 * (4220/1023) / 1000 = 4,22V
Tensione batteria con il tester 2.85v
Tensione al pin con il tester 2.15v
Lettura pin ( facendo stavolta una media tra 100 letture ) -> 732
Voltaggio calcolato 3.02v
Tensione batteria con il tester 4.16v
Tensione al pin con il tester 3.15v
Lettura pin ( facendo stavolta una media tra 100 letture ) -> 1024
Voltaggio calcolato 4.22v
Praticamente siamo tornati ai valori del map.
Osservo la cosa da un altro punto di vista
se al pin a0, rilevo con il tester una tensione di 2.15v, se faccio la proporzione ( considerando che il pin ammette valori 0-3.2v )
2,15 : 3,2 = x : 1023
x = 2,15*1023/3,2 = 687 circa
con 687, il calcolo mi darebbe 2.83v
con la batteria più carica invece mi darebbe 1007 ed il calcolo 4.15v
se la lettura mi da 732 c'è qualcosa che non va, che ne pensi?
ilmagowalter:
se la lettura mi da 732 c'è qualcosa che non va, che ne pensi?
Si è la stessa cosa che ti avevo scritto qualche post più su, qualcosa non torna nella conversione AD.
Possibile che il partitore a bordo del tuo wemos non sia quello indicato nello schema elettrico? Magari ci sono valori diversi di resistenze (ma stesso rapporto) e quindi stiamo sballando tutti i conti con la resistenza in serie.
Questa è la foto della scheda, sto cercando di capire quali sono le due resistenze .. cmq è un clone, non è una wemos originale, purtroppo la pagina di aliexpress dove l'ho presa non esiste più
la resistenza accanto ad a a0 il tester mi dice 0,218MOhm, quindi da 218k, e quella subito accanto 94,8k
ilmagowalter:
rinominata la variabile in tensione
...
Per quello non va ... il nome corretto e' "differenza di potenziale", se sbagli nome si offende
(scusa, non ho resistito :D)
Scherzi a parte, considera che se sono comuni resistenze con tolleranza 5%, puoi avere piu o meno 5% del valore indicato, poi c'e' la tolleranza del tester (che secondo il modello puo essere anche piu elevata del tipico 1 o 2 % ), qualche possibile contatto proprio non al 100% fra puntali e componenti, possibile ossidazione dello stagno, derive termiche, imprecisione dei riferimenti per l'ADC ... metti tutto assieme ... e comunque stai parlando di pochi millivolt di differenza fra un valore calcolato a tavolino ed uno misurato dal vero ... ci puo anche stare ...
Etemenanki:
Per quello non va ... il nome corretto e' "differenza di potenziale", se sbagli nome si offende
(scusa, non ho resistito :D)
hai ragione, ma il nome della variabile è troppo lungo così... magari posso scrivere deltaV
tornando all'argomento a questo punto mi faccio un coefficiente di correzione che applico sempre
attesa=1007, effettiva=1024 ---> 1024 : 1007 = 1 : x ---> x = 1007*1/1024 = 0,9834
con questo metodo
per la batteria scarica ottengo 2.94v
per quella carica 4.15V