Auteur Sujet: signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée  (Lu 12206 fois)

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Bonjour,
j'avais présenté le projet ici : https://forum.e-train.fr/viewtopic.php?f=18&t=93174
l'interrêt, c'est que la découpe de la cible, la couleur noire du fond, le liseré blanc, et le câblage de la cible viennent avec la fabrication du pcb ; on pourrait commander les pcb avec les leds directement soudées, "plus qu'à" mettre les visières et poser la cible sur le mât ...
comment ça marche ? il y a plusieurs manières de faire, voici la mienne
d'abord, à quoi ressemble le dessin du pcb, devant, et derrière :
« Modifié: août 27, 2021, 06:44:27 pm par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #1 le: août 27, 2021, 06:58:33 pm »
les leds sont multiplexés sur 4 fils, on voit comment sur ce schéma :
si on veut par exemple allumer les 2 leds en série de l'indication "ralentissement", Dr1 et Dr2, il faut faire passer un courant du fil "pwmux1" vers le fil "fixe1" , cad. le fil "pwmux1" doit être en "output high", et le fil "fixe1" doit être en "output low"; pour ne pas perturber l'allumage de nos 2 leds, les 2 autre fils sont en haute impédence ("input" coupés, quoi) ; si on inverse les niveaux de  "pwmux1" et de "fixe1", le courant ira dans l'autre sens, et c'est le rappel de ralentissement qui sera indiqué, cad. les leds en série Dp1 et Dp2
« Modifié: septembre 02, 2021, 08:06:43 pm par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #2 le: août 27, 2021, 07:20:10 pm »
mais qui dit leds, dit resistances  8)
si on regarde par exemple le fil pwmux2, on voit qu'il peut entrer dans le circuit de 4 leds différentes, corrrespondant aux feux "avertissement", "sémaphore", "manoeuvre", et "voie libre", correspondant respectivement aux couleurs jaune, rouge, blanc, et vert : il faut 4 résistances différentes comment faire ?

ne languissez pas, on a le chiffre magique : 4052 ; c'est le nom d'un multiplexeur analogique double
voici à quoi ressemble le montage :
« Modifié: septembre 02, 2021, 08:07:11 pm par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #3 le: août 27, 2021, 07:35:58 pm »
explication du fonctionnement du double mux 4052 :
supposons qu'on veuille allumer la led de l'avertissement, Da1
il faut commencer par mettre la sortie de l'arduino "fixe1" à "output high", puis faire quelque chose au niveau du fil "pwmux2"
on retrouve le fil "pwmux2" sur la broche Y du 4052 ; touvé ? ; il va faloir aiguiller la broche Y vers la broche Y0, car c'est là où se trouve la résistance Ra1, qui a la valeur qui va bien pour la led jaune, puis on arrive à la broche de l'arduino "mux2", configurée en "output low"
la boucle est bouclée
pour sélectionner la continuité Y <-> Y0, il aura fallu auparavent configurer les entrées A et B à l'aide des sorties de l'arduino "muxA" et "muxB" (mettre "muxA" et "muxB" en "low")

on a ainsi 4 résistances qui correspondent à chacune des 4 leds différentes du fil "pwmux2"
pour le fil  "pwmux1", c'est pareil, à 1 petite astuce près  8)
les 2 leds en série de l'indication "ralentissement" et celles de l'indication "rappel de ralentissement", c'est strictement pareil, sauf que c'est l'inverse ; en tous cas, elles utilisent la même résistance, on a économisé une résistance, mais surtout une broche du multiplexeur X ; en effet, la led du "carré", Dc1, selon qu'il s'agit d'un panneau "carré" ou d'un panneau 'carré violet", peut être soit rouge, soit violet, et ce n'est pas du tout la même valeur de résistance, étant donné la différence de seuil et la différence de rendement des 2 types de led ; il est donc intéressant que ces 2 différentes résistances soient présentes et sélectionnables, pour ne pas devoir faire un décodeur spécifique à tel ou tel signal

vous avez sans doute vu que la broche InH du 4052 est relié à la broche "pwmux" de l'arduino ... à que c'est pas fini ...

« Modifié: août 29, 2021, 12:47:20 am par trimarco232 »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #4 le: août 27, 2021, 10:33:42 pm »
Très belle étude !
Pas simple pour le N mais un démonstrateur devrait nous interesser.
Merci pour ce partage génial
  ;D
Cordialement,
Dominique

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #5 le: août 28, 2021, 11:11:27 am »
Bonjour Dominique, merci !
pour le N ça doit être faisable, il "suffit de" miniaturiser
le pcb que j'utilise, c'est du 8/10, c'est trop gros pour qui pratique un modélisme rigoureux, mais ça ne choque pas la grande majorité des personnes à qui j'ai pu le montrer
pour le N, il faudrait tabler du 4/10 et des leds 0402 ... ce n'est plus le même prix, tout en restant sans doute abordable ; reste le problème des visières ...
car l'argument choc du projet, c'est le prix : on peut envisager d'avoir 10 plaques de 12 cibles pour une dizaine d'euros ...
« Modifié: août 29, 2021, 12:48:35 am par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #6 le: août 28, 2021, 11:42:12 am »
le multiplexage
pour rappel, le but est de simplifier au maximum le câblage du signal ; un panneau type H comme celui qui est illustré, comporte 10 feux ; généralement les productions commerciales proposent 10 leds, donc 20 fils qu'il faut dévernir et manipuler et souder avec énormément de précautions
ici, on a 4 fils, il n'y a pas photo au niveau de la facilité de mise en oeuvre, et de plus le gros du câblage est déjà fait par le pcb au niveau des leds ;
on a vu que la partie résistances du multiplexage est résolu (il y a d'autres méthodes que le 4052, on en parlera), reste la question du soft ;
quand on a un paneau du type H, (et pas mal d'autres types), le nombre de feux succeptibles d'être allumés simultanément est de ... 6 !
en effet, quand les panneaux de cette époque passent d'une indication vers une autre, la commutation est faite par des relais, c'est pratiment instantanné ; par contre, alors que les nouveaux feux s'allument progressivement, les anciens s'éteignent progressivement, c'est l'inertie de la chaleur des filaments ;
en illustration, (je n'ai pas pu résister), les arguments de LDT pour vanter la qualité de ses décodeurs : c'est faux ! j'ai dessiné la courbe correcte à droite ;
si on passe d'une indication RR+A à une indication C, les feux qui s'éteignent sont RR1, RR2, A, et Oe(illeton), alors que ceux qui s'allument, c'est C et S : on a bien 6 feux allumés en même temps ; notons que dans mon cas, RR1 et RR2 sont en série, ils ne sont vus par le système que comme 1 seule led, ce qui ramène le nombre de leds "simultanées" à 5
or le système du multiplexage ne permet, par essence, de n'alumer qu'une seule led à la fois ... il faut un truc

le truc, c'est la fameuse persistance de l'impression rétinienne : on va allumer les 5 leds à tour de rôle, circulairement, rapidement, l'oeil  humain n'y verra que des feux
pour ce faire, on va diviser le temps en 5 timeslots, qui se répéteront circulairement ; chaque led qui devra briller, s'alumer, s'éteindre, ou clignoter, disposera de son propre timeslot ; il faudra donc gérer l'affectation des timeslots en fonction des besoin ; on a dit 5 leds maximum, mais aussi 1 led minimum, pour Cv ou M

à l'intérieur de chaque timeslot, il faudra faire varier la durée effective de l'alumage de la led, en fonction de l'intensité lumineuse ; j'utilise pour cela le pwm, ce qui me fait prêter le flanc à l'ennemi mortel de ceux qui font ce type de montage : le glitch du pwm ! ce sera lui, ou moi




« Modifié: août 29, 2021, 12:53:26 am par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #7 le: août 28, 2021, 01:03:51 pm »
le glitch du pwm
il suffit de faire une recherche, et on trouve plein de gens, oscillogrammes à l'appui, qui y sont confrontés
dans l'illustation, on voit un signal pwm de rapport cyclique ~50% qui passe à un rapport ~10%, et entre temps il s'est passé un truc, c'est le gltch ; j'ai dessiné en orange l'effet du glitch
les conséquences d'un tel glitch sur des commandes de moteur, ou de chauffage, par exemple, sont négilgeables, à fortiori si la fréquence du pwm est élevée
par contre pour des leds, même à des rapportrs élevés, ça saute aux yeux, donc à fortiori si le rapport cyclique (éclairage vu comme faible), est petit
il faut absolument s'en prémunir ;

au niveau électronique, par exemple pour un pwm généré directement par le timer d'un microcontrôleur (arduino), le problème se passe quand on change le rapport cyclique alors que la période est en cours
on a une rampe ascendante qui se répète périodiquement, en dents de scie ; au début de la période, cad. au bas de la rampe, la sortie pwm est mise à high ; quand la rampe atteint la consigne, la sortie pwm passe à low ; si la consigne est basse, la rampe l'atteint rapidement, l'impulsion est courte (rapport cyclique faible) ; si la consigne est élevée, la rampe mettra du temps à atteindre la consigne, l'impulsion est longue (rapport cyclique élevé)
revenons à l'exemple de notre infortuné internaute, que s'est-il passé ?
au début, le rapport cyclique est de 50%, au début de la rampe, la sortie pwm est high, la rampe se dirige vers les 50% pour atteindre la consigne, et mettre la sortie à low ; or, quand la rampe arrive vers les 40%, la consigne est brutalement mise à 10% : la rampe n'a plus aucune chance d'atteindre la consigne, car elle est allé au-dessus, la sortie restera high au moins jusqu'à la fin de la période, cad. quand la rampe (descendra brusquement) à 0 ; c'est le glitch électronique du pwm
les fabricants de microcontrôleurs et autres ics donnnent la parade à ce glich : la nouvelle consigne, quand elle est entrée par le programmateur (internaute du site locoduino), est mise dans un buffer ; elle n'est transferrée comme consige effective que quand la rampe atteint 0 (début de la période) ; le glitch est mis en echec
notons que ces notions sont aussi à prendre en compte par qui écrirait du pwm purement en soft ; ce n'est pas ma philosophie : les périphériques sont là, utilisons les  (vaste débat que je clos aussitôt)

confronté au glitch, j'ai donc programmé l'arduino pour la mise en buffer de la consigne ... mais les glitches étaient toujours visibles, le problème était ailleurs ...  >:(
« Modifié: août 28, 2021, 01:48:23 pm par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #8 le: août 28, 2021, 06:58:47 pm »
le glitch logiciel
le problème n'était pas matériel mais logiciel, voyons le dessin ci-dessous :
on les 5 timeslot avec des couleurs différentes, et des rapports cycliques de pwm différents (cad. chacune des 5 leds éclaire avec une intesité lumineuse différente : ce n'est pas le cas dans cette application, mais théoriquement possible)
les 5 timeslot constituent une trame, il y a 3 trames sur le dessin ; les trames servent à incrémenter ou décrémenter le rapport du pwm, le cas échéant, selon les leds, selon les besoins
l'avancement des timeslot et des trames est "interrupt driven", cad. on ne se sert pas de micros(), lais on génère une interruption à chaque nouvelle période du timer (à chaque changement de couleur sur le dessin), puis on compte les 5 timeslot, puis on compte les trames ; il faut un certain nombre de trames pour compléter l'alumage, l'extinction, ou le clignotement d'une led, on en reparlera

où est le problème ? il apparait clairent dans la ligne du bas, on observe le timeslot bleu à la loupe : l'interruption, c'est quand la rampe 'le timer) passe à 0 ; c'est le début de la période pwm, c'est là où la sortie pwm est mise à l'état high ; suite à cette interruption, il faut faire un certain nombre de choses, dont le timing est donné très schématiquement par les flèches grises :
d'urgence
- déselectionner la résistance de la led du timeslot précédent, au niveau du mux
- sélectionner la résistance de la led du timeslot en cours
- donner les bons niveaux, high ou low, aux sorties, selon le sens de la led sélectionnée
en moins urgent
- entrée la valeur du pwm de la led suivante dans le buffeur ; cette valeur, on l'a vu, sera effective au début de la prochaine période pwm

le souci, donc, c'est que même si on se dépèche de faire les instructions urgentes, mêmes si le tout dure moins qu'une microseconde, l'opération n'est pas pure, et ça se voit !
par exemple, quand la nouvelle période pwm commence, la sortie pwmm est immédiatement active, alors qu'on est encore connecté sur la led précédente, qui doit peut-être être éteinte, en tous cas qui n'a pas besoin qu'on lui mette un rab d'impulsion lumineuse
de même, en ne commutant pas instantanément au niveau du mux (c'est impossible !), on prive la led en cours du début de son rapport cyclique, et ça se voit aussi : sans pitié, le glitch logiciel !

il faut trouver une parade
« Modifié: août 28, 2021, 07:44:24 pm par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #9 le: août 29, 2021, 07:00:24 am »
(chevauchement en cours avec le topic de palou : ne pas oublier de lui répondre, la lecture du mien peut attendre)

la fin des glitches
voir le dessin ci-dessous
en 1er, j'ai repris le dessin du "pwm problématique" : on voit que le souci est que les opérations de multiplexage (sélection de la résistance, choix des polarités high/low, choix des impédances de sortie outout/input) se font alors que le signal pwm est déjà actif ;
la solution c'est de geler la période pendant laquelle les opérations de multiplexage se produisent ; on aurait quelque chose comme le dessin "notre pwm idéal" : ici, pendant la durée des opérations de multiplexage, le sinal serait coupé (haute impédence, partie orange), puis rétabli pour faire la partie utile du rapport cyclique (entre les flèches grises) ; cette partie utile serait alors amputée de 1 ou 2%, mais c'est sans importance, car de toutes façons on est déjà multiplexé dans le temps : un timeslot ne dispose que de 20% maxi du temps pour faire éclairer la led, 2% de 20%, c'est peanuts ;

vous vous souvenez (#3) de la broche InH du 4052 est relié à la broche "pwmux" de l'arduino (voir le dessin #2)
j'ai dessiné un petit rond au droit de cette entrée, cela veut dire qu'elle est active à l'état low ; donc high = gaute impédance (coupé), et low = donné (sélection selon les entrées A et B) ;
on est donc dans le cas du dessin "pwm 4052" : le timing est le suivant :
- de 0% à 2% : la sortie pwm de l'arduino se voit imposer une valeur minimale de 2% ; ce qui correspond à la durée pendant laquelle le 4052 sera d'office en haute impédance ; on pourra effectuer tranquilous les opérations de multiplexage pendant ce temps ;
- de 2% à 100% : on est dans la partie utile du signal ; on fera varier le rapport cyclique de 100% vers 2% pour faire varier l'intensité lumineuse de la led de 0 à 98% , cad un maping de 0 -> 100% vers 100 -> 2%

à ce stade on a jeté les bases de quelque chose qui devrait (pourait) fonctionner, reste à le prouver ; un nano, ça a 2 sorties pwm 16 bits ; ça vous dirait un shield avec optocoupleur pour faire un décodeur dcc, et avec 2 4052 + résistances pour commander 2 signaux sncf complexes ?
« Modifié: août 29, 2021, 07:48:48 am par trimarco232 »

trimarco232

  • Sr. Member
  • ****
  • Messages: 345
    • Voir le profil
Re : signaux sncf réalisés avec un pcb, avec commande 4 fils muliplexée
« Réponse #10 le: août 29, 2021, 09:17:30 pm »
il n'y avait qu'à demander