Electronique > Réalisations > Affichage / mesures > Voltmètre(s) 005

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.

voltmetre_005a_pcb_3d_a voltmetre_005b_pcb_3d_a

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à !

voltmetre_005

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.

electronique_voltmetre_005a

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.

voltmetre_005ab

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

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

voltmetre_005a_proto_001a voltmetre_005a_proto_001b voltmetre_005a_proto_001c

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

voltmetre_005a_pcb_composants

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.