11.

11.1.
11.2.
11.3.

11.4.
11.5.
11.6.
11.7.
4e application : Pictrain3
Cahier des charges :
Le principe du va-et-vient
L´électronique
Fonctionnement
Le programme :
Initialisation
Boucle principale
Interruption Timer0
Fin
Pictrain3
Le cahier des charges
Le projet Pictrain3 concerne un va-et-vient, c´est-à-dire un système qui commande l´aller-retour d´un train sur une voie unique, entre deux “extrémités” que nous appellerons “gauche” et “droite”. Cette voie unique ne peut croiser ou être reliée à d´autres portions du réseau.
FAQ   N'y a-t-il pas déjà un tel projet dans Ptitrain ? — Oui, c'est le va-et-vient nommé "J´en viens et j´y retourne !", qui connaît un grand succès... Néanmoins, il est (volontairement) d'une simplicité telle qu'il ne joue pas "dans la cour des grands" comme notre page d'aujourd'hui...
Car l´originalité, c´est que le démarrage et l´arrêt du train seront progressifs, sans qu´on se départisse de nos habitudes : simple et pas cher.
Nous réutiliserons le dispositif de puissance de Pictrain2, c´est-à-dire que le courant de sortie sera du courant rectangulaire à 240 Hz.
Et comme d´habitude sur Ptitrain, c´est du réel et de l´éprouvé, c´est-à-dire que le système a été réalisé et testé  : il fonctionne.
Techniquement (au sens microP), nous utiliserons tout ce qui a déjà été présenté dans les montages Ptitrain précédents, il n´y a rien de neuf.
Je considère donc que vous avez bien compris les pages précédentes et je ne m´attarderai pas à des rappels.
11.1. Le principe du va-et-vient
Un train (une navette, souvent un autorail) part d´une extrémité, accélère jusqu´à la vitesse de croisière, ralentit à l´approche de l´autre extrémité, jusqu´à s´immobiliser au bout la voie. Après un certain temps, il repart dans l´autre sens, accélération, vitesse de croisière, puis de nouveau ralenti et arrêt avant de repartir pour une nouvelle boucle.
Le schéma ci-dessus montre que la voie est divisée (par des coupures de rail) en cinq sections, ce qui donne le fonctionnement suivant :
Le train part de la section “stop” de gauche,
Accélère jusqu´à la vitesse de croisière,
Ralentit jusqu´à la vitesse de ralenti à partir de l´entrée de la section d´arrêt droite,
Le train continue à la vitesse de ralenti jusqu´à la section “stop” de droite, où il s´arrête,
Après temporisation, il effectue le même processus de droite à gauche.
11.2. L´électronique
11.2.1. Schéma général
Dans le schéma général ci-dessous, on retrouve :
À droite, la partie de commande du courant de 15 V pour la voie, avec les circuits de détection de présence du train,
À gauche, le microP alimenté en 5 V,
Entre les deux, des optocoupleurs (OC) reliant les deux parties (e : partie émettrice, diode de l´optocoupleur ; s : sortie, transistor de l´optocoupleur).
microP 12F675 (ou 12F629)
R1, R2 220 ohms
R3, R5 4,7 kilohms
R4, R6 1000 ohms
R7 6,8 kilohms
Condensateur 100 nF, soudé au plus près du microP
Optocoupleurs 3 ou 1 quadruple (le 4e OC sera utilisé dans un autre montage)
Diodes 1 à 5 5 diodes de la série des 1N4000
T1 genre BD139
T2 genre BC237
T3 genre BC307
2 x relais 12 volts, 2 R.T.
Alimentations 5 volts pour l'électronique — 15 volts pour la traction
T3 genre BC307
Électroniquement, il n´y a rien de nouveau.
Attention : il n´y a pas de protection sur les alimentations ; donc ne les branchez pas à l´envers et évitez les courts-circuits prolongés.
Par ailleurs, dans les fréquences et intensités que nous utilisons, les optocoupleurs sont relativement interchangeables ; j´ai utilisé ici un quadruple optocoupleur CNY74-4, dont un coupleur n´est pas utilisé (mais il me sert dans d´autres montages).
FAQ   Que recommander comme type d'optocoupleur ? — Le "père" des optocoupleurs s'appelle "TIL111", il faut toujours en avoir dans son tiroir ! Ou ses "compatibles" qui ont nom CNY17, 4N35, SFH601, IL74, SU25, 4N25, TIL112, TIL118, TIL11...
Pour notre montage Pictrain3, demander plutôt un OC quadruple (moins de place occupée, moins de soudures) qui soit de type TIL111, exemples :
chez GOTRONIC : CNY74-4, à 1,60 euro
chez SELECTRONIC : TLP 504 A2, à 1,40 euro
Bizarrement, on ne nous indique JAMAIS (comme pour un transistor normal) le courant maximal que supporte le transistor de sortie d'un OC* ! Ne jamais donc espérer en tirer plus que l'allumage d'une led ou d'un micro-relais (soit 50 mA GRAND MAXI), sauf si c'est noté explicitement dans ses caractéristiques (p. ex. 500 mA sous 5 volts pour le ILD74 !).
* À la place on parle de "TTC", taux de transfert en courant, bien moins compréhensible.
FAQ   Pourquoi deux relais ? — Une remarque tout de suite : il y a deux relais à deux contacts repos-travail, tout simplement parce que :
— deux relais 2 RT sont moins chers qu´un relais 4 RT ;
— je n´ai pas trouvé de relais 4 RT à souder sur un circuit imprimé... C´est tout, il n´y a pas d´autres raisons.
11.2.2. Implantation
Comme d´habitude, je propose une implantation sur un Cimec :
En haut à gauche l´alimentation de 5 V, en bas à droite celle de 15 V. Ne pas oublier les deux coupures des pistes d´alimentation (rectangles rouges) en haut et en bas à gauche. Ces coupures servent à isoler l´alimentation 5  V (à gauche)  de l´alimentation 15 V (à droite). Si vous les oubliez, vous risquez de gros ennuis.
Les sorties en haut à droite correspondent au branchement de la voie, respectivement :
à gauche, moins et plus de la zone d´arrêt,
à droite, plus et moins de la pleine voie.
11.3. Fonctionnement
11.3.1. Voie et connexion
La voie doit être découpée selon le schéma ci-dessous :
Les coupures délimitent ainsi cinq sections, alimentées par les deux relais RL1 et RL2 (commandés en même temps), les sorties du relais 2 comportant le circuit de détection de présence.
Cela paraît un peu simpliste, mais cela marche à tous les coups :
Marche vers la droite (le train est dans la section “stop” gauche, les relais sont au repos) :
Le moins est donné par RL1-B et RL2-A,
Le plus pour “pleine voie” et “arrêt gauche” est donné par RL1-A,
Le plus de la section “stop gauche” est donné par la diode,
Le plus de “arrêt droite” vient de RL2-B, soumis à détection,
Le moins de “stop droite” est bloqué par la diode.
Ainsi le train accélère jusqu´à la vitesse de croisière, est détecté lors de l´entrée en section “arrêt droite”, ralentit et s´arrête dans la section “stop droite´
En marche vers la gauche, les deux relais sont collés et inversent toutes les tensions, et la détection s´active lorsque le train entre dans la section “arrêt gauche”.
Le résultat de cette alimentation croisée est que, quel que soit le sens de marche du train, la détection du train en zone d´arrêt est unique et fonctionne ; dans tous les cas, le train n´est détecté que lorsqu´il entre dans la zone d´arrêt concernée, et ce avec un minimum de câblage.
Seul bémol, le train s´arrête brusquement lorsqu´il pénètre dans la zone “stop” (pas d´alimentation). Pour un arrêt plus “doux”, on peut envisager un relais supplémentaire et une détection supplémentaire pour cette zone, je vous laisse le faire.
Autre solution, peut-être plus simple, remplacer la détection par des I.L.S. de chaque côté.
Attention, restriction importante : le changement de sens ne s´opère que lorsqu´il n´y a plus de train détecté sur les zones d´arrêt. Cela veut dire que Pictrain3 ne marche pas s´il y a des wagons qui captent du courant (lumière ou graphitage). Si c´est le cas, il faut aussi rajouter la détection de fin par I.L.S. Cette variante fera l´objet d´un Pictrain3 bis ultérieur.
Le programme
11.4. Initialisation
11.4.1. Constantes
Dans cette partie, on définit les différentes valeurs qui contrôlent la circulation du train :
CO_V_max : vitesse maximum du train en pleine voie,
CO_V_ralenti : vitesse de ralenti en zone d´arrêt,
CO_I_accel : inertie en accélération,
CO_I_frein : inertie en freinage,
CO_PauseG : durée de la pause à gauche (aller),
CO_PauseD : durée de la pause à droite (retour).
Les valeurs sont dans l´intervalle 0 à 255, et doivent être fixées en fonction de votre matériel.
Plus les inerties sont élevées, plus l´effet est lent : une inertie d´accélération de 4 fait que le train met le double de temps à atteindre la pleine vitesses qu´avec une inertie de 2.
La durée des pauses est en secondes.

PTI+   Modifications des valeurs ? — J´avais initialement prévu de présenter un montage qui permette la modification en cours de fonctionnement de tous ces paramètres, sauvegardés en mémoire du microP. On garde même en mémoire les caractéristiques de 5 trains différents.
Après réalisation, sur base de 16F628, j´ai trouvé que c´est une vraie usine à gaz, et de toute façon d´une utilité très relative, peut-être pour un club qui fait rouler les matériels de ses adhérents.
Cependant, si vraiment des gens sont intéressés, me contacter en privé, le circuit et le programme existent et fonctionnent.
11.4.2. Définitions
Trois entrées sorties sont utilisées :
sortie “fréquence” : commande du courant,
sortie “sens” : commande du sens,
entrée détection occupation zone d´arrêt.
Les définitions IN_xxx sont les différents états possibles du système, et seront expliquées plus loin.
11.4.3. Variables
La définition des variables ne présente pas de difficultés.
La variable VA_ETAT contient l´indication des différents états (voir plus loin).
Les variables VA_CPT_delaiX sont nécessaires au fonctionnement des sous-programmes de délais (voir Bricothèque PtiTrain).
11.4.4. Paramètres spécifiques
Les paramètres spécifiques sont relativement simples ici :
D´abord toutes les E/S en sortie, sauf la détection de présence.
Ensuite l´activation du Timer0, avec le prédiviseur pour avoir la fréquence de 480 Hz.
Enfin, le démarrage du train à la mise sous tension.
PTI+   Fréquence de l'alimentation. — Si vous êtes partie prenante dans le débat sur les fréquences optimales de fonctionnement des alims P.W.M., et si donc vous voulez modifier la fréquence de l’alimentation de votre train, il suffit d’enlever les deux lignes bsf OPTION_REG,0 et bsf OPTION_REG,1 et votre moteur fonctionnera à 2000 Hz au lieu de 240 Hz.

11.5. Boucle principale
11.5.1. États
La boucle principale du programme doit gérer les différentes actions en fonction de la situation du train, que nous appellerons “ETATS”. Les états sont identifiés dans le programme par des bits de la variable VA_ETAT et correspondent à un fonctionnement du train :
Freinage : passage de la vitesse maximum à la vitesse de ralenti,
Ralenti : progression du train à la vitesse de ralenti
Pause : train arrêté en attente de démarrage
Accélération : passage de zéro à la vitesse maximum.
Lorsque aucun état n´est activé, le train avance à la vitesse maximum.
Le train passe successivement d´un état à un autre selon des événements internes ou externes :
Freinage : lorsque le train entre dans la zone d´arrêt,
Ralenti : lorsque le train atteint la vitesse de ralenti,
Pause : lorsque le train entre dans la zone stop,
Accélération : à la fin de la pause.
Les différentes conditions et actions sont assez difficiles à décrire par des phrases, et si vous ouvrez le programme vous verrez que c´est très indigeste.
Je propose donc d´introduire dans Pictrain un nouvel outil de programmation : l´organigramme.
11.5.2. Organigramme
Un organigramme est une méthode de représentation graphique de la structure du programme. Cette méthode permet de visualiser le fonctionnement, et facilite grandement la compréhension.
Les éléments sont principalement :
Le losange, qui représente un test, avec deux résultats (oui/non),
Le rectangle, qui représente une action (suite d´instructions),
Les flèches qui relient les deux éléments précédents, et qui représentent les instructions après test ou les GOTO.
Vous avez ci-dessous l´organigramme du programme Pictrain3 [cliquez sur l´image pour la lire et l´imprimer en plus grande taille]  :
On va “lire” ensemble le début du programme :
Ces premières lignes sont le test de la variable VA_ETAT. Si celle-ci est vide (= aucun état n´est actif), on saute à la suite, sinon on exécute le GOTO vers l´étiquette ET_ETAT_frein. Elles correspondent au premier test de l´organigramme en haut à gauche.
La suite du programme, que l´on exécute donc si le résultat du test est OUI (la variable VA_ETAT est vide) :
On trouve d´abord le test de la détection en zone d´arrêt (deuxième test de l´organigramme), puis deux tests supplémentaires pour confirmer la détection. Si elle est confirmée, le programme (et le train) passe en l´état RALENTI. Cette séquence est résumée dans le rectangle après le deuxième test.
Toute cette partie est décrite dans la colonne de gauche de l´organigramme.
La deuxième colonne de l´organigramme correspond aux instructions suivantes :
Elle est exécutée si le tout premier test est NON (c´est-à-dire que la variable VA_ETAT n´est pas vide) :
Si ETAT n´est pas freinage, on passe à ETAT_ralenti, représenté dans la troisième colonne de l´organigramme ;
Si ETAT est freinage, on teste si on a atteint la vitesse de ralenti ;
Si oui, ETAT passe de freinage à ralenti.
Vous avez suivi ?
Vous pouvez ainsi “lire” tout l´organigramme, et d´une manière bien plus compréhensible qu´en essayant de déchiffrer le programme.
Il est aussi immédiatement visible dans l´organigramme qu´il y a une boucle unique, et que l´on circule simplement dans les différentes branches selon l´état du train.
11.6. Interruption Timer0
Ce sous-programme sert à générer le signal carré de fréquence 240 Hz pour le train, et également à décompter l´inertie.
Les traitements ne sont exécutés qu´une fois sur deux, lorsque la sortie fréquence est à l´état bas.
Premières opération : décrément du compteur VA_CPT_boucle, compteur qui représente l´inertie.
Si ce compteur est à zéro :
Si l´état est FREINAGE, décrément de la vitesse, et rechargement du compteur d´inertie.
Si l´état est ACCELERATION, incrément de la vitesse, et rechargement du compteur d´inertie.
Enfin, inversion sortie fréquence et rechargement du Timer0.
Je n´insiste pas sur ce sous-programme, vous êtes capable de le lire et de le comprendre sans problème.
11.7. Fin
En fin de programme on trouve l´instruction #include pour l´inclusion des sous-programmes de délais utilisés plus haut.
Tous les fichiers de travail, .ASM (pictrain3_PRG.asm) et .INC, notamment le fichier SP_delai_version1.inc de la rubrique Briquothèque de Ptitrain, se trouvent comme d´habitude ici.

Psi

10/11/07
N.B. — Textes, schémas, programmes © Psi pour Ptitrain. Photos Jidé ou D.R. quand signalé. — Toutes vos remarques et commentaires sont bienvenus, et les pages de Ptitrain ne sont pas statiques : les erreurs sont corrigées sitôt connues, les améliorations, éclaircissements, etc. feront l´objet de mises à jour fréquentes.
Ptitrain, l´e-magazine du train éclectique. — Directeur de la publication : Christophe Franchini.
Rédacteur en chef : Jean-Denis Rondinet