Présentation

TIC2UART est une interface matérielle permettant de connecter la sortie TIC (Télé-Information Client) des compteurs électroniques Enedis (par exemple le Linky) à un récepteur UART LVTTL (par exemple le port série d’un SBC tel qu’un Raspberry Pi ou d’un microcontrôleur), et de recupérer ainsi les informations transmises par le compteur.

(Pour le décodage des trames TIC, voir tic2json).

Note: This project is documented in French because to the best of my knowledge, the TIC protocol on which this project is based is only found in electric meters in France. Should evidence to the contrary arise, I will happily translate this page to English :)

Licence

Avertissement

Les informations et méthodes ici décrites sont fournies “telles-quelles” SANS GARANTIE D’AUCUNE SORTE, IMPLICITE OU EXPLICITE. L’utilisation des concepts, examples et informations se fait à vos risques et périls. Il peut y avoir des erreurs ou des imprécisions qui pourrait endommager vos appareils. Procédez avec prudence, et bien qu’il soit très improbable que des accidents surviennent en suivant les avis ou procédures décrites dans ce document, l’auteur n’endosse aucune responsabilité pour tout dommage prétendument causé en ce faisant.

Objectifs

Les objectifs principaux de ce projets sont :

  • Le montage doit être sûr, simple et fiable
  • Le montage doit pouvoir gérer toutes les versions existantes de bus TIC (compteurs historiques et Linky)
  • Le montage doit être économique (en pièces et en énergie consommée)
  • Le montage doit être facile à assembler

Schéma

Voici le schéma du montage actuel :

schematic

Explication du schéma

Le schéma est relativement simple, s’appuyant sur le strict minimum de composants. Il se décompose en 3 blocs de fonctions distincts, résumés ici :

  1. En entrée, les bornes I1 et I2 de la sortie TIC du compteur sont raccordées au connecteur TIC du circuit (ce connecteur n’est pas polarisé) ; l’optocoupleur OK1 assure l’isolation galvanique entre la sortie TIC et le reste du montage. Suit un premier trigger de Schmitt IC1F permettant d’une part de ne pas charger la sortie de l’optocoupleur, tout en obtenant des fronts bien droits pour l’étage suivant avec une impédance de sortie très faible.
  2. L’étage suivant est un simple détecteur d’enveloppe formé par D1, C1 et R3, nécessaire pour supprimer totalement la porteuse du signal d’entrée. Il est suivi par un second trigger de Schmitt IC1C afin d’isoler le détecteur de la charge éventuelle en sortie du circuit et de garantir des signaux de sortie parfaitement carrés et au bon niveau logique.
  3. En sens inverse, R4, IC1D et IC1E permettent de contrôler l’activation du circuit: le signal EN permet de maintenir la sortie TX à zéro quelque soit le signal d’entrée.

Plus en détail

La documentation technique Enedis définit les caractéristiques électriques du bus de données TIC. En particulier, les éléments suivants qui doivent être validés par le récepteur (le montage) sont importants pour la bonne compréhension des choix techniques :

  • L’impédance résistive présentée à l’émetteur (le compteur) doit être comprise entre 500Ω et 2000Ω
  • Le signal est reçu sur porteuse à 50kHz +/- 3%, modulation d’amplitude pour le codage des bits transmis (logique négative: porteuse présente pour “0”, absente pour “1”) :
    • Niveau maximum de l’enveloppe pour la transmission d’un “1” Vevh1 = 0,4V
    • Niveau minimum de l’enveloppe pour la transmission d’un “0” Vevl0 = 0,8V
    • Niveau maximum de l’enveloppe pour la transmission d’un “0” Vevh0 = 5V
    • Temps bit égal pour bits “0” et “1” (le récepteur doit fonctionner avec un temps bit de 50µs à 9600 bauds)
  • Débit de transmission: 1200 bauds +/- 1% en mode historique, 9600 bauds +/- 1% en mode standard
  • Insensibilité à un signal de fréquence entre 1kHz et 1MHz de valeur crête égale à 0,1V
  • Insensibilité à une distorsion harmonique de 50%
  • Insensibilité à une impulsion de 20V de durée 5 µs
  • Robustesse à l’application permanente de 230V, 50Hz sur le bus TIC

Ces spécifications prises au pied de la lettre limitent toutefois les possibilités techniques, aussi pour réduire les coûts d’implémentation et puisque ce montage n’a pas vocation à être utilisé dans des conditions “critiques” de fonctionnement, il a été implicitement admis d’appliquer une marge sur le signal d’entrée, dans les bornes fixées par la documentation technique mais néanmois non strictement conforme : ainsi, le fonctionnement du montage n’est donc assuré que pour une valeur efficace minimum de l’enveloppe Vevl0 d’environ 2,5V (au lieu de 0,8V). Cette condition semble satisfaite dans la pratique.

1. Entrée

Les spécifications du signal précisent les marges de bruit ainsi que le niveau d’isolation galvanique attendu. Compte tenu de ce dernier point, le choix d’un optocoupleur est une solution efficace et économique. Comme le signal d’entrée est transmis sur une porteuse en courant altnernatif, un modèle non polarisé permet d’utiliser les 2 alternances de la porteuse pour contrôler le photo-transistor (équivalent d’un redressement double alternance). La problématique de l’immunité au bruit est traitée par l’usage de triggers de Schmitt.

Idéalement un optocoupleur rapide est souhaitable, mais nous sommes ici contraints par la faiblesse du courant d’entrée disponible : sur la base d’une impédance d’entrée de 1kΩ (conforme à la spécification avec une marge raisonnable), pour une tension efficace minimum de 2,5V en signal haut, en tenant compte d’une chute de tension typique VF de l’entrée de l’optocoupleur de 1,2V, le courant efficace IF résultant est de l’ordre de 1mA.

À ce niveau, le ratio de transfert de courant (CTR) du FOD814A est spécifié entre 50% et 150% (pour un VCE de 5V, alors que nous opérons à 3,3V). Autrement dit, dans le pire des cas, le courant disponible en sortie de l’optocoupleur sera de l’ordre de 500µA. Pour garantir le basculement du trigger de Schmitt le voltage du front descendant doit passer sous 0,6V (cas le plus défavorable du 74LV14), soit une chute de tension aux bornes de R2 de 2,7V. Dans ces conditions, il faudrait donc que R2 ait au minimum une valeur de 5,4kΩ.

Malheureusement, plus la valeur de R2 est élevé et plus le phototransistor approche d’un fonctionnement en saturation (surtout si on considère les bornes hautes du CTR et de Vevh0), et plus l’impact sur son temps d’extinction (i.e. la “pente” du front ascendant dans une configuration en émetteur commun comme ici) est négatif. Cette page n’a pas vocation à donner un cours sur les spécificités du fonctionnement d’un optocoupleur, mais le lecteur averti et anglophone pourra se référer à cette note d’application et à celle-ci. La valeur retenue dans la série standard a donc été choisie à 4,7kΩ, un ajustement de plus.

Note: c’est aussi la raison pour laquelle le FOD814A a été retenu: la plage de CTR pour cette référence est moins large que pour le F0D814 voire le SFH620A-3, ce qui limite les écarts d’un composant à l’autre.

Quoi qu’il en soit, ces optocoupleurs ne sont pas suffisamment rapides dans ces conditions d’utilisation pour transmettre correctement la porteuse, ils procèdent donc indirectement déjà à une première intégration du signal. Toutefois, les oscillations résiduelles de la porteuse sont présentes sur le front descendant et dans l’hypothèse où leur amplitude excèderait l’hysteresis d’IC1F, elles doivent être éliminées. C’est le rôle de l’étage suivant.

Note: Précisons que les montages qui interfacent directement la sortie de l’optocoupleur à l’entrée RX d’un UART, ou via un simple transistor MOSFET – comme on le voit sur beaucoup de montages proposés sur Internet – sont techniquement incorrects car d’une part ils transmettront ces oscillations parasites et d’autre part les fronts du signal ne seront pas parfaitement carrés, ce qui peut générer des erreurs de transmission.

2. Détecteur d’enveloppe

Le rôle de cet étage est d’intégrer la porteuse pour ne conserver que le signal modulé.

La constante de temps retenue pour le détecteur d’enveloppe permet d’une part de s’assurer que les éventuelles oscillations dues à la porteuse (dont la période serait de 10µs à ce point du circuit puisque l’optocoupleur passe les deux alternances) ne provoquent pas des faux déclenchement de IC1C, tout en étant suffisamment faible pour garantir une réponse correcte au temps bit.

Dans la version standard qui opère à 9600 bauds, la marge est très faible puisque le document technique spécifie un temps bit minimal de 50µs. Une constante de 22µs a été retenue, étant admis qu’elle devrait pouvoir être ramenée à 10µs si besoin sans altérer le fonctionnement du détecteur d’enveloppe. Pour garantir une constance de fonctionnement malgré les changements de température, C1 devra être de bonne précision (+/- 10% max) et de type C0G. La faible impédance de sortie de l’étage précédent (IC1F) assure une charge proche de l’idéal du condensateur.

Dans l’hypothèse où la totalité de la porteuse serait présente en entrée de cet étage, les valeurs ici choisies doivent garantir son intégration totale. Ceci permettra le cas échéant de revoir le choix de l’optocoupleur d’entrée.

Note: Signalons ici l’excellente alternative technique (mais bien plus onéreuse) du montage proposé par Bernard Lefrançois. Ce montage (adapté au débit historique, 1200 bauds) est techniquement supérieur, mais son surcout me paraît injustifié au regard des performances de la solution ici proposée, qui s’adapte de plus aux deux débits existants (1200 et 9600 bauds) avec les mêmes composants.

Enfin IC1C isole le détecteur et garantit des fronts propres, au bon niveau logique et sans oscillation parasite en sortie TX, apte à être connecté à l’entrée RX d’un UART. La double inversion effectuée par IC1F et IC1C combinée à l’inversion du montage émetteur commun de l’optocoupleur ramène le signal de sortie dans sa logique native (positive), conforme au fonctionnement d’un UART LVTTL.

3. Contrôle d’état

Dans l’hypothèse où il ne serait pas souhaitable que le circuit transmette tout signal reçu en entrée dès sa mise sous tension (par exemple s’il est raccordé à un port série qui est également utilisé par le bootloader du système hôte, et qui pourrait être perturbé par les messages reçus), un contrôle d’état basique est implémenté comme suit:

  • Si EN est un signal actif haut, alors R4 est présente dans le montage final (elle assure un pull-down de l’entrée d’IC1D), le jumper JMPEN est ponté sur sa position ◼︎ (H sur le PCB), et le collecteur de l’optocoupleur n’est alors alimenté (et la sortie TX active) que si EN est à l’état logique haut. Dans le cas contraire la sortie TX reste à l’état logique bas.

  • Si EN est un signal actif bas et qu’il dispose de son propre pull-up, alors R4 n’est pas présente dans le montage, JMPEN est ponté sur l’autre position (L sur le PCB) et le collecteur de l’optocoupleur n’est alimenté (et la sortie TX active) que si EN est à l’état logique bas. Dans le cas contraire la sortie TX reste à l’état logique bas.

  • Enfin, si l’utilisation du signal EN n’est pas souhaitée (sortie toujours active), alors R4 est présente dans le montage (ou remplacée par un simple jumper) et JMPEN est ponté sur la position L.

La valeur de R4 est retenue pour limiter le nombre de valeurs de résistances différentes sur le circuit (c’est la même que celle de R3), elle assure un pull-down faible qui limite le courant consommé sur ce signal.

Dernières observations

La consommation globale du circuit est très faible (quelques mA), et est dominée par l’optocoupleur.

La famille LV a été choisie pour le 7414 car elle est optimisée pour le fonctionnement sous 3,3V, tout en tolérant éventuellement un fonctionnement sous 5V (utile si l’UART hôte requiert ce niveau logique: l’alimentation 3,3V du circuit pourrait être alors simplement remplacée par 5V). Le montage est présumé également compatible avec le 74LVC14 et le 74LVT14 compte tenu de leurs spécifications respectives. Techniquement, il peut même fonctionner avec un très classique 74HC14, mais les points de bascule de cette famille n’étant pas spécifiés pour une alimentation de 3,3V, le fonctionnement correct n’est pas certain (un tel montage prototype a toutefois été testé avec succès).

Concernant le choix de l’optocoupleur, le FOD814A est préférable, comme indiqué précédemment. Néanmoins, le circuit peut également fonctionner avec le FOD814 voire avec le SFH620A-3, avec le risque de performances potentiellement dégradées.

Le montage est insensible à la distorsion harmonique et s’accomodera parfaitement d’un signal non-sinusoïdal. Un bruit d’amplitude 0,1V sera sans effet sur la sortie, de même une impulsion de 20V de moins de 5µs ne devrait pas déclencher l’optocoupleur compte-tenu de la résistance de charge. L’application permanente du 230V déclenchera le fusible réarmable F1 ce qui déconnectera le récepteur du bus, sans autre dommage pour le récepteur ou l’émetteur (le compteur). En substance la quasi-totalité des exigences spécifiées dans le document de référence Enedis sont respectées, à l’exception près mentionée précédemment.

Ce circuit a été testé avec succès sur un compteur Linky en mode standard et sur un compteur Bleu électronique (CBEMM - ICC) en mode historique.

Implémentation

Voici une implémentation du schéma sur un PCB compact de 40 x 14 mm :

board

La liste des composants se trouve ici.

2 trous de fixation diamètre 2mm sont disponibles sur le PCB. Les condensateurs sont au pas de 2,5mm, les résistances et la diode doivent être montées verticalement. L’empreinte du 74LV14 est au format SOIC-14.

Logiciel

Un logiciel a été dévelopé pour décoder les trames TIC transmises par le montage: tic2json.