Dernière mise à jour :
25/12/2011
Présentation
Quelques voltmètres sont présentés dans cet article, qui font appel
à un microcontrôleur de type 12F675.
Le premier
(voltmètre 005a) permet l'affichage d'une tension comprise entre
00,0 V et 99,9 V, et a été conçu en vue de
remplacer un
couple de CA3161 et CA3162 (qui prennent moins de place que mon
système, mais qui reviennent plus chers). Avec une simple modification
de résistance, ce voltmètre 005a passe en version 005ab et est en
mesure d'afficher une tension comprise entre 0,00 V et 9,99 V. Le
second
(voltmètre 005b) répond à la demande d'un
internaute, et
permet l'affichage d'un niveau entre "0" et "9", ou l'affichage d'une
tension sur un seul digit, pour une plage d'entrée comprise
entre 0 V et 10 V. Ce deuxième montage est similaire au
schéma Voltmètre 006z présenté
à la page
Voltmètre
006.
Les deux montages voltmètre 005a et voltmètre 005b
sont décrits à la
suite car ils sont construits sur la même base matérielle
et logicielle. Une fois n'est pas coutume, je vais décrire le
montage 005b avant le montage 005a, pour vous montrer que je sais aussi
parfois m'organiser. En suite de quoi une petite discussion pour
disposer d'une mesure et d'un affichage de plus haute résolution,
capable d'afficher au mV près. En résumé :
-
Schéma 005a : échelle 0-100 V, affichage entre
00,0 V et 99,9 V
-
Schéma 005ab : échelle 0-10 V, affichage entre
0,00 V et 9,99 V
-
Schéma 005b : échelle 0-10 V, affichage entre
0 et 9
-
Discussion 005c : échelle 0-40 V, affichage entre 00,000 et 39,999 V
Un voltmètre plage 0-100 V un peu plus simple à base de PIC 16F88 est également proposé à la page
Voltmètre 008.
Schéma 005b - Echelle 0-9
Un PIC de type 12F675, un registre à décallage CD4094,
quelques résistances et un afficheur, et voilà !
Principe général
Ce voltmètre dispose d'une
résolution très réduite, mais répond
à la demande : afficher un nombre compris entre 0 et 9, selon la
valeur d'une tension comprise entre 0 V et +10 V, avec changement du
chiffre affiché à chaque changement de la valeur
entière de la tension mesurée. En d'autres termes,
affichage d'un "1" pour toute valeur de tension comprise entre +1,00 V
et +1,99 V, affichage d'un "2" dès que la tension
d'entrée a dépassé +2,00 V et tant qu'elle reste
en-dessous de +3,00 V, etc. Ce montage fait donc appel à un
microcontrolleur de type 12F675, qui dans un petit boitier de 8 pattes
intègre un
convertisseur analogique / numérique (ADC en anglais ou CAN en
français) avec quatre
entrées analogiques multiplexées (les quatres
entrées peuvent être numérisées les unes
après les autres), mais dont une seule est exploitée ici.
Pas de surprise pour la partie affichage, j'utilise un bête
afficheur sept segments à cathode commune.
Acquisition / Affichage :
Acquisition d'une tension analogique comprise entre 0 V et +10 V (Vin
sur le schéma), et conversion en numérique en vue de
l'affichage d'une valeur correspondante :
- Vin comprise entre 0,00 V et 0,99 V => affichage chiffre "0"
- Vin comprise entre 1,00 V et 1,99 V => affichage chiffre "1"
- Vin comprise entre 2,00 V et 2,99 V => affichage chiffre "2"
...
- Vin comprise entre 8,00 V et 8,99 V => affichage chiffre "8"
- Vin comprise entre 9,00 V et 9,99 V => affichage chiffre "9"
Les acquisitions ont lieu toutes les 100 ms, et chacune dure
approximativement 5 ms, en tenant compte du temps pris pour la mise
à jour de l'affichage. Pour l'application d'origine, une
acquisition toute les secondes ou même toutes les minutes aurait
suffit. Mais comme cela ne mangeait pas de pain, j'ai
préféré conserver une fréquence de
raffraichissement de 10 Hz.
Tension mesurée
Elle doit être appliquée entre l'entrée Vin et la
masse. Comme le PIC est alimenté sous +5 V, un diviseur de
tension par deux, constitué de R8 et R9, est monté
à l'entrée du circuit, la pleine échelle du
convertisseur (CAN) est obtenue pour +10 V sur Vin, ce qui correspond
à +5 V sur l'entrée AN0 (broche 7) du PIC. Si vous
souhaitez disposer d'une pleine échelle pour une tension
d'entrée comprise entre 0 V et +5 V, il vous suffit de supprimer
la résistance R9. La diode zener D1 de 5,1 V permet de
protéger l'entrée du PIC contre toute tension
d'entrée Vin supérieure à 10,2 V, qui pourrait
s'avérer destructrice pour le composant (il y a bien une
protection interne au PIC, mais on n'est jamais trop prudent).
Attention, le PIC utilisé à besoin
d'une source de tension fournie sous faible impédance de sortie
(inférieure à 10 KO),
pour un fonctionnement correct. Le cas échant, vous pourrez
ajouter un étage suiveur à AOP entre la source de tension
à mesurer et l'entrée Vin.
Acquisition et affichage
Une fois l'acquisition de la tension d'entrée effectuée,
la valeur lue est "codée" afin de pouvoir être
envoyée sous forme sérielle à l'afficheur sept
segments. Le
registre à décallage CD4094 se charge simplement de la
conversion série / parallèle des données
fournies par le PIC. Vous pouvez vous demander pourquoi on n'utilise
pas ici un simple décodeur BCD / 7 segments de type CD4543 ou
CD4511, du fait de la présence de quatre lignes de sortie
disponibles sur le PIC. La réponse à cett
éventuelle question est simple : j'avais envie de changer un
peu (un internaute m'a heureusement remis sur les rails, voir page
Voltmètre 006).
On peut bien entendu adopter son circuit de décodage
préféré, moyennant bien entendu l'adaptation
(mineure) du logiciel du PIC pour obtenir un résultat
équivalent. Une autre raison, plus "scientifique", réside
dans l'extension du circuit avec un ou plusieurs autres registres à
décallage et un ou plusieurs autres afficheurs, avec le même nombre de
fils de commande. Essayez de multiplexer deux afficheurs avec ce PIC et
des décodeurs classiques qui réclament 4 bits de
commande... (n'oubliez pas que la borne GP3 du PIC ne peut pas faire
office de sortie).
Autres usages possibles
Celui qui m'a demandé ce montage avait un besoin simple : celui
de visualiser le niveau de remplissage d'une cuve, laquelle est
dotée d'un flotteur avec potentiomètre "alimenté"
en +10 V et monté en
diviseur
résistif,
fournissant une tension pouvant évoluer entre 0 V et +10 V en
fonction du taux de remplissage. Mais toute autre grandeur physique
telle que température, humidité,
pression, vitesse, tension, courant peut faire l'objet d'une indication
de "niveau", dès l'instant où l'on dispose du capteur
adéquat
et de son électronique associée permettant de convertir
ladite grandeur en une tension comprise entre 0 V et +10 V (voire entre
0 V et +5 V, cela sera spécifié plus loin dans le texte).
Schéma 005a - Echelle 00.0-99.9 V
Résolution et précision un peu plus interressante pour
mesurer une tension, en sortie d'une alim de labo ou sur une batterie
de voiture en cours de charge, par exemple.
Par rapport au 005b, pas beaucoup de changement, si ce n'est au niveau
du logiciel flashé dans le PIC. Côté matériel, ajout de deux registres
CD4094 et de deux
afficheurs sept segments, placés "en série" avec ce qui existait déjà.
Une résistance de 330 ohms relie directement au +5 V la broche "dp" du
second afficheur AFF2, afin d'allumer le point décimal entre unités et
dizièmes. Bien sûr si le point décimal en question est situé à droite
sur l'afficheur. S'il est positionné à gauche, c'est sur l'afficheur
des dizièmes AFF3 qu'il faudra câbler la résistance.
Remarque : si vous n'avez que
faire du chiffre des dizièmes de volts et qu'une précision au volt vous
convient, vous pouvez tout bêtement enlever U4 et l'afficheur AFF3
correspondant. Comme il n'est pas fait appel au multiplexage au niveau
des afficheurs, le retrait de l'un d'entre eux ne cause aucune gêne
visuelle.
Schéma 005ab - Echelle 0.00-9.99 V
Le
schéma 005ab qui suit n'est guère différent du schéma 005a, et j'aurais
pû me contenter d'indiquer les quelques différences sous forme de
texte. Mais ainsi, pas de doute ni de confusion possible.
Ce
schéma permet l'affichage d'une valeur comprise entre 0,00 V et 9,99 V,
pour une plage de mesure comprise entre 0 V et 10 V. La résolution
d'affichage est d'un centième de volt, avec une précision de 5 mV
environ (au niveau du CAN toujours) puisque la résolution du CAN du PIC est toujours de 10 bits
(1024 pas) sur une plage de 5 V. D'un point de vue modifications par
rapport au schéma 005a, cela se résume à :
- changer la valeur de la
résistance R22 du pont diviseur d'entrée; de 19 kO elle passe à 1 kO.
L'ancien taux d'atténuation de 20 (5 V à l'entrée du CAN pour une
tension à mesurer de 100 V) passe ainsi à 2 (5 V à l'entrée du CAN pour
une tension à mesurer de 10 V).
- changer la position du point
décimal des afficheurs : ce dernier doit être allumé entre le premier
afficheur et le second, et non plus entre le second et le troisième.
Pour
ce qui est du logiciel flashé dans le PIC, aucun changement,
puisque la plage de tension effective sur l'entrée du PIC reste
strictement la même, et seule la position du point décimal change. Si
cela peut vous rassurer, vous pouvez toutefois utiliser le code
logiciel 005ab, qui est une copie pure et simple du code logiciel 005a.
D'un point de vue logiciel ça ne change absolument rien, mais l'effet
psychologique n'est pas nul.
Discussion 005c - Echelle 00,000 à 39,999 V
Simple discussion, aucun schéma fonctionnel (testé) proposé.
Les
voltmètres proposés ci-avant disposent d'une résolution modeste quoique
suffisante pour bon nombre d'applications. Quand on veut aller plus
loin dans la précision, ça se corse. Deux aspects sont à prendre en
compte : la partie théorique qui dit que pour pouvoir descendre à telle
résolution il faut employer tel ou tel type de composant, et la partie
pratique qui impose des précautions accrues en terme de routage des
pistes du circuit imprimé et une bonne protection contre les parasites
extérieurs, afin de ne pas bêtement détruire ce que la théorie permet
si généreusement. Discutons ici (rapidement) du cas théorique, où je ne
rentrerai volontairement pas trop dans le détail car je le fais déjà en
un autre endroit que vous découvrirez dans un avenir plus ou moins
lointain.
La résolution théorique initiale d'un convertisseur A/N
dépend de son pas de quantification (lié au nombre de bits) et de sa
tension de référence. Par exemple :
- un convertisseur 8 bits (256 pas) avec une tension de référence de 4,096 V présente une résolution de 16,0 mV
- un convertisseur 8 bits (256 pas) avec une tension de référence de 1,024 V présente une résolution de 4,00 mV
- un convertisseur 10 bits (1024 pas) avec une tension de référence de 5 V présente une résolution de 4,88 mV
- un convertisseur 10 bits (1024 pas) avec une tension de référence de 2,048 V présente une résolution de 2,00 mV
- un convertisseur 12 bits (4096 pas) avec une tension de référence de 5 V présente une résolution de 1,22 mV
- un convertisseur 12 bits (4096 pas) avec une tension de référence de 4,096 V présente une résolution de 1,00 mV
- un convertisseur 12 bits (4096 pas) avec une tension de référence de 1,024 V présente une résolution de 0,25 mV
Si
on prend l'exemple du convertisseur 12 bits avec une référence de
tension haute de 4,096 V et qui offre une résolution de 1 mV, on se dit
que c'est gagné, puisqu'un tel convertisseur existe et se trouve
facilement et à bas prix. Oui mais... il ne vaut que pour une mesure de
tension allant jusqu'à 4,096 V maximum. Si on veut pouvoir mesurer une
tension plus élevée, il faut placer un pont diviseur en entrée, par
exemple dans un rapport de deux pour pouvoir mesurer jusqu'à 8 V. Mais
qui dit division par deux dit aussi nécessité de multiplier par deux la
résolution au niveau du convertisseur si on veut garder la même
résolution côté tension d'entrée. Utiliser une tension de référence de
valeur inférieure ne résoud pas le problème car si elle permet
effectivement une résolution plus élevée, elle diminue d'autant la
plage de la tension qu'on peut mesurer... et on revient au point de
départ. Dans notre cas, si on veut pouvoir mesurer une tension de 40 V
avec une résolution de 1 mV, il nous faut :
- diviser la tension
d'entrée par dix si la tension de référence est de 4,096 V ou 5 V (il
faudrait la diviser par 40 si la référence était de 1,024 V).
- disposer d'une résolution effective de 0,1 mV au niveau du convertisseur A/N (1 mV divisé par 10).
La
résolution augmentant dans un rapport de deux à chaque fois qu'on
dispose d'un bit supplémentaire au niveau du convertisseur A/N, un
rapide calcul nous indique qu'il faut utiliser un convertisseur 16
bits, car il faut 4 bits de plus (résolution 16 fois supérieure) pour
disposer d'une résolution de 1 mV maximum (3 bits supplémentaires
seraient trop juste puisqu'ils permettraient une résolution seulement 8
fois meilleure). Bien sûr, il n'est pas si compliqué que ça d'aller
choisir dans les catalogues fabricants le convertisseur qui va bien.
mais le premier constat est qu'on va avoir plus de mal à trouver un PIC
qui possède un convertisseur A/N intégré d'une telle résolution, et que
la solution la "plus simple" consiste à utiliser un PIC standard
quelconque avec un bon convertisseur externe dont la résolution est de
16 bits au minimum. Si je devais me lancer dans l'aventure, je crois
que j'essayerais un convertisseur de type MCP3421 (18 bits utilisable aussi en mode 16 bits).
Schéma 005c non fonctionnel, juste pour idée.
Prototype
Essais pratiques réalisés pour le voltmètre 005a avec ma platine de développement EasyPic4 et mon
afficheur LED 7 segments 005
dont j'ai volontairement retiré les 3 derniers CD4094 pour que les
trois afficheurs de droite restent éteints (ça choque moins).
Les
tests ont été réalisés en appliquant directement une tension variant
entre 0 V et +5 V à l'entrée du CAN du PIC, sans passer par le pont
diviseur de rapport 20. Le nombre affiché indique donc la tension qu'on
aurait eu si elle avait été vingt fois supérieure. Par exemple sur la
deuxième photo on lit la valeur 31,9 V, cela signifie que la tension
d'entrée appliquée sur la broche GP0/AN0 du PIC était de 1,6 V (31,9 /
20). Sur la deuxième photo, l'affichage de 52,3 V correspond à une
tension d'entrée de 2,6 V (52,3 / 20). Une valeur de 99,9 V aurait été
affichée pour une tension d'entrée proche de 5 V.
Anecdote
Le
dernier test m'a fait me gratter la tête pendant plus d'une heure, à
cause d'un disfonctionnement que je n'arrivais pas à comprendre. Les
afficheurs de la plaque d'affichage montraient alternativement soit la
bonne valeur soit n'importe quoi. Non pas de façon aléatoire, mais de
façon parfaitement régulière. Au début j'ai pensé à un mauvais contact,
mais il ne s'agissait pas de ça; le problème restait trop régulier même
en bougeant la carte. J'ai ensuite suspecté la qualité de
l'alimentation secteur utilisée pour la seule section d'affichage.
Après vérification de la tension continue (+5,1 V) et de la valeur de
l'ondulation résiduelle (15 mV), conclusion s'imposait que le problème
venait d'ailleurs. J'ai revérifié le logiciel du PIC, rien ne me
semblait anormal mais comme on ne sait jamais, j'ai procédé à quelques
retouches, histoire de voir (ralentissement du temps de transfert des
données du PIC vers les CD4094). Rien à faire, toujours cette
alternance entre valeur correcte et valeur erronnée - les segments
des afficheurs ne montraient même pas des chiffres, c'était vraiment
n'importe quoi. Je me suis alors dit que j'avais peut-être inversé deux
fils entre la platine EasyPic4 et la platine d'affichage, genre
inversion des lignes Data et Clock. Mais non, là aussi tout était
correct. Mesure des tensions sur les lignes Data, Clock et Strobe au
niveau de la carte d'affichage : diantre, je mesure des valeurs
négatives par rapport à la masse ! Mesure des tensions sur les
lignes Data, Clock et Strobe au niveau de la platine EasyPic4 : tout
est OK. Hum... vous comprenez maintenant pourquoi je me grattais la
tête... Et puis soudain le déclic ! J'avais simplement oublié de relier
entre elles masse de la EasyPic4 et masse de la platine d'affichage.
Après correction, tout allait parfaitement. Reste que je suis tout de
même sacrément surpris que sans référence correcte de masse, on
arrivait à lire une fois sur deux la valeur attendue, le seul lien
physique entre les deux cartes étant assuré par les seuls fil Data,
Clock et Strobe... Ah, les mystères de l'électronique !
Fichiers binaires et codes source
Les fichiers binaires compilés (*.hex), ainsi que les codes sources
langage MikroPascal (V8.3 ou V5.0 pro) sont disponibles dans l'archive suivante.
Voltmètre 005 - Pour PIC 12F675
- Cette archive comporte les quatre projets suivants :
- electronique_voltmetre_005a.ppp - pour voltmètre 3 digits - 00,0 V à 99,9 V - Source MikroPascal V8.3 - (07/02/2010)
- electronique_voltmetre_005a_12f675.mppi - pour voltmètre 3 digits - 00,0 V à 99,9 V - Source MikroPascal V5.0 Pro - (09/10/2011)
- electronique_voltmetre_005b.ppp - pour voltmètre 1 digit - 0 à 9 - Source MikroPascal V8.3 - (07/02/2010)
- electronique_voltmetre_005ab.ppp - pour voltmètre 3 digits - 0,00 V à 9,99 V - Source MikroPascal V8.3 - (14/03/2010)
Les
deux projets ***_005a.ppp et ***_005_12f675.mppi et fichiers compilés
correspondants (*.hex) sont fonctionnellement identiques, mais je conseille
l'utilisation de la dernière version car je ne maintiendrai plus
l'ancienne.
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC - Sources.
Circuit(s) imprimé(s)
Réalisé en double face pour le voltmètre 005a, commencé en simple face pour le voltmètre 005b.
Oh le vilain travail entièrement réalisé avec l'autorouteur !
Historique
25/12/2011- Ajout discussion voltmètre 005c échelle 0-40 V, affichage entre 00,000 et 39,999 V
09/10/2011- Portage logiciel voltmètre 005a de MikroPascal V8.3 vers MikroPascal V5.0 Pro.
- Ajout typon voltmètre 005a.
07/02/2010
- Correction logiciel PIC des deux versions 005a et 005b,
l'initialisation du module ADC n'était pas correcte. Merci
à Youcef d'avoir pris le temps de m'écrire pour me
signaler cette erreur.