Projet à microcontrôleur PIC 16F88
Carte d'acquisition 7 voies analogiques pour signaux lents
Il s'agit d'une carte d'acquisition à 7 entrées analogiques pour signaux lents, qui conviendra pour l'acquisition de températures, de pressions atmosphériques, etc ...
La fréquence d'acquisition est de 1 Hz maximum par voie (c'est-à-dire 60 acquisitions maximum par minute).
Le convertisseur analogique - numérique (module interne du microcontrôleur PIC 16F88) a les caractéristiques suivantes :
N.B. Un filtrage numérique améliore la résolution : 1 mV en pratique
La carte se connecte à un ordinateur (via une liaison RS232).
Une application Windows affiche les données en temps réel et fournit un graphe déroulant (pour chaque voie).
3-1- Les filtres anti-repliements
Un filtre anti-repliement est intercalé entre la tension à mesurer (qui provient généralement d'un capteur) et le canal d'entrée de l'ADC du PIC.
Il s'agit ici d'un simple filtre analogique passe-bas de fréquence de coupure 15 Hz.
Pour plus d'informations sur les filtres anti-repliements
3-2- Le convertisseur analogique - numérique (ADC)
Le convertisseur analogique - numérique est situé dans un module interne du microcontrôleur PIC 16F88.
Pour plus d'informations sur le fonctionnement du convertisseur analogique - numérique du PIC 16F88
3-3- Le filtrage numérique
Un filtrage numérique (passe-bas) est effectué de façon à enlever le maximum de bruit (en particulier le bruit de ronflement du secteur 50 Hz). Ce filtrage numérique est réalisé de manière logicielle par le PIC (pendant la phase de traitement du résultat de la conversion).
Caractéristique du filtre numérique :
Le filtre numérique calcule la moyenne arithmétique sur 256 échantillons (filtre numérique à moyenne glissante).
Pour beaucoup plus d'informations sur le filtrage numérique
3-4- La liaison RS232
- 3-4-1- Le câble de communication entre l'ordinateur et la carte
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).
- 3-4-2- Protocole de communication entre l'ordinateur et la carte
Seul l'ordinateur prend la parole (maître).
Le microcontrôleur PIC 16F88 se contente de répondre (esclave).
L'ordinateur envoie 1 octet (via la liaison RS232) toute les 140 ms.
Cet octet contient le numéro du canal à échantillonner :
Le processus est cyclique : voie 0 puis voie 1 ... puis voie 6 puis voie 0 ...
Chaque voie est ainsi échantillonnée toutes les 7 x 140 = 980 ms (d'où une fréquence d'acquisition d'environ 1 Hz).
Une fois l'octet reçu, le PIC 16F88 sélectionne le canal indiqué, et lance une série de 256 conversions (une toutes les 390,6 µs).
Cela prend : 256 x 390,6 µs = 100 ms
Le microcontrôleur PIC effectue la moyenne des 256 résultats de conversion.
Sachant que la résolution du convertisseur ADC est 10 bits, la somme nécessite un nombre de 18 bits.
La moyenne correspond à la somme avec la virgule décalée de 8 bits vers la gauche.
Par exemple :
Somme brute (18 bits) : 10 10010010 01000101 = 168 517 (en décimal)
On décale la virgule de 8 positions :
10 10010010 , 01000101
Partie entière (10 bits) : 10 10010010 = 658 (en décimal)
01000101 = 1/4 + 1/64 + 1/256 = 0,26953125
En définitive :
168 517 / 256 = 658,26953125
Notez que la résolution est améliorée : on passe de 10 bits à 18 bits.
On pratique, on restera prudent, et on considérera que la résolution est d'au moins 12 bits (soit une résolution de l'ordre de 5 V / 4096 # 1 mV).
La moyenne est envoyée telle quelle vers l'ordinateur sous la forme de 3 octets :
Exemple d'oscillogramme :
L'ordinateur envoie vers le PIC un octet :
0x06 <=> voie 6
100 ms plus tard, le PIC renvoie 3 octets :
0x01 0xF5 0x6C <=> 0x01F56C <=> 128 364 (en décimal)
128 364 / 256 = 501,42 <=> (501,42 / 1023) x 5 volts = 2,451 volts
40 ms plus tard (140 - 100 = 40 ms), l'ordinateur envoie un nouvel octet (0x00) pour demander l'échantillonnage de la voie 0, et le cycle recommence ...
3-5- Etalonnage du convertisseur analogique - numérique
Exemple avec un étalonnage en 2 points (sur le canal 0 par exemple) :
Tension vraie (tension continue mesurée avec un multimètre étalon 4000 points)
Résultat de la conversion
Tension lue par le convertisseur analogique - numérique
(avec V REF + = 5,000 V
et V REF - = 0,000 V)
1,250 V 258,01,261 V
(= 258,0 * 5 / 1023)
3,750 V 769,93,763 V
(= 769,9 * 5 / 1023)
On observe une erreur de 11 mV pour le premier point et une erreur de 13 mV pour le deuxième point.
Le but de l'étalonnage est de faire coïncider la tension lue et la tension vraie.
Relation entre la "tension lue" et le résultat de la conversion de l'ADC :
V REF - <=> 0x000 (0)
V REF + <=> 0x3FF (1023)
Tension lue = (V REF + - V REF -) / 1023 * résultat de la conversion + V REF -
Relation entre la tension vraie et le résultat de la conversion (en supposant la relation linéaire) :
Tension vraie (V) = (3,750 - 1,250) / (3,763 - 1,261) * (5 / 1023 * résultat de la conversion - 1,261) + 1,250
A partir des 2 relations précédentes, on peut écrire que :
V REF - = (3,750 - 1,250) / (3,763 - 1,261) * (-1,261) + 1,250
V REF - = -0,010 V
V REF + = (3,750 - 1,250) / (3,763 - 1,261) * (5 - 1,261) + 1,250
V REF + = 4,986 V
En définitive :
Tension vraie (tension continue mesurée avec un multimètre étalon 4000 points)
Résultat de la conversion
Tension lue par le convertisseur analogique - numérique
(avec V REF + = 4,986 V
et V REF - = -0,010 V)
1,250 V 258,01,250 V
(= (4,986 + 0,010) / 1023 * 258,0 - 0,010)
3,750 V 769,93,750 V
(= (4,986 + 0,010) / 1023 * 769,9 - 0,010)
L'application fonctionne sous Windows XP.
Procédure d'utilisation
-> Brancher le câble "null-modem" entre l'ordinateur et la carte (hors tension)
-> Mettre la carte sous tension
-> Ouvrir l'application
-> Configurer les paramètres de la liaison RS232C :
- 9600 bauds/s
- 8 bits de données
- Pas de bit de parité
- 1 bit de STOP
- Pas de contrôle de flux
-> Ouvrir le port
La tension actuelle de chaque voie doit s'afficher (avec une mise à jour toutes les 980 ms).
Il y a la possibilité de sauvegarder les données dans un fichier texte :
Ce fichier pourra ensuite être exploité avec LibreOffice, Excel, Matlab ...
Le code source
Cette application a été créée avec l'environnement C++ Borland Builder 5.0.
N.B. La gestion de la liaison RS232 nécessite l'installation du composant TComPort (la version 2.64 est suffisante) :
- Téléchargement : http://sourceforge.net/projects/comport/
- Procédure d'installation : http://petit.developpez.com/serie/install_tcomport/
- Tutorial : http://petit.developpez.com/serie/cours_tcomport/
- 1 câble null-modem (femelle/femelle)
- 1 ordinateur avec port COM
- 1 programmateur pour flasher le programme du microcontrôleur PIC 16F88
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
Proteus est une suite logicielle de CAO électronique
éditée par la société Labcenter Electronics.
ISIS est la composante de Proteus qui permet la création de schémas et la simulation électrique.
La grande force de ISIS est de pouvoir simuler le comportement d'un microcontrôleur (PIC, Atmel, 8051, ARM, HC11...) et de son interaction avec les composants qui l'entourent.
Pour lancer la simulation : Touche F12
Mise au point -> Virtual Terminal
Dans la fenêtre Virtual Terminal : click droit, puis sélectionner :
- Hex display mod
- Echo typed characters
canal 1 -> Taper CTRL + A
...
canal 6 -> Taper CTRL + F
canal 0 -> Taper CTRL + 2
(C) Fabrice Sincère ; Révision 1.2.5