A.M.F.N. |
Cette réalisation utilise le programme pour
PIC: SSWDEC (Single Switch Decoder),
écrit par
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
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.
|
|
|
|
|
|
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 |