Digital Command Control

Firmware : Genèse d'une bibliothèque DCCpp

En DCC l'énergie électrique pour faire avancer nos locos est modulée par un signal numérique au travers duquel les commandes sont envoyées vers les décodeurs. En modélisme ferroviaire, nous avons besoin d'une centrale DCC pour piloter nos trains avec une commande numérique. Un projet de commande DCC a été concrétisé par Gregg E. Berman qui a écrit le projet DCC++ pour Arduino. Il a ensuite été repris et étendu par Thierry Paris qui en a fait une bibliothèque DCCpp. (Voir www.locoduino.org). Finalement j'ai ajouté la lecture de 2 ports de rétro-signalisation S88 dans cette bibliothèque qui s'appelle désormais : DCCppS88.
En résumé voici les possibilités fournis par cette bibliothèque logicielle :  (d'après une traduction du texte du premier auteur par le second que j'ai complétée)


DCCppS88 est un programme C++ pour l’Arduino Uno/Nano et l’Arduino Mega utilisant l’Arduino IDE 1.6.6 ==> 1.8.19

Il permet à un Arduino Uno/Nano ou Mega standard équipé d’un Arduino Motor Shield (ou d’un autre) d’être utilisé comme une centrale DCC complète, conforme aux standards DCC du NMRA, pour un réseau de modélisme ferroviaire numérique.

Cette version de DCCppS88 supporte :
  • Adresse de décodeur sur deux octets (128 adresses courtes) et quatre octets (10240 adresses longues)
  • Contrôle simultané de plusieurs locomotives (21 dans ce projet)
  • Commande à 128 pas de vitesse
  • Fonctions F0 à F28
  • Activation d’aiguillages ou d’accessoires utilisant 512 adresses, chacune avec 4 sous-adresses (norme NMRA)
  • Commande de signaux ou d’accessoires utilisant 2048 adresses, avec une donnée comprise entre 0 et 31 (norme NMRA)
  • Programmation d’un décodeur sur la voie principale
    • Ecriture de CV par octets
    • Ecriture de CV par mise à jour de certains bits individuellement
  • Programmation sur une voie dédiée de programmation
    • Ecriture de CV par octets
    • Ecriture de CV par mise à jour de certains bits individuellement
    • Lecture de CV ou données émises par le décodeur en cours de programmation
  • Lecture de 2 bus S88 qui supportent jusqu'à 512 capteurs (2x256)
  • Lecture du courant sur la voie principale

DCCppS88 est contrôlé par des commandes textes reçues par l’interface série de l’Arduino. Elles peuvent être envoyées par la console série de l’IDE Arduino, ou par des interfaces ou des programmes extérieurs.

Sur un Arduino Mega, un shield Ethernet peut être utilisé pour recevoir des ordres via un réseau Ethernet plutôt que par la liaison série mais il s'avère relativement inefficace. Une extension avec un module WiFi est beaucoup plus pertinent.

Shield : Carte d’extension munie de connecteurs mâles et qui s’enfichent dans les connecteurs de la carte Arduino Mega. Un shield peut également présenter des connecteurs gigognes qui permettent d’empiler plusieurs shields.



Hardware : Arduino

Mes projets utilisent une carte Arduino Mega 2560 donc l'électronique fonctionne sous +5V. A la sortie PWM de l'Arduino je connecte un circuit AM26C31 pour générer deux signaux symétriques qui commandent des modules Booster L298 ou L18200, alimentés en +19V pour fournir la puissance nécesasire aux locomotives. Les circuits compatibles RS422/RS485 conviennent à condition de savoir les brancher. J'ajoute des modules pour la mesure du courant sur une alimentation 19VDC protégée contre les court-circuits. Pour interconnecter ces éléments entre eux, je recommande d'utiliser des fils groupés dans un seul connecteur Dupont pour une meilleure stabilité mécanique des connexions. Enfin je cable 2 prises RJ45 sur les 2 ports S88-N que j'ai crée sur l'Arduino. Mes projets sont décrits dans les onglets suivants du menu "Electronique DCC".


Firmware sur Arduino : DCCppS88

DCCpp est une bibliothèque C++ pour l'Arduino Uno/Nano et l'Arduino Mega compatible avec l'Arduino IDE 1.8.4. Les trains sont pilotés à partir de commandes texte standardisées.

J'ai intégré dans DCCpp une interface S88 pour lire la rétro-signalisation avec le même Arduino MEGA. Cette extension S88 s'interface parfaitement avec un programme qui supervisera tout votre réseau : CDM-Rail, JMRI, Rocrail ou mes logiciels par exemple. Cette bibliothèque s'appelle désormais DCCppS88. Voir dans le menu "Electronique DCC" et sélectionner les onglets : "Centrales DCC...".


Software sur PC :

Vous pouvez utiliser un programme compatible avec DCC++ pour commander automatiquement tout votre réseau. Personnellement je me suis inspiré de logiciels créés par d'autres modélistes pour me lancer dans l'écriture de logiciels de commande manuelle de mon réseau. J'ai créé le logiciel CDT31 (Conducteur De Train) pour utilisateur confirmé. Enfin j'utilise le moteur d'exécution software Node.js pour interconnecter efficacement mon logiciel avec Arduino. Mes logiciels de commande sont décrits dans les onglets correspondants que vous retrouverez dans le menu "Logiciel". De plus, il est possible de piloter individuellement des trains en mode manuel dans un dépôt ou un triage avec CDT31 pendant que JMRI contrôle le réseau principal. Il suffit que le serveur accepte des requêtes venant d'un autre port ce qui est possible avec le moteur logiciel Node.js.

Avec mes centrales DCCppS88 WiFi et DCC32S88 WiFi, sur PC mes logiciels WDD, TCOwifi et DMC conduisent les trains sans avoir besoin d'utiliser Node.js car ces centrales DCC possèdent un serveur intégré.

BB 25200