Projet à microcontrôleur PIC 16F628A
Acquisition de température par liaison RS-232C
+ Logiciel de suivi de température
1- Présentation
2- Rappel sur le bus série asynchrone RS-232C
3- Schémas électriques
4- Principe de fonctionnement
5- Communication entre l'ordinateur et la carte à microcontrôleur
6- Liste du matériel
7- Le code source du microcontrôleur PIC 16F628A
Il s'agit d'une carte à microcontrôleur (PIC 16F628A) équipée d'un capteur de température analogique (LM335).
La plage de mesure va de 0,0 à 51,0 °C avec une résolution numérique de 0,2 °C.
L'incertitude de mesure est de l'ordre de 2°C.
Cette carte communique avec un ordinateur à travers une liaison série RS-232C.
Côté ordinateur, une application permet l'acquisition de la température, puis l'affichage sous la forme d'un graphe déroulant de l'évolution dans le temps de cette température :
Le protocole de communication entre l'ordinateur et la carte est le suivant :
Quand l'ordinateur envoie l'octet 0x74 (code ASCII du caractère 't'), la carte renvoie la température (en °C) avec le format xx,x (4 caractères).
Les paramètres de la liaison RS232C sont ici :
Au repos, le niveau logique est 1.
Le début de la transmission est marqué par un bit Start au niveau 0, suivi des 8 bits de données (bit de poids faible en premier).
La fin de la transmission est marquée par un bit Stop (niveau 1).
Notez que les niveaux logiques de la liaison RS232C ne sont pas compatibles avec la logique TTL.
Le rôle d'un circuit intégré de type MAX232 est de faire l'interface :
Exemple :
- Oscillogramme de la transmission du caractère '5' (0x35 en code ASCII, 00110101 en binaire) :
- Oscillogramme (niveau TTL) de la transmission des caractères 'B', '2' et 'h' (0x42, 0x32 et 0x68 en code ASCII) :
4-1- Capteur de température LM335
Le LM335 est un capteur de température analogique qui fournit une tension proportionnelle à la température (en kelvin).
Sa sensibilité est de 10 mV / K.
A 0°C (273 K), cela donne donc une tension continue de 2,73 V.
L'amplificateur de différence, construit autour d'un amplificateur opérationnel TL071, augmente la sensibilité d'un facteur 10 et assure un changement d'échelle (K -> °C).
En sortie, on a 100 mV / °C (aux tolérances près) :
- 0 V à 0 °C
- 2 V à 20 °C
- 5 V à 50 °C ...
Le potentiomètre R2 permet un ajustage.
Le potentiomètre doit être alimenté par une tension stable, ce qui justifie la présence d'un régulateur de tension (7805).
Il faut choisir R2 << R3 pour que le taux de réjection de mode commun de l'amplificateur de différence soit satisfaisant.
4-2- Le convertisseur analogique / numérique ADC080x
L'ADC0804 est un convertisseur analogique / numérique à approximations successives dont voici les principales caractérisques :
- 8 bits de résolution
- sorties parallèles
- tension d'alimentation unique + 5 V
- entrées différentielles (0 à + 5 V)
- fréquence d'horloge : jusqu'à 1 MHz
- fréquence d'échantillonnage : 14 kHz (avec une horloge de 1 MHz)
L'ADC est ici en mode "free-running".
La fréquence de l'horloge dépend de R1 et C9 : f # 1/(1,7.R1.C9) # 270 kHz
La fréquence d'échantillonnage est proportionnelle à la fréquence d'horloge : # 3,9 kHz (ce qui est plus que suffisant pour suivre l'évolution d'une grandeur telle que la température !).
On notera la présence du bouton poussoir "Start". En effet, il peut arriver que l'ADC se bloque à la mise sous tension, il suffit alors d'appuyer sur ce bouton pour résoudre le problème.
- Avec Ve = 0 V, la sortie donne (0000 0000) = 0
- Avec Ve = 5 V (pleine échelle), la sortie donne (1111 1111) = 255
Pour plus d'informations, consulter le data sheet des différents fabriquants de ce circuit intégré (National semiconductor, Philips, Texas Instruments ...).
4-3- Le microcontrôleur 16F628A
Le µC communique :
- avec un ordinateur par une liaison RS232C (broches RB1/RX et RB2/TX de l'UART)
- avec la sortie du convertisseur analogique / numérique (8 broches : RA0 à RA2, RB3 à RB7)
Quand une donnée est reçue et décodée par l'UART, une interruption est déclenchée. Dans la routine d'interruption, cette donnée est directement lue dans le registre RCREG.
Si la donnée est 0x74 (code ASCII du caractère 't'), le µC renvoie la température (en °C) avec le format xx,x (4 caractères) :
Le µC lit et convertit les 8 bits de sortie de l'ADC en une série de 4 caractères ASCII.
- 0°C -> Ve = 0 V -> 0000 0000 -> 00,0
- 50°C -> Ve = 5 V -> 1111 1111 -> 51,0 (soit une erreur de 1 °C, ce qui est acceptable en comparaison de la précision du capteur LM335).
L'interruption d'émission de l'UART est générée quand l'UART est disponible pour émettre. La routine d'interruption envoie le 1er caractère (il suffit d'écrire la donnée dans le registre TXREG), puis le second caractère à l'interruption suivante etc ...
- Oscillogrammes :
RB1/RX : donnée reçue par l'UART : 0x74 (t en code ASCII)
RB2/TX : données émises par l'UART : 0x35 0x31 0x2C 0x30 (51,0 en code ASCII)
Il faut bien sûr un ordinateur qui possède un port COM, reconnaissable par son connecteur SubD 9 broches mâle.
Il faut brancher un câble "null-modem" (câble croisé) entre l'ordinateur et la carte.
Si vous n'en avez pas, vous pouvez facilement en faire un (il faut 3 fils et 2 connecteurs SubD 9 broches femelle).
Ce logiciel est normalement installé avec Windows.
Si vous ne le trouvez pas, rechercher le fichier hypertrm.exe (démarrer -> Rechercher).
Autrement, vous pouvez le télécharger gratuitement à l'adresse suivante :
Lancer l'application HyperTerminal.
La fenêtre "Description de la connexion" s'ouvre et vous demande d'entrer un nom pour la nouvelle connexion (par exemple : PIC).
Choisir la valeur par défaut (COM1) dans le fenêtre "Connexion", puis :
Quand vous appuyez sur une touche, HyperTerminal transmet son code ASCII par la liaison RS-232C.
S'il s'agit de la touche 't', HyperTerminal reçoit la température :
Voici une application qui permet l'acquisition de la température, puis l'affichage sous la forme d'un graphe déroulant de l'évolution dans le temps de cette température :
Avant-propos
Cette application a été écrite en C++ Borland Builder 5.
L'application fonctionne sous Windows NT4 et Windows XP (non testée sous Windows Vista, merci de me dire ce qu'il en est ...).
N.B. La gestion de la liaison RS232 nécessite l'installation du composant TComPort (la version 2.64 est suffisante) :
Description
Une acquisition de température est réalisée toutes les 30 millisecondes.
La température retenue est la moyenne des 30 dernières mesures : on réalise ainsi un filtrage numérique qui atténue l'influence du bruit.
Il y a la possibilité de sauvegarder les données dans un fichier texte :
Ce fichier peut ensuite être exploité avec Excel, Matlab ...
- 1 câble null-modem (femelle/femelle)
- 1 ordinateur avec port COM
- 1 programmateur pour flasher le programme du microcontrôleur PIC 16F628A
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
(C) Fabrice Sincère ; Révision 01