LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: simontpellier le mai 01, 2021, 07:56:35 pm

Titre: Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 01, 2021, 07:56:35 pm
Bonsoir,

deux ans (déjà!) de découverte et initiation et me voilà devant une difficulté redoutée : l'asservissement de la vitesse.
Pourtant indispensable car la conduite par la PWM c'est vraiment pas ça pour des ralentis ou des arrêts maîtrisés, trop de paramètres bougent, décidément impossibles à encoder en dur.

Le vrai problème, pour moi, c'est d'être sérieusement/gravement crasse pour tout ce qui touche à l'électronique/la théorie des moteurs, respectivement.
Impossible malgré du temps passé dessus de comprendre les schémas proposés par Jean-Luc dans le fil "un arduino par canton" ; j'ai renoncé à m'y frotter. J'aurais donc bien besoin d'un coup de main pour aboutir, quand-même, alors voilà où j'en suis.

A partir de cette page http://www.train35.fr/commande_moteur.html
et par tâtonnements j'ai pu arriver à ce montage, qui à l'air de marcher bien qu'on dise que "ce qui est trop simple ne peux pas marcher" (et ce qui est trop compliqué ne marche jamais)
voilà le schéma :
(https://i44.servimg.com/u/f44/11/73/62/86/captur15.jpg)

LA question est : est-ce que c'est viable ??
ensuite il y a d'autres question de détails, mais importants, est-ce que par exemple le Nano est protégé contre des risques imprévus ? Le calage un peu au pif du pont diviseur permet de ne pas dépasser 2.5V sur l'entrée analogique ce qui laisse une bonne plage de valeurs pour les calculs de correction mais est-ce que une zener par exemple ? ou un optocoupleur ?

Il est possible que l'expérience intéresse d'autres que moi ? je joins deux sketchs, le premier qui permet de tester la FCEM mesurée en fonction de la PWM appliquée à la motrice, le second qui à l'inverse conduit celle-ci par une consigne de FCEM et ajuste la PWM en conséquence.
(précision : je dois à Jean-Luc les variables de temps et la logique de filtrage des valeurs mesurées, merci à lui car c'est beaucoup de temps de gagné et surtout quelque chose que sans oscillo je n'aurais probablement pas pu déterminer)

Je me languis de vos conseils, avant de me lancer à passer de la paillasse à la planche !
bien cordialement, merci par avance
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le mai 01, 2021, 09:33:45 pm
Bonsoir,

pour ma part, je ne vois pas de problème.
L'entrée A0 va toujours mesurer une tension positive quelque soit le sens de la tension appliquée au moteur et le pont de résistance la protège (~2V maxi)
Reste à vérifier qu'en fonction de la fréquence du PWM adoptée, la rapidité de la conversion A/D (et du traitement qui suit), permet de lire la FCEM que le moteur délivre entre deux impulsions de tension fournies par le L298. Mais j'imagine que cela a été pris en compte.

Un petit test à faire : un moteur bloqué (pas trop longtemps, je n'assume aucune responsabilité)
Je suis branché DCC mais j'ai quelques locos qui aimeraient pouvoir sortir elles aussi.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 02, 2021, 09:00:49 am
Bonjour,

La grosse différence, au sens physique, est que dans le schéma que j'utilise la FCEM ne produit presque pas de courant (résistance de 100kΩ) et la tension reste aussi stable que possible pendant les mesures.

Ici elle dissipe dans 1,22 kΩ. Et donc cette charge va contribuer à ralentir la loco pendant la mesure. Je ne sais pas si ça peut poser un problème.

La seconde différence est que lorsque la FCEM est inférieure au seuil de la diode, elle devient nulle du point de vue de la mesure. J'ai peur que le système ne soit pas capable de faire un ralenti très bas. En fait la FCEM étant proportionnelle à la vitesse de la locomotive et étant d'environ 10V au max sur une locomotive H0 (cas le plus favorable), est-ce que la FCEM d'une locomotive qui marche au pas est vue ? En N ?

Il faut essayer. Pour protéger l'entrée analogique, tu peux mettre une diode schottky entre A0 et 5V de manière à ce que si la tension sur A0 dépasse 5V + seuil, ça part dans l'alimentation au lieu de casser l'entrée A0.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 02, 2021, 06:09:19 pm
Bonjour,
Merci pour vos réponses ! C'est très stimulant, par les questions que ça ouvre et parce que je ne suis donc pas engagé dans une impasse.
Elles pointent aussi le fait que tout est dans tout ! Et c'est vrai qu'il y a loin entre des essais avec une loco sur banc (d'autant que dans mon cas, c'est indécent j'en rougis, banc veut dire loco sur le toit roues en l'air avec deux pins Dupont qui les lui chatouillent) et une loco au pas sur ses rails.

Point par point, je me permets de nouvelles questions/remarques sur vos observations.

Citer
MSPORT - Reste à vérifier qu'en fonction de la fréquence PWM adoptée, la rapidité de la conversion A/D (...) Mais j'imagine que cela a été pris en compte.

Eh bien non ! et j'avoue même car c'est grave que ça ne m'avait même pas effleuré !
Mais juste pour ceux qui n'auraient pas acheté ma précédente aventure, co-éditée avec Trimarco, je précise que j'ai refilé au CPU le soin de fabriquer sur mesure mes PWM (nativement synchrones donc... on partait d'un sujet sur ce problème) et à la fréquence très étonnante de 40Hz, optimum vérifié et revérifié. Cad 10 à 20 fois plus faibles que les PWM hardware... elles même encore au moins 10 fois trop faible par rapport à ce qui est universellement préconisé (il y a la un grand mystère que j'aimerais beaucoup qu'on m'aide à lever... il n'est pas possible qu'on parle de la même chose !)
Donc, partant d'essais OK faits avec des PWM à 490Hz, je ne redoute pas la transposition sur des ponts travaillant à priori sous 40Hz.

Citer
MSPORT - Un petit test à faire : un moteur bloqué (pas trop longtemps, je n'assume aucune responsabilité)

Le moteur avait déjà survécu au jeu du foulard, je ne chercherai donc pas de tiers responsable. Le but était de tester le coef de l'intégrale mais je crois que vous pensiez à autre chose ?

Citer
Jean-Luc - La grosse différence, au sens physique, est que dans le schéma que j'utilise la FCEM ne produit presque pas de courant (résistance de 100kΩ) et la tension reste aussi stable que possible pendant les mesures

Oui, gros souci. Ce qui est à redouter dans les résultats de l'expérimentation en réel, c'est une différence, à l'arrivée (des signaux tension reçus) suivant les sections électriques du fait de... contacts plus ou moins francs, incidence des longueurs de fils, différence de potentiel entre masses, parasitages etc... et pour en effacer le plus possible j'avais visé un courant relativement élevé (mauvais raisonnement?). Mais je peux facilement si vous le conseillez modifier le pont diviseur pour abaisser le courant sans modifier le ratio diviseur, cad la tension récupérée ?
(Pensez vous que pour le meilleur compromis pour la justesse des mesure soit de faire les relevés aux points d'alimentation rails ou plutôt sur les bornes des boosters ?)

Citer
Jean-Luc - Ici elle dissipe dans 1,22 kΩ. Et donc cette charge va contribuer à ralentir la loco pendant la mesure. Je ne sais pas si ça peut poser un problème

Je ne crois pas, parce qu'on parle de 400 micro-secondes et 4% du temps total ce qui rend déjà le ralentissement imperceptible et que si on parle de la marche "visible", sous 12V mes locos (N) vont toutes tellement trop vite qu'elles subissent un paramètre de bridage PWM individualisé. Il y en a donc sous le pied. Elles supporteraient d'ailleurs aussi d'être alimentées sous un peu plus que 12V, je ne pense donc pas qu'il puisse y avoir un problème.

Citer
Jean-Luc - La seconde différence est que lorsque la FCEM est inférieure au seuil de la diode, elle devient nulle du point de vue de la mesure. J'ai peur que le système ne soit pas capable de faire un ralenti très bas

Alors ça c'est ennuyeux ! d'autant que ça n'est pas une mais deux diodes que le courant de FCEM doit vaincre successivement n'est ce pas ? Pour le ralenti au pas, ou même "petit footing" qui m'aurait bien convenu, j'ai peur que ça soit cuit et que les essais le confirment. Mais il y a une parade car le pont de diode est facultatif, il a pour intérêt essentiel de n'avoir plus besoin que d'une pin quelque soit le sens de marche. La décision sera facile à prendre. D'autant qu'un réseau c'est, quoi?, au minimum 20 sections électriques et qu'il faudra de toutes façons multiplexer les entrées. (à moins que ça ne soit une nouvelle source de perturbation de la mesure ? à priori je ne pense pas)

Citer
Jean-Luc - Pour protéger l'entrée analogique, tu peux mettre une diode schottky entre A0 et 5V de manière à ce que si la tension sur A0 dépasse 5V + seuil, ça part dans l'alimentation au lieu de casser l'entrée A0

Ne pouvant être complètement rassuré sur le fait que ça n'arrive pas, c'est donc ce que je vais faire, je découvre, merci pour le conseil.
Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le mai 02, 2021, 08:24:51 pm
Bonjour,
Merci pour vos réponses !
Citer
MSPORT - Reste à vérifier qu'en fonction de la fréquence PWM adoptée, la rapidité de la conversion A/D (...) Mais j'imagine que cela a été pris en compte.

à la fréquence ... de 40Hz,  on a donc le temps

Citer
MSPORT - Un petit test à faire : un moteur bloqué (pas trop longtemps, je n'assume aucune responsabilité)

 vous pensiez à autre chose ?


Oui, si le moteur est bloqué, il ne présente pas de FCEM, on doit mesurer 0.

Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 03, 2021, 08:32:27 am

Une fois réglé ces deux problèmes, tu retombes sur le schéma que j'utilise :)

Je ne comprends pas le choix d'une fréquence de 40Hz
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 03, 2021, 02:20:36 pm
Bonjour,

pour répondre à msport :
vitesse moteur 0 => FCEM=0, oui, mais vitesse 0 MOTEUR BLOQUE et FCEM=0... je n'ai pas fait attention et je ne me souviens pas ; je ferai le test car j'ai l'impression que si ça n'est pas le cas ça invaliderait toute autre mesure, c'est bien ça ?

et à Jean-Luc :
Le pont de diode est une évolution en cours d'essais ; précédemment OUT1 était lu sur A0 et OUT sur A1 (un "if" dans le code lisant la bonne pin, fonction de la (*)polarisation). Petit inconvénient, il faut 2x plus de fils et pins mais gros avantage : aucun seuil.
(*) Le pont H vient du choix de départ de n'employer aucun relai... mauvais vécu professionnel

Le pont de résistances : faute de compétences pour mettre en œuvre ton principe, je peux au moins les recalibrer si nécessaire pour diminuer le puissance consommée. Les essais in-vivo vont me renseigner.

Citer
Je ne comprends pas le choix d'une fréquence de 40Hz
mais moi pas vraiment ! elle provient historiquement de l'idée de tester un pca9685 et ses 16 PWM pour régler par la bande le problème du non synchronisme des timers Arduino.
(https://i.servimg.com/u/f44/11/73/62/86/index10.jpg)
Or ces modules produisent des PWM 60Hz... et ça a parfaitement fonctionné, je n'ai pas été chercher plus loin. Jusqu'à, sans refaire toute l'histoire, que je découvre qu'à 40Hz les locos "respiraient" mieux, meilleurs ralentis, plus rapides à PWM égale. Peu importe, 60Hz ou 40Hz la question est la même : comment est-il possible que ça fonctionne alors que "quelques dizaines de kHz" sont recommandées... (???)
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 03, 2021, 02:24:24 pm
Aucune raison que ça ne fonctionne pas. Mais il y a un prix à payer. Voir ici : http://modelleisenbahn.triskell.org/spip.php?article44

À 40Hz le moteur chauffe. Si les aimants sont au néodyme, ça peut provoquer une désaimantation (vers 80°) et donc une destruction du moteur.

D'où la recommandation d'une fréquence de PWM élevée.

Note que le L298 a une fréquence max de 20kHz de mémoire.
Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 04, 2021, 09:05:31 am
vitesse moteur 0 => FCEM=0, oui, mais vitesse 0 MOTEUR BLOQUE et FCEM=0... je n'ai pas fait attention et je ne me souviens pas ; je ferai le test car j'ai l'impression que si ça n'est pas le cas ça invaliderait toute autre mesure, c'est bien ça ?

Si le moteur est bloqué, la FCEM est à 0.

Citer
Le pont de diode est une évolution en cours d'essais ; précédemment OUT1 était lu sur A0 et OUT sur A1 (un "if" dans le code lisant la bonne pin, fonction de la (*)polarisation). Petit inconvénient, il faut 2x plus de fils et pins mais gros avantage : aucun seuil.

C'est sans doute mieux

Citer
(*) Le pont H vient du choix de départ de n'employer aucun relai... mauvais vécu professionnel

Vu que les relais commutent quand on inverse la marche, ça ne devrait pas trop les stresser :)
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 04, 2021, 08:11:10 pm
Bonsoir,

Très content, ça se présente très bien.
D'abord, moteur bloqué ça fait bien FCEM zéro. C'était facile à vérifier puisqu'il pouvait y avoir un petit doute.

Mais surtout : le pont de diode est coulant. Sur un essai très basique certes, une seule loco, uniquement de la mesure (pas de rétro-action), FCEM prise directement sur un pont, la fourchette de valeurs est  plus favorable qu'espéré : +/-500 (sur 1023) à 200kmh vitesse vraie rapportée à l'échelle, +/- 20, assez constant, à 15kmh, ce qui laisse une bonne latitude de régulation. L'allure footing (soutenu!) doit être possible, faut-il qu'à basse vitesse la régulation ne pompe pas.

L'alternative avec deux lectures analogiques, je testerai sérieusement ; je suis bien d'accord que
Citer
C'est sans doute mieux
En attendant, 15kmh ça me semble déjà un ralenti impressionnant ? Est-ce au dessus de ce qui est couramment obtenu ?

Grosse campagne d'essais en perspective pour optimiser tout ça. Et d'abord, chic, du tricotage au plafond, entre deux tréteaux de 75cm.

Pour ce qui est de modelleisenbahn, je connais... quasiment depuis que je suis venu au monde (le monde arduino !) et les "quelques dizaines de kHz" c'était précisément une citation !
(Apparemment mes aimants ne sont pas néodyme !)

Et concernant ces relais qui ne devraient pas trop stresser, je ne dirai pas le contraire mais la question n'est pas celle là... c'est celle de MON stress  ;) !

Merci pour tous ces retours.
Cordialement


Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Dominique le mai 06, 2021, 10:31:34 am
Avec le DCC dont les crans vont de 1 à 126, il est courant de faire avancer une loco au cran 1 : elle avance très très lentement
A 15 km/h à l'échelle, je trouve que ça va encore trop vite dans les entrées en gare.
L'idéal est de réaliser des ralentissements très progressifs jusqu'à l'arrêt complet.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 06, 2021, 02:12:45 pm
Voilà ce que ça donne chez moi :

https://www.locoduino.org/pic/ralenti.m4v
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 06, 2021, 06:00:45 pm
Citer
Jean_Luc - Voilà ce que ça donne chez moi :
C'est magnifique ! Et je devine que ni 5 ni 10 wagons derrière ne changeraient le résultat. Pas possible sans un asservissement n'est ce pas ?
Merci pour vos deux réponses, je me demandais où placer la barre.

Mais si je calcule : 15kmh, à l'échelle ça fait 2.5 cm seconde. Or si tes coupons sont comme il semble des coupons de 10cm, ça correspond au +/- 4 secondes par coupon ?

Car les 15kmh je pense que ça sera possible (sans pont de diode qui bouffe la plage de basses vitesse, ça c'est confirmé) mais moins que 15kmh... je suis à peu près certain que je ne pourrai pas : en dessous plus rien ne sort du moteur, sinon par bouffées entre deux hoquets (je parle toujours d'un mode "mesure" sans bouclage d'asservissement).

Et cette vidéo, c'est à quelle fréquence de PWM ??? car j'ai - vraiment - de plus en plus besoin de comprendre.
En effet, après ce n'ième rappel sur les "bonnes ondes" et un peu penaud d'avoir tant insisté sur mes 40Hz, je me suis vu reparti à refaire quelques essais "à la base", avec une PWM native de MEGA2560 (la 5 pour tout dire). Et si je suis incapable de refaire la théorie, je peux au moins rapporter les faits :

- aux paramètres par défaut : constat immédiat d'un retard à l'allumage rédhibitoire, assorti évidemment de l'impossibilité de "vrais" ralentis. Par exemple : là où je paramètre les PWM de "décollage" sur 50, en moyenne (selon la loco... puis variable selon son humeur, ce qu'elle tire, si elle démarre en courbe ou non, la direction du vent etc), c'est vers PMW 100 qu'elle se décidait à démarrer ("bondir" serait plus exact), feux prés-allumés pendant les longues secondes de la montée des crans de la programmation habituelle pour un démarrage progressif. Et je parle d'ampoules bulbe, pas de LEDs, ce qui donne idée du courant de court-circuit. Si ça ça ne fait pas chauffer le néodyme !!

- Alors qu'en ajoutant juste : TCCR3B = TCCR3B & B11111000 | B00000101; pour une PWM à 30Hz, je reviens immédiatement à la souplesse de mes 40Hz maison.


Le cran 1 du DCC me laisse dont admiratif et rêveur.
Mais le DCC c'est comme un univers parallèle pour moi. Sauf que dans ce cas je ne doute pas (vraiment) que ça existe, alors j'ai deux questions pour Dominique :

- cran 1 (sur 128), cad correspondant à une PWM de 2 ?? (sur 255 donc). Avec un moteur supraconducteur sur paliers fluides ?? En tous cas avec une mécanique top forme sinon c'est pas possible !! (et sans rien à tracter ? car j'ai lu et je veux bien le croire qu'on ne peut pas embarquer l'asservissement dans une loco DCC mais c'est peut-être faux)

- et donc cran1 : véritable cran1 ou est-ce le cran 1 après un talon ? (l'équivalent de ma PWM de décollage)




Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: trimarco232 le mai 06, 2021, 07:44:36 pm
Pas possible sans un asservissement n'est ce pas ?
pas nécessairement ; j'avais il y a longtemps fait une alim pwm (avec lm339) qui dans les valeurs les + basses basculait de 12 vers 18v ; l'engin était un x2800 roco ; on ne le voyait pas avancer : pour se rendre compte du mouvement, il fallait retirer la caisse pour voir tourner le rotor très lentement (~3 secondes par tour) !
je ne me souviens plus de la fréquence pwm utilisée ...
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 06, 2021, 07:50:21 pm
oh ! l'idée du 18V, c'est pas mal non plus !

Mais je revenais pour une correction. Car après avoir mieux regardé la vidéo, et jusqu'à la fin (avec la ligne droite), ça fait pas plus que +/- du 5kmh !!! Eh bé !
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le mai 06, 2021, 09:04:13 pm
Les 15kmh, oui, mais c'est du DCC et les décodeurs comportent une compensation de charge qui est manifestement basée sur la mesure de la FCEM ...
Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 07, 2021, 08:51:33 am
Et cette vidéo, c'est à quelle fréquence de PWM ??? car j'ai - vraiment - de plus en plus besoin de comprendre.

31,373 kHz

Citer
En effet, après ce n'ième rappel sur les "bonnes ondes" et un peu penaud d'avoir tant insisté sur mes 40Hz, je me suis vu reparti à refaire quelques essais "à la base", avec une PWM native de MEGA2560 (la 5 pour tout dire). Et si je suis incapable de refaire la théorie, je peux au moins rapporter les faits :

- aux paramètres par défaut : constat immédiat d'un retard à l'allumage rédhibitoire, assorti évidemment de l'impossibilité de "vrais" ralentis. Par exemple : là où je paramètre les PWM de "décollage" sur 50, en moyenne (selon la loco... puis variable selon son humeur, ce qu'elle tire, si elle démarre en courbe ou non, la direction du vent etc), c'est vers PMW 100 qu'elle se décidait à démarrer ("bondir" serait plus exact), feux prés-allumés pendant les longues secondes de la montée des crans de la programmation habituelle pour un démarrage progressif. Et je parle d'ampoules bulbe, pas de LEDs, ce qui donne idée du courant de court-circuit. Si ça ça ne fait pas chauffer le néodyme !!

Il n'y aurait pas une capa dans cette loco ?
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 07, 2021, 12:31:02 pm
Citer
Il n'y aurait pas une capa dans cette loco ?

... toouute petite !! sert à rien ??
Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Jean-Luc le mai 07, 2021, 01:03:23 pm
Citer
Il n'y aurait pas une capa dans cette loco ?

... toouute petite !! sert à rien ??

Elle perturbe en lissant la tension vue par le moteur d'une part et elle perturbera la lecture de la FCEM. Ça explique pourquoi ça fonctionne à 40Hz et pas à 32kHz.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le mai 31, 2021, 08:45:11 pm
Bonsoir,

Asservissement de vitesse pour les nuls... saison 2

Résumé de la saison 1 : c'est fou, la FCEM ça se capte avec juste un bout de fil, deux résistances et un code minimaliste ! Et encore... la saison 2 démontrera que le code peut être encore plus simpliste. Voire carrément remplacé par un circuit RC ? Ce qui donnerait corps à la remarque de Msport :

Citer
Les 15kmh, oui, mais c'est du DCC et les décodeurs comportent une compensation de charge qui est manifestement basée sur la mesure de la FCEM ...

Alors SAISON 2 : Un code élaboré pourra-il produire EN SITUATION un véritable asservissement, plus "intelligent" que de la compensation de charge ?

En résumé : un peu oui et beaucoup non (en attendant la saison 3 !!)

Du côté du non :
Il y a deux conditions à une régulation réellement opérante : une mesure fiable de la grandeur et des corrections très fréquentes.
Autant du fait de la première que de la deuxième condition, pas la peine de penser à une correction "dérivée"... il faudra donc faire avec une proportionnelle fantasque (capable d'un freinage brutal immédiatement après un grand coup de +) et une intégrale vite chatouilleuse.

Le but est tout de même de tirer le maximum de ces FCEM, puisqu'il est possible de mesurer "quelque chose" !

Du côté du oui :
Dans ces conditions, il y a un réel plus par rapport à une conduite par la PWM: une régularité d'horloge, la quasi certitude de ne plus avoir de train définitivement bloqué sur un point délicat, une vitesse identique loco à vide ou en traction, des accélérations et ralentissements sous contrôle
...mais un ralenti "au pas"... heu pas vraiment.  Ou peut-être s'en approcher avec des conditions "labo" : une motrice très courte avec un max de roues au contact, lente car fortement démultipliée (donc grosse FCEM même à vitesse faible),  une seule zone électrique, pas d'aiguilles, des grands rayons... là oui, et/ou avec en plus le renfort d'une électronique assez futée pour doper le signal mais pas le bruit de fond (la phase 3 !) ça doit pouvoir être plutôt sympa!

Alors voilà pour l'instant ce que ça donne chez moi.
Avec trois "crans" : 15%, 11%, 8%. Sur ce  dernier, on voit nettement, surtout si on tremble en même temps que l'image, que la régulation flirte avec la capacité à distinguer le signal du bruit de fond... résultat : 25kmh et pas moyen en l'état de faire mieux...
https://youtu.be/T9GLk8pYk6o (https://youtu.be/T9GLk8pYk6o)

... en attendant la phase 3 !
Mais là, gros problème. Car si un code c'est, pour moi, un peu comme les sous-titre anglais d'un film : je comprends plus ou moins et quand c'est mon tour d'écrire, en insistant je finis par me faire comprendre.
Mais un schéma électronique... ce coup, c'est un film avec des sous-titre en russe !
Quelqu'un aurait-il le temps et la gentillesse de me "traduire" ce schéma proposé par Jean-Luc ? Nécessaire et suffisant sauf erreur (de ma part !).
J'ai approvisionné les ampli OP, révisé les différents types de montage (sans reconnaître celui-du schéma...), me manquera plus que l'impression de ne pas faire n'importe quoi !

Un énorme merci par avance au volontaire (pourvu que !)
(https://i.servimg.com/u/f44/11/73/62/86/captur16.jpg) (https://servimg.com/view/11736286/186)
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: laurentr le juin 13, 2021, 12:07:43 am
Bonsoir à tous

Je me permets de vous inviter aussi à regarder le sujet décodeur de locomotive que j avais ouvert il y a déjà un petit moment!...

En effet le code source que j avais cité NAGODEN ainsi que les vidéo qui démontre son fonctionnement éclaireront peut être les débats à la vue des algorithmes et schémas utilisés...

Bonne lecture.

Laurent
Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le juin 13, 2021, 11:20:50 am
un schéma électronique
Mais un schéma électronique hors de son contexte, c'est un film russe avec des sous-titres en cyrillique !

Le MCP1458 n'existe pas, c'est certainement le MC1458.

Le schéma ressemble à celui ci-dessous mais ici, la branche positive envoie l'AO en saturation dès qu'une tension positive est appliquée.
Est-ce le but ?
http://courelectr.free.fr/AINST/AINST.HTM

Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le juin 13, 2021, 11:33:06 am
Bonsoir à tous


https://forum.locoduino.org/index.php?topic=1043.msg12158#msg12158

On suit la recommandation de Dominique et on reste sans voix devant le niveau des contributions !
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le juin 15, 2021, 09:19:38 pm
Merci à Laurent pour son indication.

En effet ça vole haut. Et c'est surtout très intéressant.

J'ai regardé le code "DSDCCDec_motor_BEMF_04a" et c'est confirmé, j'avais à priori pensé que c'était totalement impossible mais les décodeurs DCC font exactement le travail que propose Jean-Luc en analogique! Seule petite différence, l'algorithme fait en effet plutôt dans la "force brute", plus (+) de mesures, aucun filtrage.

Le gros avantage de l'analogique restant qu'on a pas la contrainte terrifiante de devoir tout faire tenir sur un timbre poste !
Bon d'accord... il ne reste aucun avantage si on a pas comme Laurent le challenge de faire ses propres décodeurs ( :o !) 

Pour ce qui est de la question de msport  "la branche positive envoie l'AO en saturation dès qu'une tension positive est appliquée. Est-ce le but ? "... Jean-Luc pourrait (pourra ?) sûrement le dire...

Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le juillet 29, 2021, 10:02:14 pm
Suite 3 ET FIN
- avec ABANDON de la piste asservissement
car ça marche... fort mal ou sinon dans des conditions extrêmement étroites (mais si c'est faux, je suis vivement intéressé par une démonstration).
Le signal de la mesure FCEM se contredisant régulièrement d'une mesure à l'autre, impossible d'en déduire la moindre action Proportionnelle. Et si l'Intégrale permet d'isoler une tendance, une action intégrale trop majoritaire, ça pompe, c'est obligé.

- MAIS...
idée : substituer à l'action proportionnelle une PWM "classique" : un cran donné de réglage => un équivalent tension => une vitesse... plus OU MOINS assurée compte tenu des nombreux facteurs quasiment tous d'accord pour ralentir (si ça n'est bloquer) la loco.
Plein d'excellentes occasions pour l'intégrale de faire son retour !
Et ça s'appelle de la COMPENSATION DE CHARGE ; dès que quoique se soit ralentit la loco, la FCEM diminuant, l'intégrale se réveille et... compense. (L'intégrale pourrait aussi faire du moins... il faut juste que ça soit à bon escient sinon on retrouve le souci du pompage)

J'aurais tout de suite compris toute la substantifique signification de "compensation de charge"... que j'aurais gagné bien du temps !
Car ça, ça marche ! Et sans aucun besoin d'électronique (problème réglé !) et ça donne enfin un fonctionnement en analogique propre, fluide, régulier, reproductible. Réaliste !

(j'admire au passage le fait que le DCC puisse intégrer, "in situ" qui plus est, une fonction tout de même complexe mais tellement indispensable).

Et pour ce qui est de la marche à basse vitesse... match nul non ? Analogique (avec compensation de charge donc !) et DCC se rejoignent forcément sur les mêmes réalités : selon la loco on obtient effectivement du 5kmh régulier, pour d'autres ça sera jamais moins que 25kmh (et ceci bien sûr ::) à condition que les roues soient astiquées, les rails décapés, les contacts nickels...).
Dernière remarque ; sous réserve que j'ai à peu près compris ce qu'est un réseau en DCC : la loco se charge de tout ! Alors que dans l'analogique ça sera loin d'être aussi simple ; le problème à résoudre sera celui du sectionnement électrique qui impose de compiler et traiter plusieurs relevés de FCEM pour un même train, tant en traction qu'en refoulement (même dans le cas d'une loco solo !).
Mais ça se fait et c'est typiquement le plaisir collatéral de l'analogique, faire tourner un code !

Peut-être à bientôt pour de nouvelles aventures ?
En tous cas bien cordialement

Philippe


Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: Dominique le juillet 30, 2021, 09:09:21 am
Bravo Philippe et un grand merci pour ce partage vraiment détaillé qui va permettre au plus grand nombre de comprendre ce qu’on peut faire en « analogique ».

Bien qu’ayant la plupart de mes locos en digital, il reste quelques « gauloises analogiques » que j’aimerai faire tourner de temps en temps. L’idée de faire un tronçon analogique progresse donc, grâce à toi.

Amicalement
Dominique
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le juillet 30, 2021, 09:16:02 pm
Bonsoir Dominique,

Merci pour cette attention !
Et note bien que quand tu te lanceras, ça sera un grand plaisir pour moi si tu veux qu'on échange (d'autant que j'en tirerai profit, j'en suis certain !).

Amicalement
Philippe

NB : Ça sera également un vrai plaisir de répondre sur ce sujet à quiconque le souhaiterait. Je joins d'ailleurs à titre documentaire et pour démystifier le bout de code, commenté, qui permet d'obtenir, pour chaque train, un signal FCEM exploitable par un gestionnaire (dans une logique à 1 satellite pour 4 sections (au plus), communiquant avec un gestionnaire central)


  const uint16_t PWM_OFF = 300;                           // 300 microSeconds - temps de coupure du courant traction
  const uint16_t PWM_ON = 10000;                          // ~10 milliSeconds - période "ON", moteur alimenté
  uint32_t time_ON; 
  bool timeToEmitFCEM;

  const uint8_t NB_SECTIONS = 4;                          // ex : 4 sur ce satellite
  const uint8_t SECTION_PINOUT[NB_SECTIONS][5] = {.......};
// pour chaque section :
// - numéro de la section (sur le réseau)
// - num de la pin(satellite) de polarisation 1 du pont H qui alimente la section
// - pin de polarisation 2
// - pin analogique de lecture FCEM de la section en polarisation 1
// - pin analogique de lecture FCEM en polarisation 2
  uint8_t trainOnSection[NB_SECTIONS] = { 0, 0, 0, 0 };   // contiendra 0 pour libre ou num de train+1 (fourni par ailleurs par le master) si occupée
  bool polarization[NB_SECTIONS] = { 0, 0, 0, 0 };        // data fournie par le master en complément du numéro de train
  uint8_t trainNum[NB_SECTIONS] = { 0, 0, 0, 0 };         // numéros des trains présents sur les sections du satellite (numérotation "vraie")
  uint8_t trains;                                         // nombre de trains différents recensés à l'instant "t"
  uint16_t sumFCEM[NB_SECTIONS];
  uint16_t count[NB_SECTIONS];
  int16_t reading[NB_SECTIONS][6];                        // 6 mesures pour chaque section (si occupée)


void mesureFCEM() {
  if (timeToEmitFCEM) /*=>*/ sendFCEM();                  // LES sats ont reçu (par ailleurs) un message du MASTER enjoignant à transmettre les relevés
  if (micros() - time_ON < PWM_ON) /*=>*/ return;

  if (trains) {
    for (uint8_t i=0; i<NB_SECTIONS; i++) {               // au moins un train détecté => tous pins de polarization LOW (=> coupure du courant traction)
      digitalWriteFast(SECTION_PINOUT[i][1], LOW);
      digitalWriteFast(SECTION_PINOUT[i][2], LOW);
    }   
    delayMicroseconds(PWM_OFF);                           // attente avant mesures
    for (uint8_t i=0; i<NB_SECTIONS; i++) {
      if (trainOnSection[i]>0) {                          // TOUT OU PARTIE du train numéro "trainOnSection[i] occupe la section i
        for (uint8_t j=0; j<6; j++) {                     // 6 mesures
    reading[i][j] = analogRead(SECTION_PINOUT[i][3+polarization[i]]);
        }
      }
    }

  /* TRAITEMENT DES DONNEES */
    int16_t read[NB_SECTIONS] = {0, 0, 0, 0}, maxRead[NB_SECTIONS] = {0, 0, 0, 0}, minRead[NB_SECTIONS] = {0, 0, 0, 0};
 
    for (uint8_t i=0; i<NB_SECTIONS; i++) {
      if (trainOnSection[i]) {                            // il y a un train dans la section i => au moins une section est occupée
        if (polarization[i]) /*=>*/ digitalWriteFast(SECTION_PINOUT[i][1], HIGH);
        else /*=>*/ digitalWriteFast(SECTION_PINOUT[i][2], HIGH);  // rétablissement de la polarization initiale
        maxRead[i] = reading[i][0];                       // première mesure
        minRead[i] = reading[i][0];
        read[i] = reading[i][0];
        for (uint8_t j=1; j<6; j++) {                     // on lit les 5 autres mesures et on repère les deux extrêmes
          maxRead[i] = max(reading[i][j], maxRead[i]);
          minRead[i] = min(reading[i][j], minRead[i]);
          read[i] = (read[i] + reading[i][j]);            // sommation des SIX lectures
        }
        read[i] = (read[i] - maxRead[i] - minRead[i])/4;  // moyenne des 4 valeurs retenues après élimination des extrêmes
        maxRead[i] = 0;
      }
    }
    // si train sur 2 sections (ou plus), on filtre les résultats "fake" (wagons) en comparant les mesures de ce train
    for (uint8_t j=0; j<trains; j++) {  // à ce stade, "trains" est forcément au moins égal à 1, le numéro du premier train nomenclaturé étant inscrit dans trainNum[0]
      for (uint8_t i=0; i<NB_SECTIONS; i++) {    // on recherche ce train sur toutes les sections et on repère son read max
        if (trainOnSection[i] == trainNum[j]) {  // un train a été nomenclaturé à l'indice j (toujours vrai une fois au moins)
          maxRead[j] = max(read[i], maxRead[j]); // max-des-max pour le train j de numéro trainNum[j]
        }
      }
      for (uint8_t i=0; i<NB_SECTIONS; i++) {    // on compare les résultats section par section, on garde ou non
        if (trainOnSection[i]==trainNum[j] && read[i]> maxRead[j]/2) { // écart "normal" => on prend en compte la mesure (maxRead répond à la condition)
          sumFCEM[j] = sumFCEM[j] + read[i];
          count[j]++;     // sumFCEM == première ou nouvelle sommation pour ce train, puis comptage des sommations
        }
      }
    }
  }
  time_ON = micros();
}

void sendFCEM() {
  timeToEmitFCEM=false;
  for (uint8_t j=0; j<trains; j++) {
    if (count[j]) {
      const uint16_t TRAIN = trainNum[j]-1;
      messageCAN_FCEM.id = 72 + TRAIN;       // EXEMPLE : (64 pour satellite"0", 72 pour sat"1" etc) + n° du train converti en valeur "code"
                                             // /!\ une loco en chevauchement sur 2 sections gérées par 2 sats # pourrait générer 2 messages identiques et simultanés, provoquant
                                             // UN PLANTAGE DU BUS. L'ajout du n° de sat dans l'ID permet,de discriminer les messages (+ autres usages) */
      uint16_t fcem = sumFCEM[j]/count[j];
      if (fcem < FCEMtrain[TRAIN]/2) /*=>*/ fcem = FCEMtrain[TRAIN]/2; // "passe-bas", bride les points aberrants
      messageCAN_FCEM.data16[0] = fcem;      // on ne transmet pas la section, c'est une donnée connue du master
      const bool OK = ACAN::can0.tryToSend(messageCAN_FCEM);
      FCEMtrain[TRAIN] = fcem;
    }
    sumFCEM[j] = 0; count[j] = 0; trainNum[j] = 0;
  }
  scanSections();  // AVANT LES PROCHAINES MESURES, ON REFAIT LA NOMENCLATURE DES TRAINS
}

void scanSections() { // inventaire et classement dans trainNum[] des trains présents sur les sections traitées par le sat
  bool flag = 1; 
  trains = 0;
  for (uint8_t i=0; i<NB_SECTIONS; i++) {
    trainNum[i] = 0;
    if (trainOnSection[i]) {
      for (uint8_t j=0; j<=trains; j++) { 
        if (trainOnSection[i] == trainNum[j]) {
          flag = 0;
          break;
        }
      }
      if (flag) {
        trainNum[trains] = trainOnSection[i];
        trains++;
      }
      flag = 1;     
    }
  }
}

Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le janvier 08, 2022, 07:22:00 pm
Bonsoir,

Je me permets de réveiller ce fil pour y mentionner la découverte de deux possibilités... à priori "unexpected" offertes par la mesure de la FCEM sur un réseau analogique.

Il y a juste un pré-requis : que le réseau soit organisé en sections, équipées d'une détection de passage (et/ou présence). Mais c'est certainement toujours le cas ?

Outre la compensation de charge, on peut alors bénéficier de deux fonctions bien intéressantes :

- très simple, la détection du sens de marche, non pas bien-sûr le sens de rotation mais la marche TRACTION/REFOULEMENT
   * premier cas : une section détecte un train et concomitamment une FCEM => c'est une motrice (sauf cas ennuyeux mais très-très rare d'un matériel avec un seul bogie moteur) ;
   * second cas : un train est détecté mais la FCEM reste nulle, ou insignifiante => c'est un CONVOI en refoulement.
     Une donnée qui peut être utilisée pour éviter une marche à grande vitesse en refoulement, possiblement périlleuse (et peu réaliste ?)

- plus "sioux", que je n'ai pas implantée mais les tests sont positifs :
  une FCEM étant le reflet du nombre de tours moteurs, il suffit d'une variable, par motrice, donnant sa démultiplication pour que les mesures de FCEM, intégrées sur un temps donné, indiquent une distance parcourue ;
      * un top détection puis un top fin-de-détection SUR UNE SECTION : la différence des deux temps donnera la longueur du convoi (comptage des wagons, triage) ;
      * un top détection puis l'atteinte PAR LE TRAIN d'une FCEM intégrée prédéterminée => le convoi a atteint un point précis (dépendant c'est vrai de mesures elles-mêmes précises, donc de la qualité du contact rails/roues)
        et ceci quelque soit le sens de marche, traction/refoulement et sa vitesse !
        de quoi disposer à volonté de détecteurs de position virtuels pour ralentissements, arrêts etc

et de quoi s'amuser non ?



   
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: SYLTRAIN le février 10, 2022, 06:58:03 pm
Bonjour,
question de debutant qui je l' espere n' est pas hors sujet
Pourquoi ne pas utiliser la sortie de la broche (1) du L298 (broche Vsensor) pour faire la mesure de courant et/ou la detection de presence de train sur le canton ?
Peut etre que ce n' est pas les memes valeurs ? (car sinon on coupe ou dessoude la patte du l298 du shield (patte longue ) et on resoude un fil dessus avec une resistance )
Peut etre que je nai pas compris tout simplement :)
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le février 10, 2022, 08:52:45 pm
Bonsoir,
tout le débat tourne autour de la mesure de la Force Contre Electro Motrice, il s'agit d'une tension.
La broche 1 du L298 mesure le courant dans le pont, donc rien à voir avec une tension.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: SYLTRAIN le février 10, 2022, 09:49:42 pm
Merci pour votre explication
et desolé pour le hors sujet
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le février 10, 2022, 09:56:00 pm
Bonsoir,
msport a donné la version courte ;
une précision si besoin en est : le Vsensor renseigne sur la force électromotrice fournie au moteur (qui n'est pas précisément corrélée à son régime tr/mn)
Alors que ce que l'on cherche est la force CONTRE électromotrice, réinjectée par le moteur, en mode génératrice du fait de son inertie, lorsque le pont L298 ne l'alimente (brièvement) PAS. Or là, la tension recueillie représente parfaitement son régime.
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: SYLTRAIN le février 11, 2022, 08:29:47 am
Merci pour ce complement d' information
Donc a partir de la valeur lu lors de l' interruption  comparée a la valeur de l' interruption n-1 on en deduit si on doit ajouter plus ou moins de pwm c' est ca ?
Mais comment faire en acceleration ou ralentissement ?
Est ce que l'on peut realiser un capteur de presence du canton a partir de cette valeur en meme temps ou peut'on utiliser celle de du Vsensor ? (il faut peut etre laisser un minimun de courant dans le canton pour avoir une detection ?)
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: simontpellier le février 11, 2022, 09:35:54 pm
... comparer les valeurs des interruptions n-1 et n ?
Oui je vois l'idée mais... non... ça donnerait juste une tendance ; il la faut pour les asservissements les plus performants, sinon c'est sans intérêt. C'est la comparaison instant "t" entre mesure et demande ("consigne") qui indiquera le sens de la correction à effectuer. Charge à  l'asservissement de calculer son intensité et à partir de là, palier de vitesse, accélération, ralentissement, pas de différence, c'est toujours le delta mesure_consigne qui sera la base de calcul de la juste PWM à appliquer.

Quant-à la problématique "capteur de présence"... bonne et déterminante question ! Sauf qu'elle est tellement vaste, je n'oserai qu'une qu'une réponse sommaire...
Déjà on peut éliminer les réseaux digitaux car sauf possible cas particulier je ne vois pas la place que pourrait y avoir un L298N... mais je ne connais rien au digital.
Côté analogique... ? Je n'ai jamais vu de post sur un réseau qui utiliserait le Vsensor des L298... je pense que ça s'explique comme cela :
- si on utilise des L298N en nombre égal à celui des trains possiblement en circulation - dans ce cas, la PWM(+polarisation) d'un train donné doit être adressée à la section électrique qu'il occupe au moyen d'une batterie de relais. Il n'y a donc plus de lien entre la mesure Vsensor et l'occupation ou non d'une section précise. (quid de la FCEM ? ça marche si c'est une motrice... pas si c'est un wagon, donc c'est mort)
- si c'est en nombre égal à celui des sections électriques : là c'est le code qui à mesure de l'avancement du train adresse chaque PWM/train "perso" au(x) pont(s) affecté(s) à la (aux) section(s) occupées. Et donc dans ce cas, si telle ou telle section est occupée, le code le sait déjà !

Le problème primordial de la détection demeure donc ! Et c'est choisir la technologie, puis les capteurs, mais aussi la façon dont seront utilisées les informations le but étant que le code puisse toujours se faire une représentation exacte du réseau.
Disons juste qu'il y a deux grands principes, qu'on peut d'ailleurs combiner :
- une détection par capteurs de consommation de courant. Mais problème avec les wagons... il faut graphiter les essieux (et prier) sinon le détecteur ne voit que les motrices ! Pour avoir une vision temps réel du réseau ces capteurs impliquent aussi je crois de les interroger en continue ;
- une détection par détecteurs de passage. Dans ce cas motrice ou wagon peu importe. On peut dire que le détecteur prend une photo => à partir de ces clichés, charge au code de tenir à jour un tableau des sections occupées, ça n'est pas sorcier. Mais la détection doit être infaillible sinon la catastrophe guette (la aussi).

Ni le Vensor ni la FCEM n'ont donc d'intérêt en tant que détection.
Mais...
il n'a été jusque là question que de l'occupation des sections. Outre réguler la vitesse, ce que la FCEM peut faire en prime c'est indiquer la POSITION d'un convoi dans une section donnée ! En effet, la FCEM renseignant en continue sur la vitesse, il suffit d'introduire la variable temps pour obtenir une distance parcourue (à partir par exemple du dernier détecteur de passage).

De quoi cogiter !
Titre: Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: SYLTRAIN le février 11, 2022, 11:34:38 pm
mon idée de depart etait bien une pwm par bock ou section de voie soit 2 pwm par l298
Pour le reste vos explications sont claire et logique, pour la patte vsensor du l298 il n'y a pas grand chose a en exploiter pour la conduite de nos trains

Titre: Re : Re : Asservissement de vitesse pour les (trains des) nuls
Posté par: msport le février 12, 2022, 10:26:14 am
la patte vsensor du l298 ... pour la conduite de nos trains

... peut-être en analogique, encore que, une protection contre les courts-circuits pourrait être utile.

mais en DCC, Vsens permet à différents montages non seulement d'assurer contre les courts-circuits mais aussi de lire les CV.

Il est utilisé entre autres sur LaBox et par le shield moteur dans Ma première centrale DCC ...