Auteur Sujet: BASIC_AUTO_LOOP_REVERSER  (Lu 2225 fois)

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
BASIC_AUTO_LOOP_REVERSER
« le: janvier 31, 2024, 10:58:26 pm »
Bonjour

Sous cet acronyme Anglo saxon un peu barbare se trouve un petit montage efficace pour gérer une boucle de retournement ou toute autre forme de mise en œuvre nécessitant une inversion des polarite des rail DCC. ( auto sensing)

Cette version repose sur la bascule d'un relais lors de la mise en cour circuit de la détection entre une zone a inverser et une zone fixe ( non inversable) servant de référence comme point fixe.

A noter que cette détection par CC ( court-circuit) est non destructrice au niveau des composants mis en œuvre ici :).

Il se peut toutefois que vos décodeurs de locomotive n'apprécient pas à outrance ce genre de situation... Mais c'est un mécanisme qu'utilise de nombreux produits du commerce.

Le principe repose sur le bypass des diodes de l'opto coupleur bidirectionnel ( BA354 par exemple)  par le premier essieux franchissant cette séparation en cas de polarites opposées entre les parties de rail fixe et  inversable qui va générer une interruption sur une entrée d'un CPU qui commute alors les sorties d un relais pour procéder aux alignements des polarite des deux zones.

L'alimentation n'est pas prélevée sur le courant DCC ce qui évite d'avoir une détection par consommation de courant faussée par l'énergie prélevée sur la zone fixe par le montage pour fonctionner.
Elle provient donc d'une source externe DC en 5V.

A noter que le montage doit impérativement être alimenté en 5V courant continu.

2 sorties auxiliaires permettent via une entée additionnelle d'utiliser une autre source de tension et de récupérer l'état de commutation, ce qui sera précieux pour un monitoring éventuel ou une visualisation, voir un asservissement.

Cette alimentation externe peut être en 3V3 ;) ( idéal pour aller vers un CPU type ESP32) ou si en 5V un petit jumper présent sur la carte fera gagner un raccordement dans un bornier :)

A noter que ce dispositif me semble être très rapide pour commuter et sera toujours liée au temps de bascule du relais de l'ordre de 3 à 10 ms.

hormis remplacer le relais par d'autres composants, il sera impossible d'aller plus vite!

Notez qu'un petit bouton poussoir est aussi présent pour commuter par pression la position qui est indiquée visuellement par deux leds( ex rouge et verte)

Voici déjà le schéma correspondant en plus  d'un aperçu du montage.


Encore quelques lignes à écrire pour vous soumettre cet ensemble complet.

Laurent













laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #1 le: janvier 31, 2024, 11:48:43 pm »
Voici les lignes de code qui permettent au montage ci dessus de fonctionner.

le CPU est un MEGATINY ( 202,402, 212 ou 412 au choix)

Le code moyennant l'adaptation du brochage et du montage peut tourner sur tout autre MEGATINY ou sur les AVR série 0, AVR Dx ( DA DB ,DD et EA, EB)


#include <Arduino.h>

/*
  DCC AUTO LOOP REVERSER: BASIC V1.0
  Author: Laurent ROEKENS LTR
  Version 1.0.0
  Date rev: 31/01/2024: initial release

  Specially design for MEGATINY x02 ( 202,402, 212, 412 CPU Parts)

  SWAP PIN NAMES OFR ANY AVRx CPU. ( ex AVR Serie0 (NANO_EVERY), AVR Dx, ...)

*/

//VARIABLES:

#if !defined(PIN_PA1)
  #define PIN_PA1 2
#endif

#if !defined(PIN_PA2)
  #define PIN_PA2 3
#endif

#if !defined(PIN_PA3)
  #define PIN_PA3 4
#endif

#define TOGGLE GPIOR0 //use global register GPRIOR0 to store value for faster speed reaction

#define CDE_RLY_SET_PIN     PIN_PA2
#define CDE_RLY_RESET_PIN   PIN_PA1

#define RST_PIN             PIN_PA3

void toggle_state();

void toggle_state()
{
 TOGGLE = !TOGGLE;
}

#define RLY_COIL_SET_ON   PORTA.OUTSET = PIN2_bm //faster than PORTA.OUT |= PIN2_bm
#define RLY_COIL_SET_OFF  PORTA.OUTCLR = PIN2_bm //faster than PORTA.OUT  &= ~PIN2_bm

#define RLY_COIL_RESET_ON   PORTA.OUTSET = PIN1_bm //faster than PORTA.OUT |= PIN1_bm
#define RLY_COIL_RESET_OFF  PORTA.OUTCLR = PIN1_bm //faster than PORTA.OUT  &= ~PIN1_bm

///////////////////////////////
//SETUP
///////////////////////////////
void setup()
{

  TOGGLE = false; //init state arbitrary

  pinMode(CDE_RLY_RESET_PIN, OUTPUT);
  pinMode(CDE_RLY_SET_PIN, OUTPUT);

  pinMode(RST_PIN, INPUT);

  attachInterrupt(digitalPinToInterrupt(RST_PIN),toggle_state,FALLING); //ANY STATE DOWN DETECTED ON RST_PIN WILL SWAP STATE

}


////////////////////////////////
//LOOP
////////////////////////////////
void loop(){

  while(TOGGLE == true)
  {
    RLY_COIL_RESET_OFF;
    RLY_COIL_SET_ON;
  }

  while(TOGGLE == false)
  {
    RLY_COIL_SET_OFF;
    RLY_COIL_RESET_ON;
  }

}


DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #2 le: février 01, 2024, 08:49:01 am »
@ Laurent,

Je suis très content de voir l'équivalent d'un "DCC frog juicer" chez Tam Valley Depot pour la modique somme de 16,49 $, hyper célèbre aux USA.
Remarque : c'est également utile pour les ponts tournants.

L'autre truc célèbre aux USA et quasi inconnu chez nous : les "circuits breakers" : On utilise un booster, mettons à 10 A, puis on divise le réseau en "zones d'alimentations", chacune protégée par un circuit breaker, par exemple 3 A. Ça évite de construire 3 booster 3A et c'est moins cher.

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

trimarco232

  • Sr. Member
  • ****
  • Messages: 283
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #3 le: février 01, 2024, 04:36:37 pm »
(...)
Il se peut toutefois que vos décodeurs de locomotive n'apprécient pas à outrance ce genre de situation...
peux-tu développer , stp ?
Citer
Le principe repose sur le bypass des diodes de l'opto coupleur bidirectionnel ( BA354 par exemple)  par le premier essieux franchissant cette séparation en cas de polarites opposées entre les parties de rail fixe et  inversable qui va générer une interruption sur une entrée d'un CPU qui commute alors les sorties d un relais pour procéder aux alignements des polarités des deux zones.
je ne vois pas comment le dispositif se raccorde dans la boucle ; comment fait-il pour revenir en position initiale ?
Citer
L'alimentation n'est pas prélevée sur le courant DCC
c'est bien domage

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #4 le: février 01, 2024, 05:14:06 pm »
Bonjour Marc


Pour ma part moins on à de CC et mieux l'électronique se porte. En encore plus dans le long terme. Plus on ménagera nos décodeurs mieux ils se porteront.

Pour prendre le courant sur le DCC c'est ajoutable sans difficulté majeur mais je n'en suis pas fan. (un pont, un régulateur ( LDO? DC DC?) et condo feront l'affaire) Voir une paire de jumper pour sélectionner la source.

J'ai mis un peu de temps pour comprendre le mécanisme de bascule qui est assez "subtile" car c est en fait le fait de bypasser la diode de l'opto  qui est polarisée lorsqu'il y a une conso (donc présence d'un convoi consommateur de courant)  entre les pôles J et K.
Le "bypass" crée un bref changement d'état sur la sortie de l'opto qui génère alors une interruption en FAILLING sur le CPU. Cette interruption va alors entrainer un changement dans la commande du relais.

Cela fonctionne dans les deux sens puisque l'opto et bidirectionnel (354T) Donc des que des rails en polarité opposées se font face et qu'un essieux va être à cheval sur ces éléments il y a bypass de la diode de l'opto donc bascule de l'état de sortie.
En absence de bypass on conserve l'état présent.

C est physiquement ce qui se passe lorsque les rails sont sur de polarites opposées et qu'un essieux ponte un pole J avec un pole K ce qui éteint la led de l'opto, provoque la changement d'état lors d un FAILLING  sur l'entrée du microcontrôleur.

C'est toujours bijectif. K<>J J<>K

Idéalement j aimerai remplacer le relais par un montage à base de MOSFET mais c est un peu plus touchy à réaliser

Le mécanisme de bascule sera traité je pense de la même façon ( détection similaire) , en revanche le temps de bascule sera encore plus rapide qu'avec le relais.

Un montage à base de MOS en back to back me semble convenir ( N? P?) mais il faut en piloter les bascules sans venir mélanger ou ajouter des alim externes...
OPTO de rigueur mais pas que...

On aura alors comme l'indiquait Denis des équivalents aux "JUICER" de TAM'S.

Si quelqu'un a montage à proposer pour remplacer le relais... je prends!

Laurent




bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 938
  • HO avec DCC++
    • Voir le profil
Re : Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #5 le: février 01, 2024, 09:08:52 pm »
L'autre truc célèbre aux USA et quasi inconnu chez nous : les "circuits breakers" : On utilise un booster, mettons à 10 A, puis on divise le réseau en "zones d'alimentations", chacune protégée par un circuit breaker, par exemple 3 A. Ça évite de construire 3 booster 3A et c'est moins cher.
Denis

C'est à cela que je pensais quand je parlais d'installer un ACS712 sur chaque satellite autonome. Certes on a vu depuis que l'ACS n'est pas le bon choix (pour la détection faible courant) mais le principe reste bon. Bien sûr on pourrait être bien en dessous de 3A si l'on raisonne par canton. En principe 1A devrait largement suffire pour un canton réduisant d'autant (à mon avis) les dommages potentiels.

Reste une question déjà posée pour laquelle je ne crois pas avoir vu de réponse : Un relais "local" commute t'il assez vite ?

Le concept me séduit d'autant plus qu'il est bien dans l'esprit des satellites qui est de gérer "en local" des fonctions qui peuvent l'être et se reposer au juste nécessaire sur des systèmes centralisés.

Sumida Crossing (encore lui) en parle sur son site : http://www.sumidacrossing.org/LayoutControl/DCC/DCCCircuitBreakers/

Christophe
« Modifié: février 01, 2024, 09:19:03 pm par bobyAndCo »

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #6 le: février 01, 2024, 09:52:07 pm »
Bonsoir Christophe

Une relais faible signal format "DIL" en gros un sucre de 1cm x2cm) permet de couper max 2A sous 30VDC.

Toute valeur en dessous nous va bien :)

Temps de bascule de ce type de relais : entre 3ms et 8ms en gros (selon le sens de bascule ou le modèle).

C'est à la fois court et long.

Mécaniquement c'est rapide.

Electroniquement c'est long! En effet des solutions à base de MOS ont des vitesses de commutation de quelques dizaines de us. Ce qui n'est que mieux!

Si j ai bien lu entre les lignes le célèbre LK100 de LENZ était à base de relais. Son successeur le LK200 est purement basé sur de l'électronique, sans relais donc.


Un CIRCUIT BREAKER est en fait un disjoncteur local qui bascule si le seuil est atteint ou dépassé ( de façon temporisée) . ( avec ce type de relais jamais au delà de 2A au max)
Il doit être plus rapide que la mise en sécurité des moyens de protection des centrales/booster.

Un circuit breaker doit être plus long à basculer que un circuit gérant les alignements de signaux des pôles du DCC ( J/K)(LOOP AUTO REVERSE)
Dans le même temps un circuit d'auto reverse ne doit pas faire du "Ping Pong en boucle non stop" en attendant que la sécurité s'enclenche.  bascule, si plus de problème pas d autre bascule, si maintient du problème attendre qu'une autre protection s'enclenche sans chercher cette fois de nouveau à basculer.

Je cherche un montage pour substituer le relais... mais pour le moment je n'ai résolu qu'une partie de l'équation pour une solution qui de ce fait n'est pas viable.

Si vous avez des suggestions, c'est le moment c'est l 'instant!

Laurent




Etienne66

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #7 le: février 01, 2024, 10:06:34 pm »
Je ne comprends pas l'acharnement à vouloir attendre le court-circuit pour déclencher les boucles
de retournement. On sait les gèrer simplement avec des détecteurs infrarouge sans attendre le
court-circuit. Le court-circuit ne doit jamais faire partie du fonctionnement normal d'un système.

Le seul intéret des circuits qui inversent la polarité en cas de court-circuit c'est pour la protection
des aiguillages electrofrog pris en talonnage. C'est pour çà que les ricains appellent ce circuit "frog juicer".

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #8 le: février 01, 2024, 10:16:15 pm »
Bonsoir Etienne

On est bien en phase, moins il y a de CC et mieux on se porte!

Toutefois c'est bien un tel circuit "FROG JUICER" que je cherche à trouver une schématique qui peut avoir différentes déclinaisons ( et sans relais mécanique).

Laurent

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 938
  • HO avec DCC++
    • Voir le profil
Re : Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #9 le: février 02, 2024, 12:07:44 am »
Un relais faible signal format "DIL" en gros un sucre de 1cm x2cm) permet de couper max 2A sous 30VDC.

Temps de bascule de ce type de relais : entre 3ms et 8ms en gros (selon le sens de bascule ou le modèle).

C'est à la fois court et long.

Mécaniquement c'est rapide.

Electroniquement c'est long! En effet des solutions à base de MOS ont des vitesses de commutation de quelques dizaines de us. Ce qui n'est que mieux!

Si j ai bien lu entre les lignes le célèbre LK100 de LENZ était à base de relais. Son successeur le LK200 est purement basé sur de l'électronique, sans relais donc.

Merci Laurent,

Dans le projet qui m'intéresse, détection de CC au niveau d'un satellite autonome et coupure du signal DCC, 2A doit être un maximum. Une seule locomotive sur un canton et même si les wagons sont allumés comme un sapin de Noël ne doit pas consommer plus d'1A (1,5 au max si modèle ancien).

Je suis à l'écoute d'autres solutions que le relais à base d'électronique.

Christophe

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #10 le: février 03, 2024, 06:39:06 pm »
Idéalement on peut envisager d'utiliser du HONGFA dual coil (ou single)

2A de pouvoir de coupure,
temps de bascule <5ms
dispo en 3V, 5V,...
un prix décent!


https://docs.rs-online.com/e8af/0900766b81663daf.pdf

Au niveau local je dirai un bon candidat :)


Laurent

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 938
  • HO avec DCC++
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #11 le: février 04, 2024, 12:04:48 am »
@Laurent, Merci beaucoup pour l'info.

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #12 le: février 04, 2024, 07:27:03 pm »
Bonjour

Je pense avoir trouver le montage ( et quelques variantes prêt)  qui va bien pour substituer le relais et le replacer par une cascade d autres composants.

C est plus chère mais aussi plus fiable car en effet bien plus rapide lors du besoin de commutation.

On passe de quelques ms ( 5 à 8 en gros)  à quelques us!( les temps de traitement des info par le CPU ( les plus long) et ceux de réaction de l'électronique ( quelques dizaines de nano secondes!)

Cela semble redoutable d'efficacité!

Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #13 le: février 06, 2024, 04:52:06 am »
Bonjour

La progression du nouveau montage sans relais progresse!
Celui ci va permettre de gérer soit indépendamment  2 "FROG" (2 cœurs) de façon autonome,  soit de traiter une "boucle" - sélection via un jumper du mode de fonctionnent désiré)
Dans le mode "LOOP" une commande externe est prévue ainsi qu'une sortie de monitoring de situation (FEEDBACK)
La structuration du code, le choix optimal de I/O se fait en parallèle afin de concevoir une solution innovante et efficace.

Les temps de bascule sont TRES significativement réduits! ( de l'ordre de quelques us à présent loin des 3 à 8 ms nécessaires pour le relais!)

Aperçu du circuit en cours de réalisation.

Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 586
    • Voir le profil
Re : BASIC_AUTO_LOOP_REVERSER
« Réponse #14 le: février 06, 2024, 01:34:11 pm »
Ca progresse!

Tiens une spéciale pour Denis qui m'a inspiré dans ma lancée;) le "FROG JUICER"

Ainsi que le module bi mode FROG ou LOOP ( le LOOP est l'équivalent d'un LENZ LK200 mais en plus costaud si besoin de puissance)


Encore quelques lignes à écrire cote code pour mettre tout cela en œuvre.

Ltr