mercredi 8 juin 2011

Décodeurs pour moteurs d'aiguilles à servo-moteurs


Décodeur DCC pour servo-moteurs


Pour faire suite à ma description des moteurs d’aiguilles à base de servo-moteurs de radiocommande, je vous propose cette fois la réalisation des décodeurs DCC correspondants.

Chaque décodeur est destiné à commander 4 servo-moteurs de façon totalement indépendante, et avec une très grande souplesse d’adaptation à tous les types d’aiguilles actuellement connues. Avec un peu de méthode, il est facile à réaliser.

La principale contrainte concernera la programmation du micro-contrôleur (µP), un PIC12F629 par ailleurs très bon marché et très facile à se procurer dans le commerce électronique, et de disposer d’un programmateur de µP genre IC Prog à raccorder à un ordinateur type PC.

Cette phase ne doit pas être un obstacle mais peut effectivement rebuter certains modélistes qui ne sont pas habitués à programmer des µP.

A l’instar de tout composant programmable, le µP ne sait rien faire tant que des instructions ne lui ont pas été données. Ces instructions contenues dans un programme informatique dédié, devront être transférées dans sa mémoire flash.

Cette opération appelée programmation (ou écriture) n’est à faire qu’une seule fois pour obtenir un décodeur capable de traiter les ordres DCC en provenance de la centrale. Une fois que les instructions auront été stockées dans la mémoire flash du µC, elles y resteront pour des très nombreuses années et ne s’effaceront pas, même si l’alimentation est coupée.

Le programme proprement dit est très connu des modélistes et dans la mesure où il est libre de droits. Il n’y aura donc aucun problème pour l’utiliser autant de fois que nécessaire. Le programme complet est contenu dans un fichier hexadécimal (me contacter).

S’agissant du PIC12F629, une précaution préalable mais absolument indispensable consistera à lire la valeur des deux derniers octets de la zone programme de son registre mémoire.
En effet, le PIC12F629 est doté en fabrication d’un oscillateur interne destiné à cadencer son fonctionnement, et contrairement à d’autres types de micro contrôleurs, il n’a pas besoin de quartz extérieur pour piloter son horloge interne à la fréquence prévue. Cette fréquence doit être très précise sinon le µP ne fonctionne pas du tout.

En contre-partie, selon la fabrication, la fréquence de cet oscillateur peut varier légèrement et nécessite donc une petite correction dont la valeur varie d’un µP à l’autre. Le fabricant a donc introduit dans la mémoire flash de chaque µP la valeur individuelle de la correction à apporter à la fréquence de l’oscillateur interne.

Cette valeur doit donc d'abord être lue avec le programmateur, notée et réintroduite à la même adresse dans le programme complet avant de lancer la programmation.

J’insiste sur la nécessité absolue de lire préalablement la valeur avant toute programmation, faute de quoi, cette valeur serait irrémédiablement réinitialisée en phase d’écriture sans possibilité de la retrouver ultérieurement avec pour conséquence que le µP refusera tout simplement de fonctionner ! 

Notre décodeur fonctionnant en DCC, il comporte un certain nombre de CV’s accessibles à l’utilisateur. La valeur « usine » de ces CV’s correspond aux valeurs hexadécimales contenues dans la zone « data » du programme.

Sans entrer trop dans les détails, on peut considérer que le programme principal comporte des interruptions qui l’obligent à aller prendre en compte de données (les CV’s) contenues dans son registre utilisateur, lequel registre contient des valeurs par défaut (modifiables), telles que l’adresse de base du décodeur, la vitesse des servos, angle de débattement, etc.

Vous trouverez dans le tableau ci-dessous la liste des CV’s accessibles à l’utilisateur.

CV
désignation
valeur



1
adresse basse
1 à 99
2
validation
255
3
angle rotation servo 1
1 à 105
4
angle rotation servo 2
1 à 105
5
angle rotation servo 3
1 à 105
6
angle rotation servo 4
1 à 105
7
révision (lecture seule)
10
8
fabricant (lecture seule)
13
9
adresse haute
0 à 7



29
configuration
128



33
espacement (x 256µs)
128
34
position mémorisée
0 à 1
35
vitesse servo 1
1 à 255
36
vitesse servo 2
1 à 255
37
vitesse servo 3
1 à 255
38
vitesse servo 4
1 à 255


Dans sa version de base, l’alimentation électrique des servo-moteurs est prélevée après régulation, sur le courant DCC, ce qui ne pose pas problème si le nombre de décodeurs est peu important.

En revanche, dans la mesure où les servo-moteurs viennent chercher leur alimentation sur le courant DCC, chaque décodeur n’a pas une consommation nulle et quand leur nombre atteint une dizaine (soit 40 aiguilles), il est possible que la consommation de l’ensemble vienne prélever une puissance non négligeable sur le courant DCC issu de la centrale, surtout si celle-ci dispose d’un courant de sortie modeste.

Dans ce cas, il est préférable de ne relier les décodeurs au courant DCC que pour les transports des ordres (consommation quasi nulle) et de confier par conséquent à un générateur 5 volts séparé à destination des décodeurs, l'alimentation des servo-moteurs.

Cette solution plus rationnelle évitera de recourir à un booster par ailleurs plus onéreux et un peu « luxueux » pour cet usage. Je peux fournir les informations pour réaliser un décodeur avec 5 Volts extérieurs. 

Le schéma électronique de chaque décodeur est le suivant :


On constate qu’il est très simple et ne comporte, en plus du µP, que quelques composants.

Naturellement, on aura recours à un circuit imprimé dont le tracé et la réalisation ne comportent aucune difficulté, même pour un débutant en électronique, d’autant qu’une miniaturisation n’est pas nécessaire puisque les décodeurs ne sont pas « embarqués » et prennent place sous le réseau à proximité des moteurs d’aiguilles.

On voit tout  de suite les raccordements des entrées et des sorties :
-        la liaison (X1-X2) avec le courant DCC porteur des codes numériques,
-        les sorties directes à destination des connecteurs des 4 servos moteurs (JP1 à 4).
à noter la présence d’une Led et sa résistance (cadre pointillé), et d’un interrupteur.

La Led n’est pas indispensable, mais elle permet de contrôler visuellement la présence de la tension de 5 Volts régulés et donc de s’assurer que le DCC est bien appliqué aux bornes d’entrée du décodeur. L’implantation éventuelle de la Led se fera entre la sortie 5 Volts du régulateur et la résistance dont l’autre patte sera reliée à la masse.

Le rôle de l’interrupteur (ou cavalier amovible) est de permettre de relier la broche 4 du PIC à la masse alors que cette broche reçoit en fonctionnement normal le + 5 Volts via une résistance de 22 kOhms. Cette commutation n’est pas indispensable au bon fonctionnement du décodeur, mais elle devient nécessaire si on souhaite effectuer une lecture du décodeur sur une voie de programmation par exemple.

En effet, à la différence d’un décodeur de locomotive, la sortie du décodeur n’étant pas suffisamment « chargée », la centrale risque de ne pas « voir » le décodeur en phase de lecture. Par cet artifice, la centrale sera donc « trompée » momentanément et acceptera de valider le processus de lecture des différentes CV’s.

Liste des composants :
µC : PIC12F629 et son support DIL8, 
régulateur : 7805,
diodes : 1N 4007 (x 4),
condensateur chimique : 100 µF/25 Volts axial,
condensateurs polyester : 100 nF (x 3),
résistances ¼ W : 22 kOhms (x2),
connecteurs mâles 2,54 mm (x4), 
bornier 3P,
une led (en option) de couleur indifférente et une résistance de 330 Ohms.

Vous trouverez ci-dessous le typon du circuit imprimé et l’implantation des composants.





Pour terminer, que les modélistes qui hésitent à se lancer dans la programmation me contactent sur le site de CFN.

(c) Texte, photos, conception : J.M. GILLES