Auteur Sujet: Une station DCC complète, polyvalente et économique avec JMRI  (Lu 2864 fois)

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 467
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #15 le: avril 29, 2020, 05:27:20 pm »
Au moment où j'ai écrit l'article sur cette centrale DCC++, je n'avais sous la main que des MAX471 pour sécuriser la centrale en cas de sur intensités et principalement de courts-circuits.

Du coup plusieurs s'interrogeaient quant à l’utilité d’une centrale pouvant potentiellement fournir 10A (et même 15A dans mon cas) si l’on ne pouvait finalement en exploiter que 3.

J’ai testé les capteurs de courant ACHS-7122 de chez Pololu dont on a plusieurs fois parlé sur Locoduino et qui permettent de monter jusqu’à 20A (pour la mesure).

Les résultats sont probants et la mise en place facile.



Les broches GND et Vcc seront alimentées respectivement par un GND pris sur l’Arduino et le Vcc par du 5V lui aussi pris sur la carte. La sortie OUT de l’ACHS-7122 ira sur la broche A0 de l’Arduino.

Le fil (+) en provenance de l'alimentation sera relié à IP+ et IP- sera relié au (+) de la carte L9110S. Le fil (-) de l'alimentation ira donc lui directement de l'alimentation à la carte L9110S. Ne cherchez surtout pas à le relier à IP- par exemple.

Les fils peuvent être soudés à la carte :



mais je pense préférable un montage avec cosses:



La lecture de current dans le fichier CurrentMonitor.cpp de DCC++ retourne la valeur 512 quand il n’y a pas de charge de courant sur le réseau :

current = analogRead(pin) * CURRENT_SAMPLE_SMOOTHING + current * (1.0 - CURRENT_SAMPLE_SMOOTHING);

Cela est donc bien supérieur à la valeur par defaut dans le fichier CurrentMonitor.h qui est de 300

#define  CURRENT_SAMPLE_MAX         300

Je préconise de modifier cette valeur avec raison. C’est à dire de la placer à 600 (ce qui doit correspondre à environ 4,5A de consommation) et de faire fonctionner votre réseau comme vous le souhaitez. Si la sécurité s’active alors vous augmenterez progressivement cette valeur CURRENT_SAMPLE_MAX. Une fois que vous avez trouvé le point limite pour votre réseau et vos différentes locomotives, ne cherchez pas à augmenter cette valeur.

Jean-Luc donne ci-dessous la formule pour des calculs exacts de CURRENT_SAMPLE_MAX avec ce ACHS-7122 mais aussi la courbe qui permet assez facilement de determiner la valeur.

Ne cherchez pas à monter à CURRENT_SAMPLE_MAX au delà de 640 qui correspond déjà à 7A largement suffisant pour la plus part des réseaux.

Tout retour d’expérience sur ce fil sera apprécié surtout ceux qui pourraient permettre d’avoir une connaissance plus fine entre la valeur define  CURRENT_SAMPLE_MAX et l’intensité réelle.
« Modifié: avril 29, 2020, 07:47:40 pm par bobyAndCo »

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1564
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #16 le: avril 29, 2020, 07:13:37 pm »
Christophe,

Je ne comprends pas tes calculs

100mV/A pour 3A, ça donne 300mV soit une tension de 2800mV délivrée par l'ACHS-7122. La valeur retournée par analogRead est 2800 * 1023 / 5000 = 573.

La formule est (I * 100 + 2500) * 1023 / 5000.

Pour les visuels, ça donne ça

Si vous restez en dessous de 10A, Il vaut mieux prendre le 7121.


« Modifié: avril 29, 2020, 07:26:25 pm par Jean-Luc »
Cordialement

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 467
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #17 le: avril 29, 2020, 07:30:19 pm »
B'hein c'était pas vraiment des calculs mais plutôt des déductions, mais force est de constater que ma courbe à moi ne montait pas autant que tes calculs.

Pour qu'il n'y ait aucune ambiguïté, j'ai réécrit mon post ci-dessus et je fait référence à tes calculs et à ta courbe.

Merci
« Modifié: avril 29, 2020, 07:50:06 pm par bobyAndCo »

msport

  • Hero Member
  • *****
  • Messages: 941
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #18 le: avril 29, 2020, 10:56:42 pm »
Le fond du problème est que la famille ACS712 mesure (aussi) l'alternatif et donc les tensions négatives.
A vide, le signal est VCC / 2.

D'où l'impossibilité que j'ai rencontrée de lire le retour des décodeurs ... Quid de la  modification du soft ?
Cordialement

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 467
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #19 le: avril 30, 2020, 10:59:32 am »
Tu as raison Michel, je n'ai vu qu'une partie du problème. Deux hypothèses à mon avis, soit effectivement modifier le soft, soit mettre un autre contrôleur de tension.

La seconde piste est sans doute à privilégier.

Quelqu'un a t'il de produits à préconiser dans une tranche 10 à 20A en courants positifs uniquement ?


Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1564
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #20 le: avril 30, 2020, 11:40:25 am »
Des amplis dédiés à la mesure du courant, il y en a des dizaines. Mais ils nécessitent la plupart du temps au moins une résistance externe et sont dans des boîtiers qui piquent un peu les yeux à souder (SOT23-5) mais ça se fait.

Par exemple : https://www.st.com/resource/en/datasheet/tsc101.pdf

Celui disponible chez TME est un A (gain de 20) : https://www.tme.eu/fr/details/tsc101ailt/amplificateurs-operationels-smd/stmicroelectronics/

Donc si on veut avoir 5V à la sortie du TSC101, il faut avoir 5/20 = 0,25V = 250mV aux bornes de Rsense.

Il faut calculer la résistance Rsense de manière à avoir 0,25V quand elle est traversée par 20A. U = RI, R = U/I = 0,25 / 20 = 0,0125 Ω = 12,5 mΩ. Elle doit dissiper 0,25 * 20 = 5W (ouch même si en pratique avec 10A utilisés on est à 1,25W, faudrait pas qu'elle fume en cas de surcharge)

Avec un TSC101B, le gain est de 50. Donc 0,1V aux bornes de Rsense, 5 mΩ et 2W (https://www.tme.eu/fr/details/lr2512-r005-1%25-2w/resistances-smd-2512/royal-ohm/lr122wf500nt4e/)

https://fr.farnell.com/stmicroelectronics/tsc101bilt/ic-amp-hiside-curr-sense-sot23/dp/1737212RL
« Modifié: avril 30, 2020, 11:44:31 am par Jean-Luc »
Cordialement

msport

  • Hero Member
  • *****
  • Messages: 941
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #21 le: avril 30, 2020, 06:46:52 pm »
A partir du moment où on se lance dans le CMS et la création de petits modules remplaçant ceux à MAX471, on peut envisager d'ajouter à l'ACS712 un ampli op aussi en CMS et mettre le tout sur un pcb de 25 mm x 25 mm.
Le schéma joint devrait rétablir le 0V pour le 0A avec un gain donnant environ 1V/A (pour l'ACS712 5A). Le LM358 est une brave bête qui ne se transforme pas automatiquement en émetteur FM, mais après essais il lui faudra peut être un petit condensateur en prime.
L'avantage de l'ACS712 est qu'il est basé sur un détecteur à effet Hall, donc pas de résistance, il existe en 20A, mais ça fait un peu peur pour ses petites pattes en CMS.
L'avantage d'un tel module est qu'on amplifie les mV à la source, donc avec moins de parasites.
« Modifié: avril 30, 2020, 06:56:06 pm par msport »
Cordialement

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 467
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #22 le: avril 30, 2020, 06:51:32 pm »
C'est cool ça ! Merci Michel

bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 467
  • HO avec DCC++
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #23 le: mai 05, 2020, 12:16:46 am »
Sur ma propre centrale, pour contourner le problème évoqué concernant la lecture et la programmation des CV’s avec le ACHS-7122 j’ai coupé sur la carte la piste qui alimente les MOSFET Q5, Q6, Q7 et Q8 (ceux qui sont côté alimentation GND car la piste est plus accessible) et j’ai soudé un câble qui est relié à l’alimentation au travers d’un MAX 471.



Je dispose ainsi de deux détecteurs de consommation de courant, le ACHS-7122 pour la voie principale qui est relié à l'entrée A0 de l'Arduino et programmé pour environ 6A et un MAX471 pour la voie de programmation. La sortie AT du MAX471 est reliée à A1 de l’Arduino.




Notez que comme j’ai inversé la voie de programmation et la voie principale par rapport à mon montage initial, les liaisons entre l’Arduino et la L9110 doivent être interverties en conséquence.

Le fichier DCCpp_Uno.h de DCC++ doit lui aussi distinguer l’entrée A0 pour la lecture de la consommation sur la voie principale et A1 pour la voie de programmation.

#define MOTOR_SHIELD_NAME "L9110S Dual Motor Driver"

#define SIGNAL_ENABLE_PIN_MAIN 3
#define SIGNAL_ENABLE_PIN_PROG 11

#define CURRENT_MONITOR_PIN_MAIN A0
#define CURRENT_MONITOR_PIN_PROG A1

#define DIRECTION_MOTOR_CHANNEL_PIN_A 12
#define DIRECTION_MOTOR_CHANNEL_PIN_B 13



Le fichier CurrentMonitor.h est modifié comme ceci :

#define  CURRENT_SAMPLE_SMOOTHING   0.01
#define  CURRENT_SAMPLE_MAX_MAIN    600
#define  CURRENT_SAMPLE_MAX_PROG    300

Et enfin la fonction CurrentMonitor::check() du fichier CurrentMonitor.cpp comme ceci :

void CurrentMonitor::check() {
  current = analogRead(pin) * CURRENT_SAMPLE_SMOOTHING + current * (1.0 - CURRENT_SAMPLE_SMOOTHING); // compute new exponentially-smoothed current

  if ((pin == CURRENT_MONITOR_PIN_MAIN && current > CURRENT_SAMPLE_MAX_MAIN)) {                   // current overload Main
    digitalWrite(SIGNAL_ENABLE_PIN_MAIN, LOW);                                                    // disable Main Motor Shield Channel
    INTERFACE.print(msg);                                                                         // print corresponding error message
  }
  else if (pin == CURRENT_MONITOR_PIN_PROG && current > CURRENT_SAMPLE_MAX_PROG) {                // current overload Prog
    digitalWrite(SIGNAL_ENABLE_PIN_PROG, LOW);                                                    // disable Prog Motor Shield Channel
    INTERFACE.print(msg);                                                                         // print corresponding error message
  }
} // CurrentMonitor::check



« Modifié: mai 08, 2020, 11:32:17 pm par bobyAndCo »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 563
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #24 le: mai 05, 2020, 08:46:10 am »
Oui c'est une adaptation que j'ai faite depuis longtemps dans DCCpp...

msport

  • Hero Member
  • *****
  • Messages: 941
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Une station DCC complète, polyvalente et économique avec JMRI
« Réponse #25 le: mai 05, 2020, 10:58:58 am »
Pour revenir sur le module à base d'ACS712, le schéma proposé doit être revu suite à mise au point (délicate).
Son utilisation en protection de court-circuit ne pose pas de problème, par contre, je ne suis pas parvenu à lire les CV ... (il s'agit de mesurer 11mV sur 2500)
Apparemment, DCC++ devrait s'affranchir d'une "base" pour lire les 60 mA de la norme (merci Dominique), mais mes essais sont infructueux jusqu'ici.
Cordialement