ATC - Analogic Train Controler
2. LE CONTRÔLEUR D'AIGUILLAGEA)IntroductionNous allons voir ici le premier des modules de contrôle du projet : Le contrôleur d'aiguillage.
C'est un module vraiment intéressant : Il me semblait être le plus simple du lot et il s'est avéré finallement plus complexe à concevoir et le programme aussi va être sympa. Ce dernier n'est pas encore réalisé mais j'ai déjà une version fonctionnelle sous MikroPascal pour un PIC16F690 avec 4 relais et un Minitrix testé sur une carte EasyPIC6 (Les sorties relais connectés a des LEDs) . Il me servira de base de travail et je le mettrais à disposition incessamment sous peu pour ceux que ça intéresse.
Je vais vous présenter dans un premier temps le module et les problèmes rencontrés, ensuite on enchaîne sur la partie électronique et on finira sur le programme du PIC (Enfin les grandes lignes).
B)Présentation du moduleCe module permet donc de contrôler des aiguillages via un pupitre de commande/TCO. Ce dernier est donc notre interface entre l'utilisateur et le PIC.
Pour ma part je suis parti dans l'option minimaliste suivante :
Un Bouton poussoir et deux leds. Le bouton pour ordonner au PIC le changement d'état de l'aiguillage et les deux leds pour indiquer la position de l'aiguillage commandé :

Donc, en terme d'entrées/sorties (E/S) nous avons besoin pour chaque aiguillage :
(E) De connaitre l'état du bouton (fermé / ouvert) : 1 ligne
(S) D'allumer les deux LED en fonction de la position de l'aiguille : 2 Lignes
(S) De piloter l'aiguillage pour faire bouger l'aiguille : 2 Lignes
Au final nous avons 5 lignes par aiguillage et donc 4 aiguillages max par contrôleur (21 lignes de disponibles)
Enfer et damnation une bête de course pour 4 aiguilles, j'en vois qui râle : Pourquoi ne pas avoir pris un 40 pins ? Réponse : Ben si on est pas capable de gérer correctement nos lignes autant prendre un dsPIC dédié au traitement numérique avec 100 E/S....
Autre point concernant les LEDs : Il faut délivrer (en général) 3v à 20ma. C'est bien, les PIC peuvent sortir 25ma sur une ligne : c'est le premier exemple de montage que l'on nous propose à tout va. Cependant n'espérez pas lui faire sortir 20ma sur l'ensemble des lignes en même temps sous peine de le cramer ! Il ne peut encaisser que 200ma max soit 5/6 leds en prenant de la marge. Si j'arrive a doubler le nombre d'aiguillages on va donc avoir des problèmes (c'est ballot non ?)
Si je résume la situation : On manque d'E/S et on consomme trop sur les LED.
C'est bien de râler mais maintenant va falloir trouver des solutions !1) Manque d'E/SBien on ne peut pas en créer (Ok si avec ce que l'on appelle un « extendeur de port » mais c'est trop facile et je veux pas commencer a utiliser le BUS I2C pour ça sinon on a pas finis).
La règle N° 1 : Si on se pose une question, quelqu'un a sûrement déjà eu le même problème et trouvé une solution : Autant aller la chercher ! a) Les aiguillages : Au lieu d'utiliser des « moteurs» à deux bobines (ou deux fils mémoire), pourquoi ne pas suivre l'idée de
F.GODEFERT dans « des moteurs d'aiguillage à 1,99€:Le schéma » et utiliser des relais automobile pour contrôler nos aiguillages avec une position de repos en l'absence de courant et une position de travail. Et hop ! On double le nombre de sorties, sans les mains !
Ok tout le monde ne souhaite pas avoir des relais ou un aiguillage avec une position de repos...
b) Les LEDs : On a doublé les aiguillages mais on a plus de lignes pour les LEDs maintenant ! Et on va manquer de jus car on va tirer jusqu'a 160ma sur le PIC avec 8 aiguilles.
Pour le nombre de LED la solution est toute trouvée grâce à P'tit train et Fribotte où l'on apprend que l'on peut piloter 2 LEDS avec une seule ligne !
Le schéma retenu :
Le principe :
- Lorsque l'on configure la ligne E/S du PIC en sortie avec une valeur à 0, elle est connecté à la masse et la LED 2 est allumée.
- Lorsque l'on configure la ligne E/S du PIC en sortie avec une valeur à 1, elle est connecté a Vdd = 5v et la LED 1 est allumée.
- Lorsque l'on configure la ligne E/S du PIC en entrée aucune LED n'est allumée (mais un courant est gaspillé entre les résistance R1 & R2).
Et si on bascule très rapidement entre les deux premiers états, c'est comme si les deux LEDs étaient allumées en même temps (mais elles brillent moins que si elles étaient seules).
Dans notre cas seul les deux premiers états nous sont utiles : on aura toujours une seule LED allumée par aiguille.
2) La consommation des LEDS : On va aller chez sonelec-musique : Alimentation d'une LED plus particulièrement à la fin de la page avec le chapitre « Les LED dans les montages alimentés par pile » (vous lirez la suite après ok ?).
Ce que j'ai retiré de celui-ci: On peut envisager d'alimenter des LEDs avec un courant de 1ma au lieu des 20ma nécessaire et obtenir un éclairage acceptable... 1 ma ça résoud très largement nos problèmes : 8ma pour 8 LEDs.... C'est bizance ! Alors je n'ai pas pu attendre, je me suis procuré entre autre des LED soit disant à « 30 000 MCD » sous 3,1V 30ma (
clairement ça « crache » Donc attention danger ! !). Je suis monté jusqu'a R=18ko avec 5v en entrée soit un courant calculé de : 100uA (l'ampèremètre déclarait forfait....) et je trouvais que c'était encore un poil trop fort..... Impressionnant.
Dernier effort, les boutons poussoir :
J'ai trouvé mon bonheur sur la page suivante : 7 switches with 1 A/D pin et quel bonheur.... Jusqu'a 15 boutons sur une seule ligne de PIC !
La solution se base sur une répartition savante de valeurs de résistance et la lecture du voltage résultant sur une ligne Analogique du PIC. Du plaisir en perspective pour le décodage dans le programme...
Au final, je suis revenu a :
- 2 lignes pour un Relai
- 3 lignes pour un « Minitrix »
+ 1 ligne commune pour tout les boutons
Soit 9 aiguillages « relai » ou 5 aiguillages « Minitrix » (ou un melting pot des deux).
En récupérant les 2 lignes série je pourrais même pousser jusqu'a 6 aiguillages « minitrix » ...
C'est la fête au village ! Et ça en valait le coup non de lui faire sortir les tripes à ce PIC !
Dans la version proposée ici je me suis contenté de 8 sorties (ça faisait un compte rond).
=>Mais a mettre a niveau dans une prochaîne version.
Ah.. Dernier point : Afin de limiter la consommation (hum..) et ne pas trop soliciter les bobines, l'alimentation des aiguillages est temporisée et paramétrable :
- Pour les « Minitrix » chaque état est maintenu pendant 1s par défaut.
- Pour les Relai en position « de travail », celle-ci sera maintenue pendant 15s par défaut.
Mais chaque appui sur un bouton bascule l'état de l'aiguillage quelque soit le timer (si le Relai était en travail il est immédiatement coupé et les LEDs correspondantes mises à jour)
C)L'électroniqueLe schéma électronique :

Vue de dessus du typon et des composants :

Le principe : On a la carte principale sur laquelle vient se greffer les modules :
- MicroContrôleur
- Aiguillage
Le premier a été vu au chapitre précédent, le second c'est maintenant.
C'est un schéma relativement simple basé sur un MOSFET N Logique piloté par une sortie d'aiguillage du PIC (Ok j'ai sorti l'artillerie lourde mais attendez..)
Le typon a deux particularités :
1) Au lieu d'un MOSFET on peut très bien utiliser un transistor Darlington NPN genre TIP121 (On réajuste la résistance R1 et on laisse R2 ouvert)
2) Pour la diode de roue libre (qui sert a protéger le MOSFET / TIP des retours de courant de la bobine), j'ai prévu une double implémentation CMS ou traditionnelle comme ça tout le monde est content. Et les derniers râleurs pour les résistances : 1 trou dans chaque PAD CMS et hop ! en position verticale...
Sinon double alimentation : 12V (ou 15v) pour les aiguillages, 5V pour les LEDS et le microcontrôleur.
Au niveau des sorties LEDs & Boutons il faudra faire un peu de soudure sous le TCO
=> Pour les boutons il faudra relier une des pattes de chacun des boutons à la masse et l'autre à une des 8 « sorties boutons » .
=> Pour les LEDs, Il faudra bien faire attention a les relier entre elles tête bêche ensuite peut importe (enfin a 100uA je pense qu'elles ne devraient pas trop souffrir d'une erreur)
Ensuite il faudra que je fasse un tableau de répartition des différentes E/S: LEDS,boutons,aiguillages et relier correctement tout ça pour que lorsque l'on appui sur un bouton, ce ne soit pas un autre aiguillage qui soit actioné et la LED d'un troisième allumée... Et bien préciser les LEDs allumée en position de repos pour les aiguillages « Relais » .
D)Le programmeComme dit en introduction, je ne l'ai pas encore réalisé pour ce montage. En revanche j'ai déjà finalisé un programme équivalent pour un PIC 16F690 sous MikroPascal de Mikroe, donc je sais où je vais et comment je vais m'y prendre.
Si je résume les grandes lignes du programme :
A) Initialisations
- Initialisation du PIC (Configuration des entrées/sorties, des timers)
- Initialisation des aiguillages Késako ? Ben les relais : y'a pas de problèmes : ils sont en position de repos si on ne les alimente pas mais pour les « Minitrix » on ne peut pas savoir dans quel état ils sont au démarrage, donc on les force a un état par défaut pour être sur de leur position.
- Initialisation des variables du programme.
- Initialisation des LEDs On affiche toutes les leds en mêmes temps (qq secondes) pour montrer qu'on est les maîtres du Dieu Ampère et surtout pour vérifier visuellement que toutes les LEDS sont fonctionelles
B) Boucle principale
- Lectures des états des boutons (enfin décryptage...)
- Mise a jour des états des relais en fonction des boutons lus.
- Contrôle si expiration du temps de mise en tension pour chaque relais et arrêt des sorties d'aiguillage le cas échéant.
- Mise a jour des sorties LEDs en fonction de l'état de chaque aiguillage
on boucle....
Voilà rien de bien sorcier, mais il faut tenir compte du type d'aiguillage qui influe sur le comportement du système :
- Pour les aiguillages « Minitrix », lorsque le temps de mise en tension est écoulé (1s par défaut) on « éteint » la sortie d'aiguillage (on la met a zéro). Les LEDs correspondantes reste dans leur état.
- Pour les Relais, lorsque le temps est écoulé (ou que l'on appui une seconde fois sur le bouton avant la fin du compteur de 15s), on « éteint » la sortie d'aiguillage mais l'état des LEDs dois être inversé car le relai repasse alors dans sa position de repos et l'aiguillage est donc modifié.
Finallement il y a beaucoup de cas à prendre en compte, et adptabilité oblige je vais gérer tout ça avec un maximum de paramétrage via l'EEPROM des PIC. Cela permettra de configurer finnement les particularités de son réseau sans avoir a mettre les mains dans le camboui grâce au futur Bootloader et ça donnera quelque chose comme ça :
ConclusionsVoilà la présentation du premier contrôleur terminée. N'hésitez pas à me faire part de vos critiques et suggestions !
Prochaîne étape : Le contrôleur de détection
(Détection d'un convoi sur un canton ou portion de canton)@+
Denice