Il y a un truc que je ne comprends pas : pourquoi tu veux rajouter une détection de présence?
On a déjà une détection dans la zone et pour la double occupation on a le satellite de la zone adjacente.
Il suffit juste qu'un satellite informe ses voisins de la libération de sa zone.
Je ne comprends pas bien pourquoi cette détection de présence ne serait pas aussi simple que celle qui est dans le Satellite V1
soit tenir compte du cutout, suspendre les mesures d'occupation durant celui ci en conservant l'état actuel avant coupure ( on parle d 1/2 sec en gros rien de gravissime) , les reprendre ensuite... ( mais plus touchy à réaliser!)
Bonjour Christophe,
Je viens de faire un fil sur un composant qui pourrait te servir : le NCE BD-20.
fil : composants/La détection des trains par détection de courant
Denis
PS : si tu veux, je recopie et on efface l'autre.
Oui, bien sûr, mais il faut encore en construire un. A 15 €+port, je pense que c'est cher.
Il est plus facile de visualiser et d'analyser une application électronique sous forme ce schéma de principe plutôt qu'un dessin de PCB dans lequel il faut suivre les tortueuses pistes pour savoir qui est connecté avec qui.
Peut-on avoir un schéma ?
Vu que tu coupes les 2 rails il y a en fait 4 possibilités à tester :
- en faisant passer le fil gauche ou droit dans le transfo
- avant ou après le railcom.
Oui je sais que c'est plus facile pour les spécialistes d'avoir un schéma. Mais je ne suis pas très doué là dessus aussi. J'utilise Fritzing qui est assez simple et qui peut produire le PCB sans schéma. J'ai essayé EasyEDA mais j'ai beaucoup de mal, je le trouve très peu maniable, les composants "restent collés" à la souris, les liaison entre composants ne sont pas magnétisées, résultat, 3 fois sur 4 mes composants ne sont pas reliés. Je suis en train d'essayer Eagle qui est maintenant incorporé à Fusion360 mais je n'ai pas encore résolu la question des composants qui ne sont pas dans les bibliothèques (ou je ne sais pas chercher dans les bibliothèques). Bref, j'ai encore du chemin à parcourir avant de pouvoir publier de beaux schémas.
Hello
Voila peut être une piste à considérer:
L implémentation du LK200 de LENZ.
https://www.modelmania.eu/images/lenz/instrukcja_lenz_lk200.pdf (https://www.modelmania.eu/images/lenz/instrukcja_lenz_lk200.pdf)
On y voit bien l'enchainement des bloc fonctionnels depuis le centrale vers la loop et donc la détection de présence ou d identification RC.
J'ai tendance à penser que la préconisation LENZ tient la route...
Version 3V "sensitive"
V = 3V
R = 60r
I = U/R = 3/60 = 0.020A = 20mA ( pile bien ca!! pile la reco de 20mA) ca passe sans transistor.
Ne pas ajouter de R en plus de la bobine du relais car on a alors au borne de celui ci un diviseur de tension...
Le hic de la seconde solution si "parfaite" c est la dispo du relais "Sensitiv". >"T' en a pas t'es marron!" alors qu'avec un transistor toutes les versions vont bien!
concernant la détection de conso à l'aide des COILS pour gérer la détection. Plusieurs montages existent.1000 tous ou 50 tours ( ou autre valeur) , nombre de passage autour du tore... voila bien des questions/sujets à expérimenter.
Apres il y a 2 cas d'usage:
on exploite via un "simple" état 0 ou 1 une occupation ou non.
on veux un retour d'une mesure qu'on veut traiter (interpréter plus finement) voir corriger en cas de sensibilité à ajuster. ( le contexte peut influencer des mesures et il est prudent d avoir un ajustage (mais tout se discute)
Pour ma part je préfère séparer les usages entre mesure continue ( COIL) ( ou INA219) ou ( INA169) ( ou AMPLIOP) et détection de CC( via ACS712) ( c est encore une fois un avis discutable)
Passer des info entre l'AVR/MEGATINY et l'ESP32 impose de garder cette isolation ( du fait des tension en 5V cote AVR et 3V3 cote ESP32.)
On va me dire alors pourquoi ne pas faire tourner l'AVR/MEGATINY en 3V3 puisque c est possible... à vitesse réduite, cela se réfléchit mais disqualifie l ACS712 pourtant bien pratique.
Je pense au montage du MERG dans le cas d un simple détecteur d'occupation à seuil réglable. En étant opto couplé il ira aussi bien sur un AVR que sur un ESP32!
https://www.merg.org.uk/merg_resources/dcc/download/BOD1_SCH.pdf
18 KΩ sur 18V c'est 1mA, pas 10.
La seule chose dont je sois à peu près certain c’est qu’il faut une détection de présence par consommation de courant à base de Transformateurs de courant. Le seul système (je crois) vraiment capable de retourner des valeurs faibles de l’ordre de 10 à 50mA (essieu de wagon avec résistance de 10 à 18 KΩ
Tu confonds volts et ampères.
Pour la détection de courants faibles, il ne faut pas penser une seule minute aux 1000 tours. Même si l'on fait 2 tours de la bobine, cela fait un rapport de réduction de 500... sur 10 à 20mv, je ne cherche même pas à compter !
@Christophe: pourquoi vouloir disposer de 2 sorties en "tout ou rien? Pour deux zones? sur la carte détection.
Je reviens sur l'usage de l'ACS712 et des ses "limites".
Quelqu'un peut-il me dire le nb de tours nécessaires pour L1 (TALEMA-AS103) car sous la référence il y a plusieurs modèles avec des nb de spires différentes. Attention : il faut penser HO mais aussi N, les consommations peuvent être différentes...
Je pense que tu pourrais laisser le CPU sur le 5V au lieu du 3v3 ( venant de l ESP). voir dans ce cas tirer le 5v du régulateur en place.
Il semble que LENZ procède à l'inverse et donc il faudrait alors plutôt positionner l'AS103 en amont de la mesure railcom cote source DCC.
Je pense que tu pourrais laisser le CPU sur le 5V au lieu du 3v3 ( venant de l ESP). voir dans ce cas tirer le 5v du régulateur en place.Possible mais :
Tu peux ajouter au besoin les connecteurs de PROG pour le CPU si on veut le mettre à jour in situ ou si c est un composant CMS. ( il peut être substituable par un ARTINY202 ou 402 par exemple) ( brochage a vérifier)Ca va charger la carte pour peu d'usage. Perso. je préconiserai un support.
Peut être aussi ajouter une résistance talon sur la partie variable afin de ne pas avoir un seuil trop haut au cas où.D'accord. Mais à vous de me dire la valeur après essais.
Apres on peut envisager des ponts diviseur avec sélection par curseur pour déterminer des seuils pré définis. Cela facilite l équilibrage d une section d une carte vers une autre. ( aux erreurs de 1% prêt des résistances en place et donc plus précis que le trim.)Pas tout à fait d'accord :
Toutefois dans ce montage la détection de conso qui va assurer la protection est après la mesure railcom.C'est un sujet maintes fois discuté mais jamais expliqué techniquement. Les raisonnements se basent uniquement sur ce que semble faire LENTZ.
Il semble que LENZ procède à l'inverse et donc il faudrait alors plutôt positionner l'AS103 en amont de la mesure railcom cote source DCC.
CiterJe pense que tu pourrais laisser le CPU sur le 5V au lieu du 3v3 ( venant de l ESP). voir dans ce cas tirer le 5v du régulateur en place.Possible mais :
- Je n'ai pas fait le bilan de puissance du L7805. Il me paraît un peu léger. A faire.
- Si j'alimente l'ensemble du montage en 5V il faut que j'interface la sortie de l'ATTiny pour rendre le signal envoyé sur 33 de l'ESP32 pour ne pas dépasser 3,3V. D'où un circuit en plus.
CiterTu peux ajouter au besoin les connecteurs de PROG pour le CPU si on veut le mettre à jour in situ ou si c est un composant CMS. ( il peut être substituable par un ARTINY202 ou 402 par exemple) ( brochage a vérifier)Ca va charger la carte pour peu d'usage. Perso. je préconiserai un support.
CiterPeut être aussi ajouter une résistance talon sur la partie variable afin de ne pas avoir un seuil trop haut au cas où.D'accord. Mais à vous de me dire la valeur après essais.
N'oubliez pas les différentes échelles HO et N dans vos essais.
CiterToutefois dans ce montage la détection de conso qui va assurer la protection est après la mesure railcom.C'est un sujet maintes fois discuté mais jamais expliqué techniquement. Les raisonnements se basent uniquement sur ce que semble faire LENTZ.
Il semble que LENZ procède à l'inverse et donc il faudrait alors plutôt positionner l'AS103 en amont de la mesure railcom cote source DCC.
Pour ma part je privilégie une coupure au plus près du CC, et la mesure de courant est ainsi débarrassée du régime transitoire des alimentations lors de la remise en tension de la voie.
Tout risque d'interférence entre les circuits Railcom et la mesure d'intensité est ainsi écarté. Toujours positionner le capteur au plus près du défaut probable, principe d'AMDEC (Analyse de Modes de Défaillances de leur Effets et de leurs Criticité).
Bref à valider expérimentalement...
Il n'y a pas de pbme avec le convertisseur de 5V de la carte, il débite 1A et il n'y a rien sur le satellite qui consomme. Quant à abaisser à 3,3v pour entrer dans l'ESP, je croyais que tu avais mis un pont diviseur ?
Les liaisons entre le 3v3 et le V doivent etre opto-couplées puis qu'on ne transfert que des états 0 ou 1.
Un opto de type LTV354 fera cela bien, il y en a beaucoup autres qui peuvent convenir.
On aura cote ESP32 du coup un entrée de type PULLUP externe. A noter que si on veut travailler en logique non inversée ( 0 train = 0 envoyé à l ESP pour 0 occupation et réciproquement, il faut ajouter un montage inverseur.)
La solution est alors de le remplacer par un montage convertisseur de type DC-DC qui ne présente pas ce genre d aléas ou si on conserve un régulateur LDO de l alimenter avec un tension présentant un écart réduit avec la tension de sortie de celui ci: ex 8V en entrée pour du 5V par exemple.
A discuter mais tu peux peut être prévoir aussi un choix via jumper pour des seuils pre déterminés: ex avec une valeur du pont diviseur on limite à 0.8A ( pour nos Niste)
puis 1A ou 1.2A, 1.5A et jusqu qu 2A ( qui ets le seuil courant de coupure des petits relais que on utilise généralement.)
Pour limiter la conso on peut aussi mettre un relais à double enroulement avec verrouillage (on a assez de PIN dispo sur le CPU pour cela) Tu peux alors le commander sinon par un transistor NPN par un NMOS.
N y a t il pas avec ce montage en fait 2 info à envoyer vers l ESP32:( sur 2 broches)
La présence de détection en deca d un seuil max et le CC au delà de celui ci? (on fait d une pierre deux coup!)
Ceci libèrerait une pin sur le CPU à la quelle je confie la led et je profiterai pour couper DCC1 également via le deuxième pole du relais. ( en coupant on évite tout possible retour de courant indésirable entre zones et matériel déraillé à cheval sur deux secteurs contigus géré chacun par un sat diffèrent.
Je propose qu'on en reste là (V0.3) jusqu'à la fin de l'expérimentation réelle qui validera le principe ou non.
Pour l'instant je vais faire le routage pour "pondre" les fichiers Gerber.
Donc une résistance de 1/2W devrait alors suffire. (1/4 sera trop juste)
Maximum Switching Current: 2 ADonc sur un CC, le relai ne pourra plus commuter après 2A et il restera collé, brulera ses contacts et la zener ZD1 comme le transformateur vont prendre un coup dans le nez. L'option polyswitch n'en devient plus une à mon sens. Le relai doit être modifié pour prendre un 10A peut-être.
Je propose un relais PANASONIC de la série AJ, lesquels sont spécifiés pour 10A (voir P.J.) et même encombrement sur le PCB.
Bien sûr il ne possède qu'un contact RT. Mais a t-on besoin de couper les deux rails DCC en cas de CC ?
C'est un cas de figure à probabilité (normalement) faible certes mais bien réelle dont il vaut mieux se couvrir. ( et qui ne coute pas les yeux de la tête non plus! et évite de devoir remplacer un décodeur qui "prendrait" un choc en pareil cas.)
Je vois mal comment un décodeur de loco ou de voiture pourrait prendre un choc. Il est conçu pour prendre la totalité du voltage DCC et on ne peut pas avoir plus.
Le seul risque de détérioration se trouve sur les roues, les contacts de roues et la centrale.
Juste pour comparer : dans une installation électrique grandeur nature il y a un disjoncteur de tête, suivi de disjoncteurs divisionnaires.
Dans notre cas les disjoncteurs des détecteurs Railcom peuvent être assimilés aux disjoncteurs divisionnaires.; et la centrale devrait avoir un disjoncteur de tête; où bien le circuit de mesure de I devrait faire office en arrêtant de piloter le Booster.
Et puis les conducteurs doivent être dimensionnés en fonction du calibre du disjoncteur en amont.
Comme dans la vraie vie...
René
Après, le seul CC qui reste est à priori un déraillement donc on détecte et on coupe au niveau de la centrale.
Je ne vois pas vraiment ce que tu veux démontrer.
Quoiqu'il en soit, l'idée au final est quand même de ne pas avoir de disjoncteur central pour se reposer sur une détection locale et une coupure que l'on souhaite plus rapide et plus fiable.
const byte tensionPin = A0;
uint16_t value;
float tension;
const byte relais0 = 8;
const byte relais1 = 9;
void setup()
{
Serial.begin(115200);
pinMode(relais0, OUTPUT);
pinMode(relais1, OUTPUT);
}
void loop()
{
value = analogRead(tensionPin);
//tension = value * 4, 88;
if (value > 60)
{
Serial.print(value);
Serial.println("");
}
if (value < 450)
{
digitalWrite(relais0, LOW);
digitalWrite(relais1, LOW);
}
else
{
digitalWrite(relais0, HIGH);
digitalWrite(relais1, HIGH);
delay(1000);
}
delay(1);
}
Pour un CC couper les deux fils ne sert à rien, une coupure suffit.
Par contre il peut y avoir un problème avec la détection sur un seul fil :
Si un satellite teste une phase et qu'un autre satellite adjacent teste une autre phase alors on peut avoir un CC non détecté.
Il sera donc INDISPENSABLE que tous les satellites soient branchés sur la même phase, ce qui implique qu'on devra
toujours faire les coupures sur le même rail.
Donc sur un CC, le relai ne pourra plus commuter après 2A et il restera collé, brulera ses contacts et la zener ZD1 comme le transformateur vont prendre un coup dans le nez. L'option polyswitch n'en devient plus une à mon sens. Le relai doit être modifié pour prendre un 10A peut-être.A ce stade de la réflexion le fusible réarmable était envisagé au cas où le relais, suite à un CC, était resté collé. Je rappelle également que dans la définition le relais possédait un pouvoir de coupure de 2A, ce qui pouvait être limite.
Le lissage on est obligé de l'avoir vu que le coil sort un courant alternatif à la fréquence du DCC, donc il faut le redresser et le filtrer.
Et il n'y a pas 50 façons de le faire : il faut le faire avec un condensateur avant d'envoyer le signal à une entrée analogique ou
un comparateur.
Je pensais de Christophe ne pourrait pas faire à la fois la détection de présence et la détection de court-circuit avec
un seul coil mais il semble avoir trouvé les bonnes valeurs.
Pour les cantons c'est le zmct103 qui sort à travers une diode 1n4148 sur, en //, une résistance de 2.7MOhms, un condensateur de 470nF
et une zener de 3.3v.
/*
Détection de présence et courts-circuits pour ATtiny44 (84)
© Christophe BOBILLE 04/24 pour locoduino (www.locoduino.org)
v 0.4
Datasheet :
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7701_Automotive-Microcontrollers-ATtiny24-44-84_Datasheet.pdf
Getting Started with ADC on ATTiny
https://ww1.microchip.com/downloads/en/Appnotes/TB3209-Getting-Started-with-ADC-90003209A.pdf
PA0 - PA1 / RX - TX
*/
#include <avr/io.h>
// Variables
uint32_t tempoCC = 5000UL; // Tempo réarmement suite à court-circuit
const uint16_t tabSeuilOcc[] = { 30, 40, 50, 60 }; // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 250, 350, 450, 550 }; // Seuil pour le court-circuit
uint16_t seuilOcc;
uint16_t seuilCc;
// Etats
byte etatSwitchOcc; // Etat des bits pour switch occupation
byte etatSwitchCc; // Etat des bits pour switch court-circuit
uint16_t get_ADC_sample(void) {
ADCSRA |= (1 << ADSC); // start ADC measurement
while (ADCSRA & (1 << ADSC))
;
// return the ADC value
return (ADCL | (ADCH << 8));
}
void setup() {
DDRA |= (1 << PA2); // Signal occupation
DDRA &= ~(1 << PA4); // Switch 0
DDRA &= ~(1 << PA5); // Switch 1
DDRA &= ~(1 << PA6); // Switch 2
DDRA &= ~(1 << PA7); // Switch 3
DDRB |= (1 << PB1); // Signal cc
DDRB |= (1 << PB2); // Relais
etatSwitchOcc = (PINA & 0x30) >> 4;
etatSwitchCc = (PINA & 0xC0) >> 6;
seuilOcc = tabSeuilOcc[etatSwitchOcc];
seuilCc = tabSeuilCc[etatSwitchCc];
ADMUX =
(0 << ADLAR) | // do not left shift result (for 10-bit values)
(0 << REFS1) | // Sets ref. voltage to internal 1.1V
(0 << REFS0) | // Sets ref. voltage to internal 1.1V
(0 << MUX3) | // use ADC3 for input (PB4), MUX bit 3
(0 << MUX2) | // use ADC3 for input (PB4), MUX bit 2
(1 << MUX1) | // use ADC3 for input (PB4), MUX bit 1
(1 << MUX0); // use ADC3 for input (PB4), MUX bit 0
ADCSRA =
(1 << ADEN) | // Enable ADC
(1 << ADPS2) | // set prescaler to 64, bit 1
(1 << ADPS1) | // set prescaler to 64, bit 1
(1 << ADPS0); // set prescaler to 64, bit 0
PORTB |= (1 << PB2); // Relais
PORTA &= ~(1 << PA2); // Signal occupation
PORTB &= ~(1 << PB1); // Signal cc
}
void loop() {
uint16_t sample = 0;
for (byte i = 0; i < 4; i++) // 4 lectures pour lisser le résultat
sample += get_ADC_sample();
sample = sample >> 2;
if (sample < seuilOcc) {
PORTA &= ~(1 << PA2); // Signal occupation
}
if (sample >= seuilOcc) {
PORTA |= (1 << PA2); // Signal occupation
}
if (sample >= seuilCc) {
PORTB &= ~(1 << PB2); // Relais
PORTB |= (1 << PB1); // Signal cc
delay(tempoCC);
PORTB |= (1 << PB2); // Relais
PORTB &= ~(1 << PB1); // Signal cc
}
delay(1);
}
Bonjour,
Ayant reçu mes composants (zmct103c, diodes, zeners...) j'ai monté une carte de détection 16 cantons
sur une breadboard à souder connectée aux entrées analogiques d'un mega2560.
(pour l'instant je n'ai connecté que 8 entrées)
Et j'ai monté une voie de test (avec mes vieux rails jouef acier!) avec 3 cantons pour tester le tout.
Et ça fonctionne comme prévu à un détail près : les parasites.
Lors du premier essai à vide j'avais un haut niveau de parasites, d'un ordre de grandeur comparable à la
mesure d'une roue résistive. Du coup tous mes cantons étaient détectés comme occupés.
J'ai monitoré les valeurs lues par le mega et j'ai eu une surprise : les parasites étaient aussi sur les
broches qui n'étaient pas connectées. Donc ça ne venait pas des coils. J'ai rapidement vu qu'ils apparaissaient
dès que j'allumais la centrale.
J'ai essayé de faire des mesures avec un wagon sur un canton et une loco sur un autre. Et là, surprise!
Les deux cantons occupés avaient une valeur plus forte mais surtout les autres n'avaient plus de gros parasites.
Des essais supplémentaires m'ont permis de conclure que je n'ai des gros parasites que si le réseau est
totalement innoccupé (ce qui n'arrivera jamais).
Il est probable que le réseau à vide joue le rôle d'une antenne qui amplifie les parasites.
Donc je valide mon montage et je continue avec les tests de communication avec JMRI.