Avec le premier article de cette série, Dominique nous a fait découvrir les entrailles de DCC++ et a démontré que ce programme était sans doute la meilleure solution DIY sur ARDUINO du moment pour le modélisme ferroviaire.
Dans un deuxième article, nous avons abordé une partie un peu plus concrète puisqu’il s’agit des interfaces H/DCC++. Entendez homme et DCC++ avec un controleur en HTML permettant de piloter ses locomotives. Bien d’autres interfaces sont envisageables, logicielles ou matérielles comme nous l’a présenté ponponmvo sur le forum avec une télécommande à infrarouge telle que celles utilisées pour les TV ou les chaines HiFi.
Ce troisième article se veut également très pratique puisqu’il aborde la question des matériels nécessaires pour mettre en œuvre DCC++ sur vos réseaux.
Cet article s’adresse principalement aux modélistes débutants ou peu expérimentés qui souhaitent des réponses simples et faciles à réaliser.
Article mis à jour en janvier 2022 : images agrandissables.
Le choix de l’ARDUINO :
Le développeur de DCC++, Gregg E. Berman, n’a prévu l’utilisation qu’avec un Arduino UNO ou un Arduino MEGA. Mais Dominique a montré dans son article que tout ATMega 328 ou 2560 peut supporter DCC++, c’est seulement la définition de Gregg dans le fichier DCCpp_Uno.h qui limite le choix. Par exemple en remplaçant :
#if defined ARDUINO_AVR_UNO
par :
#if defined ARDUINO_AVR_NANO
le programme compile à l’identique dans un Nano. C’est bien expliqué par Tanguy sur le Forum.
Pour respecter l’esprit de simplicité et de praticité évoqué en introduction, nous n’aborderons ici que l’utilisation d’un UNO ou d’un MEGA et il ne sera pas bien compliqué pour ceux qui le souhaitent d’adapter à d’autres Arduino.
Pour de petits réseaux en N ou en HO, le UNO saura se montrer à la hauteur. Au delà il est certainement préférable d’utiliser un MEGA d’autant que la différence de coût n’est pas très importante. Et si vous envisagez une liaison Ethernet avec votre Arduino, vous ne pourrez de toutes façons utiliser que le MEGA.
Notez que DCC++ détectera automatiquement le type de l’Arduino (UNO ou MEGA) sur lequel il est installé. Vous n’aurez aucun réglage à faire dans le programme.
LA CARTE MOTEUR :
Tout d’abord, à quoi sert cette carte ?
Le rôle d’une application DCC (DCC++, mais aussi toutes les autres), c’est de générer un signal électrique codé de manière très précise en binaire pour envoyer des informations à des locomotives ou des accessoires.
C’est une suite de 0 et de 1 qui sont traduits électriquement par des valeurs alternances positives et négatives longues (100µs) pour les 0 et courtes (50µs) pour les 1. C’est l’Arduino qui code ce signal en fonction des commandes de l’application DCC. Les terminaux sur le circuit (locomotives, accessoires, etc...) sont équipés de décodeurs qui vont traduire ces messages binaires en commandes : nous avons donc une opération de codage avec l’Arduino puis une opération de décodage au niveau des terminaux.
La grande innovation de la technologie DCC consiste à faire circuler cette information « de commande » dans le circuit de puissance ; tout passe dans les rails. Et comme nos Arduino qui génèrent l’information de commande sont bien incapables de produire les courants et les tensions nécessaires sur un réseau aussi modeste soit-il, il faut donc y ajouter une carte moteur.
La carte moteur va servir à amplifier le signal en sortie d’Arduino en conservant la forme du signal d’entrée et lui appliquer une tension de sortie en provenance d’une alimentation extérieure de +15 à - 15 V (pour le N) ou +18 à - 18 (en HO) avec une intensité qui se situe dans la majorité des cas entre 1 et 3 ampères.
Le signal représenté ci-dessus ne sera plus de quelques 20 mA sous 5V à la sortie de l’Arduino mais de plusieurs ampères sous 15 ou 18 volts. Ainsi sommes nous arrivés à l’alimentation électrique dont nous allons maintenant rapidement parler.
L’ALIMENTATION
Comment choisir la bonne alimentation en fonction de votre réseau ? Ce n’est pas l’objet dans cet article de fournir des méthodes et des outils sophistiqués pour le calcul de consommation. Nous vous apportons simplement ici quelques indications qui répondront aux attentes de la majorité des modélistes ferroviaires.
Pour le calcul de consommation, on prendra tout d’abord en compte le nombre de locomotives, la nature du réseau et l’âge des locomotives. Les locos récentes ont des moteurs peu gourmands, les vielles locos digitalisées consomment beaucoup plus. On prendra également en compte certaines fonctions spécifiques comme les fumigènes sur les locos vapeur dont la consommation est de l’ordre de 0,5A.
|
|
Mini
|
Maxi
|
HO |
Locomotive récente |
0,20 A
|
0,40 A
|
|
Locomotive digitalisée |
0,40 A
|
0,80 A
|
N |
Locomotive récente |
0,15 A
|
0,30 A
|
|
Locomotive digitalisée |
0,20 A
|
0,40 A
|
Pour le calcul de consommation du réseau, on tiendra aussi compte de l’éclairage dans les locos ou les wagons, des accessoires en fonctionnement, de la signalisation lumineuse…
Enfin, on devra aussi prendre en compte le fait que tous les équipements ne fonctionnent pas tous simultanément ; toutes les locos ne roulent pas en même temps et la consommation d’un aiguillage ne « dure » que quelques fractions de secondes (mais il est conseillé de les alimenter séparément de l’alimentation DCC).
Pour faire simple, on peut considérer qu’un réseau en HO avec 4 à 5 locomotives fonctionnant simultanément consomme environ 2 à 2,5A et le même en N, environ 1,5 à 2A.
Le tableau ci-dessous nous montre donc que le choix d’une alimentation devra être au minimum de 30VA en N et 54VA en HO.
|
Ampères |
Volts |
VA |
N |
2
|
15
|
30
|
HO |
3
|
18
|
54
|
Et comme « qui peut le plus peut le moins », n’hésitez pas à choisir une puissance plus élevée, il n’y a que votre facture EDF qui s’en plaindra.
Le choix de la carte moteur.
Revenons à la carte moteur qui est un élément important dans notre configuration matérielle. Vous pourrez opter soit pour une carte sous forme de shield que vous enficherez sur votre Arduino, soit pour une carte indépendante. Le shield présente l’avantage de limiter le câblage puisqu’un certain nombre de liaisons sont réalisées par cette superposition. Les fonctions indispensables seront automatiquement assurées avec ce montage comme la coupure en cas de court circuit. La carte moteur indépendante procure sans doute une petite économie mais pas seulement ! Nous allons voir cela.
Précisons que Gregg E. Berman n’a envisagé dans DCC++ que des montages avec utilisation de shields.
Voyons tout d’abord les cartes indépendantes : Il y a de nombreuses cartes pour moteurs en vente sur la toile qui peuvent en principe faire l’affaire. Les cartes à base de L298N sont souvent retenues pour leur prix peu élevé (1 à 2 €) mais ne délivrent au maximum que 2A si elles sont équipées d’un radiateur. Notez qu’il existe des cartes pouvant délivrer 43A avec un Arduino, mais à moins de maîtriser parfaitement les moyens d’éviter les courts circuits, nous vous conseillons de rester à distance (ce circuit est plus adapté aux voitures radiocommandées). Pour des raisons que vous comprendrez facilement, nous avons limité notre choix au seul LMD18200, dont les qualités ont souvent été mises en avant ici sur Locoduino et en particulier celle de pouvoir supporter des intensités de l’ordre de 3 Ampères, chaque carte étant livrée avec un radiateur.
Son prix est de 10 € environ mais si vous souhaitez profiter de la possibilité offerte par DCC++ de programmer sur la voie de programmation, il vous en faudra deux. A moins de modifier à chaque fois vos câblages ce qui n’est, avouons le, pas très pratique. Il vous faudra par ailleurs ajouter une mesure de courant qui pourra être assuré très efficacement par un MAX471 au prix de 1 à 2 € multiplié par 2 si vous alimentez simultanément la voie principale et la voie de programmation. Cette mesure de courant est prise en compte par DCC++ pour protéger votre matériel contre les court-circuits et aussi pour récupérer les réponses par consommation de courant du décodeur interrogé ou programmé.
Voici les schémas de câblage avec le LMD18200.
Avec un Arduino UNO et la seule voie principale :
UNO
|
Main
|
P W M
|
3
|
|
|
DIR
|
10
|
|
|
MAX471
|
A0
|
Avec un Arduino UNO, voie principale et voie de programmation :
UNO
|
Main
|
P W M
|
3
|
|
|
DIR
|
10
|
|
|
MAX471
|
A0
|
UNO
|
Prog
|
P W M
|
11
|
|
|
DIR
|
5
|
|
|
MAX471
|
A1
|
Avec un Arduino MEGA et la seule voie principale :
MEGA
|
Main
|
P W M
|
3
|
|
|
DIR
|
12
|
|
|
MAX471
|
A0
|
Avec un Arduino MEGA, voie principale et voie de programmation :
MEGA
|
Main
|
P W M
|
3
|
|
|
DIR
|
12
|
|
|
MAX471
|
A0
|
MEGA
|
Prog
|
P W M
|
11
|
|
|
DIR
|
2
|
|
|
MAX471
|
A1
|
Dans le fichier config.h
de DCC++,
#define MOTOR_SHIELD_TYPE
devra être à 0 mais c’est l’option par défaut.
// DEFINE MOTOR_SHIELD_TYPE ACCORDING TO THE FOLLOWING TABLE:
//
// 0 = ARDUINO MOTOR SHIELD (MAX 18V/2A PER CHANNEL)
// 1 = POLOLU MC33926 MOTOR SHIELD (MAX 28V/3A PER CHANNEL)
#define MOTOR_SHIELD_TYPE 0
Vous pourrez en profiter pour remplacer ARDUINO MOTOR SHIELD
par :
// 0 = LMD18200 MOTOR SHIELD (MAX 28V/3A PER CHANNEL)
DCC++ et les shields moteurs.
L’avantage d’un shield réside dans la simplification du câblage et l’encombrement du montage. Les deux shields moteurs que nous vous présentons disposent de deux sorties permettant d’alimenter la voie principale et la voie de programmation. Ils réalisent par ailleurs la mesure du courant permettant ainsi de se dispenser des MAX471.
ARDUINO MOTOR SHIELD
Le premier montage que nous allons voir concerne l’ARDUINO MOTOR SHIELD qui est l’une des deux solutions proposées « en natif » par DCC++.
Voir la présentation de ARDUINO MOTOR SHIELD sur www.arduino.cc
ARDUINO MOTOR SHIELD est basé sur le L298 dont nous parlions précédemment. Si les 18 Volts délivrés sont suffisants en HO et en N, son courant (théorique) maxi donnée pour 2 Ampères pourra se révéler un peu juste selon votre parc de locomotives surtout si vous utilisez la voie DCC pour l’alimentation de vos accessoires.
- Arduino Motor Shield monté sur une carte Ethernet elle même montée sur un MEGA
Arduino Motor Shield monté sur une carte Ethernet elle même montée sur un MEGA
Vous constatez que le câblage est nettement simplifié. Sur le shield moteur, vous devez relier la pin 5 à la pin 13 et la pin 10 à la pin 12. Notez que toutes les pins encadrées en rouge ou remplies de rouge sont réservées à DCC++ et ne doivent pas êtres utilisées. Toutes les pins encadrées en vert sont disponibles ainsi que les masses (GND) et les sorties de courant +5V et + 3,3V.
Avec un MEGA, le câblage sur l’Arduino Motor Shield est sensiblement différent. Vous n’aurez qu’à relier la pin 2 à la pin 13. Là aussi, toutes les pins encadrées en rouge ou remplies de rouge sont réservées à DCC++ et ne doivent pas être utilisées. Toutes les pins encadrées en vert sont disponibles ainsi que les masses (GND) et les sorties de courant +5V et + 3,3V.
Les pins 4 et 10, (losanges jaunes) sont réservées dans le seul cas où vous utilisez un shield Ethernet.
Notez qu’avec un UNO comme avec un MEGA, vous devrez couper la liaison V-IN Connect tel qu’indiqué ci-dessous. Il faut utiliser un cutter délicatement pour ne pas déborder de la zone concernée et il faut s’assurer que le contact est bien coupé.
POLOLU MC33926 MOTOR SHIELD
Le POLOLU est le second shield figurant dans les options proposées par DCC++. Sa dénomination exacte est en fait : Pololu Dual MC33926 Motor Driver Shield for Arduino puisque chez Pololu il existe d’autres références pour MC33926 mais qui ne pourront pas se monter en shield sur un Arduino.
POLOLU Dual MC33926 Motor Driver Shield for Arduino ici montée sur un Uno R3
Voici la page de présentation du constructeur. La présentation et la documentation sont très complètes.
Comme les autres shields, le Pololu présente l’avantage de simplifier les câblages et de réduire l’encombrement. Sa qualité de fabrication est soignée. Notez qu’il est livré bornes non assemblées. Vous devrez donc jouer du fer à souder avant de pouvoir l’utiliser.
Le Pololu est donné pour des performances de 3A sur chaque sortie (voie principale et voie de programmation). En pratique, cela doit être fortement nuancé. En premier lieu, le refroidissement du Pololu influence ses performances. Aussi n’est-ce pas un luxe de lui adjoindre des dissipateurs comme on peut le voir sur la photo ci-dessous et/ou mieux encore, un ventilateur.
Par ailleurs, le Pololu se met rapidement en sécurité à l’occasion de pics de courant comme il s’en produit lorsque l’on met le circuit sous tension avec plusieurs locomotives sur les rails. Vous n’aurez pas d’autre solution que d’en enlever quelques unes et de relancer la mise sous tension. Un peu crispant certaines fois il faut bien l’avouer.
Enfin, notez que le Pololu peut servir à l’alimentation de l’Arduino, ce qui peut présenter un avantage dans certaines circonstances. Mais comme préconisé par le fabricant, l’Arduino ne devra pas être alimenté par sa prise jack et le jumper devra lui être positionné comme indiqué sur le schéma ci-dessous.
Pololu précise bien que la tension d’alimentation de la carte devra respecter les préconisations pour l’Arduino, à savoir de préférence entre 7 et 12 Volts et en aucun cas dépasser 20 Volts.
Tout comme nous l’avons évoqué plus haut, vous aurez certainement à modifier le fichier config.h de DCC++ BaseStation puisque l’option Pololu n’est pas l’option par défaut.
#define MOTOR_SHIELD_TYPE
devra être à 1.
// DEFINE MOTOR_SHIELD_TYPE ACCORDING TO THE FOLLOWING TABLE:
//
// 0 = ARDUINO MOTOR SHIELD (MAX 18V/2A PER CHANNEL)
// 1 = POLOLU MC33926 MOTOR SHIELD (MAX 28V/3A PER CHANNEL)
#define MOTOR_SHIELD_TYPE 1
POLOLU MC33926 monté sur un shield Ethernet lui même monté sur un MEGA.
Vous remarquez les deux dissipateurs de chaleur.
Câblage :
Voici le schéma pour l’utilisation de l’Arduino UNO + POLOLU sur la voie principale uniquement.
Dans ce cas, il y a juste à relier la pin 7 avec la 10.
Pour l’utilisation du POLOLU et d’un UNO avec la voie de programmation, le câblage est plus conséquent.
Il faut relier :
- La pin 5 avec la pin 8
- La pin 7 avec la pin 10
- La pin 9 avec la pin D2
- La pin 11 avec la pin M2PWM
Avec un MEGA et l’utilisation de la voie principale uniquement, il suffira juste de relier la pin 7 à la pin 12
Avec un MEGA et l’utilisation de la voie principale et de la voie de programmation, Il faut relier :
- La pin 2 avec la pin 8
- La pin 7 avec la pin 12
- La pin 9 avec la pin D2
- La pin 11 avec la pin M2PWM
Enfin, sur le POLOLU également, il va falloir couper délicatement certains jumps avec un cutter ("Cut Trace" sur la figure). Mais les jumpers se situent sous la carte en non dessus comme pourrait le laisser penser l’image ci-dessous.
En conclusion :
Vous disposez maintenant de quelques configurations matérielles éprouvées ainsi que les moyens de les mettre en œuvre pour utiliser DCC++ sur vos réseaux.
L’Arduino Motor Shield constitue une solution économique et assez simple à mettre en place. La détection des surtensions et courts circuits ainsi que de température excessive est intégrée. Une sortie pour la voie principale et une pour la voie de programmation. Ses performances en limitent néanmoins l’usage aux petits et moyens réseaux. Attention à la qualité de fabrication. Toutes cartes à base de L298 ne se valent pas.
Le POLOLU Dual MC33926 Motor Driver Shield for Arduino offre une solution complète et intégrée ; détection des surtensions et courts circuits ainsi que température excessive. Une sortie pour la voie principale et une pour la voie de programmation. Ses performances sont cependant un peu en deçà d’un LMD18200 et son prix est élevé, de l’ordre de 30 €. La qualité du produit et de la fabrication nous semble irréprochable.
Le LMD18200 est un peu le chouchou de Locoduino. Il est vrai que ses performances sont très bonnes et son prix abordable (10 €). Il nécessite un peu plus de câblage et l’ajout d’un MAX471 extérieur (car la mesure de courant intégrée ne donne pas satisfaction). Dans le cas où vous envisagez de n’utiliser que la voie principale, c’est incontestablement le bon choix.
Voilà, nous avons vanté dans les articles précédents la simplicité de communication avec DCC++. Une fois votre montage réalisé, vous pouvez le tester simplement avec le moniteur de l’IDE de l’Arduino. Saisissez les 3 caractères <1>
pour mettre votre circuit sous tension. Les LED’s sur votre shield ou que nous avons ajoutées dans le montages du LMD18200 doivent s’allumer.
Comme d’habitude, n’hésitez pas à nous poser toutes vos questions et nous faire part de vos propres expériences.