Détection de présence et de courts-circuits en DCC.

. Par : bobyAndCo. URL : https://www.locoduino.org/spip.php?article359

Voici une petite carte qui assure trois fonctions particulièrement intéressantes lorsque l’on cherche à automatiser la gestion de son réseau et en assurer la sécurité. Ces trois fonctions ont recours à la lecture de la consommation de courant et agissent de manière appropriée selon les intensités mesurées.

1° - Il est possible de détecter la présence de locomotives et de trains mais aussi de wagons pour peu que ceux-ci aient une capacité résistive.

2° - Une consommation de courant particulièrement élevée peut être fatale au matériel, particulièrement aux décodeurs et aux fils généralement très fins dans les locomotives. Il s’agit dans la majorité des cas d’un court-circuit dont la détection est la deuxième fonction.

3° - La réponse que l’on puisse apporter en cas de court-circuit est de couper le plus rapidement possible l’alimentation des rails. C’est la troisième fonction de cette carte.

Ce dispositif de détection locale s’intègre parfaitement dans le concept des satellites (v1 ou autonomes) mais aussi dans toutes autres configurations en DCC. Il n’est pas utilisable en analogique car seul un courant alternatif peut induire une tension dans la bobine.

Voyons cela en détail.

JPEG - 175.2 kio
Figure 1 - Carte détection de présence et de surintensités.

La technique utilisée.

Elle repose sur le principe de l’induction. Un des conducteurs du courant DCC traverse une bobine qui « prélève » une infime partie de la puissance. C’est l’intensité de ce courant que l’on va mesurer à l’aide un microcontrôleur.

Cette technique de mesure présente plusieurs avantages :

  • Le circuit de puissance et le circuit de mesure sont naturellement isolés. Il n’y a donc aucun risque de surintensité au niveau du circuit et des composants électroniques liés à la mesure.
  • Les mesures sont très précises et linéaires ce qui simplifie grandement le traitement et sa vitesse d’exécution qui sont des éléments cruciaux en cas de court-circuit. Je n’ai constaté aucunes interférences particulières qui « brouilleraient » les mesures.
  • Contrairement à la détection basée sur le principe des diodes, la détection par bobine ne génère pas (très peu) de chute de tension.
  • Cette détection par bobine ne perturbe pas la détection Railcom©.

La détection par bobine est une technique très prisée outre-Atlantique avec en particulier le NC5240205 particulièrement performant mais dont le prix est exorbitant (15 $ ou plus) alors même que les possibilités sont bien moindres que ce qui est présenté ici (Figure 2).

JPEG - 76.1 kio
Figure 2 - NCE 5240205 Block Detector BD20

Voir par exemple sur le site : https://tonystrains.com/product/nce...

Moyens mis en œuvre.

La technique fait l’objet d’un sujet particulièrement nourrit et enrichissant sur le forum que l’on trouve ici : https://forum.locoduino.org/index.php?topic=1656.0

JPEG - 113.5 kio
Figure 3 - Module de détection par nopxor (locoduino)

A la base, je me suis inspiré d’un sujet initié par nopxor (Figure 3) : https://forum.locoduino.org/index.p...

Mais c’est la solution proposée par Pyk35 que j’ai retenue car elle est simple, performante et très économique. Elle fournit un signal analogique directement exploitable par un microcontrôleur : https://forum.locoduino.org/index.p...

PNG - 109.3 kio
Figure 4 - Schéma de principe proposé par Pyk35

Comme on peut le voir sur ce schéma (Figure 4), une bobine, deux diodes, une diode zener et un condensateur suffisent pour « produire » une tension exploitable avec un microcontrôleur.

Dans le cas des satellites autonomes, j’avais initialement envisagé que le traitement Analogique/Numérique soit assuré par l’ESP32 du satellite. Mais l’ESP32 est peu performant pour ce qui concerne l’ADC et consommateur de ressources pour un programme déjà largement sollicité par ailleurs. (*) Sur la conversion analogique/numérique de l’ESP32, voir le lien en bas de page.

Les puces AVR au contraire, bien que moins performantes globalement, sont réputées pour la qualité de leur traitement Analogique/Numérique. J’ai donc décidé de tester une solution sur ATTiny qui a rapidement donné des résultats très satisfaisants. L’intérêt de l’ATTiny étant également son cout de l’ordre de 1,50€. Chaque carte dispose donc de sa propre unité de traitement des mesures.

Le bénéfice comme dit ci-dessus est de fournir un signal numérique directement exploitable par un satellite, une centrale ou tout autre gestionnaire de réseau. En fait, la carte délivre deux informations sous forme de signal numérique, la présence de trains mais aussi de surintensité (Figure 5).

JPEG - 209.1 kio
Figure 5 : Deux signaux sont disponibles pour la détection de présence et les courts-circuits

Il est possible de réaliser des calculs, des opérations et des réglages sur chaque carte. Ainsi, nous disposons (Figure 6) de 8 réglages de sensibilité au travers d’un switch (4 pour la détection de présence, 4 pour les courts-circuits) permettant de s’adapter à des contraintes spécifiques pour chaque zone sous surveillance. Ces seuils étants par ailleurs, et si nécessaire, modifiables par programmation.

JPEG - 162.3 kio
Figure 6 - Sélection des seuils pour la détection et les surintensités

L’ATTiny nous permet enfin d’actionner, toujours en local, un relais ( Figure 7) qui va couper l’alimentation DCC des rails plus rapidement que ne le fait une détection au niveau de la centrale. Notez que les deux détections peuvent et doivent cohabiter.

JPEG - 82 kio
Figure 7 - Relais de 8A pour la coupure d’alimentation

La principale raison en est assez simple ; le niveau d’intensité fixé comme seuil de détection pour un court-circuit est beaucoup plus faible au niveau d’un canton seul que pour l’ensemble d’un réseau.

Ainsi, on peut considérer que 800mA à 1A d’intensité sur le canton suffisent pour considérer que l’on a affaire à un court-circuit alors que sur l’ensemble d’un réseau, il faudra attendre au moins de mesurer 2,5A à 3A.

On comprend que cette solution de détection et de coupure locale en cas de sur intensité autorise l’utilisation sans difficulté de cartes moteur puissantes de l’ordre de 10 à 15A ou plus puisque le réseau est alors protégé par zones.

Revenons sur la détection de présence. Dans le cas où une locomotive est présente sur un canton, l’intérêt de la détection est principalement d’éviter l’entrée d’un autre convoi sur le canton qui viendrait en collision.

L’intérêt de détecter des wagons est peut-être moins évident de prime abord mais il est cependant le même. Il s’agit là aussi d’éviter qu’un train ne s’engage sur un canton alors qu’y seraient encore présents un ou plusieurs wagons, et alors même que la locomotive elle n’y est plus. Ce cas de figure se rencontre principalement quand : 1°) – Les wagons d’un convoi n’ont pas tous quitté le canton. 2°) – Un ou plusieurs wagons se sont décrochés du convoi.

Pour que des wagons soient en mesure de provoquer une consommation de courant suffisante, il existe trois principales techniques :

1°) – Installer de l’éclairage à l’intérieur des wagons et/ou en fin de convoi. Figure 8 et Figure 9

JPEG - 2 Mio
Figure 8 - Source : https://modelclub-draveil.eu/
JPEG - 84.9 kio
Figure 9 - Source : BISCATRAIN

2°) – Graphiter les roues des wagons. Figure 10

JPEG - 21.4 kio
Figure 10 - Source : Les trains du Tertre

3°) - Placer des résistances sur un ou plusieurs essieux des wagons d’un convoi, de préférence le dernier pour détecter aussi les décrochages de wagons.

La figure 11 présente présente différentes techniques utilisables en fonction de la nature des axes et du type de résistance, CMS ou traversante.

Cette une image refaite et traduite à partir d’un article particulièrement complet et intéressant dont je recommande la lecture : https://www.jlcenterprises.net/page...

Pour d’autres informations sur ces différentes techniques, vous pouvez vous reporter à ces quatre articles :

https://lestrainsdutertre.redheberg...

https://lestrainsdutertre.redheberg...

http://rouge-et-creme.over-blog.com...

http://www.biscatrain.fr/2018/05/in...

L’ATTiny44 et sa programmation.

Parmi différents ATTiny, mon choix de l’ATTiny44 est justifié par le nombre de broches dont il dispose (14 en tout avec le VCC et le GND) permettant d’adjoindre un switch à 4 leviers ce qui autorise la sélection de 4 seuils différents pour la détection de présence et 4 autres pour la détection de courts-circuits.

Les valeurs pour ces seuils ont été placées dans deux tableaux en début de programme :

const uint16_t tabSeuilOcc[] = { 30, 40, 50, 60 };     // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 250, 350, 450, 550 };  // Seuil pour le court-circuit

Ce sont des valeurs que j’ai déterminé de façon empirique sur mon réseau en HO avec différentes locomotives.

L’ADC travaillant sur 10 bits, ces valeurs correspondent par exemple à 30/1023, 40/1023 etc…

Sur le switch que nous avons vu plus haut en Figure 6, la première valeur du tableau « seuils d’occupation » correspond aux switches 1 et 2 bas, la seconde valeur à 1 haut, 2 bas, troisième valeur 1 bas, 2 haut et enfin quatrième valeur, 1 haut, 2 haut.

Il en est de même pour les seuils de court-circuit avec les switches 3 et 4 cette fois.

Pour déterminer le bon seuil d’occupation, il s’agit dans un premier temps de placer le (les) wagon(s) équipés de résistances sur les rails, ou plus simplement une résistance de 10KΩ et de vérifier avec un voltmètre placé sur la sortie "occupation" que la détection est bien opérée.

Pour la détection de court-circuit, on utilisera le train le plus consommateur de courant avec le plus gros moteur, fumigène (actif) le cas échéant et l’on testera la limite de court-circuit. Ce train devant circuler sans provoquer la coupure du relais. Il faudra tester avec le passage de la positon arrêt puis accélération de la locomotive qui est celle qui entraine la plus grosse consommation. Lorsqu’il n’y a plus de disjonction intempestive, vous pouvez en déduire une valeur reportable sur l’ensemble des cartes du réseau.

Au besoin, vous pouvez modifier ces valeurs dans le programme. Par exemple, pour l’échelle N :

const uint16_t tabSeuilOcc[] = { 10, 15, 20, 25 };     // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 150, 200, 250, 300 };  // Seuil pour le court-circuit

Pour les échelles 1 ou O, vous devrez probablement être plus proche des valeurs suivantes :

const uint16_t tabSeuilOcc[] = { 50, 65, 80, 95 };     // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 500, 600, 700, 800 };  // Seuil pour le court-circuit

En principe, ces valeurs sont les mêmes d’une carte à l’autre mais certaines configurations comme des pentes ou des rampes hélicoïdales par exemple augmentent les consommations et nécessiteront peut-être des adaptations spécifiques.

Ensuite, en manipulant les switches, il est aisé de sélectionner différents seuils (dans la limite de quatre).

JPEG - 72.1 kio
Figure 12 - Bouton pour le reset de l’ATTiny

A chaque fois que vous modifiez la position des switches, vous devrez "reseter" l’ATTiny pour prendre en compte ce nouveau réglage qui s’opère dans le setup() du programme.

Il n’y a aucune autre intervention que vous n’ayez à faire dans le programme si ce n’est éventuellement modifier le délai de réarmement après un court-circuit ici réglé sur 5000 millisecondes.

// Variables
uint32_t tempoCC = 5000UL;                             // Tempo réarmement suite à court-circuit

Vous noterez si vous le survolez que l’on n’y rencontre pas les fonctions bien connues en Arduino comme analogRead() ou digitalWrite(). C’est que pour des questions de performance, j’ai utilisé ce que l’on appelle l’écriture et la lecture directe des ports de l’ATTiny. Je cherche ainsi à combler le petit manque de puissance des AVR en accélérant (grandement) la vitesse d’exécution du programme.

Sur le site Arduino il est écrit ceci : « digitalRead() et digitalWrite() sont chacun une douzaine de lignes de code, qui sont compilées en un certain nombre d’instructions machine. Chaque instruction machine nécessite un cycle d’horloge à 16 MHz, ce qui peut s’additionner dans les applications sensibles au temps. L’accès direct au port peut effectuer le même travail en beaucoup moins de cycles d’horloge. »

Il est souvent évoqué des vitesses d’exécution de 16 à 20 fois supérieures avec cette technique.

Pour plus d’informations à ce sujet :
https://docs.arduino.cc/retired/hac...

ou concernant plus spécifiquement les ATTiny :
https://www.instructables.com/ATTin...
https://www.instructables.com/ATTin...

La programmation de l’ATTiny

Téléverser le programme à partir de l’IDE Arduino sur un ATTiny par l’intermédiaire un Arduino (UNO ou MEGA) est quelque chose de très simple. Christian, dans sa série d’articles sur les ATTiny développe ce point :
https://www.locoduino.org/spip.php?...

Vous pouvez également vous reporter ici pour ce qui est plus spécifiquement de l’ATTiny44 (Figure 13) :
https://www.getmicros.net/programmi...

PNG - 225.9 kio
Figure 13 - Source : https://www.getmicros.net/
Dans mon cas, cette procédure de téléversement au travers d’une carte Arduino ne fonctionne pas sur l’IDE supérieure à la version 1.8x.
 
Par chance, j’avais conservé une version 1.8x sur un autre ordinateur.

Soyez vigilant au sens de montage de l’ATTiny sur son support. Le repère est vers le haut quand on regarde la carte dans le sens des écritures.

Voilà, j’espère que cet article vous sera utile.

Le programme du l’ATTiny est téléchargeable ici :
https://github.com/BOBILLEChristoph...

  • voici Figure 14, le schéma de la carte :
    PNG - 45.2 kio
    Figure 14 - Schéma électronique
  • la liste des composants :
Liste des composants
Composant Nombre Valeur Référence Lien
Résistances 2 270 Ω
Résistances 7 10 KΩ
Diode 1 1N4004 https://www.tme.eu/fr/details/1n400...
Diodes 2 1N4148 https://www.tme.eu/fr/details/1n414...
Diode 1 1N4728 https://www.tme.eu/fr/details/1n472...
Condensateur 1 22µF CC-22N https://www.tme.eu/fr/details/cc-22...
Led 3mm 2
Transistors 3 BC547B https://www.tme.eu/fr/details/bc547...
Bouton poussoir 1 https://www.ebay.fr/itm/17636917203...
switch 4 positions 1 https://www.ebay.fr/itm/12611075902...
Barre de serrage 4 DG127-5.08-02P https://www.tme.eu/fr/details/dg127...
Bobine 1 1000:1 ZMCT103C https://fr.aliexpress.com/item/1005...
ATTiny44 1 ATTINY44A-PU https://www.tme.eu/fr/details/attin...
Relais 1 RT424005 https://www.tme.eu/fr/details/rt424...
  • et les fichiers GERBER
    Zip - 154.4 kio
    Fichiers GERBER de la carte de détection de présence et de courts-circuits en DCC v2.0

Liens utiles :

Une vidéo très complète et très intéressante sur la conversion analogique/numérique de l’ESP32. Solution dont je rappelle toute fois que ce n’est pas celle retenue : https://www.youtube.com/watch?v=B2O...

Datasheet ATTiny 44 :
https://ww1.microchip.com/downloads...

Getting Started with ADC on ATTiny
https://ww1.microchip.com/downloads...

Le site de Sumida Crossing sur la détection : http://www.sumidacrossing.org/Layou...

L’article TRACK OCCUPANCY DETECTION FUNDAMENTALS de jlcentreprises.net déjà cité dans l’article :
https://www.jlcenterprises.net/page...
https://www.jlcenterprises.net/page...