Commande moteur d'aiguillage
Le principe de commande du servomoteur est simple mais nécessite quand même une electronique de pilotage.
La position angulaire de l'axe du servo est déterminée par la largeur d'une impulsion (de 750 à 2250µs).
La rotation maximum est d'environ 180°.
J'ai conçu une carte supportant un maximum de 6 servos. Chaque carte est installée sur le réseau au plus proche des servos.
Elle est connectée au reste du réseau par 3 fils uniquement. Alim 12V et 1 fil loconet.
Elle possède son propre régulateur de tension 5V afin de ne pas véhiculer cette tension sur l'ensemble du réseau (risque de captation de parasites)
un connecteur pour servo et 3 fils pour le relais de polarisation du coeur d'aiguille.
Un arduino nano assure la gestion de l'ensemble.
* Interfacage Loconet
* Interfacage USB
* Commande (course limitée et progressive) des servo-moteurs
* Relais de réalimentation des coeurs d'aiguille. Le changement d'état se fait à la position médiane de l'aiguille pour éviter les court-circuit.
* Mémoriser (en EEProm) les différents réglages de configuration et la position mécanique de l'aiguillage.
* Une interface de dialogue utilisant le port USB de la carte arduino et la fenêtre de terminal du système de developpement arduino. (ou un autre terminal compatible)
Cette interface permet de :
- Définir les positions angulaires de chaque servo et leurs vitesses de déplacement.
- Attribuer un numéro d'aiguillage à chaque servo (numéro LocoNet unique utilisé par RTTC)
- Visualiser les messages LocoNet.
- Lancer des tests d'endurance.
Puisque je n'ai besoin que de 4 cartes pour couvrir tous mes besoins, elles sont réalisées simplement sur des cartes proto.
Cette solution est acceptable sur un petit réseau. Sur un réseau plus important il faudra envisager de fabriquer des circuit-imprimés.
Les cartes contrôleur aiguillages en cours de câblage.
Coût de réalisation (éléments principaux)
1 carte proto 7x9cm moins de 1€ http://www.banggood.com/5Pcs-FR-4-Universal-Double-Side-Prototype-PCB-Board-7cm-x-9cm-p-1002411.html
1 Arduino : moins de 3 € http://www.banggood.com/5Pcs-ATmega328P-Nano-V3-Controller-Board-For-Arduino-Improved-Version-p-951797.html
6 Relais : moins de 4€ http://www.banggood.com/5Pcs-HK19F-DC-12V-SHG-Coil-DPDT-8-Pin-Mini-Power-Relays-PCB-Type-p-928947.html
6 Servos : moins de 13€ http://www.banggood.com/4-X-TowerPro-SG90-Mini-Gear-Micro-9g-Analog-Servo-p-1010676.html
Visserie : moins de 2€ http://www.banggood.com/10Pcs-M3-25mm-FemaleFemale-Thread-Brass-Hex-Standoff-PCB-Pillar-Spacers-p-998739.html
Soit moins de 23€ pour 6 aiguillages.
Le seul véritable effort est le temps de câblage. Prévoir 4 à 5 heures par carte !
Pour ceux que cela intéresse, voici un .ZIP contenant tous les fichiers.
http://vulatrain.fr/images/ln_access.zip
Connecter le cable USB, lancer le soft Arduino et ouvrir la fenêtre terminal en 115200 bauds.
A l'invite, taper 'H' pour avoir l'aide sur les fonctions. On doit obtenir ceci :
** Help ** LN_ACC V6 jml 110616 Vers 6
Chg pos Aig: A <Aig_log> <pos> 0=Droit 1=devie
Valeurs en EEP: C
Info: I
Maj Cvs: D <Aig> <DelProg> <PasDeProg>
Maj TypeObj: O <Aig> <TypeObj>
Maj Cvs: P <Aig> <ValMoy> <val_droit> <val_deviee>
Maj Aig_log: L <aig> <Aig_log>
Milieu: M <Aig> <ValMoy> 75-225
Trace Tram: N TrameLn MsgLnEtat (0 ou 1)
Mode test: T <NuTst> <param>
Raz CVs: Z 99
La commande 'i' permet d'afficher le paramètrage de chaque servo :
Info
CV Obj 1 TObj 2 logi 22 ValMoy 150 ValPosDt 140 ValPosDv 160 DelaiProg devie DelaiProg 6 PasDeProg 1
CV Obj 2 TObj 2 logi 0 ValMoy 126 ValPosDt 116 ValPosDv 136 DelaiProg devie DelaiProg 6 PasDeProg 1
CV Obj 3 TObj 2 logi 3 ValMoy 150 ValPosDt 143 ValPosDv 157 DelaiProg devie DelaiProg 6 PasDeProg 1
CV Obj 4 TObj 2 logi 4 ValMoy 150 ValPosDt 143 ValPosDv 157 DelaiProg devie DelaiProg 6 PasDeProg 1
CV Obj 5 TObj 2 logi 5 ValMoy 150 ValPosDt 143 ValPosDv 157 DelaiProg devie DelaiProg 6 PasDeProg 1
CV Obj 6 TObj 2 logi 6 ValMoy 150 ValPosDt 143 ValPosDv 157 DelaiProg devie DelaiProg 6 PasDeProg 1
'Obj' est le numéro physique du servo
'Logi' est le numéro logique du servo (c'est le n° loconet, il doit être unique sur le réseau)
'ValMoy', 'ValPosDt' et 'ValPosDv' détermine les valeurs angulaires pour les positions Milieu, Dévié et Droit de l'aiguille.
'DelaiProg' précise la vitesse de déplacement, plus il est élévé, plus le déplacement de l'aiguille sera lent.
notes:
* La valeur angulaire est exprimée en dizaine de micro-seconde (150 génère une impulsion de 1500 micro-seconde).
* Il faut commencer par définir (par tatonnement) la position milieu de l'aiguille grace à la commande 'M' puis programmer les 3 valeurs (Moy, Dt, Dv) grace à la commande 'P'. La valeur du point milieu est importante car c'est à ce point que le relais de polarisation du coeur d'aiguille est changé.
Avec le montage mécanique du servo que j'ai utilisé et des aiguillages N peco, un delta de 100 micro-secondes (voir moins) par rapport au point milieu est suffisant. exemple: si le point milieu est à 150, le droit est à 140 et le dévié à 160 (ou l'inverse si le servo est monté en sens opposé). Ces valeurs seront différentes en fonction du servo, du type de montage, du modèle d'aiguillage, etc ...
* La commande 'L' permet d'assigner un numéro logique à chaque servo.
* La commande 'A' permet de tester l'aiguillage avec son N° logique.
Une petite vidéo résumant cette article.