Introduction
La version « V1-UNO » du coupleur était encombrante et nécessitait une alimentation externe. Dans certains cas, il pouvait donc être difficile de l'installer auprès du compteur. Cette nouvelle version est beaucoup plus compacte (40 mm x 30 mm) et peut se loger derrière le capot jaune/vert du compteur Linky.
La version « V2-ATTiny841 » repose sur la mise en œuvre d’un « Wattuino nanite 841 » (en remplacement de l’arduino UNO utilisé dans la version « V1-UNO » ) ainsi que sur l’exploitation de l’alimentation de la téléinformation disponible entre les bornes I1 et A du compteur Linky.
Le principe général de fonctionnement reste très similaire à celui de la version « V1 – UNO » et n’est pas rappelé ci-après.
La plateforme
Il s’agit du « Wattuino nanite 841 » commercialisé par la société Watterott (www.watterott.com).
Cette carte compacte de 24.13 mm x 10.16 mm intègre un port MicroUSB, un Bootloader USB (Micronucleus), la circuiterie de reset, une LED de signalisation ainsi qu’un « ATtiny 841 » pourvu de 2 UART.
http://www.watterott.com/en/Wattuino-Nanite841
L’IDE arduino peut être utilisé pour réaliser les développements moyennant l’installation de nouveaux pilotes et quelques bibliothèques spécifiques. La marche à suivre est décrite sur le site de Watterott.
Cette carte est calibrée en usine pour fonctionner sous 3,3 volts mais peut fonctionner également sous 5 volts. Lors des phases de développement elle est connectée au PC via le port microUSB et se trouve donc alimentée en 5 volts. Sous 5 volts, l’oscillateur interne de l’ATtiny841 ne bat plus à la bonne fréquence et les transmissions séries ainsi que les timers fonctionneront très mal si le microcontrôleur n’est pas correctement calibré pour cette tension de fonctionnement. Cette calibration s’effectue en jouant sur la valeur du registre OSCCAL0 de l’ATtiny841. Vous trouverez sur Internet plusieurs tutoriels pour réaliser cette calibration, de la plus manuelle à la plus automatique.
Une autre méthode consiste à réaliser un petit programme qui génère un signal carré d’une fréquence raisonnable vis-à-vis des capacités de votre fréquencemètre puis à mesurer cette fréquence. Par essais successifs, en augmentant ou diminuant la valeur du registre OSCCAL0, vous allez déterminer une valeur qui permet de générer un signal ayant une fréquence très proche de la valeur théorique que vous vous êtes fixée. Vous tenez alors votre valeur OSCCAL0, qui n’est valable que pour la carte que vous venez de calibrer.
Si vous n’avez pas de multimètre évolué vous pouvez utiliser un oscilloscope logiciel qui s’appuie sur la carte son de votre PC (Soundcard Oscilloscope par exemple : https://www.zeitnitz.eu/scope_en). Dans ce cas, veillez à rester en dessous de 20 khz (bande passante approximative de votre carte son). Visez 10 khz, ce sera très bien.
Architecture globale
La solution est structurée autour de 4 blocs fonctionnels :
un bloc d’alimentation (un pont de GRAETZ),
un bloc d’acquisition du signal (basé sur un optocoupleur),
un bloc de mise en forme du signal de sortie (réalisé par le Wattuino nanite 841),
un bloc de traitement (Wattuino nanite 841).
La suite du document décrit les caractéristiques et spécificités de chaque bloc et précise certains points qui restaient encore nébuleux pour l’auteur lors de la mise en service de la « V1-UNO », notamment celui de la mise en forme du signal de sortie.
Schéma électrique
Composants
1 x breadboard
N x jumpers, des dominos, du cable...
1 x Wattuino nanite 841
1 x résistance 1,8 kOhms (attention le schéma au-dessus n'est pas à jour)
1 x résistance 4,7 kOhms
1 x optocoupleur : SFH620a-3
1 x condensateur tantale AVX TAP106M035SCS sortie radiale 2.5 mm 10 µF 35 V/DC 20 %
1 x condensateur tantale AVX TAP475M035SCS sortie radiale 2.5 mm 4.7 µF 35 V/DC 20 %
1 x pont redresseur : PanJit DI104 400 V 1 A Monophasé DIP-4
1 x régulateur de tension linéaire STMicroelectronics L78L33ACZ TO-92-3 Positif Fixe 100 mA
1 x barrette femelle BKL Electronic 10120836 - rangées: 1 - pôles par rangée: 40
1 x couvercle de boîte de pizza ;-)
Le code de la version 1.00 :
Le code de la version 1.01 :
- Ajout d'un filtrage élémentaire des données reçues du compteur Linky suite à plusieurs anomalies constatées et qui ont disparues sans raison particulière.
- Prise en compte du débordement de compteur.
Je suspecte des problèmes de mise à jour de firmware sur mon compteur mais malgrès plusieurs semaines de surveillance de la téléinfo du Linky je n'ai depuis rien noté d'anormal après cette période troublée.
Bloc alimentation
Entre ses bornes I1 et A, l’interface de téléinformation du compteur Linky fourni au client une alimentation électrique délivrant une tension de 6 Veff sous la forme d’un signal alternatif à 50 khz (50 kilo hertz). La puissance fournie est au minimum de 130 mW sur une charge résistive.
Sous 3.3 volts, l’ATtiny841 consomme moins de 5 mA soit 16 mW. Sous 5.5 volts, on atteint les 9 mA soit 45 mW.
Il est donc possible d’utiliser cette source d’énergie à condition que la puissance consommée par les éléments additionnels (bloc alimentation, bloc d’acquisition, bloc de mise en forme) ne soit pas trop excessive.
La solution présentée fait appel à un pont redresseur de type GRAETZ (double alternance) et un régulateur de tension de 3.3 volts. La consommation électrique globale du montage provoque une chute de tension assez significative en amont du régulateur de tension mais celui-ci évolue néanmoins dans sa plage de fonctionnement nominale.
Sous 5 volts, le même montage fonctionne également mais le régulateur de tension se retrouve légèrement en dessous de sa plage de fonctionnement nominale. Pour revenir dans une plage de fonctionnement acceptable il est toutefois possible de mettre en œuvre non pas un pont de GRAETZ mais un doubleur de LATOUR ou de SCHENKEL. Pas de miracle mais un petit plus qui permet de se placer dans une zone de fonctionnement plus correcte.
Avertissement : pour effectuer des mesures alternatives à 50 khz votre multimètre doit avoir une large bande passante ( > à 50 khz) et mesurer une valeur efficace vraie (True RMS). Si cela n'est pas le cas, vous ne lirez rien, sauf les mesures en tension continue après filtrage !!!!
Bloc acquisition du signal
Il est identique à la solution précédente au bémol près des valeurs des résistances ainsi que de la suppression d’une résistance qui avait été ajoutée pour palier l’instabilité de l’alimentation 3.3 volts d’un UNO capricieux.
Bloc de mise en forme du signal de sortie
Pour transmettre un zéro logique, la version « V1-UNO » génère un signal périodique carré à 50 khz, de rapport cyclique 50%, d’amplitude 5 volts et ceci pendant la durée de transmission du bit à 1200 bit/s. En dessous de 4,4 volts de tension crête, le montage ne fonctionne plus ! Pour fonctionner sous 3,3 volts, il faut donc revisiter le bloc de mise en forme du signal.
N’ayant malheureusement pas accès aux schémas du module ConsoSpy, c’est par observations, hypothèses et déductions qu’il a fallu procéder. Les « indices » suivants ont été pris en compte, au cours du temps :
1-Le sens de branchement de la sortie de l’UNO sur les entrées du ConsoSpy est finalement sans importance (en contradiction avec ce qui est écrit dans l’article précédent) comme constaté suite à une erreur de manipulation).
2-Envoyer un signal TTL de 5 volts non modulé, en lieu et place d’un signal modulé, ne fonctionne pas.
3- La spécification ENEDIS indique que la valeur crête du signal disponible entre les bornes I1 et I2 du compteur Linky peut descendre à 1,2 volts et que l’équipement client doit être en mesure de décoder les informations jusqu’à 0,8 volts…. Pour transmettre un 0 logique, le coupleur (émetteur d’information vis du ConsoSpy) est donc tenu de générer un signal dont la valeur crête est comprise entre 1,2 et 5 volts. Le récepteur d’information doit être capable de décoder le signal pour une valeur crête comprise entre 0,8 et 5 volts.
4-Un examen visuel de la zone dans laquelle sont soudés les fils qui proviennent du compteur de production, laisse apparaitre quelques composants potentiellement pertinents. Après réflexions et éliminations la liste la plus pertinente est la suivante : un optocoupleur, une diode, 2 résistances, 1 condensateur.
Que peut-on concevoir qui puisse expliquer et conforter les indices recueillis ???
Le schéma est très vraisemblablement basé sur un « clamper circuit ». Voir liens ci-dessous :
- https://en.wikipedia.org/wiki/Clamper_(electronics)
- http://www.circuitstoday.com/diode-clamping-circuits
Indice 1 :
Avec la « V1-UNO » nous émettons un signal carré d’amplitude 5 volts. Le circuit ci-dessus, bien que n’exploitant pas véritablement dans ce cas l’effet « clamp » reste toutefois fonctionnel car le niveau de tension est suffisant pour qu’à chaque créneau positif, suffisamment d’énergie puisse traverser l’optocoupleur afin qu’une impulsion soit générée en sortie. Dans ce cas la diode est bloquée lors du créneau positif. Lors du palier à 0 volt, le condensateur se décharge via l’alimentation et la diode qui est alors passante. L’optocoupleur est alors éteint.
Lorsque nous inversons le branchement, la diode est passante à chaque créneau positif et le condensateur se charge. Lorsque la tension d’entrée s’annule, le condensateur se décharge au travers de l’optocoupleur ce qui génère une impulsion en sortie.
Indice 2 :
Si en lieu et place d’une modulation ASK nous envoyons un niveau haut pour émettre un 0 logique pendant la durée d’un bit nous ne générons qu’une seule impulsion en sortie au lieu des 41,66 impulsions attendues. Cette impulsion est générée sur le front montant ou sur le front descendant selon la manière dont le branchement a été effectué.
Indice 3 :
Par construction, ce circuit étend la plage de tension d’entrée utilisable en doublant ou presque le niveau de tension crête utilisable. L’optocoupleur, en présence d’un signal alternatif ne va réagir que sur les alternances positives du signal d’entrée. Le module ConsoSpy semble ne pas pouvoir admettre des signaux aussi faibles que 0,8 volts crête mais doit plutôt approcher les 2,2 volts crête en alternatifs. Si nous émettons des créneaux de 3,3 volts équivalant à une tension de 1,65 volts crête le montage, en l’état, ne peut donc effectivement pas fonctionner.
Pour fonctionner sous 3,3 volts nous n’avons donc pas d’autre solution que de simuler un signal alternatif de sorte que celui-ci soit rehaussé via le « clamper circuit ».
Comme la sortie timer ne délivre qu’une tension positive, cette nouvelle solution implémente un mécanisme de commutation de polarité en faisant travailler conjointement le signal de sortie du timer avec son inverse. Ceci permet de faire fonctionner le circuit de clamping comme si nous avions un signal alternatif. Ce faisant, nous n’avons pas besoin de composant externe additionnel, il faut juste faire évoluer le mode de fonctionnement du timer et exploiter une sortie supplémentaire de l’ATtiny841.
Pour les curieux et/ou les perspicaces il est bien sûr possible de n’utiliser qu’une seule sortie timer moyennant quelques composants externes pour arriver au même résultat.
Vous trouverez ci-dessous 2 exemples qui ont été testés.
Bloc de traitement
Dans son principe le programme est identique à la version précédente. Il a cependant été adapté au nouveau contexte pour s’accommoder des contraintes suivantes :
passage à 3,3 volts : modification de la gestion du timer pour disposer du signal de sortie sur une patte et de son inverse sur une autre.
passage à 8 Mhz : modification de quelques paramètres de configuration du timer.
passage à 2 UART : suppression de la librairie AltSoftSerial désormais devenue inutile.
passage sur ATtiny841 : optimisation du code pour tenir dans les 512 octets de RAM au lieu des 2 ko sur UNO.
Le code a été développé pour fonctionner avec l’Arduino Core.
Le programme occupe 5458 octets sur les 6500 disponibles et utilise 239 octets de RAM sur les 512 octets disponibles pour gérer les variables statiques.
Circuit imprimé
Il a été réalisée avec TCI4-4 et imprimé par OSH Park.
Attention : La sérigraphie du redresseur double alternance n'est pas bonne !!!! Ni dans le ZIP, ni sur les images qui suivent. Il faut lui faire faire une rotation 180°. Zoomer sur la photo du dispositif en situation.
Problèmes rencontrés
1-Le circuit était sensé être du simple face. Ayant pourtant suivi avec attention les directives du site OSH pour du simple face, je me suis retrouvé avec du DOUBLE simple face. Ce n'était pas le résultat attendu mais cela ne gène en rien le fonctionnement du circuit. Vous avez les mêmes pistes sur les deux faces.
2-Un petit bout de piste situé entre I2 et la résistance était manquant.... A réparer avec une surcharge de soudure.
3-Pour que les fichiers GERBER soient acceptés par OSH il faut remplacer dans le fichier de perçage (EXCELLON) :
T1C,1.200 par T1C1.200
T2C,0.800 par T1C1.200
T3C,2.500 par T3C2.500
4-Suivre les directives des FAQ du site OSH pour faire réaliser du simple face, qui arrivera en double simple face.
ps : si vous êtes familier d'EAGLE ou autre, préferez EAGLE ou autre ce sera sans doute plus simple.
Gerber viewer : https://sourceforge.net/projects/gerbv/
Le kit .... à portée d'un clic .... ci-dessous avec le fichier TCI4-4
Conclusion
Le prototype sur breadboard a fonctionné correctement sur sa boite à pizza pendant plusieurs semaines.
Pas d'anomalie détectée sauf le, 7 mai 2018, après l'avoir un peu brutalement retourné pour prendre une des photos de cet article. Deux valeurs anormales que j'ai pu modifier avec un éditeur SQL. J'ai ensuite effectué une surveillance rapprochée pendant plusieurs semaines sans détecter une seule anomalie. La version 1.01 du code a émergé pendant cette période.
Que vous vous lanciez dans l'aventure ou pas, vos commentaires, contributions et retours d'expérience sont tous les bienvenus !!!!
23/10/2023 : Le coupleur en version 1.01 fonctionne toujours. Aucun problème rencontré à ce jour.
ANNEXE - Le prototype en situation