A.M.F.N.
Association des Modélistes Ferroviaires de Nice

DUSA-1: Décodeur (DCC) pour Un Seul Accessoire
(version pour moteurs lents)


Remerciements et références:

Cette réalisation utilise le programme pour PIC:  SSWDEC (Single Switch Decoder), écrit par Alex Lagutin   sur la base du travail réalisé antérieurement par Dean Probst.
Toute exploitation commerciale en est interdite sans l'accord des auteurs.

Merci à eux, et merci également aux animateurs de Ptitrain, qui m'ont mis le pied à l'étrier en matière de PICs.

Le site DCC goes Z présente par ailleurs d'autres types de décodeurs.

Objectifs:

Soulignons le d'entrée, l'objectif de cette réalisation n'est pas de faire des économies. Ce décodeur pour une seule aiguille revient probablement aussi cher qu'un décodeur du commerce, si on tient compte du fait que ceux-ci commandent généralement quatre aiguilles.

En pratique, ce décodeur est destiné à commander sur mon réseau quelques signaux mécaniques isolés, sans devoir tirer des fils pour les raccorder à un décodeur éloigné.

Un autre objectif était de me familiariser avec la technique des PICs et du DCC, en vue de réalisations ultérieures plus complexes.

Description:

DUSA-1  est conçu pour commander des signaux mécaniques  motorisés par un moteur Conrad 219998 / 219999.
Sous 5V, les moteurs Conrad fonctionnent silencieusement et sans brutalité, gage d'une fiabilité et d'une durée de vie raisonnable.
Bien qu'ils soient vendus pour cela, je n'aurais pas utilisé ces moteurs sous 12V pour actionner des aiguilles, compte tenu de leur fabrication dont le mieux qu'on puisse dire est qu'elle est faite à l'économie.

Le décodeur tire son énergie du bus DCC: le signal DCC est redressé et un ou deux régulateurs abaissent la tension à 5V. L'ensemble du décodeur, mais aussi le  moteur sont  alimentés en 5V. Le moteur ne consomme que durant la phase de mouvement, qui est de l'ordre de la seconde.

Mes signaux nécessitant un éclairage permanent, une sortie 5V est disponible à coté des sorties du moteur.

Le schéma:

 Il fait presque uniquement appel à des circuits intégrés: redresseur en boîtier DIP, régulateurs 5V, microcontrôleur PIC 12F629 ou 12F675, pont en H LB1630.

Deux options d'alimentation sont prévues: avec un seul ou deux régulateurs de tension.
J'utilise personnellement DUSA-1 avec un seul régulateur, mais comme nombre de décodeurs d'amateurs que l'on trouve sur le Web ont prévu de séparer l'alimentation du microcontrôleur de celle du moteur, j'ai préféré prévoir d'emblée cette possibilité.

Le moteur Conrad est monté avec ses deux diodes d'origine câblées en parallèle.

À l'intérieur du moteur (en tous cas les miens!) on trouve deux résistances de limitation du courant en série: une de 4,7 ohms et 15 ohms. Le moteur fonctionnant ici sous une tension inférieure à ses spécifications, on peut supprimer la résistance de 15 ohms pour lui donner un peu plus de vitesse et de couple.

Le mode d'utilisation des cavaliers adr et dur est indiquée plus loin.

Le programme:

Le code source et le fichier hexadécimal de programmation pour PIC 16F629 peuvent être téléchargés sur le site des auteurs.
Une version du source pour 16F675, avec davantage de commentaires, ainsi que le fichier hexadécimal pour 16F675 peuvent être téléchargés ici.
(Si on utilise un 12F675 au lieu d'un 12F629, il y a deux lignes à ajouter pour inhiber le CAN).

Il y a dans le programme trois parties bien distinctes:

décodage du signal et extraction des bits et des octets, conformément à  la norme S 9.1   (voir le site de la NMRA). Cette partie est assez pointue et comprend nombre d'astuces destinées à tenir les performances avec un microcontrôleur bas de gamme.
interprétation de ces données (adressage, etc) conformément à la recommandation RP 9.2.1   (idem). Cette partie est simple à comprendre en suivant la recommandation en question.
enfin, utilisation de ces données pour commander notre accessoire.

Note: d'après RP 9.2.1, les décodeurs de commande d'accessoires peuvent avoir huit sorties indépendantes, ou bien ces sorties peuvent être groupées en 4 fois 2. Mais avec ma centrale Lenz, la première option ne peut être utilisée: le bit "C" est bloqué à 1.

Personnalisation: ici, pas de CV, mais un mode de personnalisation bien commode: deux cavaliers qui permettent de programmer le décodeur in-situ.

Lorsque l'on positionne le cavalier adr, le premier code qui passe sur le bus DCC est pris comme adresse. Avec le cavalier dur, il est pris comme durée d'impulsion.

Si donc on veut donner au décodeur, ou plus exactement à l'accessoire commandé, l'adresse 56, on met le cavalier adr, puis on envoie une commande à l'accessoire 56, puis on enlève le cavalier. Bien entendu, le réseau doit être inactif pendant cette période.

On procède de même pour régler la durée des impulsions en sortie, grâce au cavalier dur, avec les conventions suivantes:
environ 20ms par unité,
une valeur impair signifie: non-relançable, une valeur paire: relançable,
une valeur 251 ou 252: sortie activée en permanence.
Dans le cas des moteurs Conrad, j'ai réglé ce paramètre à 16 (durée d'environ  300ms,  relançable).

La réalisation:
 
Le circuit imprimé est commun avec celui de DUSA-2, décodeur pour servo-moteur décrit sur la page suivante.

Avec DUSA-1, monter le LB1630, mais les picots de programmation aux  ne sont pas utilisés.

Ci-contre, version à un seul régulateur.
Un strap ré-alimente l'autre partie du montage.
La diode est inutile et remplacée par un autre strap.

Aspect du montage à un seul régulateur.
Ci-contre, version à deux régulateurs.

Télécharger le typon circuit imprimé:  au format PDF, pour un seul circuit ou cinq circuits.

Télécharger les programmes: programmes sources (.ASM) et compilés (.HEX) pour ce décodeur et DUSA2 décrit sur la page suivante.

Autres possibilités d'utilisation:

Autres moteurs: ce décodeur peut actionner, en principe, tous les moteurs fonctionnant sous 5V et  nécessitant une inversion de la tension.
Les Switchmaster fonctionnent parfaitement. Les Lemaco et les Tortoises fonctionnent aussi, mais un peu trop lentement à mon goût.
On pourrait imaginer d'accroître la tension de sortie, mais le LB1630 n'est pas sensé supporter plus de 6V. On peut tout de même remplacer le régulateur n°2 par un 7806.

En cas d'utilisation avec des moteurs devant rester sous tension en permanence, il faut estimer la puissance dissipée dans le régulateur, qui peut nécessiter un radiateur. Il faut aussi s'assurer que la centrale DCC est capable de délivrer en permanence le courant nécessaire à tous les décodeurs.

Feux lumineux: il est possible de commander des feux lumineux en même temps que le moteur, de différentes façons:
des lampes à incandescence 5V peuvent être connectées entre chacune des sortie et le +5V.
des LEDs munies de leurs résistances peuvent être connectées de même, ou bien tête-bêche, en parallèle sur le moteur.
Pour que les feux restent allumés en permanence, il faut régler la sortie comme permanente. Si on tient à couper l'alimentation du moteur tout en conservant les feux, une petite modification du programme est nécessaire.

FAQ:

Que signifient exactement relançable et non relançable ?

En mode relançable:
après réception d'une commande,  que le décodeur soit encore actif ou pas, la réception de la même commande provoque un redémarrage  de l'impulsion de sortie à partir de zéro, autrement dit, si le décodeur est en fonction,  l'impulsion est prolongée, et s'il ne l'est plus, une nouvelle impulsion est générée.
la sortie reste activée tant qu' on garde appuyée la touche de la commande à main.
si on reçoit une commande inverse, que le décodeur soit encore actif ou pas, celle-ci est traitée et le décodeur change d'état.

En mode non relançable:
après réception d'une commande,  que le décodeur soit encore actif ou pas, la réception de la même commande est sans effet.
l'impulsion en sortie a donc une durée fixe, et on ne peut pas la répéter.
néanmoins, si on reçoit la commande inverse, que le décodeur soit encore actif ou pas, celle-ci est traitée et le décodeur change d'état.

En mode permanent, les notions de relançable ou non relançable sont sans objet.

Pourquoi la durée de commande du moteur est elle approximative ?

Parce qu'en cours de fonctionnement, le décodeur continue à écouter et à décoder les paquets DCC qui passent sur le bus, et que le microcontrôleur n'est pas assez puissant pour faire les deux à la fois correctement. Priorité a été donnée au décodage des paquets.
De plus, en mode relançable, si la centrale DCC répète les messages, ceci a pour effet d'allonger la durée de l'impulsion.

Comment commander des moteurs nécessitant 12V ?

Ce n'est pas possible avec le pont en H utilisé (LB1630), celui-ci ne supportant que 6V.

Peut-on commander des signaux rouge / vert tout en mettant le moteur hors tension après un temps ?

Oui, mais cela nécessite une modification dans le programme.


pages techniques page précédente: utilisez la touche "PRÉCÉDENT(E)" de votre navigateur  page suivante

Retour à la page d'accueil