Dernière mise à jour :
19/12/2010
Présentation
Les exemples décrits ici montrent comment utiliser les comparateurs
d'un PIC de type 16F88, mais restent valables pour un PIC de
même
structure (16F628A par exemple). Outre le fonctionnement même des
comparateurs, nous verrons comment faire sortir la tension de
référence interne des comparateurs pour transformer une ligne d'entrée
/ sortie logique en une sortie analogique (fonction convertisseur
numérique / analogique).
Qu'est-ce qu'un comparateur ?
Un comparateur est un élement
électronique qui possède deux entrées individuelles - une
entrée
non-inverseuse marquée [+] et une entrée inverseuse marquée [-] - et
une sortie unique. Les deux entrées sont comparées en permanence et
selon la valeur de la tension appliquée sur chacune de ces
deux
entrées, la sortie du comparateur est à l'état logique haut ou à l'état
logique bas. Les tensions en entrée peuvent correspondre à des états
logiques bas ou haut, mais peuvent aussi prendre toute valeur entre ces
deux extrêmes (valeurs analogiques). Par contre la sortie sera toujours
soit à l'état bas soit à l'état haut et sera de type logique tout ou
rien. Le schéma qui suit montre quelques exemples de
comportement
d'un comparateur en fonction des tensions appliquées sur ses entrées.
Pas
très difficile à comprendre. Subsiste juste une ombre quand les deux
entrées se voient appliquer le même potentiel de tension. Laquelle dans
ce cas est la plus forte ? Et bien aucune. Dans cette condition
particulière, la sortie du comparateur tremblote entre les deux
extrêmes car en plus de la tension appliquée sur les entrées, il existe
toujours un petit bruit aléatoire qui s'y additionne et qui est propre
aux composants électroniques. Il est donc impossible en pratique
d'avoir exactement la même tension en même temps sur les deux entrées
pendant une longue durée. Ce petit côté aléatoire n'est pas spécifique
aux comparateurs de tension, on le connait aussi pour d'autres circuits
et notamment avec les circuits logiques TTL et CMOS quand on se trouve
au seuil de basculement des entrées.
Utilisation de base des comparateurs du PIC
Le
PIC 16F88 intègre deux comparateurs de tension appelés C1 et C2. Ces
deux comparateurs peuvent fonctionner selon huit configurations
différentes définies par l'état logique donné à trois bits de
configuration qui sont CM0, CM1 et CM2. Ces trois bits de configuration
sont accessibles via le registre CMCON.
Mode |
CM2 |
CM1 |
CM0 |
Mode de
fonctionnement des comparateurs |
0 |
0 |
0 |
0 |
Reset des comparateurs, la sortie de chaque comparateur
est à 0. |
1 |
0 |
0 |
1 |
Utilisation de l'entrée [-] du comparateur C1 en mode
multiplexé : routage entrée [-] vers broche RA0 si CIS = 0 ou vers RA3
si CIS ) 1. Utilisation du comparateur C2 en mode
standard. Les entrées [+] des deux comparateurs C1 et C2 sont
reliées ensemble et accessibles via la broche RA2 |
2 |
0 |
1 |
0 |
Utilisation
des entrées [-] en mode multiplexé, avec application d'une tension de
référence interne Vref sur la broche [+] des deux comparateurs. Les
entrées [-] sont routées soit vers RA0 et RA1 si CIS = 0,
soit vers RA3 et RA2 si CIS = 1. |
3 |
0 |
1 |
1 |
Les
entrées [+] des deux comparateurs C1 et C2 sont reliées ensemble et
accessibles via la broche RA2, les entrées [-] sont accessibles via les
broches RA0 et RA1. La broche RA3 n'est dans ce cas pas utilisée pour
les comparateurs et peut être utilisée en mode numérique. |
4 |
1 |
0 |
0 |
Les
deux comparateurs C1 et C2 fonctionnenet de façon totalement
indépendante. Accès aux entrées des comparateurs via les
broches
RA0 et RA3 pour C1, et RA1 et RA2 pour C2. |
5 |
1 |
0 |
1 |
Seul
le comparateur C2 est activé avec ses entrées accessibles via les
broches RA1 et RA2. Le comparateur C1 est désactivé et les broches RA0
et RA3 peuvent être utilisée en mode numérique. |
6 |
1 |
1 |
0 |
Dans
ce mode les sorties des comparateurs sont rendues accessibles de
l'extérieur : la sortie du comparateur C1 est routée vers la broche RA3
etla sortie du comparateur C2 est routée vers la broche RA4. |
7 |
1 |
1 |
1 |
Les deux comparateurs C1 et C2 sont désactivés, leur
sortie est positionnée à OFF (état logique bas). |
Important ! quand
les
comparateurs C1 et C2 ne sont pas utilisés, il faut impérativement
spécifier le mode 7 pour libérer totalement les lignes RA0 à RA3.
CMCON := 7 ou CMCON := %00000111 ou CMCON := $07
Si
vous ne le faites pas, les lignes RA0 à RA3 ne fonctionneront pas
toutes correctement quand vous essayerez d'y accéder en entrée / sortie
numérique.
Comparaison de deux tensions externes
Vous
voulez comparer deux tensions qui viennent de
l'extérieur du
PIC. Pour mettre en pratique ce besoin, nous partons de l'hypothèse que
nous disposons d'une part d'une source de tension ajustable de façon
continue entre 0 V et +5 V fournie par un potentiomètre (tension V1),
et d'autre part d'une source de tension dont la valeur dépend de
l'éclairement d'une LDR (photorésistance) montée dans un
pont diviseur
de tension.
Nous voulons que la sortie du comparateur soit directement accessible
sur une des lignes d'entrée / sortie du PIC et que cette sortie
alimente une LED pour visualiser son état en cours. Le résultat final
consiste à allumer la LED seulement quand la LDR reçoit de la lumière.
Tout cela est résumé dans le schéma qui suit.
La
LED D1 est reliée à la sortie RA3/C1OUT et visualise l'état de la
sortie du comparateur C1 dont la sortie est reliée à cette broche.
Quand RA3 est activée (sortie comparateur C1 à l'état haut) la LED
s'allume. Quand RA3 est désactivée (sortie comparateur C1 à l'état bas)
la LED s'éteint. La tension V1 appliquée à l'entrée [-] du comparateur
C1 via la broche RA0 vient du curseur du potentiomètre RV1, qui sur le
schéma est montré en position centrale (tension V1 égale à +2,5
V). La tension V2 appliquée à l'entrée [+] du comparateur C1
via
la broche RA2
vient du pont diviseur constitué de R1 et de la LDR. La tension V2
dépend du taux d'éclairement de la LDR, sa valeur est plus élevée quand
la LDR est plus éclairée. Le fonctionnement est donc très simple : si
la LDR n'est pas suffisemment éclairée, la tension
V2 est inférieure à la tension V1 et la sortie du
comparateur
C1 est à l'état bas. La LED D1 est alors éteinte. Si la
LDR est
suffisemment éclairée, la tension V2 est supérieure
à la tension V1 et la sortie du comparateur C1 bascule à l'état haut,
faisant s'allumer la LED D1. La programmation du PIC nécessaire pour
obtenir ce fonctionnement est vraiment simple, pour preuve le nombre de
lignes requises pour la totalité du code source qui suit.
program electronique_pic_tuto_base_comparateurs_001a;
procedure Main_Init;
begin
CMCON := %00000110; // CMCON = 6 -> use comp with C1 output wired to RA3
TRISA := %11110111;
TRISB := $00;
INTCON := $00;
OPTION_REG := 0;
OPTION_REG.NOT_RBPU := 1; // disable pullup
ANSEL := $00; // all inputs as digital I/O
end;
begin
Main_Init;
while true do
begin
nop;
end;
end.
Ce programme ne fait rien d'autre que configurer le mode de
fonctionnement des comparateurs, c'est pourquoi il ne se passe rien
dans la boucle while situé dans la procédure principale. Il va de soi
qu'on ne va pas s'amuser à utiliser un PIC pour une fonction aussi
basique que pourrait remplir un comparateur de tension "autonome" tel
le LM311. L'idée est juste de montrer où se situent les lignes de code
à traiter. Si le programme du PIC doit tester l'état de la sortie du
comparateur et s'il doit réagir en conséquence, il faudra sans doute
lire la sortie du comparateur en interne et ne pas la rendre disponible
à l'extérieur comme c'est fait ici au travers de la broche RA3. Surtout
si on doit économiser les broches d'entrée / sortie.
Comparaison d'une tension externe avec une tension de
référence interne
Plutôt
que d'utiliser une broche externe du PIC pour "entrer" une tension de
seuil, on peut utiliser une tension de référence produite en interne du
PIC grâce à un convertisseur numérique / analogique (basique) intégré. On ne
monopolise ainsi qu'une seule broche du PIC pour obtenir un
fonctionnement et un résultat similaire. Le schéma qui
suit diffère du précédent par l'absence du
potentiomètre
ajustable RV1 qui servait à fournir une tension de référence externe.
La
LED D1 est toujours connectée à la broche RA3 mais cette fois cette
broche RA3 n'est plus connectée à la sortie du comparateur C1. Ce qui
signifie que pour allumer la LED il faut aller lire la valeur de l'état
du comparateur, ce qui est fait dans une boucle tournant sans fin. Le programme devient ainsi un peu plus actif.
program electronique_pic_tuto_base_comparateurs_001b;
procedure Main_Init;
begin
CMCON := %00000010; // CMCON = 2 -> use comp with internal voltage reference
CVRCON := 0;
CVRCON.CVREN := 1; // enable internal voltage reference (Vref)
CVRCON.CVROE := 1; // export internal Vref to RA2
CVRCON.CVRR := 1;
CVRCON.CVR3 := 0;
CVRCON.CVR2 := 1;
CVRCON.CVR1 := 1;
CVRCON.CVR0 := 0;
TRISA := %11110111;
TRISB := $00;
INTCON := $00;
OPTION_REG := 0;
OPTION_REG.NOT_RBPU := 1; // disable pullup
ANSEL := $00; // all inputs as digital I/O
ANSEL.ANS2 := 1;
end;
begin
Main_Init;
while true do
begin
PORTA.3 := not CMCON.C1OUT;
end;
end.
La ligne CVRCON.CVROE permet de router la tension de référence
interne au PIC sur sa broche RA2 et d'en disposer en externe. A noter
que pour que cela fonctionne, l'entrée RA2 doit être configurée
en tant qu'entrée et non en tant que sortie. L'exploitation de cette
tension analogique doit
impérativement se faire via un buffer dont l'impédance d'entrée est
élevée. Un AOP monté en suiveur de tension convient très bien pour
ça.