jeudi 6 octobre 2016

le protocole circuit

le courant délivré dans le circuit est créé par le module blue et amplifié par le module yellow
ce courant a 2 fonctions : alimenter les véhicules et transmettre les messages de vitesse
le messages de vitesse est composé du numéro du véhicule, suivi de la consigne de vitesse
le format utilisé est série, 9 bits, durée d'un bit de 13µs, pas de parité. Le choix du format série se justifie par la présence d'un périphérique uart dans le mcu des décodeurs à bord des véhicules, ce qui simplifie la programmation et apporte de la robustesse
le niveau 1 correspond à la tension d’alimentation, ici 15v, le niveau 0 correspond à 0v.
* voici la forme des octets transmis :











on voit qu'en plus du bit start, qui est obligatoirement à 0, un seul bit parmi le 9 bits normalement significatifs est aussi à 0 : en effet, si tous les bits étaient à 0, il n'y aurait plus de courant dans le circuit et les voitures ne pourraient pas rouler. J'ai donc fixé le principe suivant :
- il y a 1 et 1 seul bit significatif devant être à 0
- le bit 0, celui qui suit le start, n'est pas autorisé car je ne veux pas 2 bits consécutifs à 0v

on a donc un mot qui ne peut prendre que 8 valeurs différentes, au lieu des 512 normalement permises par les 9 bits

l'inconvénient de ce format (perso) c'est une baisse "dramatic" de la bande passante
les avantages sont :
- la simplicité électrique au niveau du module jaune (1/2 pont suffit)  et des décodeurs (pas besoin de pont de graetz)
- une tension moyenne constante et peu diminuée
- un faible risque de perversion par les parasites, d'où une robustesse qui permet de se passer de mot de contrôle

la bande passante reste cependant très satisfaisante, la durée de transmission pour 1 véhicule étant de 1.04 ms. Pour un circuit comportant 6 voitures en courses, il faut 7.28 ms (une voie est réservée au système), ce qui fait un taux de rafraîchissement de 137Hz, qui dit mieux ?


** voici le format des messages :






les messages se suivent en boucle :
- numéro + vitesse voiture n°1
- numéro + vitesse voiture n°2
- etc.
- numéro + vitesse voiture n°31 (dernier)
- numéro + vitesse voiture n°1
- numéro + vitesse voiture n°2
- etc.


un message signifie le numéro et la vitesse d'une voiture
il est constitué d'un idle state suivi de 4 mots
les messages suivants ont le même format et se succèdent immédiatement. La durée de chaque message est invariablement de 1.04 ms, il n'y a pas de temps mort entre les messages successifs

l'idle state de 468 µs a 2 utilités :
- augmenter la tension moyenne pour être précisément et constamment la tension d'alim moins 10%. J'ai fixé cette valeur arbitrairement.
- désigner sans équivoque le début de chaque message

la durée rigide et précise de chaque message à 1040µs permet aux mcu réceptrices de régler précisément leur horloge rc internes et de se passer de quartz
la précision est nécessaire pour le rs232 (asynchrone), mais surtout pour l'identification des véhicules par infrarouge


*** à propos du protocole :
on aurait pu regrouper  les 4 mots de chaque message de la manière suivante :
- les 2 premiers mots (rappel : un mot peut prendre 8 valeurs différentes) constituant 64 valeurs différentes et désignant le numéro du véhicule
- les 2 mots suivants et derniers  constituant 64 valeurs différentes et désignant la vitesse à laquelle le véhicule (qui vient d'être désigné par son numéro) doit rouler

mais cela ne me convenait pas : 64 c'est trop grand pour le nombre de véhicules, et pas assez pour la précision de la vitesse (je ne peux pas faire moins bien que scalex !)
j'ai donc retenu le principe suivant :
- dans le premier groupe de 2 mots, 2 valeurs parmi 64 sont affectées à chaque véhicule, exemple :
2 et 3 pour la voiture 1
4 et 5 pour la voiture 2
...
62 et 63 pour la voiture 31

les valeurs 0 et 1 sont réservées au système
si le nombre est pair, exemple 4 pour la voiture 2, la vitesse sera basse
si le nombre est impair, exemple 5 pour la voiture 2, la vitesse sera haute

- le complément de vitesse est donné par le 2nd groupe de 2 mots, dont les valeurs sont comprises entre 0 et 63 :

si la vitesse est basse la vitesse finale sera de 0 à 63, selon la valeur de ce 2nd groupe
si la vitesse est haute la vitesse finale sera de 64 + la valeur du 2nd groupe, ie. les valeurs comprises entre 64 et 127

il y a 4 cas particuliers :
- la vitesse 0 c'est le freinage, il n'y a pas de roue libre, c'est de la course, pas de l'écologie !
- la "vitesse" 1 n'est pas destinée aux voitures mais aux aiguillages. Le message signifie que la voiture désignée par son numéro ne veut pas (plus) bifurquer aux aiguillages
- la "vitesse" 2 n'est pas destinée aux voitures mais aux aiguillages. Le message signifie que la voiture désignée par son numéro veut bifurquer aux aiguillages
- la vitesse 127, (en doutiez-vous ?) correspond à la vitesse maximale

il appartient à chaque véhicule de reconnaître son numéro et d'appliquer la vitesse correspondante en jouant sur la largeur du pwm commandant le moteur, en fonction de la vitesse reçue par le message
la vitesse 0 n'implique pas que la coupure du moteur, mais également l'activation du frein


il appartient aux aiguillages de décoder et de garder en mémoire : quelle voiture doit, ou ne doit pas, bifurquer


les messages système seront décrits ultérieurement, le protocole à ce stade est embryonnaire et sujet à modification

à suivre : le protocole IR









nouveau problème, nouvelle solution

Lors d'un test un véhicule a "désloté" et le guide s'est désolidarisé de son axe. Les tresses se sont donc retrouvées libres, et l'une d'elle s'est mise à cheval sur les 2 rails inox. Cela a provoqué un cour-circuit, drainant le courant maximal de l'alim, soit 20A. La tresse s'est mise à chauffer et a fait fondre le guide.

Avec l'alim d'origine, de 2 ou 3A, cet incident ne se serait probablement pas produit. Il y a donc un défaut dans mon système, mettant en péril notamment l'intégrité des véhicules. Le fusible dans le véhicule ne sert à rien dans ce cas.

Comment détecter les court-circuits ou les charges anormales ?
C'est faisable : le module blue a une idée du nombre de véhicules en service et de leurs consommation instantanées, donc il peut calculer la somme des ampères devant parcourir le circuit, du moins avec une précision satisfaisante. Reste à mesurer la consommation totale et à la comparer à la consommation calculée. En cas de différence patente, le courant sera coupé.

Cela m'a obligé à réaliser un nouveau module blue et un nouveau module yellow, et à rajouter les softs nécessaires