Pages

Showing posts with label microship. Show all posts
Showing posts with label microship. Show all posts

Friday

Comment mesurer des températures négatives avec un capteur LM35 et un PIC 16F877 ?






J'ai remarqué que la plupart des projets réalisés en titre "Projet Fin d'Etudes" ont une partie d'acquisition de la température.
La plupart entre eux oubliaient de mesurer la température négative ( température < 0 °C ) ce que provoque un mal-fonctionnement en hiver.
Je veut présenter par cet article comment mesurer une température négative en utilisant le célèbre capteur LM35 et un microcontrôleur PIC 16F877.




Le capteur LM35 supporte des températures assez extrêmes (jusqu'à -55°C / +150°C), mais il n'en est pas de même pour les microcontrôleurs PIC.

Si vous soumettez un microcontrôleur PIC "classique" à ces températures extrêmes, elle va purement et simplement cesser de fonctionner ou se dégrader très rapidement. Cela est valable pour les microcontrôleurs PIC, mais aussi pour tous autres circuits électroniques fabriqués suivant les standards "grand public" (et non "industriels").
Pour information, les gammes de températures classiques en électronique sont les suivantes :
  • grand public : 0°C ~ 70°C 
  • industrie : -40°C ~ 85°C 
  • militaire : -55°C ~ 125°C

Mesurer des températures négatives


Le montage


Pour réaliser ce montage, il va nous falloir :


  • Un microcontrôleur PIC 16F877 
  • Un capteur LM35 (attention, il faut bien prendre une version CZ ou CAZ, pas DZ !) 
  • Un condensateur de 100nF (optionnel, mais recommandé) 
  • Deux diodes 1N4148 
  • Une résistance de 18K ohms (marron / gris / orange
Montage du capteur LM35 pour mesurer une température négative

Le principe 


Les deux diodes 1N4148 induisent une chute de tension d'environ +0.6 volt à leur borne chacune (c'est une caractéristique physique des diodes, appelée "Forward Voltage", soit +1.2 volt au total entre la masse réelle du montage et la broche GND du capteur.

Avec une masse à +1.2 volt au niveau du capteur, il est possible pour le capteur d'aller en dessous de "leur" 0 volt vu qu'il n'est pas en réalité à 0 volt, mais à +1.2 volt.

Il y a cependant un petit souci avec ce montage : la tension aux bornes des diodes varie en fonction de la température … Ce qui est embêtant pour un montage censé mesurer des températures. C'est un comportement normal pour une diode, c'est même un comportement qui est utilisé pour mesurer des températures. Sauf que dans notre cas, c'est un comportement parasite.

L'astuce pour "Annuler" cette variation de tension parasite en fonction de la température consiste à mesurer la tension au niveau de la broche GND du capteur, puis de corriger la mesure finale en faisant une soustraction dans le code pour les mésures.


Vue schématique du montage et code:



Pour commencer notre montage, nous allons câbler la broche VCC du capteur à l'alimentation 5V. On relie ensuite la broche GND du capteur en série avec les deux diodes 1N4148, puis à la broche GND.

N.B. Les diodes sont polarisées ! Elles ont un "sens". Le trait noir sur la diode indique l'emplacement de la barre verticale sur le schéma.

On continue le montage en reliant la broche GND du capteur (juste après les deux diodes), à la broche Ra0 de PIC.

Toujours pour faire les choses bien, on va venir câbler un condensateur de 100nF entre les broches VCC et GND du capteur. Il faut que le condensateur soit câblé le plus près possible du capteur pour être efficace.

On termine en reliant la sortie du capteur à la broche Ra0 avec un fil et en câblant la résistance de 18K ohms entre la sortie du capteur et la broche GND.



Le code


=> Code C pour CCS PIC C Compiler V4.12

Le code complet avec commentaires :
 
#include <16F877.h>
#device adc=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES RESERVED                 //Used to set the reserved FUSE bits
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7, timeout=2000)  
#include <math.h> 
#define LCD_ENABLE_PIN  PIN_B0                                    ////
#define LCD_RS_PIN      PIN_B1                                    ////
#define LCD_RW_PIN      PIN_B2                                    ////
#define LCD_DATA4       PIN_B4                                    ////
#define LCD_DATA5       PIN_B5                                    ////
#define LCD_DATA6       PIN_B6                                    ////
#define LCD_DATA7       PIN_B7  
#define LCD_TYPE 2
#include "LCD420.C" 
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>

void main()
{  
lcd_init();
setup_adc_ports(AN0_an1_an3);
setup_adc(ADC_CLOCK_DIV_8);
delay_us(20);

while(1){
set_adc_channel(0); // calculer tension1
delay_ms (10);
int16 tension1 = read_adc();
set_adc_channel(1); // calculer tension2
delay_ms (10);
int16 tension2 = read_adc();
signed int16 temperature = tension1 - tension2; // mesurer la difference
lcd_gotoxy(1,1);
printf(lcd_putc,"temp= %2.1f",temperature*5.*100./1023.); // afficher la temperature
lcd_putc(223); //afficher la signe du C
printf(lcd_putc,"C   ");
}}//end void main() 

Le résultat


Simulation du circuit : PIC 16F877 + LCD + LM35 (température négative)


Simulation du circuit : PIC 16F877 + LCD + LM35 (température positive)




Conclusion


Il faut toujours penser à faire une circuit électrique qui fonctionne dans tous les conditions climatiques.

N'oublier jamais la signe "-"  pour l'unité °C !


=> Plus d'informations : imedelmottakel@gmail.com
=> https://www.facebook.com/Imed.Elmottakel






Top 10 common Software Architectural Patterns

Introduction: Did you ever posed the question:  How large software in industrial scale systems are designed ? Here I'll explai...