Rilevamento della temperatura economico con MCU


13

Sto cercando una soluzione economica per rilevare la temperatura con un MCU. I miei requisiti sono:

  • 2 canali
  • intervallo di temperatura: 30-35 ° C
  • risoluzione temp: 1-2 K
  • distanza del cavo (MCU -> sensore) 10 cm - 2 m sono accettabili
  • la temperatura relativa tra due canali è sufficiente, non è richiesta alcuna temperatura assoluta

Il mio punto di partenza sono due termocoppie con amplificatori a termocoppia, ma questo sembra essere eccessivo per la mia applicazione. Le termocoppie funzionano a 10 $ a Radiospares, ampli a 5 $ che costerebbe 30 $ solo per stimare una temperatura.

Qual è una buona direzione per cercare una soluzione più economica. NTC?


Modifica il 18 luglio 2012

Dopo che Stevenvh ha esteso la sua risposta per mostrare l'alto grado di linearità che si può ottenere con gli NTC, ho investito del tempo per riconsiderare se gli NTC non fossero una soluzione migliore.

Non sono sicuro tuttavia di essere in grado di seguire stevenvh nel suo ragionamento sull'errore che può essere ottenuto con NTC a basso costo rispetto ai chip a semiconduttore.

Per ottenere la temperatura con un NTC entrano in gioco le seguenti funzioni:

  1. funzione di trasferimento HTaRNTC(R25,B25/85) convertendo la temperatura ambiente ad una resistenza
  2. la tensione prodotta dal partitore di tensione HRNTCV(VeXciotun'tioon,RNTC,Rlion)
  3. Conversione AD HVBiotS(V,Vref,σconverSioon)
  4. approssimazione della curva lineare: HBiotSTeSt(BiotS,σun'pproX)

Le fonti di errore che vedo sono quindi:

  1. Errori valore NTC: 1% ciascuno per i valori e B 25 - 85 : totale circa il 2%R25B25-85
  2. 1% per il valore della resistenza di linearizzazione e diciamo 0,5% per la sorgente di tensione di eccitazione
  3. Per un PIC16F1825 la tensione di riferimento interna utilizzata per l'ADC ha un'incertezza del 6%. Inoltre, l'ADC stesso ha errori integrali, differenziali, offset e di guadagno ciascuno dell'ordine di 1,5 lsb. A 10 bit, questi ultimi combinati sono al massimo dello 0,5%.
  4. Come stevenvh ha dimostrato nella sua risposta, l'approssimazione lineare ha un errore di appena lo 0,0015% nell'intervallo di interesse.

L'errore nella stima della temperatura sarà quindi chiaramente dominato dall'errore del riferimento di tensione ADV e dagli errori nei valori della resistenza. Sarà chiaramente superiore al 6%. L'errore dovuto all'approssimazione lineare è assolutamente trascurabile, come sottolineato da Stevenvh.

Un'incertezza del 6% a 300 Kelvin equivale a un errore di temperatura di 18 K. I chip di temperatura hanno un errore di circa 1 K. A 300K questo corrisponde a un'incertezza dello 0,3%.

Mi sembra che sia fuori discussione batterlo con un NTC senza un'attenta calibrazione e verifica delle prestazioni. L'incertezza nei resistori di linearizzazione, la tensione di eccitazione o l'ADC osservati singolarmente spingono al di sopra l'incertezza della soluzione NTC. O ho un grave errore nel mio ragionamento?

Al momento sono convinto che gli NTC possano essere una soluzione di rilevamento della temperatura ad alta precisione, ma a buon mercato mi sembra che le loro prestazioni saranno un colpo al buio.

Risposte:


12

1-2 gradi è una risoluzione facile (anche quando intendi precisione, che non è la stessa!). Vorrei prendere in considerazione LM75 e vari cloni, o un DS1820 / 18S20 / 18B20 / 1822. Microchip ha molti sensori di temperatura , inclusi cloni LM75 per <$ 1. Le versioni di uscita in tensione sono economiche, ma preferirei una digitale.


Tutte le risposte che ho ricevuto su questa domanda sono state molto utili. L'ho accettato a causa della facilità d'uso dei cloni LM75. Non doversi preoccupare della linearizzazione ecc. È un grande vantaggio nel mio caso.
ARF,

Solo curioso: perché preferiresti un sensore digitale?
m.,

5
Nessuna preoccupazione per riferimenti, linearizzazione, configurazione del convertitore A / D e l'hardware è banale. Il rovescio della medaglia è che devi affrontare il protocollo.
Wouter van Ooijen,

15

Direi NTC, sì. Questo è il più economico che ho trovato su Digikey. Circa mezzo dollaro, è molto più economico dei circuiti integrati per sensori di temperatura, che hanno circa la stessa precisione. Il vantaggio di un NTC è che ha bisogno solo di un resistore in serie e di un ingresso ADC sul tuo microcontrollore, che la maggior parte ha al giorno d'oggi.

Il basso prezzo ha anche uno svantaggio: gli NTC sono tutt'altro che lineari. O devi usare la sua funzione di trasferimento (cioè con un esponenziale, che potrebbe non piacerti, o usare una tabella di ricerca, che per l'intervallo dato potrebbe essere la soluzione migliore.

modifica dd. 13/07/2012
Bah, battuto da un miserabile LM75. Non lo lascerò passare. :-)

Userò il * 103 * MT * di questa serie NTC . Innanzitutto la funzione di trasferimento:

R=10KΩe-13,4096+4.481,80T-150522T2+1877103T3

T

Non sembra promettente, e in effetti tra 0 ° C e 100 ° C la curva appare così:

inserisci qui la descrizione dell'immagine

tutt'altro che lineare, come ho detto. Possiamo provare a linearizzarlo, ma ricorda che faremo un divisore di resistore con esso, e non sono neppure lineari, quindi qualsiasi linearizzazione ora sarà rovinata dal resistore serie. Quindi cominciamo con la resistenza e vediamo cosa succede. Ho un'alimentazione a 3,3 V e seleziono una resistenza da 5,6 kΩ su Vcc, quindi l'uscita diventa

inserisci qui la descrizione dell'immagine

Non è affatto male! La curva viola è la tangente nel nostro intervallo di interesse: da 30 ° C a 35 ° C. Potrei tracciare il grafico ingrandito su quello, ma questo ci dà due linee coincidenti, quindi diamo un'occhiata all'errore:

inserisci qui la descrizione dell'immagine

Non sembra neanche bello, ma devi guardare la scala verticale, che dà l'errore relativo dell'approssimazione lineare rispetto alla nostra caratteristica NTC tra 30 ° C e 35 ° C. L'errore è inferiore a 15 ppm o 0,0015% .

Mathematica afferma che l'equazione per la nostra approssimazione lineare quasi perfetta è

VOUT=-0,0308 T 1V/°C+2.886 V

Ciò comporterà letture ADC di 609 e 561, resp. per un ADC a 10 bit. È un intervallo di 48 per una differenza di 5 ° C o una risoluzione di circa 0,1 ° C. Solo l'NTC e una resistenza.

Chi ha bisogno di un LM75 !?



modifica dd. 2012-08-13

Fatto: la soluzione NTC necessita di calibrazione.

Ho promesso ad Arik di tornare sul calcolo degli errori, ma è molto più complicato di quanto pensassi e non può essere completato a causa di dati incompleti. Ad esempio, ho numeri molto precisi per i coefficienti nella funzione di trasferimento dell'NTC (i 7 numeri di cifre significative sono già arrotondati!), Ma nessuna informazione sulla loro precisione. Alcuni commenti però.

ββ

±

Il riferimento ADC del PIC ha una tolleranza del 6% piuttosto scadente. Arik afferma che un'incertezza del 6% a 300 kelvin equivale a un errore di temperatura di 18 K , che ovviamente è assurdo e assolutamente assurdo. Ho fatto un rapido controllo: ho calcolato l'uscita del divisore di tensione per una temperatura di 20 ° C. Aggiunto il 6% a quello, e calcolato di nuovo al valore di resistenza del NTC e alla temperatura che sarebbe. L'errore non è 18 ° C, ma 1 ° C, o inferiore allo 0,5%, riferito a 0 K.

Anche così, l'errore del 6% è completamente irrilevante ! Se si utilizza la tensione di riferimento dell'ADC per il divisore del resistore, tale tensione non appare nemmeno nei calcoli. Non mi importerebbe se l'errore fosse del 50%. Utilizzare un altro riferimento se il riferimento interno errato non è disponibile all'esterno del controller. Come l'alimentatore a 3,3 V o qualsiasi altra tensione CC che hai in giro.

La calibrazione non è ciò che si desidera per un progetto unico, ma per la produzione di massa non è affatto una preoccupazione, e specialmente nell'elettronica di consumo, dove ogni centesimo conta, è più probabile trovare l'NTC che un costoso LM75.


3
La cosa bella di chiedere agli esperti è che tu riceva ogni risposta (analogica contro digitale), ora Arik ha solo bisogno di un esperto per scegliere tra gli esperti :)
Wouter van Ooijen,

Circa mezzo dollaro? Non è questo lo stesso articolo di cui parli? È $ 0,15 / 100 pezzi. E MCP9701A è di circa $ 0,25 / 100 pezzi . Wow, pensavo che quelli digitali fossero così costosi, come $ 2 o $ 3 ciascuno!
Abdullah Kahraman,

2
@abdullah - tutto è relativo. Un grande ingegnere indicherebbe probabilmente la tolleranza della resistenza dell'1% in serie e il suo coefficiente di temperatura di 100 ppm / ° C. In ogni caso se avremo errori di lettura non sarà dovuto all'approssimazione! :-)
stevenvh,

1
@stevenvh La tua risposta estesa mi ha dato motivo di rivedere la mia valutazione originale. Tuttavia, non sono sicuro di aver compreso appieno come si può arrivare a una misurazione ad alta precisione con NTC a basso costo. Gradirei se guardassi la mia domanda modificata e mi dicessi se ho un difetto nel mio ragionamento. Molte grazie per il vostro aiuto!
ARF,

1
@Arik: aggiornata la mia risposta. In particolare, ho ritenuto che il presunto errore di 18 K necessitasse di una risposta :-)
stevenvh,

6

Sembra un lavoro per un termistore o due termistori per essere più precisi. Dato che devi solo distinguere tre diversi stati di temperatura e stai solo cercando la temperatura relativa, puoi collegare i due termistori insieme per creare un singolo segnale analogico. Ciò può quindi essere misurato con un A / D integrato nel micro. La maggior parte dei micro ha A / D, quindi questo non costerà nulla di più. Probabilmente aggiungerei un paio di resistori e condensatori come filtri passa basso per ridurre il rumore.

Un termistore passa dalla terra al segnale analogico e l'altro dalla potenza al segnale analogico. Potrebbe essere necessario eseguire una calibrazione, ma con il tuo intervallo di temperature ristretto e la bassa risoluzione non devi essere sofisticato. Probabilmente è sufficiente salvare la tensione a differenza zero e sottrarla dalla lettura futura.


Grazie per il suggerimento sull'uso di due termistori nella configurazione del partitore di tensione per misurare una tensione relativa. Non ci avrei pensato.
ARF,

@Arik - i due termistori in serie funzionano solo se la loro resistenza varia linearmente con la temperatura, quindi assicurati di verificarlo. (Ho fatto nella mia risposta.)
Steven

@stevenvh: Sì, hai ragione, ma nota l'intervallo di temperatura molto stretto e la bassa risoluzione. Due termistori una volta calibrati sulla custodia della stessa temperatura vicino al centro dell'intervallo dovrebbero fare abbastanza bene. Uno non sarà mai fuori dall'altro di oltre 5 ° C.
Olin Lathrop,

@Olin - Tutto vero. Immagino che avrei dovuto aggiungere "nel caso in cui volessi misurare su un intervallo di temperatura molto più ampio".
Stevenvh,

5

Se non si è a conoscenza del metodo a delta-Tensione della corrente a diodi a gradini e si è interessati a misurare la temperatura, è necessario leggere questo: potrebbe trasformare le idee sulla misurazione della temperatura.


Sono un po 'in ritardo alla festa.
Dato che ormai la risposta sarà stata utilizzata, descriverò ampiamente un metodo alternativo che ha notevoli meriti ma che sembra sorprendentemente poco usato in forma discreta.

Questo metodo è comunemente usato nei circuiti integrati di misurazione della temperatura IC ma sembra ancora meno noto di quanto ci si aspetterebbe.

Se un diodo al silicio (diciamo) viene alimentato alternativamente con due correnti note, la variazione di tensione delta con variazione di corrente è correlata alla temperatura assoluta.

Questo metodo è utilizzato (almeno) nei sensori TI LM82, LM83, LM84, LM87 e LTC3880, LTC3883 e LTC2974.

Si noti che questo metodo è diverso dal solito metodo di misurazione della caduta di tensione diretta assoluta del diodo a una data corrente per inferire la temperatura. Questo metodo è sostanzialmente più accurato e non richiede una calibrazione specifica del sensore.

È possibile raggiungere una precisione di circa 0,1 gradi C (o K).
Le risoluzioni dipendono dal metodo di misurazione.

Il risultato è esente da calibrazione del dispositivo.
Il risultato dipende solo dal tipo di diodo di base (ad es. Silicio, germanio),
ad esempio se si utilizza un diodo di segnale 1N4148 da 1 centesimo, è possibile cambiarlo per un altro 1N4148 e ottenere le stesse accuratezze senza ricalibrazione.

L'accuratezza dell'impostazione delle due correnti utilizzate influisce ovviamente sull'accuratezza dei risultati, ma poiché questi possono essere scelti in base alle risorse disponibili, i risultati possono essere molto buoni.

Questo metodo viene utilizzato da alcuni ma non tutti i sistemi di misurazione della temperatura del processore on-die. Di solito scoprirai che laddove viene utilizzato questo sistema le descrizioni tecniche sono molto leggere nei dettagli e un po 'offuscate - cioè sembrano voler tenerlo segreto anche se il metodo risale probabilmente al lavoro di Widlar a metà degli anni '60.

Questo metodo compete con le accuratezze ottenibili con ragionevole cura usando termistori NTC o resistori al platino PT100 ecc. E simili, con un livello molto competitivo di complessità e difficoltà.


Questa eccellente nota sulla zaffinazione del dispositivo analogico 199 Misurare le temperature sui chip dei computer con velocità e precisione afferma che la tecnica è nuova. Non sono affatto sicuro che siano corretti, ma è certamente utile e meno noto che ci si aspetterebbe.

Dal documento sopra (leggermente riscritto) per le correnti di I e NI e la tensione del diodo cala Cv1 alla corrente 1 e Vd2 alla corrente 2:

Vd1 - Vd2 = DVd = (kT / q) ln (I / NI) = (kT / q) ln (1 / N)

Poiché N, k e q sono tutte costanti note,
T = (Costante) (DVd)

_

Eccellente nota dell'app TI Rilevamento multiplo della temperatura del diodo remoto

Wikipedia - Sensore di temperatura con fascia di protezione in silicone

[LT AN137 Rilevamento accurato della temperatura con una giunzione PN esterna] http://cds.linear.com/docs/Application%20Note/an137f.pdf
Utilizzato ad es. LTC3880, LTC3883 e LTC2974.


3

Temperatura molto semplice (Celcius) misurata con termistore (10K) B25 / 100 = 4300 Mi sono ispirato al commento sopra letto in questo articolo.

Ho comprato termistori da DigiKey 10K 5% a $ 1 ciascuno. Volevo ottenere una misurazione della temperatura corretta senza matematica galleggiante e complessa. Connessione ad un Arduino come segue: Vref a 3.3v; analogico-0 A0 attraverso un resistore da 10K e 3,3v. ; Termistore A0 a massa. Ottengo la temperatura in Celcius come segue: Codice parziale: analogReference (ESTERNO);
ADC = analogRead (0);
Th = 10000 / (1023 / ADC) -1; // 10000 è il riparatore di correzioni utilizzato nel divisore.
T = (775 - Th) / 10;

L'acquisizione è: +1 a 25 ° C, +0 a 20 ° C, -1 a 0 ° C, +2 a -20 ° C. Modificando la costante 775 in modo da avvicinarla alla gamma di desideri desiderata. Ad esempio, utilizzare 765 anziché 775 per ottenere 0 errori intorno a 25 ° C. Dato che si tratta di matematica intera, ho aggiunto da 5 a 770 prima di dividere per 10 per arrotondare.

Visualizzazione della relazione tra termistore, ADC, temperatura e risultato calcolato


1

Sto usando LM35DZ . La temperatura variava da 0 Celsius a 100 Celsius, uscita lineare e bassa impedenza ; L'ho usato con la connessione diretta al mio ingresso ADC PIC, finora funziona molto bene.

Un'unità costa circa 3 USD.


3
E ne avranno bisogno di due. Non mi sembra una soluzione economica. Non rispetto ai miei fantastici NTC! :-)
stevenvh,

Uso anche i chip LM35 (e mi piacciono), ma penso che siano un po 'eccessivi per questa domanda.
Johan

0

Temperatura molto semplice (Celcius) misurata con termistore ... a $ 1 ciascuno.

Che ne dici di un chip STM32F0? Il suo modulo ADC contiene un sensore di temperatura interno E valori calibrati in due punti di temperatura E valore calibrato per il suo generatore Vref interno.

Con tutto ciò combinato, puoi usarlo come un sensore di temperatura molto preciso - 12 bit adc e sigma che è poco più di 1 lb - in un ampio intervallo di tensione.

Può anche essere programmato come sensore di tempearture dedicato: principalmente in modalità sleep e sveglia per leggere la temperatura e trasmettere i dati e poi tornare in modalità sleep.

tutto questo per meno di un dollaro in piccole quantità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.