Pour ceux d’entre-vous qui ont l’habitude de suivre mes articles, vous avez certainement remarqué que les montages à base de téléinformation sont monnaie courante. J’en utilise sur la carte Arduipi ainsi que sur des adaptateurs dédiés tels que MicroTeleinfo ou PiTinfo.
Le montage utilisé jusqu’à présent était le classique à base d’optocoupleur SFH620 de chez Vishai. Il se découple en plusieurs versions telles que SFH620A, ou SFH6206 (chacun en 3 versions notées de 1 à 6 en fonction du courant de fuite entre le collecteur et l’émetteur).
Edit du 13/10/2015 : en fin d’article.
Le montage de base
Le montage de base est relativement bien connu, mais il existe en plusieurs variantes de valeurs de résistances. Je vais détailler dans cet article les influences de ces résistances.
Pourquoi cet article ?
Je n’avais jamais eu de problème de fonctionnement avec ce montage. Mais cette semaine j’ai eu des fonctionnement très aléatoires avec la nouvelle puce Wifi très tendance l’ESP8266. Il y a d’ailleurs un post ouvert sur le forum d’esp8266 à ce sujet car je n’étais pas le seul à rencontrer des soucis.
Choix des résistances
La première question est pourquoi dans mes montages j’ai choisi R1 à 3.3K et non pas 1.2K comme vu un peu partout sur le NET ? Et bien tout simplement en lisant la spécification ERDF, celle-ci précise que pour tout appareil connecté à la sortie Téléinfo du compteur, la composante parallèle résistive doit être entre 750 et 5000 Ω et qu’afin de faciliter la connexion de plusieurs récepteurs de télé-information sur la même liaison, on demande aux constructeurs de récepteurs de se rapprocher le plus possible de la limite haute de la composante parallèle résistive. C’est-à-dire 5K. Ce qui est curieux c’est que dans la nouvelle version du document ERDF (Version 5 Mars 2015) la valeur sur laquelle se rapprocher est 2K. Bref ce n’est pas bien grave tant que nous restons au dessus du minimum. Plus on sera “haut” plus nous pourrons brancher d’appareils en parallèle sur la sortie Téléinfo du compteur en gardant un signal correct. Mais alors pourquoi je n’ai pas choisi à l’époque des 4.7K plus proches de la spécification ? Et bien parce çà ne fonctionnait pas. Je n’ai pas cherché plus loin à l’époque, j’aurai peut être du prendre le temps à ce moment là.
Rôle des résistances
- R1 sert à limiter le courant le courant passant dans l’opto, plus sa valeur est basse plus le courant passant dans l’opto est fort, et donc plus la sortie de l’opto est “puissante” et plus le signal en sortie est “propre”.
- R2 est une résistance de pull up pour maintenir l’état der sortie à vide (transistor de l’opto non passant) à VCC. Sur un périphérique de réception série 5V (Arduino 5V par exemple) on reliera cette résistance au 5V et sur un périphérique de réception série 3.3V (Raspberry Pi, ESP8266, Spark Core) on reliera cette résistance au 3.3V
A noter que comme la liaison série impose au repos l’état haut à VCC, la plupart du temps les périphériques on déjà une résistance de pull up intégrée sur la ligne RXD et dans la plupart des cas, R2 peut être omise (testé et vérifié sur un Raspbery, Arduino et module FTDI). Seulement parfois leur valeur est assez élevée et même parfois non connue. Donc il est plus sain d’en positionner une (en plus c’est moins sensible aux parasites), une 10K est très bien adaptée.
Influence des résistances
Afin de comprendre ce qui n’allait pas avec mon ESP8266 j’ai du jouer avec R1 et R2 et mon oscilloscope pour comprendre ce qu’il se passait. Dans les graphiques suivant les mesures ont été prise sur les pattes 1 (courbe jaune) et 4 (bleue) de l’optocoupleur.
- La courbe jaune est réglée à 2V/division
- La bleue à 1V/division
- Le 0V est centré au milieu pour les 2 courbes
Je vais donc commencer par le cas le plus défavorable (ok j’ai triché je l’ai su qu’après mes mesures) C’est à dire, R1 à 4.7K (pour se rapprocher de la spécification) et R2 à 1K pour que çà consomme le plus de courant possible, tout est relatif, 3.3mA en 3.3V
R1=4.7K, R2=1K
En absence de modulation le sortie RXD est bien à 3.36V mais en présence de modulation il n’arrive pas à descendre en dessous de 3.08V, Ok on va tester autre chose diminuons R1 à 2.2.K
R1=2.2K, R2=1K
Ah, ce n’est toujours pas çà, mais c’est mieux, Le signal en présence de modulation descends jusque 2.56V. descendons encore R1
R1=1.2K, R2=1K
Pas mieux, Le signal en présence de modulation descends jusque 2.28V mais il oscille. Il est temps d’augmenter R2 à une valeur de pull up plus descente, soit 10K
R1=1.2K, R2=10K
Impeccable, çà fonctionne, le signal descend bien jusque 0.2V, mais çà m’embette un peu, 1.2K sur R1 nous sommes assez loin de la spécification, tachons de la remonter pour voir.
R1=4.7K, R2=10K
Mince, çà ne fonctionne plus, le signal n’est pas terrible mais en plus il ne descend pas en dessous de 2V, que faire ?
Dans de nombreux cas, nous arrivons bien à distinguer le signal mais il ne varie pas entre 0V et 3.3V et n’est donc pas reconnu par les entrées RXD des périphériques. Un transistor ayant sont seuil de déclenchement vers le 0.6V (en gros !!!) lui devrait pouvoir voir le changement donc petit essai vite fait avec ce que j’ai sous la main
Variante à transistor
Un bon MOSFET N en inverseur, toujours une pull up extrême de 1K mais 4.7K sur l’entrée Téléinfo pour se conformer à la spécification. Comme le transistor inverse le signal, j’ai pris soin de l’inverser à la sortie de l’opto. R3 permet à Q1 de ne pas être passant en absence de signal sur sa source. R2 vaut 1K pour la mesure (le pire cas) mais dans le montage final sa valeur doit être de 10K. J’ai pris un BS170 car j’avais çà sous la main mais n’importe quel mosfet N devrait faire l’affaire.
Ensuite dans le graphique suivant, la courbe jaune représente le signal en patte 3 (donc avant le transistor) et la bleue toujours RXD
Bingo !!!! Comme prévu le signal jaune n’est pas assez péchu, 1.24V max (souvenez vous nous l’avons inversé, donc c’est un problème de seuil haut et non pas bas cette fois-ci), mais suffisant pour rendre le transistor passant, du coup, le signal de sortie, lui, varie bien de 0V à 3.3V et çà fonctionne avec une pull up de 1K sur RXD et 4.7K en entrée téléinfo.
Voilà l’objectif et atteint et avec cette version çà fonctionne à tous les coups quels que soit l’entrée de votre périphérique RXD. Attention bien remettre R2 à 10K, cette valeur de 1K était juste pour le pire test !!!
Autre Variante, changer d’optocoupleur LTV-814
J’ai aussi fait des tests avec un autre optocoupleur, le LTV-814 de chez LiteOn qui est bien moins cher en plus. Les tests se sont fait sur la même carte avec les mêmes composants que pour les tests précédents. J’ai enlevé l’étage à transistor de la variante précédente.
R1=4.7K R2=1K
On reprend les tests, souvenez vous avec le SFH620x, le signal de sortie variait entre 3.08V et 3.36V,
Regardez, maintenant avec le LTV-814 il varie entre 2.68V et 3.36V, ça ne fonctionne toujours pas, mais c’est mieux et il est possible qu’avec une 10K de pull up, ce soit mieux, faisons ce test immédiatement
R1=4.7K R2=10K
Allez, mettons une pull up plus classique sur la sortie : 10K, encore une fois souvenez vous avec un SFH620
Et maintenant avec le LTV-814
Re-Bingo !!!!!, non seulement cet optocoupleur est moins cher, mais en plus il fonctionne mieux pour notre cas, à même courant d’entrée il commute bien mieux et son signal de sortie est bien plus propre.
Conclusion
Nous arrivons à la fin de cet article, et je pense que les graphiques parlent d’eux-mêmes. Pour pallier à tout problème potentiel du décodage de la Téléinfo, remplacez ce bon vieux SFH620x par un LTV-814, c’est mieux et moins cher !!!! Et si vous rencontrez encore des soucis (ce dont je doute) la solution ultime est d’ajouter l’étage à MOSFET derrière le LTV-814. Bien que ne rencontrant aucun soucis, par mesure de sécurité et de coût, les nouvelles versions des cartes MicroTeleinfo et PiTinfo, tout comme le nouveau bébé à base d’ESP8266 seront dorénavant équipée de cet optocoupleur.
J’ai vraiment souhaiter faire cet article afin que passionnés que nous sommes, puissions enfin comprendre (enfin pour ceux qui comme moi ne maîtrisions pas) les différentes variantes du décodage de le Téléinfo avec un optocoupleur. Si j’ai pu en éclairer ne serait-ce que quelques-un, l’objectif est atteint.
N’hésitez pas à venir en discuter sur la communauté dédié ici
Edit du 06 Juillet 2015
Aujourd’hui j’ai encore rencontré le problème de réception aléatoire, même avec un LTV-814 et R1=4.7K et R2=10K.
C’est assez curieux, çà va bien marché pendant des heures puis après, ça se met à délirer pendant un certain temps avant de redevenir normal. J’ai même réussi une capture on voit parfaitement le problème qui est relativement furtif, c’est environ 2% du temps durant lequel la sortie ne descend pas à 0V.
Un autre utilisateur (@Overcrash86) n’a pas eu le moindre soucis avec un SFH620 et un ESP8266 (quoiqu’il faut le voir ce foutu problème), c’est super curieux. En fait, je fais clignoter une LED RGB entre la fin de trame (ETX) et le début de la suivante (STX) et je me suis rendu compte que parfois le clignotement n’était pas régulier et voir la LED clignotait 2 fois. Sans cet indicateur visuel, je n’aurais rien détecté. Peut être que ça vient de ma breadboard, de mes fils, de mauvaise connexions ou autres, je ne sais pas ;-(
Quoi qu’il en soit, j’applique la méthode du risque minimal, ce sera étage à transistor derrière l’opto parce que çà fonctionne à tous les coups.
Edit du 13/10/2015 : Il s’est avéré que dans plusieurs cas ou le montage classique ne fonctionnait pas (remontée de certains utilisateurs), ce montage à transistor fonctionne parfaitement. La nouvelle version de PITinfo possède maintenant cette modification. Voir le nouvel article dédié ici