Compteur de consommation électrique

Le but

On trouve sur le marché des compteurs de consommation électrique. Ces compteurs se présentent sous la forme d'un module à insérer dans un tableau électrique. Ils permettent l'affichage de la consommation sur un afficheur LCD, mais ils peuvent aussi fournir l'information de consommation sous forme d'une impulsion tous les 0,5 W/h.

Je propose ici la réalisation d'un montage permettant de récupérer ces impulsions et de fournir le total à un système complexe (un PC) qui sera capable de tracer des courbes et faire des statistiques.

Le compteur

Le compteur que j'utilise est de la marque Voltcraft. On le trouve chez Conrad. Le compteur utilise des normes Allemandes que j'ai du mal a trouver sur le net. Dans la pratique ce n'est pas bien grave, car l'interfaçage est plutôt simple. Chaque fois que le compteur enregistre une consommation de 0.5W/h, il envoi une impulsion de 30ms au travers d'un optocoupleur.

Les contraintes

  • Le circuit final doit être assez petit pour plus facilement placé dans un tableau électrique.
  • Le prix du montage doit rester abordable
  • Le circuit doit être évolutif et accepter au moins 8 compteurs. C'est la demande du "client"
  • Le but étant de fournir les informations de consommation à un PC, il faut utiliser un bus de communication présent sur la plupart des machines et proposant des solutions de mise en œuvre pas trop complexes.

Les solutions retenues

Pour répondre au problème de taille, il vaut mieux s'orienter vers un microcontrôleur. Il fournira un maximum d'I/O dans un minimum de place et proposera des protocoles de communications intégrés. Pour que le coût reste accessible, il est intéressant de s'orienter vers les microcontrôleurs PIC. Ils ne sont pas cher à l'achat et même le programmateur de PIC est bon marché. Pour le protocole de communication évolutif et que l'on trouve fréquemment dans les PC, l'I²C est un bon client. Bien que l'on trouve plus souvent un port série ou un port parallèle sur un PC, il n'est pas intéressant de les utiliser car on sera limité à un seul montage de collecte de compteurs par PC. En revanche le protocole I²C permet de connecter plusieurs compteurs d'impulsions.

Le PIC16F88 intègre 12 I/O et un bus I²C esclave. Il intègre un oscillateur interne qui évite d'ajouter un quartz. Ses I/O fournissent suffisamment de courant pour piloter des LEDs, il n'y a donc pas besoin d'ajouter de transistors. Et finalement on le trouve au format DIL, plus facile à souder.

Datasheet du pic16f88

Pour le protocole de communication, on ferra en sorte que le PIC émule une eeprom I²C de type 24c02. Le protocole est simple à mettre en œuvre et il existe tout un tas de drivers qui savent s'adresser à ces composants. Il faudra pouvoir configurer l'adresse I²C pour pouvoir chaîner plusieurs modules.

Datasheet de l'eeprom

Les I/O pour relever les compteurs seront multiplexés pour économiser au maximum le nombre de ports du PIC à utiliser.

Le schéma

L'affectation des I/O du pic est faite tout d'abord en fonction des capacités des pins (par exemple l'I²C est forcément affecté aux pins 7 at 10) et ensuite en fonction de la réalisation du circuit imprimé sachant qu'il est préférable de faire un simple face car c'est plus facile à réaliser.

Le montage sera alimenté via le connecteur de l'I²C, on trouve généralement dans les PC des broches d'alimentation avec le bus I²C. Le port B est préféré pour les lignes de la matrice car il intègre des résistances de pull-up, cela toujours 4 résistances de moins à caser sur le circuit imprimé. On retrouve les signaux A0 à A2 qui permettent de positionner l'adresse I²C. Il a fallu ajouter des résistances de tirage, car ces ports là n'en disposent pas en interne. et finalement, les signaux AN0 à 2 sont disponible pour des extensions telles que d'autres colonnes de compteurs à relever ou des LEDs pour le debug.

Les lignes X0 à 3 et Y0 à 1 permettent de scanner les compteurs. Comme les compteurs fournissent une interface à base d'optocoupleur, on est sûr de ne pas avoir de problème électrique, et on est s'assure aussi que le scan en matrice fonctionnera bien car on aura pas de retour entre deux lignes d'un même matrice si l'on à deux impulsion simultanée. On aurait eu ce problème avec des commutateur simples.

Détails d'un scan de deux impulsions simultanées.

On peut noter deux connecteurs pour le bus I²C. Comme l'I²C est un bus série, le second connecteur permet de chaîner un second montage releveur de compteurs. De cette manière, l'interfaçage de plusieurs compteur sera plus propre et plus simple.

Finalement, il reste 3 leds. LD3 est juste le témoin d'alimentation. Elle permet d'indiquer à l'utilisateur un défaut d'alimentation. LD1 sera utiliser pour indiquer une activité sur le bus I²C et LD2 sera utiliser pour indiquer l'enregistrement d'une impulsion en provenance d'un des 8 compteurs.

L'implantation des composants

L'implantation des composants
Le tracé du circuit
Le circuit et les composants

Le programme

L'algorithme est assez simple, il est basé uniquement sur des interruptions. Le pic est réveillé toutes les millisecondes et sur chaque paquet I²C reçu ou à émettre.

Chaque milliseconde, on va commencer par incrementer le compteur de millisecondes. On va ensuite scanner les ports pour savoir si l'on a une impulsion. Si l'impulsion à été déjà vue on l'ignore, sinon, on la comptabilise et on calcule le nombre de millisecondes écoulées depuis la dernière impulsion sur ce même port.

Lorsque l'on se fait réveiller pour une IRQ I²C, on peut avoir une lecture ou une écriture. Si c'est une écriture, on mémorise l'adresse que le master souhaitera lire, si c'est un lecture, on renvoie la donnée présente à l'adresse demandée précédemment par le master, et on fini par incrémenté cette adresse.

Le montage réalisé

Les fichiers du projet

L'archive du projet. Contient les fichiers assembleur ainsi que le schéma et le board au format Eagle Le tracé du circuit imprimé