Go Down

Topic: [Débat] Capteurs de températures : LM335Z / LM35DZ / SMT16030 (Read 6847 times) previous topic - next topic

bigben99

Mar 02, 2013, 09:24 am Last Edit: Mar 15, 2013, 09:22 pm by bigben99 Reason: 1
Bonjour,

Je débute en électronique et donc j'essaie d'avancer pas à pas.

Après mon montage qui me permet de lire la téléinfo EDF, je m'attaque à la réalisation d'une station météo.

1ère étape, mesurer la température, j'ai déjà testé les capteurs LM35DZ, LM335Z et SMT 160-30.

Pour tous ces capteurs, j'ai réussi à relever une température à peu prêt correcte.

Maintenant, j'aimerais améliorer mes montages pour améliorer mes mesures.

1er cas, le LM35DZ.

D'après la datasheet, le LM35DZ sort sur son pin de temperature, 10mV/°C avec :
- 0°C --> 0 V
donc 100°C --> 1V

Jusqu'ici, je branchais le pin de sortie directement sur une entrée analogique de l'arduino. Le convertisseur A/N me donnait donc des valeurs entre 0 (0°C) et 204 (100°C) ce qui me fait uniquement 1/5 ème de la plage de valeurs utilisables et induit une résolution max de 4,8mV soit 0,48°C.

Est-il envisageable à l'aide d'un AO (type LM358) d'amplifier mon signal pour qu'il utilise la plage 0-5V des entrées analogiques de l'arduino (0 --> 0 / 1V --> 5V) ?

R1 = 820 Ohm
R2 = 3,30 KOhm

Donc coeff de multiplication = 5,02

Merci d'avance pour votre aide.

BIGBen

[EDIT] modification du sujet pour recentrer le débat sur les capteurs de températures, leurs capacités et leur mise en oeuvre

B@tto

Le problème c'est que les AOP n'aime pas fonctionner dans des tensions proches de leurs alimentations. S'il fait 25°C, ça va faire 0,25V, trop proche de GND pour un fonctionnement correct. Le LM358 est tolérant de ce côté la, c'est pour ça qu'on le retrouve souvent dans beaucoup de montage alimenté "seulement" en 5V. Tu peux toujours essayer ça risque rien mais pas sûr que ça sorte quelque chose et que si ça sort ça soit linéaire ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bigben99

@B@tto, merci pour ton retour, je ferais donc un essaie pour valider que le fonctionnement est suffisamment correct pour ne pas totalement fausser mes mesures, sinon, existe-t-il une autre solution pour améliorer mes mesures à partir d'un LM35DZ ?

B@tto

Ca dépend du reste de ton montage mais tu peux prendre sur l'atmega une autre référence analogique, ce qui augmente la résolution mais réduit la gamme : http://arduino.cc/en/Reference/AnalogReference?from=Reference.AREF
Avec 1,1v de aref ça te donne une résolution de 1mV environ, soit un dixième de °C. Par contre tes entrées analogique ne supporteront pas plus de 1,1V.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bigben99

En effet, j'ai déjà étudié cette solution, mais malheureusement l'utilisation du 1,1V comme référence se fait pour l'ensemble des entrées analogique de l'arduino et après la température, je vais peut-être positionner d'autres capteurs qui devront fonctionner avec du 5v en référence.

Donc j'aimerais trouver une solution matérielle plutôt que logiciel. Idéalement, je souhaiterais que le montage de mon capteur me permette d'avoir un code le plus simple possible.

B@tto

J'imagine bien. Si tu peux alimenter ton AOP en +5V/-5V c'est bon aussi
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Felcy

Personnelement je te conseil un ampli d'instrumentation rail-to-rail genre AD623(http://www.analog.com/static/imported-files/data_sheets/AD623.pdf) où il te suffit d'une résistance pour calibrer le gain.

bigben99

#7
Mar 02, 2013, 02:30 pm Last Edit: Mar 02, 2013, 02:42 pm by bigben99 Reason: 1

J'imagine bien. Si tu peux alimenter ton AOP en +5V/-5V c'est bon aussi


Pourquoi pas, mais je n'ai aucune idée sur la façon de faire... sachant que sur mon projet final, je n'aurais comme alimentation qu'une pile 9V soit des alims de 9V (la pile), 5V et 3,3V (l'arduino)


Personnelement je te conseil un ampli d'instrumentation rail-to-rail genre AD623(http://www.analog.com/static/imported-files/data_sheets/AD623.pdf) où il te suffit d'une résistance pour calibrer le gain.


Je ne vois pas bien l'intérêt de l'AD623, la seconde resitance (R2) est simplement intégrée dans l'ampli. Par ailleurs, impossible de trouver tes amplis chez mes fournisseurs habituels alors que le LM358 est disponible partout.
Si l'AD623 présente un réel intérêt par rapport au LM358, peux-tu m'expliquer un peu plus pourquoi ? (mis à part le calibrage du gain avec une seule resistance au lieu de 2)

Felcy

L'AD623 n'est pas un AOP classique, c'est un ampli d'instrumentation, dans ce sens il a un offset d'entrée beaucoup plus faible que le LM358 (25 µV contre 3 mV) un offset de sortie aussi réduit (2mV contre 5mV). Il a aussi une bien meilleur taux de réjection de mode commun (parfois utile).
Si je comprends bien, tu dois faire une amplification avec un gain de 5, qui sera facilement calibré par un potentiometre ou une résistance de précision, sans aucune erreur (ou presque).
Après, un LM358 est peut être suffisant, mais il faudra trouver le bon rapport de résistance, pas forcément facile.

Bon courage pour ton projet en tout cas :-)

B@tto

Le problème sera le même : sans une tension suffisante, pas de polarisation.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bigben99

@Felcy, merci pour ces précisions sur l'AD623, mais comme tu le dis à la fin, je pense que le LM358 sera largement suffisant pour l'instant, je pense que mes exigence de précision ne sont pas encore suffisante pour nécessiter un AD623.

Pour le rapport de résistance, j'ai calculé qu'avec R1 = 820 Ohm et R2 = 3,30 KOhm mon gain sera de 5,02

Felcy

le fait qu'il soit rail-to-rail ne regle pas le problème de polarisation?

B@tto

Ca limite beaucoup comparé aux autres AOP mais pas totalement : http://fr.sci.physique.narkive.com/pUVnZ8Pe/rail-to-rail-lm-358-soustracteur

Il faut dans tout les cas polariser les jonction PN des transistors, ce qui nécessite 0,6V.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bigben99

Je n'ai pas encore reçu mon AOP LM358 pour le LM35DZ donc je n'ai pas encore pu tester l'amplification et son impact sur mes mesures faites avec le LM35DZ.

Par contre, j'ai un autre soucis cette fois avec le SMT160-30. Je m'explique.

1. Avec un montage de base et une mesure unitaire, j'obtient bien une temperature proche de la réalité.
Montage page 7 de la datasheet (http://www.smartec.nl/pdf/DSSMT16030.PDF)


Ci-dessous le code de ma librairie SMT16030 que j'ai écrite
Code: [Select]
/*
  SMT16030.cpp - Library for using SMT16030 temperature sensor
  Created by B. Didry, March 14, 2013.
 
  14/03/2013 - BDI - rendre paramétrable le timeout du pulseIn ?
*/
#include "Arduino.h"
#include "SMT16030.h"

SMT16030::SMT16030(int sensorPin) {
  _sensorPin = sensorPin;
  pinMode(_sensorPin, INPUT);
}

float SMT16030::getTemperature() {
  return getTemperature(1);
}

float SMT16030::getTemperature(int numberOfPeriods) {
  unsigned long highTime;
  unsigned long lowTime;
  unsigned long onePeriodHighTime;
  unsigned long onePeriodLowTime;
  float dutyCycle;
 
  highTime = 0;
  lowTime = 0;
  for(int i=0;i<numberOfPeriods;i++) {
    onePeriodHighTime = pulseIn(_sensorPin, HIGH, 500);
onePeriodLowTime = pulseIn(_sensorPin, LOW, 500);
if(onePeriodHighTime != 0 && onePeriodLowTime != 0) {
  highTime = highTime + onePeriodHighTime;
      lowTime = lowTime + onePeriodLowTime;
}
  }
  dutyCycle = float(highTime) / float(highTime + lowTime);
 
  return (dutyCycle - 0.320) / 0.00470;
}


pour mesurer une température, je fais donc appel à ma méthode getTemperature().
La précision de ma mesure, dépend donc de la qualité de la mesure du duty cycle via la méthode pulseIn().

Comme indiqué dans la documentation de smartec concernant la mesure de ce duty cycle (http://www.smartec-sensors.com/assets/files/pdf/application_notes/APPSMT1603003.PDF), la fréquence d'échantillonnage a un impact important sur cette dernière.

Il recommande donc pour gommer ce problème de calculer le duty cycle sur plusieurs périodes.

J'ai donc implémenté la méthode getTemperature(int numberOfPeriods) qui calcule la température sur plusieurs périodes (numberOfPeriods).

Mais lorsque je fais des mesures avec différents nombre de périodes, j'ai fait la constatation suivante :
serie de mesures avec 1 période => amplitude de températures d'environ 1°C
serie de mesures avec 10 périodes => amplitude de températures d'environ 1,5°C
serie de mesures avec 20 périodes => amplitude de températures d'environ 3°C

Globalement, plus j'utilise de périodes pour faire ma mesure, plus ma mesure semble aléatoire !

J'ai beau retourner le problème dans tous les sens, je ne comprend pas ce qui cloche donc si quelqu'un a déjà rencontré le problème et l'a solutionné ou si vous voyez d'ou vient le problèmer, je vous remercie d'avance pour votre aide.

68tjs

Je prend le sujet en marche.
Il y a un schéma d'application dans la datashhet du lm35 qui permet :
- de faire des mesures en dessous de 0°C
- d'utiliser en option un ampli opérationel tout ce qu'il y a de plus banal puisqu'il n'est plus question de Rail to Rail.

Le schéma est page 7 fig 7 de la datasheet "National Semiconductor".
Sans ampli il suffit de disposer des 2 entrées analogiques et de faire la différence des deux mesures V+ et V-.
Avec ampli op câblé en sommateur une seule entrée analogique est nécessaire.

La solution tient en deux mots : "mesure différentielle".
Les diodes permettent de "décoller" les tensions de la masse d'où la supression de la contrainte du rail -.

Elles ne sont pas stables en température donc les tension V- et V+ flottent mais elles flottent de la même quantité et comme on fait la différence des tensions on élimine la tension de flottement.

On élimine aussi l'influence de mauvaise masse et c'est très important parce qu'il ne faut pas oublier que 10 mV de perturbation sur une masse c'est très vite arrivé et que cela représente 1°C.
Ce n'est pas la peine de modifier Aref ou d'autres paramètres du micro-controleur pour gagner 0,5 % si par ailleurs on en perd 10 % dans le câblage.


Go Up