La centrale DCCpp avec bus S88

DCCpp pour Arduino

Après avoir parcouru Internet et analysé de nombreuses conceptions faites par des amateurs éclairés dont certaines sont décrites sur Locoduino, je porte mon choix sur DCC++ et plus exactement sur la bibliothèque DCCpp pour Arduino. Celle-ci permet de piloter plusieurs locos simultanément, en adresse courte, longue et UM, offre une sortie DCC vers les voies principales et une sortie DCC vers une voie de programmation indépendante. La commande se fait par l'intermédiaire de fenêtres sur l'écran du PC/Tablette/Smartphone et du port COM ou Ethernet vers l'Arduino (avec l'ajout d'une carte interface Ethernet). Simultanément vous pouvez utiliser des tablettes ou des Smartphones en WIFI avec une Box Internet qui sert de routeur WIFI, en même temps qu'un PC.

J'ai ajouté la lecture de 2 ports de rétro-signalisation S88 dans cette bibliothèque qui s'appelle désormais : DCCppS88. Elle peut lire 2 bus S88 de 256 bits chacun au maximum donc avec 2 entrées RJ45 : DataL et DataR. Ce sont 2 ports S88 distincts pour simplifier le câblage des grands réseaux. Cette fonction S88-N a été testée avec un module RM-GB-8-N de Littfinski DatenTechnik et avec mes modules S88-N-16E décrit dans la page "Rétro-signalisation". La même fonction S88 a été intégrée dans DCC++ par Xavier avec qui je l'ai co-écrite.

Note : La bibliothèque DCCppS88 ne gère pas l'option RailCom. De plus l'option RailCom réduit la tension disponible au niveau du décodeur et certains décodeurs (ESU) peuvent présenter des dysfonctionnements. Dans ce cas désactiver l'option RailCom sur la loco peut résoudre cette anomalie.

Cette bibliothèque DCC++ avec la lecture du bus de rétro-signalisation S88 est compatible avec les logiciels de commande de réseaux ferroviaires tel que CDM-Rail, JMRI, Rocrail, etc...



Synoptique simplifié de ma centrale DCCppS88

Hardware

J'utilise un Arduino MEGA 2560 sur lequel je place une carte fille pour câbler un driver RS485/7, SN75LBC176 ou AM26C31 qui transforme la sortie PWM en 2 polarités inverses afin d'alimenter le module Booster L298N. L'Arduino est connecté par USB au PC. Cela suffit pour l'alimenter en 5VDC mais si nécessaire un chargeur 7,5VDC alimente la carte Arduino. Une alim 19VDC plus puissante alimente les Booster L298N qui fournissent le DCC, lesquels alimentent les rails. J'ajoute des modules MAX471 pour mesurer le courant sur le 19VDC. La réalisation est possible avec un Arduino UNO ou NANO et coûte 10 € environ, hors alimentation et boitier et à peine plus cher avec un Arduino MEGA. Coté pratique vous devrez connecter quelques fils et percer quelques trous pour assembler tous les éléments avec des vis afin de les solidariser ensemble. Tout ce materiel est en vente sur les sites de vente en ligne chinois pour quelques Euros.



Le Max471 ou équivalent mesure le courant continu qui alimente le Booster reflétant ainsi la consommation électrique du réseau DCC.

Attention : Beaucoup de MAX471 sont défectueux. Avant de les connecter, vérifier avec un multimètre que la résistance lue entre RS+ et RS- soit proche de zéro Ohms. Sinon vous risquez d'endommager le MEGA. Une solution de remplacement est à l'étude.

Plus 2 connecteurs RJ45 pour le bus S88-N :

Adieu aux forêts de fils qui partent de l'Arduino, un simple câble RJ45 suffit. Les infos des capteurs seront rassemblées sur place par une carte de rétro-signalisation puis transmises par le câble RJ45 vers la carte suivante et ainsi de suite le long du réseau jusqu'à l'Arduino. Pas besoin de boitier d'interface supplémentaire, tout est inclus. Le câble RJ45 du bus S88-N télé-alimente aussi les cartes, donc pas besoin d'alimenter séparément les cartes de rétro-signalisation. Sur le bus S88-N, ce logiciel permet le mélange des cartes à 8 entrées avec celles à 16 entrées.

Interface Ethernet :


En option, pour remplacer de la liaison USB.

L'interface Ethernet se place directement au dessus du MEGA puis la carte de prototypage se superpose par dessus le tout. Cet assemblage forme un empilement à 3 niveaux. Le MEGA 2560 n'est pas bien adapté pour ce type d'interface que je déconseille. Préférez l'interface WiFi plus performante.

Photo du montage


Une centrale DCC avec S88 pour quelques Euros + alim 18V + PC.

Schéma du montage




Le UNO comme le NANO sont trop petits pour une utilisation pérenne, orientez vous vers le MEGA 2560.


Note : Pour la voie principale, au lieu d'utiliser le booster L298N (2x2A), vous pouvez utiliser le Booster BTS7960 (43A) en insérant un fusible calibré et en adaptant son câblage : (Evitez le LMD18200 qui peut détruire les sorties du MEGA)


Connexions du BTS7960

Signaux
(sorties)
DCCppS88
J8/J10/J11/J12
circuit imprimé
DCCppS88
Connexion BTS7960
(entrées/sorties)
Non du signal
DCC Pin 3 ou 6 ==> Pin 1 RPWM
DCC/ Pin 4 ou 5 ==> Pin 2 LPWM
Enable Main Pin 2 ou 7 ==> Pin 3 R_EN
Enable Main Pin 2 ou 7 ==> Pin 4 L_EN
Courant droit -----  <== Pin 5 R_IS
Courant gauche -----  <== Pin 6 L_IS
+5Vdc +5V ==> Pin 7 VCC
Masse 0V Pin 1 <==> Pin 8 GND

Firmware Arduino

Commande DCC :

J'installe le logiciel DCCpp avec option S88 qui se télécharge ici : la bibliothèque DCCppS88 pour Arduino et j'ouvre l'IDE d'Arduino. Ensuite j'édite le fichier DCCppS88.ino pour vérifier la configuration avec l'interface série de l'Arduino à 115200 bauds. Choisir les interfaces utilisées indiquées par les commentaires encadrés par *****. Enfin je compile les fichiers et j'obtiens :

Rapport de compilation pour un Arduino Mega 2560 :

COMM série:
- Le croquis utilise 29476 octets (11%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 1502 octets (18%) de mémoire dynamique, ce qui laisse 6690 octets pour les variables locales. Le maximum est de 8192 octets.

COMM Ethernet:
- Le croquis utilise 41790 octets (16%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 1830 octets (22%) de mémoire dynamique, ce qui laisse 6362 octets pour les variables locales. Le maximum est de 8192 octets.

Je connecte l'Arduino sur une entrée USB du PC qui sera automatiquement redirigé vers un port COMx et détecté par l'IDE Arduino. Après la compilation, je téléverse le code dans l'Arduino et j'ouvre le Moniteur série associé à l'IDE Arduino. Comme j'ai activé le DEBUG, je lis le rapport d'initialisation envoyé par l'Arduino et je peux déjà envoyer des commandes manuelles vers les locos qui réagissent immédiatement. Puis je ferme le Moniteur pour libérer le port COM. Important ! La suite se trouve dans le menu "Logiciel" et se passe maintenant dans votre PC.

Rétro-signalisation S88 :

J'ai incorporé le programme maitre S88 dans la bibliothèque DCCppS88 décrite ici. En conséquence j'utilise un SEUL Arduino MEGA pour gérer tout mon réseau DCC : un seul et unique ! La rétro-signalisation est totalement intégrée dans la bibliothèque DCCppS88 sans ralentir l'Arduino. Une trame de 512 bits maxi est lue en permanence par l'Arduino sur le bus S88-N en moins de 60ms.

Les données des capteurs S88 sont lues sur 2 entrées simultanément pour ne former qu'un seul buffer, les données DataL sont rangées au début du buffer et les données DataR sont rangées à la fin du buffer. Cette configuration permet l'utilisation de 2 bus S88-N, un à gauche et un à droite ayant la même taille et limité à 256 capteurs maximum chacun. A la demande du PC qui contrôle le réseau, celui-ci lit jusqu'à 10 fois par seconde les paquets de données recueillies sur le bus S88 par l'Arduino qui lui transmet en moins de 15ms, sans que l'Arduino MEGA ne soit ni perturbé ni ralenti dans son fonctionnement. Cependant à chaque changement d'état des capteurs, les dernières données lues sur le bus S88 sont envoyées au PC Maitre pour l'informer du changement.

Cette fonction utilise 5 pins de l'Arduino : Reset, Ps/Load, Clock, DataL et DataR. Voir la page rétro-signalisation.


Compatibilité avec les logiciels de commande de réseaux ferroviaires (MEGA connecté en USB seulement)

Les commandes DCC++ sont toutes reconnues par cette bibliothèque et utilisées par les logiciels qui contrôlent vos trains.

*** Attention : l'utilisation du bus S88 n'a pas été testée avec Ethernet, ni mise au point. ***

La commande DCC utilisée pour lire le bus S88 avec CDT31 ou CDM-Rail est décrite ci-dessous :

‹Y N F› avec N = groupes de 8 capteurs à lire sans dépasser 64 (2x32x8=512)
(pour calculer le nombre N, prenez le plus grand nombre de groupes de 8 capteurs que vous avez connectés sur l'un des 2 connecteurs du bus S88 et multipliez par 2. Exemple 3 à gauche et 1 à droite : N = 3 x 2 = 6)

F = 0 pour une réponse en binaire (msb first),
La réponse sera ‹y 00001010000101000111010000......................................00›

F = 1 pour une réponse en hexadécimal 4 fois plus rapide utilisé par CDM-Rail. (LSB first)
La réponse sera ‹y 0A0147405801CE..40›

F = 2 pour une réponse en hexadécimal pur, 7 fois plus rapide utilisé par CDT3x. (MSB first)
La réponse sera ‹y XXXXX......›

F = 3 pour une réponse du type SENSOR utilisé par JMRI
La réponse sera ‹Q ID› si le capteur est actif (1), ‹q ID› si le capteur est inactif (0). ID est le numéro du capteur.

En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
‹x Bad Argument count›
‹x Bad Argument value›
‹x S88 disconnected›

Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 car une résistance pulldown est connectée sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différemment, prendre un connecteur RJ45, placer une résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer ce connecteur RJ45 dans l'entrée libre du dernier module.

La commande DCC utilisée pour lire le bus S88 avec Rocrail ou JMRI est décrite ci-dessous :
‹Q› avec 64 groupes de 8 capteurs à lire initialisés (2x32x8=512)

La réponse est du type SENSOR utilisé par JMRI et Rocrail.
La réponse sera ‹Q ID› si le capteur est actif (1), ‹q ID› si le capteur est inactif (0). ID est le numéro du capteur.

En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
‹x Bad Argument count›
‹x Bad Argument value›
‹x S88 disconnected›

Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 car une résistance pulldown est connectée sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différemment, prendre un connecteur RJ45, placer une résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer ce connecteur RJ45 dans l'entrée libre du dernier module.

*** Attention : l'utilisation du bus S88 avec une liaison Ethernet filaire n'a pas été complètement testée, ni mise au point. ***

JMRI : L'utilisation du bus S88 avec JMRI est expliquée sur le site de Locoduino dont j'ai extrait le Mode d'emploi avec JMRI en PDF. J'ai implémenté la fonction S88 dans la bibliothèque DCCppS88 pour être compatible avec JMRI. Je fourni les fichiers (Serial) modifiés "S88_Sensor_Scan.py" et "SerialClose.py" que vous devrez utiliser avec JMRI en les plaçant dans votre répertoire "jython". Il faut les éditer pour indiquer le nom de votre port COM ==> USB. La valeur par défaut est "COM5", elle se trouve vers la fin des 2 fichiers. Vous devez remplacer cette valeur par votre port COMn. La communication Tx/Rx sur USB se fait à 115200 bauds. Je n'ai pas encore de version Ethernet opérationnelle.

Rocrail : L'utilisation du bus S88 avec Rocrail est expliquée dans le Mode d'emploi avec Rocrail en PDF. La fonction S88 de la bibliothèque DCCppS88 est compatible avec Rocrail. La communication Tx/Rx sur USB se fait à 115200 bauds. Je n'ai pas de version Ethernet opérationnelle.

 PC 10/08/2018. Mise à jour du 26/03/2025    
BB 25200

Contact : Envoyer un e-mail    (Remplir le champ "adresse" avec le nom de la gare en minuscule sans guillemet)   lormedyfree.fr


  Texte, photos, conception et réalisation :  Lormedy © 2017-2020     visiteurs