Tensione di riferimento e partitore di tensione

Ciao a tutti,
nel mio studio di approfondimento nell’avvicinarmi ad Arduino, oggi ho realizzato un piccolo progetto, per sperimentare i principi richiamati dall’oggetto di questo “TOPIC”.

Il progetto non fa altro che implementare un misuratore di temperatura, utilizzando un sensore LM35.
Al fine di poter aver una lettura più precisa dei mV restituiti dal Vout del sensore di temperatura voglio non utilizzare la tensione di riferimento di default ma una fornita esternamente (in un altro topic avevo discusso dell’utilizzo della tensione di riferimento INTERNAL 1.1V).
Per fornire la tensione di riferimento simulando una fonte esterna ho pensato di di utilizzare un partitore resistivo composto da due resistenze di seguito elencate:

R1=4650 ohm
R2=981 ohm

Pertanto la tensione erogabile al pin “AREF” è la seguente:

Varef=5*(981/5631) = 0,871V

In allegato una rappresentazione grafica del circuito.

Premetto la misura della tensione in uscita dal piedino Vout del sensore di temperatura è stimata in perfetto accordo con quanto misurato con il mio multimetro. E la temperatura dedotta è credo una misura soddisfacente avendo un scostamento di circa 0,2°C rispetto a quanto rilevato dalla mia stazione Netatmo.

La stima dei mV è realizzata campionando 100 volte in un minuto la tensione così calcolata:

int voltage = map(adc,0,1024,0,871);

Quello che non mi torna è che se scollego il cavo che parte da B25 e collega il pin “AREF” e provo a leggere la tensione erogata con il multimetro risulta essere 880mV, mentre se collego il cavo ad “AREF” con il multimetro trovo una tensione di 860mV. Come posso spiegare queste discrepanze rispetto al valore atteso di 871mV che però sembra essere, comunque, il valore utilizzato da Arduino essendo la tensione del sensore essere calcolata in pieno accordo con quanto misurato con il mio multimetro?

Vi ringrazio infinite e chiedo scusa per le questioni che per voi saranno certamente banali e dovute alla mia scarsa conoscenza.

Grazie ancora,

Lorenzo

Il LM35 da una tensione in uscita che dipende solo dalla temperatura e non dalla tensione di alimentazione.

La tensione di alimentazione 5V di arduino non é mai 5,000V e varia anche nel tempo.

Per quello é la Tua idea di creare una tensione di riferimento con un partitore resistivo partendo dai 5V di aliemnatzione non la migliore.

È meglio usare i 3,3V presenti su Arduino UNO prodotti da uno stabilizzatore e abbassare questa con un partitore.

Le resistenze sono di precisione (sotto 1%) o le hai misurate col tester?

Non so spiegarti la discrepanza dei 20mV che misuri se il partitore é collegato o non al AREF. Una spiegazione é che AREF assorbe parecchia corrente e carica per questo il partitore.

Hai settato Aref con external?

Ciao Uwe

Ciao Uwe, Innanzitutto grazie per la risposta. Il mio voleva essere un esercizio sui partitori di tensione e come implementazione possibile mi è venuta questa. Usando la 3.3V però non ottengo una buona precisione di lettura, invece è usando INTERNAL con 1.1 si ottengono già degli ottimi valori. Forse mi sono spiegato male, certo che la tensione di uscita dipende dalla temperatura, ma la stima del mV e funzione della tensione di riferimento. La resistenza l'ho misurata con il multimetro, ma dovrebbero essere con tolleranza del 5%. Si ho settato ad EXTERNAL e in effetti la misura è perfetta al milliVolts, come se effettivamente stesse utilizzando come riferimento gli 871mV stimati dalla formula. Può essere che con le resistenze che avevo a disposizione sto fornendo una corrente troppo bassa? Ma comunque non so spiegarmi il fenomeno. Proverò a fare un partizionamento partendo dai 3.3V e vedere cosa succede.

Sei stato davvero gentile, grazie mille.

Lorenzo

Si ho settato ad EXTERNAL e in effetti la misura è perfetta al milliVolts, come se effettivamente stesse utilizzando come riferimento gli 871mV stimati dalla formula. Può essere che con le resistenze che avevo a disposizione sto fornendo una corrente troppo bassa? Ma comunque non so spiegarmi il fenomeno.

Un paio di commenti ( dal datasheet )

la tensione minima applicabile sul Aref è di 1 Volts

La caduta di tensione che hai sul partitore quando è collegato all'Aref è normale, visto che c'e' una Rref di 32Kohm. Questa pagina ( LINK ) per il calcolo online, riporta anche il valore reale in base al carico di linea

Nota aggiuntiva

int voltage = map(adc,0,1024,0,871);

In questo caso si usa il valore 1023, non 1024

La tensione di riferimento interna da 1.1V , ha una tolleranza troppo alta ( >1.0 <1.2 ) , meglio usare quella del 3.3V

Brunello:
La tensione di riferimento interna da 1.1V , ha una tolleranza troppo alta ( >1.0 <1.2 ) , meglio usare quella del 3.3V

Il valore assoluto non é tanto preciso ma é stabile nel tempo. Se hai 1,050V restano quei 1,05V. Sul pin AREF puoi misurare quella tensione quando metti INTERNAL.

Il detto vale per Arduino UNO col ATmega328. Il ATmega2560 e il ATmega32U4 hanno altre tensioni di riferimento.

codabat:
Il mio voleva essere un esercizio sui partitori di tensione e come implementazione possibile mi è venuta questa.
Usando la 3.3V però non ottengo una buona precisione di lettura, invece è usando INTERNAL con 1.1 si ottengono già degli ottimi valori.

Esercizio ok. ma ampiamo la conoscenza con informazioni supplementari.

Non capisco perché non ottieni la stessa percisione se usi i 3,3V al posto dei 5V. I 3,3V sono piú precisi perché non dipendono dal alimentatore/PC con cui alimentai Arduino. Una USB puó darti anche 4,5V al posto dei 5V.

codabat:
Forse mi sono spiegato male, certo che la tensione di uscita dipende dalla temperatura, ma la stima del mV e funzione della tensione di riferimento.

Se usi un NTC come sensore con una resistenza come partitore resistivo la tensione che leggi dipende dalla temperatura e dalla tensione di alimentazione. Se usi i 5V (o una tensione minore generata da un partitore resistivo) le variazioni di tensione 5V si eliminano a vicenda se usi gli stessi 5V come riferimento e hai una lettura giusta anche se i 5V sono 4,5V. Con un LM35 una variazione dei 5V di alimentazione fa sbagliare la lettura perché VREF cambia con i 5V.

codabat:
La resistenza l’ho misurata con il multimetro, ma dovrebbero essere con tolleranza del 5%.

La tolleranza delle resistenze non é solo dato dalle imprecisioni di produzione. L’ errore del valore é composto:
dalla precisione nella produzione, dal coeficente di temperatura, dal invecchiamento, dal rumore elettrico che genera il materiale. Misurando elimini solo l’ errore di imprecisione della produzione. Gli altri restano e non sono quantificabili.
Tutti questi errori insieme sono sotto il 5%

Una resistenza da 1% sono piú precisi che un 5% selezionato.
Devi pensare anche che il multimetro con cui hai fatto le misure di tensione e resistenza ha tipicamente una precisione del 1%. (non so che modello hai).

Ciao Uwe

Ciao a tutti,
grazie per le vostre preziose considerazioni.

Brunello:
Nota aggiuntiva

int voltage = map(adc,0,1024,0,871);

In questo caso si usa il valore 1023, non 1024

La tensione di riferimento interna da 1.1V , ha una tolleranza troppo alta ( >1.0 <1.2 ) , meglio usare quella del 3.3V

Hai ragione Brunello, è un errore di digitazione. Ho corretto impostando a 1023. Per quanto riguarda la tensione di riferimento a 3.3V, già provata, non consente, a mio avviso, una risoluzione sufficiente per il livello di tensione prodotta dalla Vout del sensore LM35 (alcune centinaia di mV). Passando a 1.1V (INTERNAL) la precisione di misura sale sensibilmente. (3.3V hai circa 3,22mV di risoluzione a 1,1 mV 1,08mV).

Grazie Uwe, non mi è chiaro quanto mi dici. 3.3V di tensione di riferimento sui pin analogici mi danno un passo di risoluzione di circa 3,22mV mentre con una tensione di 1.1V il passo è di 1,08mV. Deduco, che essendo la tensione Vout del sensore, a temperature ambiente, dell’ordine di alcune centinaia di mV la differenza di passo si fa sensibile nel trasformare i valori adc.

Adesso con il mio partitore di tensione (un po’ campato in aria come giustamente facevi osservare, ho usato anche delle resistenze di fortuna - in realtà volevo erogare una tensione di 1V) sto ottenendo un precisione direi molto soddisfacente. Il mio sensore Netatmo in questo momento sta rilevando una temperatura di 26.7°C e il mio arduino - LM35 26.6°C.

Ma non riesco a capire, ti chiedo scusa, quando scrivi:

uwefed:
Non capisco perché non ottieni la stessa percisione se usi i 3,3V al posto dei 5V. I 3,3V sono piú precisi perché non dipendono dal alimentatore/PC con cui alimentai Arduino. Una USB puó darti anche 4,5V al posto dei 5V.
Se usi un NTC come sensore con una resistenza come partitore resistivo la tensione che leggi dipende dalla temperatura e dalla tensione di alimentazione. Se usi i 5V (o una tensione minore generata da un partitore resistivo) le variazioni di tensione 5V si eliminano a vicenda se usi gli stessi 5V come riferimento e hai una lettura giusta anche se i 5V sono 4,5V. Con un LM35 una variazione dei 5V di alimentazione fa sbagliare la lettura perché VREF cambia con i 5V.

Ciao Uwe

In realtà seppur cambio la tensione di riferimento il sensore viene sempre alimentato a 5V (a meno di fluttuazioni della USB). Quello che cambia è la tensione di lavoro dei pin analogici, in questo caso il pin analogico che riceve la tensione di uscita del sensore di temperatura.

Forse volevi dirmi di usare una tensione di alimentazione di 3.3V perché stabilizzata, ma credo che l’influenza del passo derivato dalla tensione di riferimento continui a farsi sentire a causa della piccola tensione di uscita del sensore. Inoltre, se non ricordo male, il sensore richiede un’alimentazione di almeno 3,7V.

Scusami se non ho compreso a pieno e per mie eventuali imprecisioni ed errori. Ma sto iniziando adesso ad approcciarmi con il mondo di arduino.

Grazie a tutti.

Lorenzo

Grazie Uwe, non mi è chiaro quanto mi dici. 3.3V di tensione di riferimento sui pin analogici mi danno un passo di risoluzione di circa 3,22mV mentre con una tensione di 1.1V il passo è di 1,08mV. Deduco, che essendo la tensione Vout del sensore, a temperature ambiente, dell’ordine di alcune centinaia di mV la differenza di passo si fa sensibile nel trasformare i valori adc.

Dico di usare i 3,3V al posto dei 5V per il partitore per generare la tensione di riferimento. I 3,3V sono piú stabili dei 5V.
La tensioen di alimentazione ha poca influenza sulla misura del LM35, percui vanno bene i 5V della USB. (Alimentazione LM35 da 4 V a 30 V)

Ciao Uwe

Ciao Uew, hai perfettamente ragione! Grazie mille!

Lorenzo