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

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).

 

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,0

1,261 V

(= 258,0 * 5 / 1023)

3,750 V
769,9

3,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,0

1,250 V

(= (4,986 + 0,010) / 1023 * 258,0 - 0,010)

3,750 V
769,9

3,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 :

-> 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) :

 

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.


          simulation_proteus_isis

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