Trains électriques - commande en MLI alternative ...

Nikko485
lun, 02/17/2020 - 23:30
Bonjour, j’ai un grand projet de réseau de train HO, et pour ce faire j’ai eu une idée mais j’ai 2 interrogations…
J’expose le délire :
Avec un ami on développe un “système propriétaire” pour avoir ce qu’on veux sans y passer la paie annuelle (gestion d’itinéraire, cantonnement, signaux, traction).
Ce projet est à base d’Arduino avec tout pleins de modules I2C, le tout piloté avec un truc tactile en bluetooth. Mais pas de problème de ce coté la.
Pour ma part, je n’aime pas la commande de traction avec un rhéostat, car pas bon du tout en rendement, et surtout pas souple dans son fonctionnement (ralentis pas top et instable entre autre).
Je veux donc piloter ce matériel en MLI (PWM, ou courant pulsé dans le jargon des mordus du rail).
De plus j’ai un éclairage sur toutes mes voitures voyageurs, et j’aimerai bien qu’il fonctionne en permanence.
Il existe des montages dit “éclairage basse fréquence” mais incompatible avec la MLI.
Mon idée et la suivante :
Générer un signal carré alternatif de +12v/-12v.
Avec un rapport cyclique de 50%, la valeur moyenne serait donc de 0V > engin moteur à l’arrêt
Un fois redressé, on obtient une tension continue de +12V quelque soit le rapport cyclique donc parfait pour l'éclairage des voitures.
Si on fait varier ce rapport de 50% à 100%, on obtient une valeur moyenne positive (un sens de circulation avec plus ou moins de vitesse suivant le rapport cyclique).
Ce sens s’inverse en variant de 50% à 0%.
Générer ce signal carré avec le rapport cyclique variable est assez simple avec l’arduino, que ce soit par potentiomètre matériel ou sur le bidule tactile.
Mon projet en réflexion :
L’arduino va générer un signal qui va se 0V à 5V. Il suffit de mettre un condensateur de liaison et il devient alternatif de +2.5v/-2.5v.
Ensuite on attaque un ampli, genre Hi-fi, classe AB, classe D, enfin un truc qui peut envoyer du courant et c’est parti !
Oui … Mais non ! Enfin j’ai pas testé en vrai car à mon sens, il y a 2 choses :
- Le rapport cyclique qui varie c’est bien mais le condensateur de liaison annule la composante continue indispensable au démarrage/roulage des trains.
Si à la place de mon condensateur de liaison, je câble un AOP monté en comparateur (seuil 2.5v) alimenté en +12/-12, la sortie sera-t-elle également en +12/-12 ?
- Quelle fréquence adopter pour ça ? Sachant que le DCC est d’à peu près 8kHz, c’est assez pénible à la longue d’entendre les moteurs siffler.
Est-ce que je peu aller au delà des 20kHz sans risquer de cramer un truc ?
Merci d'avance !
Cordialement Jonathan (Alias Nikko485)
Anonyme
mar, 02/18/2020 - 08:05
Je pense que ce site peut être intéressant pour toi ainsi que celui-ci et enfin sur youtube pour ne pas réinventer l'eau chaude !
Nikko485
mar, 02/18/2020 - 08:53
Bonjour et merci pour ta réponse.
J'avais déjà parcourus ces 2 sites, et bien d'autre mais hélas aucun ne m'apporte de réponse adaptée à mon projet : tous parlent de commande de décodeur.
Mes machines sont toutes dites traditionnelles donc sans décodeur DCC. Les équiper représente une petite fortune (plus de 1500€ vu leur nombre...).
J'ai besoin d'un système qui, en plus de conserver l'éclairage permanent, pilotes les moteurs en MLI. Il n'est ici pas question de commande numérique, d'adressage et autres trucs liés au protocole DCC.
Mes 2 questions restent donc les même :
- Comment faire pour avoir cette tension carrée alternative mais avec une composante continue variable ?
- Est-il possible de générer cette tension à des fréquences au delà de l'audible ?
Encore merci
Cordialement Jonathan (Alias Nikko485)
EDIT : je n'avais pas vu ton lien YouTube. Le montage réalisé est intéressant mais il n'y a visiblement pas d'alimentation d'éclairage. Cela dit dans le datasheet du boosterchez TI, il y a en haut de la page 9 exactement ce que je veux faire.
Je vais étudier ce truc là, et vois si on peut trouver le même mais avec plus de 3A (il faudrait mimum 10A)
hercule124
mar, 02/18/2020 - 09:34
Bonjour,
il existe un petit module assez sympa sur ali
tu peux générer un pwm de 3.3v a 30v selon la tension d'entrée et choisir le duty et la frequence de 1 hz a 150khz si tu veux faire des test voici le lien ( il existe aussi avec potentiometre).
https://fr.aliexpress.com/item/32839042221.html?spm=a2g0s.9042311.0.0.27426c37C0WWPn
si ca peut aider
Walter
mar, 02/18/2020 - 09:53
Salut,
je ne suis pas sûre d'avoir compris complètement ta problématique.
Pour moi ce n'ai pas exactement ça, l'arduino va générer des états logiques (0v, +5V) qui vont piloté par exemple des transistors, AOP qui vont te fornir le signal voulu avec les bornes voulus(ex +12V, -12V ou même +3V, -10V si besoin).
Du coup si tu utilise 2 sorties arduino pour piloter 2 transistors.
Par contre je n'ai pas bien compris qu'elle est ta composante continue dans ton signal carré?
Anonyme
mar, 02/18/2020 - 11:44
Juste un petit truc pourquoi ne pas faire la télécommande par WIFI, pas cher petit et performant ! Possibilité de piloter depuis un pc jusqu'à 250 locomotives voir plus en bidouillant un peu !
Nikko485
mar, 02/18/2020 - 12:10
Merci à vous pour vos réponse.
Le module Chinois je le connais mais j'ai déjà ce qu'il me faut. Un bon vieux LM3524.
Pour la composante continue, je parlais en fait de valeur moyenne.
Pour le côté alternatif, c'était au début de ma réflexion. Maintenant si il est possible avec le 0V/+5V de l'arduino de sortir une tension carrée allant de +12V à -12V ça me va.
L'idée est d'obtenir exactement ça :
Cette image est une capture du datasheet du LMD18200 de chez Texas Instruments, page 9 en haut.
Le défaut de ce composant : il est trop faible pour répondre à 100% des besoins. Il dissipe au maximum 3A alors qu'il faudrait 10A voir 12A...
Est-il possible de les mettre en parallèle ?
Il reste toujours le problème de la fréquence ...
Pour la télécommande Wifi, il faut des décodeurs dans les machines et c'est pour le moment hors de prix total pour moi.
Un jour peut être que je pourrais le faire, mais à ce moment là je monterai des LockSound V4 avec une central Lenz. Budget à peu pres 2500€ pour mon parc de machine actuel. Bref c'est pas pour tout de suite !
Le montage Adruino pilote des cartes relais en I2C pour les aiguillages (ca fonctionne très bien), pareil pour les signaux. La détection de courant se fait avec 2 diodes en série, pareil c'est opérationnel il ne reste que la tractions et l'éclairage des voitures.
Encore merci à vous !
Anonyme
mar, 02/18/2020 - 12:28
Regarde en bas à droite on peut tchatter !
Walter
mar, 02/18/2020 - 14:30
si tu fais ta propre commande de puissance, tu peux avoir les tensions que tu veux symétrique ou pas et avec un courant max dépendant des transistors que tu utilises(5A, 10A, 20A, ...) avec la fréquence que tu veux dans la limite de l'arduino et de la rapidité de commutation des transistor.
quel est l'espace disponible dans tes loco?
Car je pense que le Wifi reste une bien meilleur solution pour quelques € par loco!
Anonyme
sam, 02/22/2020 - 10:48
Si je comprend bien le système de commande du moteur électrique qui réagi en fonction du rapport des créneaux sur l'alimentation des rails PWM0 il suffit effectivement d'une part de redresser celui ci pour obtenir un courant continu qui permettra d'alimenter par exemple l'éclairage des wagons et la puissance pour le moteur de traction. D'autre par de calculer le rapport des créneaux sur une onde pour en déduire 1 le sens de rotation du moteur et 2 la vitesse de ce dernier.
Pour ce faire il faut, grâce à un Arduino mettre un Chronomètre à zéro (T0 =0) sur le passage d'un niveau à un niveau bas de ce PWM0 +ou - 12 volts. Puis de prendre de chronométré le temps T1 au passage au niveau haut de ce même PWM et T2 enfin le retour au niveau bas.
Fort de ces valeurs il faut calculer le rapport R entre T1 et T2 soit R = T1/T2, si celui-ci est R = 0.5 le moteur est à l'arrêt, si R > 50% le moteur tourne dans un sens, et si R est < 50% le sens de rotation est inversé.
En ce qui concerne la vitesse cette fois ci il faut que l'Arduino recrée un autre signal PWM1 qui lui servira à alimenté le moteur de traction de la manière suivante :
Soit T3 la valeur moyenne du PWM0 donc 50% de T2 (Valeur d'une demi onde du PWM0) T1 lui peut varié de 0% de T2 à 100% de T2
Donc si on prend par exemple T2 = 2 ms T3= 1 ms et T1 peut varié de 0 à T2 donc de 0 ms à 2 ms
Ce qui fait que PWM1 respecte la formule PWM1 = (50 - PWM0) * 5.12 ;
En faisant un tableau sous excel avec un pas de 0.2 pour T1 on obtient :
On voit bien que la valeur PWM1 varie de 255 à font dans un sens à -255 à font dans le sens inverse en passant par 0 lorsque les créneaux de PWM0 sont à 50%.
Avec le schéma suivant :
Ce calcul permet d'établir le code suivant en utilisant les interruptions sur la pin N° 2 de l'arduino !
Voilà qui n'est pas trop compliqué, je n'ai pas testé mais il ne devrait pas y avoir trop d'erreur !
la sortie pinPWM est a raccordée à l'entrée d'un driver PWM de ce type par exemple
et la sortie pinSens à raccordée à l'entrée d'un pont en H. de ce type par exemple
on peut se passer du driver PWM en augmentant la fréquence du PWM
avec le code suivant que j'ai déjà intégré dans le code au dessus en gras !
avec la ligne
setPwmFrequency(3, 1);
dans le setup, les fréquences indiquées ont été mesurées sur mon fréquencemètre
Walter
mer, 02/19/2020 - 19:13
Je n'ai pas compris pourquoi intercepter un PWM pour en créer un autre.
le but n'est pas de passer par l'écran tactiles pour définir la vitesse des locos et donc générer le PWM?
hercule124
mer, 02/19/2020 - 19:47
Bonjour,
ce qu'il veut s'est obtenir un éclairage permanent dans les wagons tout en ayant la loco a l'arret ou en marche et tout ca par les rails donc si je comprends bien il veut un pwm pour la vitesse du moteur et un autre signal pour l'eclairage , une sorte de multiplexage . peut être un signal alternatif haute fréquence qui pourrait être redressé ensuite pour l'eclairage des wagons et filtrer par la loco pour laisser passer que le pwm . est ce que c'est possible ?
Anonyme
mer, 02/19/2020 - 19:57
Hercule c'est exactement cela, l'Arduino recrée un PWM dans la loco pour son moteur de traction par contre il reste un petit problème c'est que le 24 volts devient uniquement 12 V quand le PWM des Rails attends les 100% j'espère ce cela n'arrive jamais !
Le seule autre solution c'est comme je l'ai dit au début c'est la wifi ! Là plus aucun soucis !
Walter
mer, 02/19/2020 - 20:16
Ok, mais d'ou vient le PWM décodé par l'arduino et pourquoi le recréer?
pourquoi l'arduino ne créé pas le PWM a partir des informations fournis par l'écran tactile ?
Anonyme
jeu, 02/20/2020 - 06:53
Walter on est plusieurs à avoir compris alors pourquoi pas toi ????
Bon je vais essayer de t'expliqué.
Le système utilise un artifice avec PWM pour communiquer entre la station de commande et la loco via les rails. Le principe est que lorsque le PWM envoyé dans les rails est de 50% la loco ne doit pas bouger !! Donc pas possible d'utiliser ce courant tel quel ! lorsque les créneaux de de PWM que j'appelle PWM0 varie avec des créneaux positif plus long que les créneaux négatif la loco se déplace dans un sens et proportionnellement au rapport entre les deux créneaux et inversement quand les créneaux positifs sont plus courts que les négatifs !
Donc si on envoie directement le PWM0 au moteur il aura toujours le même sens mais à 50% du PWM0 il tournera à 50% de la vitesse alors que l'on veut qu'il reste immobile !
As tu compris ?
Walter
jeu, 02/20/2020 - 09:04
Ba non car ce n'est pas ma question, parce que ce que je ne comprend pas, c'est pas le PWM désiré, mais pourquoi tu parle d'une station de commande qui enverrais un PWM (+0V, +xV), alors qu'il parle d'un système propriétaire qu'il est entrain de développé à base d'arduino.
Donc je suppose qu'il définit la vitesse de son train via son écran tactile et qu'il veut que son arduino crée le pwm (-12V, +12V) .
Je ne ferrais pas de remarque, sur ta première phrase afin de ne pas jeter de l'huile sur le feu, mais était-elle vraiment nécessaire?
Nikko485
jeu, 02/20/2020 - 09:48
Bonjour à tous et merci de l'intérêt que vous portez à ma demande.
En fait pour clarifier la situation, au fil des messages le projet a quelque peu évoluer. L'idée de départ était simplement d'avoir une combinaison d'alimentation pour avoir d'une part l'éclairage permanent mais sans traction (alternatif donc) et d'autre part la traction (création d'une composante continue par variation de la valeur moyenne, ici du rapport cyclique d'un signal carré à alimentation symétrique).
J'ai toujours dans l'idée d'essayer ça mais visiblement il y a un risque pour les moteurs à plus ou moins brève échéance. Ce sera donc purement du test pour la curiosité.
Il existe un montage dit éclairage BF (comme ICI) mais ce système travaillant déjà en fréquence n'est pas compatible avec une alimentation hachée.
Le système propriétaire ne fait qu'envoyer le courant de traction aux bons endroits en fonction de l'occupation des cantons (section de rails isolés) via des carte relais piloté avec une carte I2C. Il gère aussi les itinéraires (via les aiguillages, pareil avec relais et I2C) et les signaux. De là il est très facile d'y intégrer la vitesse du convois sur le canton ciblé.
Cela étant après une conversation avec wolfram69 que je remercie encore au passage, j'ai eu d'autres opportunité avec de petites carte WeMos et le pont en H derrière qui va bien pour quelques euros. Le code qu'il propose est assez simple et efficace. Mais tant qu'a y être, autant faire un vrai décodeur compatible avec la norme DCC. Il y a pléthore d'exemple de pupitre de commande DCC en DIY. Mais aucun n'a fait pour le moment (ou je n'ai pas su trouver...) de décodeur de traction (la raison c'est l'absence de pont en H sur les carte arduino mais c'est pas bien compliqué à faire...)
En partant d'un code pour décodeur d'accessoire, est-il possible de le modifier en décodeur de traction ?
Le saint graal serait d'avoir, avec la présence du Wifi sur les WeMos, la possibilité de régler les paramètres via une interface web. Ce sont des variables appelées "CV" dans le jargon mais c'est une usine à gaz...
Voici un dossier assez bien fait. (fichier PDF)
Encore merci à tous !
Amicalement Jonathan.
Anonyme
jeu, 02/20/2020 - 10:29
Houla cela ne correspond pas dutout à ce que j'avais compris, désolé mais j'abandonne là !
Nikko485
jeu, 02/20/2020 - 11:24
Rassures toi, tu as bien compris le truc !
Tu as juste proposé autre chose qui du reste est très intéressant !
Je vais en parler avec mon ami (et collègue) dés ce midi et je pense qu'il sera aussi intéressé par l'idée.
Ce que j'imagine n'est ni plus ni moins qu'un rêve qui je suis certain est accessible avec ces petites bêtes arduino ! Il me faut juste un coup de main pour déchiffrer le code et le recompiler. Les trames du protocole DCC sont connues et reste une communication série via courant porteur. Reste à recréer un décodeur adapté ...
Mais ton affaire en Wifi est juste magique ! Après l'idée d'avoir une interface web pour le paramétrer est purement utopique, même si je pense que c'est possible ...
Quoi qu'il en soit, encore merci pour ton aide !
Anonyme
jeu, 02/20/2020 - 13:19
J'ai trouveé un groupe d'rticle qui répond à 100 % à votre problèmatique, tout y est expliqué pour
Piloter des trains et des accessoires par DCC et cerise sur le gâteau c'est en français !
Par contre en lu le principe de codage cela n'a absolument rien à voir avec les explications que tu nous as fournies !
Anonyme
jeu, 02/20/2020 - 13:32
De plus il existe des libraries toutes faites pour faire des modules maison compatibles LENZ à partir de carte Arduino !
Voir aussi ici
Nikko485
jeu, 02/20/2020 - 13:26
Re bonjour.
alors je connais bien ce site là. C'est même là dessus que j'ai eu mon idée de signal carré alternatif a valeur moyenne variable (en jouant avec le rapport cyclique). Hélas il ne parle de pas de création de décodeur de traction...
Cette idée visait à justement se passer du protocole DCC et garder les machines telles quel sans modif. Maintenant que je connais l'existence des cartes WeMos et leur prix plus que raisonnable je me dis pourquoi pas en faire des machines compatibles DCC...
Si quelqu'un se sent la patience de m'aider à décortiquer le code pour l'implémentation dans une locomotive ça serait super !
Je vais bien essayer par moi même mais je sens que je vais être rapidement dépassé...
Encore merci à vous !
Anonyme
jeu, 02/20/2020 - 13:34
Bien sur que si !!! Tu peux piloter les train, les aiguillages, les barrières les feux etc ...
Nikko485
jeu, 02/20/2020 - 15:35
Alors oui piloter des accessoires ça il y a plein de trucs disponible. Mais j'ai pas réussi à trouver des décodeurs embarqués dans les machines.
C'est en soit un protocole assez "simple" à comprendre pour moi mais delà a le décoder puis l'interpréter sur un Arduino....
Maintenant le principe d'un décodeur d'accessoire est peut être le même qu'un décodeur embarqué et à ce moment là c'est nettement plus simple.
Mais très franchement j'en doute au vu de tous les paramètres (CV) d'une locomotive ...
Anonyme
jeu, 02/20/2020 - 18:36
Je n'y connais rien en maquettes ferroviaires et cela ne m'intéresse pas donc je suis désolé de te laisser ici mais bonne chance pour la suite
Nikko485
jeu, 02/20/2020 - 18:42
Aucun problème !
mais ta solution va être mise en pratique, ça va faire un bon début pour re créer un décodeur compatible DCC.
Encore merci à toi !
Si quelqu'un d'autre idée c'est bienvenu ^^
Amicalement Jonathan.
Anonyme
ven, 02/21/2020 - 13:18
Par contre j'ai testé le code que j'ai mis en ligne il y a un problème avec micros(). qui n'est pas fiable. Comme je n'ai pas le matériel pour le testé en réel je le suis servi d'un fréquencemètre et d'un générateur de signaux, cela ne fonctionne pas ! Je vais chercher une solution pour résoudre de problème.
Anonyme
sam, 02/22/2020 - 10:49
J'ai trouvé la parade le code initial est à jour !
Dans un premier temps j'ai créer un code pour vérifier le bon fonctionnement de mon algorithme dont le code est ci-dessous.
Il semble bon, vous pourrez le constater sur la vidéo qui suit. Je modifierai le code initial un peu plus tard !
Mon générateur de fréquence offre la possibilité d'être piloté depuis un PC via un programme donc vous pourrez constater que lorsque PWM0 (sortie générateur) =50 % le PWM1 (généré par l'Arduino) est à 0 donc le sens est à l'Arrêt.
Pour une valeur Supérieure de PWM0 le sens est en Avant et PWM1 proportionnel à l'écart de PWM0 avec 50% et pour une valeur Inférieure c'est le sens qui passe en Arrière.
Nikko485
sam, 02/22/2020 - 15:51
Un GRAND merci à toi !
je vais tester ça prochainement.
J'ai fini par trouver la fréquence des hacheurs d'époque : entre 70 et 100 Hz.
Anonyme
sam, 02/22/2020 - 16:00
Par contre il vaudrait mieux utiliser le système DCC qui te permet de piloter tout un tas de loco et accessoires, je me pencherais peut être dessus !
Nikko485
sam, 02/22/2020 - 16:13
Ah ben c'est sur que le DCC serait parfait mais déjà là je suis ravi !
Anonyme
dim, 02/23/2020 - 19:05
De tout e manière n'attends pas quelque chose sur ce sujet dans las jours à venir je suis sur un projet assez ardu !!
Nikko485
mar, 02/25/2020 - 12:36
Salut à toi !
Alors ne t'inquiète pas je ne vais pas en plus demander des délais !
C'est déjà adorable ce que tu as fais !
Je vais déjà essayer de comprendre le truc et poster le résultat du code ici pour inspection...
Mais pareil ça ne sera pas pour demain, je fait presque 50h/semaines....
Encore merci à toi !