Misura di temperatura con termistore Epcos 100K

Ciao a tutti,

sto cercando di ottenere una misura di temperatura utilizzando un termistore Epcos 100K di cui ho anche il datasheet.

In particolare ho realizzato il partitore di tensione tramite resistenza nota R1 (4*10Komh che misurati col tester sono 39.7 Kohm) e acquisisco la tensione tra R1 e e termistore per trovare il valore della sua resistenza e ricavare quindi la temperatura.
Il codice ( in ambiente Matlab ) è in allegato cosi come una foto del circuito realizzato.

Il mio problema è che nonostante disponga dei valori da datasheet la temperatura risulta più elevata di circa 7/8° rispetto al normale.

Come si puo vedere dal grafico inoltre ha delle oscillazzioni di misura evidenti (probabilmente dovuti alla tensione Vcc non porprio costante) mentre il picco rapressenta un aumento di temperatura dovuto ad un alitata.

Il valore di resistenza che mi viene restituita dal tester alla temperatura di circa 20/21° (che è quella che mi aspetterei dall’acquisizione con arduino) è molto diversa da quella che mi viene data da Matlab. Considerandi quindi che la formula del partitore mi sembra corretta e che la resistenza R1 è stata misurata l’errore possibile risiede o in Vcc o nella tensione acquisita dall’ADC.
variando in Matlab la VCC da 4.7 fino a 5.1 non ottengo variazioni di qualche °C ma lontano dal misurare qui 20° che mi aspetto.
Mi domando quindi quale possa essere il problema e ripongo la mia fiducia su di voi.

sto cercando di ottenere una misura di temperatura utilizzando un termistore Epcos 100K di cui ho anche il datasheet.

La resistenza T25 è quindi di 100Kohm?
Se NTC è R1, l'altra resistenza R0 quando vale?

L'impedenza di ingresso del PIN analogico è alta, però si consiglia non oltrepassare i 10Kohm, quindi nel tuo caso già con 100Kohm siamo abbastanza fuori.

Come si puo vedere dal grafico inoltre ha delle oscillazzioni di misura evidenti (probabilmente dovuti alla tensione Vcc non porprio costante) mentre il picco rapressenta un aumento di temperatura dovuto ad un alitata.

Sono molto sensibili questi NTC, più piccolo è il loro corpo più aumenta la sensibilità, al fine di ridurre la sensibilità si usa inserire il sensore in un liquido, es acqua, olio, più liquido c'è meno rapidamente muta la resistenza dell'NTC.

La tensione di riferimento usata dal ADC è quello di 5Vcc nominali che se fornita da usb e monitorata con un oscilloscopio ci permette di capire quanto stabile sia, e non l'ho per niente. Si può usare il riferimento esterno o interno ad 1.1 vdc ma anche questo non è il massimo ma comunque sufficiente in molte applicazioni reali.

Puoi tentare di abbassare la R di 100K ponendone una fissa in serie da 100K, ma ti ritroverai con una T25 di 50K.
Puoi usare un condensatore da pochi nano farad fino a circa 100n (se l'impedenza della sorgente è sotto i 10K), non oltrepassare 22nF nel tuo caso. Il Condensatore deve essere messo tra GND e il pin analogico, limitando quando più possibile la lunghezza dei percorsi filari.

Io purtroppo non conosco matlab e non so con precisione come lo stai usando, se non sbaglio il calcolo fa fede sul
fatto che tutti i componenti siano ideali e non reali.

Prova il riferimento a 1.1 + il condensatore 10nF o 22nF, se la cosa migliore, prova il parallelo tra NTC e 100Kohm. Eventualmente puoi anche pensare di correggere l'errore inserendo un valore di correzione, ma dovresti avere almeno un misuratore di temperatura calibrato. Io ho usato un sensore I2C e un NTC10K immersi assieme in un contenitore di acqua e cerano differenze tra 1 °C attorno ad un valore, ma l'ungo il range di temperature non ho mai superato differenze di 0.7°C.

Ciao.

Ciao MauroTec, grazie per i consigli

La resistenza T25 è quindi di 100Kohm?
Se NTC è R1, l’altra resistenza R0 quando vale?

Allora R0 sarebbe T25 di 100kohm mentre R1 e la resistenza nota in serie composta da 4*10Kohm teorici, la R1 misurata col test è 39.7Kohm

L’impedenza di ingresso del PIN analogico è alta, però si consiglia non oltrepassare i 10Kohm, quindi nel tuo caso già con 100Kohm siamo abbastanza fuori.

Non ho capito cosa intendi. Non sono esperto in materia elettronica (so cosa è un impedenza) ma cosa significa l’impedenza in ingresso?

Sono molto sensibili questi NTC, più piccolo è il loro corpo più aumenta la sensibilità, al fine di ridurre la sensibilità si usa inserire il sensore in un liquido, es acqua, olio, più liquido c’è meno rapidamente muta la resistenza dell’NTC.

Potrebbe essere un idea interessante!!

Io purtroppo non conosco matlab e non so con precisione come lo stai usando, se non sbaglio il calcolo fa fede sul
fatto che tutti i componenti siano ideali e non reali.

Inizio a pensare che il problema sia proprio Matlab. Ho recuperato uno sketch pronto per l’utilizzo del termistore e modificato con i miei dati. Fatto l’upload su Arduino leggo dal monitor seriale la temperatura che risulta essere intorno ai 20° quindi coretta. (lo sketch prevede l’utilizzo di una Vref external. L’ho provato sia cosi che tenendola di default e non ho risultati diversi)
Mi sembra di capire che la differenza sia proprio il valore della tensione letta sul pin analogico da Matlab che risulta sbagliata. è abbastanza strano in quanto in altri progetti non avevo avuto questo problema.

Appena riesco posto un grafico dei nuovi risultati ottenuti (utilizzando la comunicazione seriale tra Matlab e Arduino che in questo caso esegue il suo Sketch in maniera classica e trasferisce i dati mentre nel caso precedente veniva comandato direttamente di Matlab in una sorta di RealTime)

Per ridurre l'impedenza del tutto, potresti usare una resistenza fissa da 10K verso massa e la NTC verso il positivo (cosi inoltre piu la temperatira sale, piu la tensione cresce) ... un condensatorino da 100nF o simili dal pin verso massa eliminerebbe anche eventuali disturbi captati dai fili (ma attenzione a sceglierne uno di buona qualita', mylar o simili, perche' quelli ceramici non sono un gran che come caratteristiche)

Quelle fluttuazioni sono normali, anche le semplici correnti d'aria nella stanza o la maggiore o minore vicinanza del corpo possono influire, su quella scala ...

Per il riferimento di tensione, se proprio te ne serve uno piu preciso, puoi usarne uno esterno, come un 431, o un LM334, o un MAX6010, o un LT6654, o un qualsiasi altro componente simile, ben filtrato ... :wink:

Etemenanki:
Per ridurre l'impedenza del tutto, potresti usare una resistenza fissa da 10K verso massa e la NTC verso il positivo (cosi inoltre piu la temperatira sale, piu la tensione cresce) ... un condensatorino da 100nF o simili dal pin verso massa eliminerebbe anche eventuali disturbi captati dai fili (ma attenzione a sceglierne uno di buona qualita', mylar o simili, perche' quelli ceramici non sono un gran che come caratteristiche)

Quelle fluttuazioni sono normali, anche le semplici correnti d'aria nella stanza o la maggiore o minore vicinanza del corpo possono influire, su quella scala ...

Per il riferimento di tensione, se proprio te ne serve uno piu preciso, puoi usarne uno esterno, come un 431, o un LM334, o un MAX6010, o un LT6654, o un qualsiasi altro componente simile, ben filtrato ... :wink:

Non ho ben capito come inserire la resistenza e il condensatore nel circuito, puoi spiegarti meglio?

Non ho capito cosa intendi. Non sono esperto in materia elettronica (so cosa è un impedenza) ma cosa significa l'impedenza in ingresso?

L'argomento è stato trattato qui sul forum centinaia di volte, l'utente astrobeed ha spiegato come funziona il circuito di ingresso del convertitore ADC, prova a fare una ricerca congiunta tra utente e ADC.

Riassumendo per quello che ricordo e a grandi linee:
Serve corrente per caricare rapidamente la capacità (condensatore) presente nel convertitore, ciò caratterizza il comportamento del circuito di ingresso. Il circuito partitore NTC+R+Vref sono assimilabili ad un generatore di tensione caratterizzato da una determinata impedenza di uscita, questa non deve superare i 10Kohm se si vuole che il convertitore si trovi nelle migliori condizioni per campionare.

Un esempio terra terra: Devi esercitare certa forza e in tempi brevi se vuoi che le ruote di un auto sterzino, diversamente se hai le mani di burro (alta impedenza di uscita) finisce al contrario, cioè le forze agenti sulle ruote ti strappano il volante dalle mani. (ps:auto senza servosterzo ovviamente)

Ciao.

Scafandro:
Non ho ben capito come inserire la resistenza e il condensatore nel circuito, puoi spiegarti meglio?

Come nello schema allegato (il primo prende il riferimento dall’alimentazione, il secondo usa un riferimento esterno a 2.5V, in questo caso un TL431A, ma puo essere un qualsiasi altro riferimento)

MauroTec:
L'argomento è stato trattato qui sul forum centinaia di volte, l'utente astrobeed ha spiegato come funziona il circuito di ingresso del convertitore ADC, prova a fare una ricerca congiunta tra utente e ADC.

Riassumendo per quello che ricordo e a grandi linee:
Serve corrente per caricare rapidamente la capacità (condensatore) presente nel convertitore, ciò caratterizza il comportamento del circuito di ingresso. Il circuito partitore NTC+R+Vref sono assimilabili ad un generatore di tensione caratterizzato da una determinata impedenza di uscita, questa non deve superare i 10Kohm se si vuole che il convertitore si trovi nelle migliori condizioni per campionare.

Un esempio terra terra: Devi esercitare certa forza e in tempi brevi se vuoi che le ruote di un auto sterzino, diversamente se hai le mani di burro (alta impedenza di uscita) finisce al contrario, cioè le forze agenti sulle ruote ti strappano il volante dalle mani. (ps:auto senza servosterzo ovviamente)

Ciao.

Ho provato a fare un po di ricerche ma non ho trovato molto di più quello che mi hai scritto sopra. Ho capito il concetto, solo che non mi è chiaro se l'impedenza un uscita è quella tra il GND e il PIN o tra il PIN e VCC.
Inoltre ho scoperto che il problema di temperatura errata non si presenta solo su Matlab ma anche su Arduino nel caso in cui invece che collegare il termistore tra pin e GND lo collego tra pin e VCC. Non riesco a capacitarmi di questo

Etemenanki:
Come nello schema allegato (il primo prende il riferimento dall'alimentazione, il secondo usa un riferimento esterno a 2.5V, in questo caso un TL431A, ma puo essere un qualsiasi altro riferimento)

Nel primo schema la resistenza da 10K è la stessa del partitore o una diversa?

Scafandro:
Nel primo schema la resistenza da 10K è la stessa del partitore o una diversa?

Cioe', scusa ?

sono due diversi schemi ... il primo prende direttamente i 5V come tensione per il partitore, quindi soffre di possibili fluttuazioni se la tensione di alimentazione varia ... il secondo usa un TL431A come sorgente di tensione costante a 2.5V, hai la meta' dell'escursione che con i 5V (quindi il calcolo nel software deve essere adattato), ma almeno non soffre di sbalzi sui 5V ... la resistenza da 10K verso massa e' sempre la stessa, fa parte del partitore di tensione ... secondo il calcolo che fai nel software, si puo anche sostituire con un valore piu alto, se ti serve maggiore variazione ...

Ho provato a fare un po di ricerche ma non ho trovato molto di più quello che mi hai scritto sopra. Ho capito il concetto, solo che non mi è chiaro se l'impedenza un uscita è quella tra il GND e il PIN o tra il PIN e VCC.
Inoltre ho scoperto che il problema di temperatura errata non si presenta solo su Matlab ma anche su Arduino nel caso in cui invece che collegare il termistore tra pin e GND lo collego tra pin e VCC. Non riesco a capacitarmi di questo

Penso che questi li hai letti.

Ho capito il concetto, solo che non mi è chiaro se l'impedenza un uscita è quella tra il GND e il PIN o tra il PIN e VCC.

Questa in particolare mi fa capire che c'è confusione tra Resistenza DC e impedenza AC.

In definitiva come consiglia astrobeed, si dovrebbe usare un amplificatore operazionale configurato per guadagno unitario, il quale offre bassa impedenza di uscita e alta impedenza di ingresso. Oppure riconfigurare il convertitore ADC.

Ciao.

Ma non basterebbe usare una R più piccola dall'altro lato del partitore e leggere la tensione ai capi di quella con Arduino? Con due conti si risale poi alla R della sonda NTC!

Io faccio la stessa cosa con un fotoresistore, che penso abbia un range di variazione molto maggiore, e i valori letti corrispondono perfettamente con quelli misurati con un tester (Però è necessario assicurarsi di qual è il valore corretto della Vcc, che non è sempre 5V ed è usata come riferimento per le misure analogiche).

Prima di tutto ringrazio tutti per i preziosi consigli
Scusate se non riporto le quote ma cerco di sintetizzare le risposte in un unico messaggio.

Ringrazio MauroTec per i link ma erano esattamente le discussioni che avevo gia trovato che non hanno pero risolto tutti i miei dubbi. So come funziona un sample&hold quindi capisco il discorso del condensatore. Quello che non mi è chiaro (dovuto alla mia ignoranza nel campo) e il discorso impedenza di uscita/ingresso. Se ho capito bene l’ADC deve “vedere” un impedenza del generatore applicato minore di 10Kohm, ma considerando che non sto utilizzando condensatori e trascurando l’induttanza la mia impedenza dovrebbe essere puramente resistiva e corrispondere alla resistenza applicata tra Vin del PIN analogico e il GND.

Ora il mio problema e che non capisco come mai se realizzo il circuito posizionando la resistenza nota del partitore R1 tra GND e PIN (di conseguenza il temistore è tra PIN e VCC) ottengo delle misurazioni sballate mentre se li inverto (R1 tra VCC e PIN e termistore tra GND e PIN) le misure sembrano corrette. Ovviamente a livello software tra i due casi è invertita la formula per il calcolo della resistenza R del termitore quindi non è quello il problema.

Utilizzando la seconda configurazione ho apportato delle modifiche rispetto al post di apertura: ho ridotto la resistenza del partitore da 40Kohm a 10Kohm, ho posizionato una resistenza da 10Kohm in parallelo al termistore (tra GND e PIN) e ho aumentato i campioni mediati da 5 a 50 (compresi in un intervallo di 1 secondo).

Ora il segnale sembra molto stabile (anche troppo xD, i picchi realizzati alitando sul sensore decadono lentamente) e se il valore dovesse a regime dovesse rivelarsi prossimo alla temperatura reale potrei essere soddisfatto cosi.

SukkoPera:
Ma non basterebbe usare una R più piccola dall'altro lato del partitore e leggere la tensione ai capi di quella con Arduino? Con due conti si risale poi alla R della sonda NTC!

Io faccio la stessa cosa con un fotoresistore, che penso abbia un range di variazione molto maggiore, e i valori letti corrispondono perfettamente con quelli misurati con un tester (Però è necessario assicurarsi di qual è il valore corretto della Vcc, che non è sempre 5V ed è usata come riferimento per le misure analogiche).

se abbasso il valore della resistenza, per esempio da 10Kohm a 1Kohm, ottengo valori sballati non so perché!