Détection de température bon marché avec MCU

13

Je recherche une solution bon marché pour détecter la température avec un MCU. Mes exigences sont:

  • 2 canaux
  • plage de température: 30-35 ° C
  • résolution temp: 1-2 K
  • distance du câble (MCU -> capteur) 10 cm - 2 m sont acceptables
  • la température relative entre deux canaux est suffisante, aucune température absolue n'est requise

Mon point de départ est deux thermocouples avec des amplificateurs à thermocouple, mais cela semble exagéré pour mon application. Les thermocouples tournent à 10 $ chez Radiospares, des amplis à 5 $ qui coûteraient 30 $ juste pour estimer une température.

Quelle est la bonne direction pour chercher une solution moins chère. NTC?


Edit 18 juillet 2012

Après que Steven a étendu sa réponse pour montrer le haut degré de linéarité qui peut être obtenu avec les NTC, j'ai investi un peu de temps pour reconsidérer si les NTC ne sont pas une meilleure solution.

Je ne suis cependant pas sûr de pouvoir suivre stevenvh dans son raisonnement sur l'erreur qui peut être obtenue avec des NTC à bon marché par rapport aux puces semi-conductrices.

Pour obtenir la température avec un NTC, les fonctions suivantes entrent en jeu:

  1. fonction de transfert de conversion de la température ambiante à une résistanceHTaRNTC(R25,B25/85)
  2. la tension produite par le diviseur de tension HRNTCV(VeXcjetunetjeon,RNTC,Rljen)
  3. Conversion AD HVbjets(V,VreF,σconversjeon)
  4. approximation de la courbe linéaire: HbjetsTest(bjets,σunepproX)

Les sources d'erreur que je vois sont donc:

  1. Erreurs de valeur NTC: 1% chacune pour le et le B 25 - 85R25B25-85 valeurs : total environ 2%
  2. 1% pour la valeur de la résistance de linéarisation et disons 0,5% pour la source de tension d'excitation
  3. Pour un PIC16F1825, la tension de référence interne utilisée pour l'ADC a une incertitude de 6%. De plus, l'ADC lui-même présente des erreurs intégrales, différentielles, de décalage et de gain chacune de l'ordre de 1,5 lsb. À 10 bits, ces derniers combinés sont au maximum de 0,5%.
  4. Comme l'a montré Stevenevh dans sa réponse, l'approximation linéaire a une erreur de seulement 0,0015% dans la plage d'intérêt.

L'erreur dans l'estimation de la température sera donc clairement dominée par l'erreur de la référence de tension ADV et les erreurs dans les valeurs de résistance. Il dépassera clairement les 6%. L'erreur due à l'approximation linéaire est tout à fait négligeable comme l'a souligné stevenvh.

Une incertitude de 6% à 300 Kelvin équivaut à une erreur de température de 18K. Les puces de température ont une erreur d'environ 1K. À 300K, cela correspond à une incertitude de 0,3%.

Il me semble qu'il est hors de question de battre cela avec un NTC sans un étalonnage extrêmement minutieux et une vérification des performances. L'incertitude dans les résistances de linéarisation, la tension d'excitation ou l'ADC vues isolément poussent l'incertitude de la solution NTC au-dessus de cela. Ou ai-je une erreur majeure dans mon raisonnement?

Pour le moment, je suis convaincu que les NTC peuvent être une solution de détection de température de haute précision, mais à bon marché, il me semble que leurs performances seront un coup dans le noir.

ARF
la source

Réponses:

12

1-2 degrés est une résolution facile (même lorsque vous parlez de précision, qui n'est pas la même!). Je considérerais LM75 et divers clones, ou un DS1820 / 18S20 / 18B20 / 1822. Microchip possède de nombreux capteurs de température , dont des clones LM75 pour <1 $. Les versions de sortie de tension sont bon marché, mais je préférerais une version numérique.

Wouter van Ooijen
la source
Toutes les réponses que j'ai reçues sur cette question ont été très utiles. J'ai accepté cela en raison de la facilité d'utilisation des clones LM75. Ne pas avoir à se soucier de la linéarisation, etc. est un grand avantage dans mon cas.
ARF
Juste curieux: pourquoi préféreriez-vous un capteur numérique?
m.Alin
5
Pas de soucis concernant les références, la linéarisation, la configuration du convertisseur A / N et le matériel est trivial. L'inconvénient est que vous devez gérer le protocole.
Wouter van Ooijen
15

Je dirais NTC, oui. Celui-là est le moins cher que j'ai pu trouver à Digikey. Environ un demi-dollar, c'est beaucoup moins cher que les circuits intégrés de capteurs de température, qui ont à peu près la même précision. L'avantage d'un NTC est qu'il n'a besoin que d'une résistance série et d'une entrée ADC sur votre microcontrôleur, ce que la plupart ont de nos jours.

Le prix bas présente également un inconvénient: les NTC sont tout sauf linéaires. Vous devez soit utiliser sa fonction de transfert (c'est-à-dire avec une exponentielle, que vous n'aimerez peut-être pas, ou utiliser une table de recherche, qui pour la plage donnée peut être la meilleure solution.

modifier dd. 2012-07-13
Bah, battu par un misérable LM75. Je ne laisserai pas passer ça. :-)

Je vais utiliser le * 103 * MT * de cette série NTC . D'abord la fonction de transfert:

R=dixkΩe-13.4096+4481.80T-150522T2+1877103T3

T

Cela ne semble pas prometteur, et en effet entre 0 ° C et 100 ° C, la courbe ressemble à ceci:

entrez la description de l'image ici

tout sauf linéaire, comme je l'ai dit. Nous pouvons essayer de linéariser cela, mais rappelez-vous que nous allons faire un diviseur de résistance avec, et ils ne sont pas linéaires non plus, donc toute linéarisation maintenant sera ruinée par la résistance série. Commençons donc par la résistance et voyons ce qui se passe. J'ai une alimentation de 3,3 V et je choisis une résistance de 5,6 kΩ à Vcc, puis la sortie devient

entrez la description de l'image ici

Pas mal du tout! La courbe violette est la tangente dans notre gamme d'intérêt: 30 ° C à 35 ° C. Je pourrais tracer le graphique zoomé dessus, mais cela nous donne deux lignes coïncidentes, alors regardons l'erreur:

entrez la description de l'image ici

Ça n'a pas l'air bien non plus, mais il faut regarder l'échelle verticale, ce qui donne l'erreur relative de l'approximation linéaire par rapport à notre caractéristique NTC entre 30 ° C et 35 ° C. L'erreur est inférieure à 15 ppm, soit 0,0015% .

Mathematica dit que l'équation de notre approximation linéaire presque parfaite est

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

Cela se traduira par des lectures ADC de 609 et 561, resp. pour un ADC 10 bits. C'est une plage de 48 pour une différence de 5 ° C, soit une résolution d'environ 0,1 ° C. Juste le NTC et une résistance.

Qui a besoin d'un LM75!?



modifier dd. 2012-08-13

Réalité: la solution NTC doit être calibrée.

J'ai promis à Arik de revenir sur le calcul des erreurs, mais c'est beaucoup plus compliqué que je ne le pensais, et il ne peut pas être terminé en raison de données incomplètes. Par exemple, j'ai des nombres très précis pour les coefficients dans la fonction de transfert du NTC (les 7 chiffres significatifs sont déjà arrondis!), Mais aucune information sur leur précision. Quelques commentaires cependant.

ββ entraîne une erreur de 0,1% dans le résultat, par exemple.

±

La référence ADC du PIC a une très mauvaise tolérance de 6%. Arik dit qu'une incertitude de 6% à 300 degrés kelvin équivaut à une erreur de température de 18 K , ce qui est bien sûr absurde et absurde. J'ai fait une vérification rapide: calculé la sortie du diviseur de tension pour une température de 20 ° C. Ajout de 6% à cela, et calculé de nouveau à la valeur de résistance du NTC et à la température qui serait. L'erreur n'est pas de 18 ° C, mais de 1 ° C, ou moins de 0,5%, rapportée à 0 K.

Même ainsi, l'erreur de 6% est complètement hors de propos ! Si vous utilisez la tension de référence de l'ADC pour le diviseur de résistance, cette tension n'apparaît même pas dans les calculs. Je m'en fous si l'erreur était de 50%. Utilisez une autre référence si la mauvaise référence interne n'est pas disponible en dehors du contrôleur. Comme l'alimentation 3,3 V ou tout autre tension continue que vous avez autour.

L'étalonnage n'est pas ce que vous voulez pour un projet ponctuel, mais pour la production en série, ce n'est pas un problème du tout, et surtout dans l'électronique grand public, où chaque cent compte, vous trouverez plus probablement le NTC qu'un LM75 cher.

stevenvh
la source
3
La bonne chose à propos de demander aux experts est que vous obtenez chaque réponse (analogique ou numérique), maintenant Arik a juste besoin d'un expert pour choisir entre les experts :)
Wouter van Ooijen
Environ un demi-dollar? N'est- ce pas le même élément que vous mentionnez? C'est 0,15 $ / 100 pièces. Et MCP9701A coûte environ 0,25 $ / 100 pièces . Wow, je pensais que les numériques étaient si chers, comme 2 $ ou 3 $ chacun!
abdullah kahraman
2
@abdullah - tout est relatif. Un grand ingénieur indiquerait probablement la résistance de série de 1% et son coefficient de température de 100 ppm / ° C. En tout cas si nous avons des erreurs de lecture ce ne sera pas dû à l'approximation! :-)
stevenvh
1
@stevenvh Votre réponse étendue m'a donné des raisons de réviser mon évaluation initiale. Cependant, je ne suis pas sûr de bien comprendre comment vous pouvez arriver à une mesure de haute précision avec des NTC à bon marché. J'apprécierais que vous regardiez ma question modifiée et que vous me disiez si j'ai un défaut dans mon raisonnement. Merci beaucoup pour votre aide!
ARF
1
@Arik - a mis à jour ma réponse. Je pensais surtout que la prétendue erreur de 18 K avait besoin d'une réponse :-)
stevenvh
6

Cela ressemble à un travail pour des thermistances, ou deux thermistances pour être plus précis. Comme il vous suffit de distinguer trois états de température différents et que vous ne recherchez que la température relative, vous pouvez connecter les deux thermistances ensemble pour créer un seul signal analogique. Cela peut ensuite être mesuré avec un A / D intégré dans le micro. La plupart des micros ont des A / N, donc cela ne coûtera rien de plus. J'ajouterais probablement quelques résistances et condensateurs comme filtres passe-bas pour réduire le bruit.

Une thermistance passe de la masse au signal analogique et l'autre de la puissance au signal analogique. Vous devrez peut-être effectuer un étalonnage, mais avec votre plage de température étroite et votre faible résolution, vous n'avez pas besoin de vous faire plaisir. Il suffit probablement d'enregistrer la tension de différence nulle et de la soustraire de la lecture future.

Olin Lathrop
la source
Merci pour l'indication concernant l'utilisation de deux thermistances en configuration diviseur de tension pour mesurer une tension relative. Je n'aurais pas pensé à ça.
ARF
@Arik - les deux thermistances en série ne fonctionnent que si leur résistance varie linéairement avec la température, alors assurez-vous de vérifier cela. (Je l'ai fait dans ma réponse.)
stevenvh
@stevenvh: Oui, vous avez raison, mais notez la plage de température très étroite et la basse résolution. Deux thermistances une fois étalonnées dans le cas d'une température égale près du milieu de la plage devraient suffire. L'un ne sera jamais éloigné de l'autre de plus de 5 ° C.
Olin Lathrop
@Olin - Tout à fait vrai. Je suppose que j'aurais dû ajouter "au cas où vous voudriez mesurer sur une plage de température beaucoup plus large".
stevenvh
5

Si vous n'êtes pas au courant de la méthode de mesure de la température delta-courant à diode étagée et que vous souhaitez mesurer la température, vous devriez lire ceci - cela pourrait transformer vos idées sur la mesure de la température.


Je suis un peu en retard à la fête.
Comme la réponse aura été utilisée maintenant, je vais simplement décrire une méthode alternative qui a des mérites considérables mais qui semble être étonnamment peu utilisée sous forme discrète.

Cette méthode est couramment utilisée dans les CI de mesure de la température des circuits intégrés, mais semble encore moins connue que ce à quoi on pourrait s'attendre.

Si une diode au silicium (disons) est alimentée en alternance avec deux courants connus, le changement de tension delta avec le changement de courant est lié à la température absolue.

Cette méthode est utilisée dans (au moins) les capteurs TI LM82, LM83, LM84, LM87 & LTC3880, LTC3883 et LTC2974.

Notez que cette méthode est différente de la méthode habituelle de mesure de la chute de tension directe de la diode absolue à un courant donné pour déduire la température. Cette méthode est à la fois beaucoup plus précise et ne nécessite pas d'étalonnage spécifique du capteur.

Des précisions d'environ 0,1 degré C (ou K) sont réalisables.
Les résolutions dépendent de la méthode de mesure.

Le résultat est sans étalonnage de l'appareil.
Le résultat dépend uniquement du type de diode de base (par exemple, silicium, germanium)
. Par exemple, si vous utilisez une diode de signal inférieure à 1 cent 1N4148, vous pouvez la changer pour un autre 1N4148 et obtenir les mêmes précisions sans recalibrage.

La précision du réglage des deux courants utilisés affecte évidemment la précision des résultats, mais comme ceux-ci peuvent être choisis en fonction des ressources disponibles, les résultats peuvent être très bons.

Cette méthode est utilisée par certains mais pas tous les systèmes de mesure de la température du processeur intégré. Vous constaterez généralement que lorsque ce système est utilisé, les descriptions techniques sont très claires sur les détails et quelque peu obscures - c'est-à-dire qu'elles semblent vouloir le garder secret même si la méthode remonte probablement au travail de Widlar au milieu des années 1960.

Cette méthode rivalise avec les précisions réalisables avec un soin raisonnable en utilisant des thermistances NTC ou des résistances en platine PT100, etc. et similaires, avec un degré de complexité et de difficulté très compétitif.


Cet excellent 199 Analog Device note d'application Mesurer les températures sur des puces informatiques avec rapidité et précision affirme que la technique est nouvelle. Je ne suis pas du tout sûr qu'ils soient corrects - mais c'est certainement utile et moins connu que l'on pourrait s'y attendre.

D'après l'article ci-dessus (légèrement réécrit) pour les courants de I et NI et la chute de tension de diode Cv1 au courant 1 et Vd2 au courant 2:

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

Puisque N, k et q sont tous des constantes connues,
T = (Constante) (DVd)

_

Excellente note d'application TI Détection de température à diodes multiples à distance

Wikipedia - Capteur de température à bande interdite en silicium

[LT AN137 Détection de température précise avec une jonction PN externe] http://cds.linear.com/docs/Application%20Note/an137f.pdf
Utilisé par exemple dans LTC3880, LTC3883 et LTC2974.

Russell McMahon
la source
3

Mesure de température (Celcius) très simple avec thermistance (10K) B25 / 100 = 4300 Je me suis inspiré du commentaire ci-dessus lu dans cet article.

J'ai acheté des thermistances de DigiKey 10K 5% à 1 $ chacune. Je voulais obtenir une mesure de température correcte sans calcul flottant et complexe. Connexion à un Arduino comme suit: Vref à 3.3v; analogique-0 A0 via une résistance 10K et 3,3v. ; Thermistance A0 à la masse. J'obtiens la température en Celcius comme suit: Code partiel: analogReference (EXTERNAL);
ADC = analogRead (0);
Th = 10000 / (1023 / ADC) -1; // 10000 est le résecteur de correctif utilisé dans le diviseur.
T = (775 - Th) / 10;

La précision est: +1 à 25C, +0 à 20C, -1 à 0C, +2 à -20C. Vous modifiez la constante 775 pour l'ajuster plus près de la plage désirée. Par exemple, utilisez 765 au lieu de 775 pour obtenir 0 erreur autour de 25C. Comme il s'agit de mathématiques entières, j'ai ajouté 5 à 770 avant de diviser par 10 pour arrondir.

Affichage de la relation entre la thermistance, l'ADC, la température et le résultat calculé

Alain Théroux
la source
1

J'utilise LM35DZ . Température comprise entre 0 Celsius et 100 Celsius, sortie linéaire et faible impédance ; Je l'utilise avec une connexion directe à mon entrée PIC ADC, fonctionne très bien jusqu'à présent.

Une unité coûte environ 3 USD.

JeeShen Lee
la source
3
Et il en aura besoin de deux. Cela ne me semble pas une solution bon marché. Pas comparé à mes excellents NTC! :-)
stevenvh
J'utilise également les puces LM35 (et je les aime), mais je pense qu'elles sont un peu exagérées pour cette question.
Johan
0

Mesure de température (Celcius) très simple avec thermistance ... à 1 $ chacun.

Que diriez-vous d'une puce STM32F0? Son module ADC contient un capteur de température interne ET des valeurs calibrées à deux points de température ET une valeur calibrée pour son générateur Vref interne.

Avec tout cela combiné, vous pouvez l'utiliser comme un capteur de température très précis - 12 bits adc, et sigma étant un peu plus de 1 lsb - sur une large plage de tension.

Il peut également être programmé en tant que capteur de température dédié: principalement en veille et au réveil pour lire la température et transmettre des données, puis se rendormir.

tout cela pour moins d'un dollar en petites quantités.

dannyf
la source