Auteur Sujet: DCC : Détection par consommation avec des courants faibles  (Lu 55213 fois)

laurentr

  • Hero Member
  • *****
  • Messages: 642
    • Voir le profil
Re : Re : DCC : Détection par consommation avec des courants faibles
« Réponse #165 le: avril 02, 2024, 03:55:33 pm »


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.


Bonjour Etienne

Est ce que cette valeur RC (1200000 ohms * 0.000000470 Farads qui donne 1.2sec a été sélectionnée  pour ce seuil particulier compte tenu de la tension en entrée de R et de la capa (dispo) ou est ce libre de recomposition de valeurs pout obtenir cette même temporisation proche des 1.2sec ex 1.2uF et R 1 000 000

J essaye de voir ou sont les "optimums"...

(Ce qui m amènera à légèrement reprendre un design de bouclier pour tenir compte des révisions à ce sujet.)

Autre question si on se fie sur le rapport du COIL ayant le plus petit rapport 1:50 (pour 50 tours)
A t on bien si je ne me trompe pas un V max de V DCC/50 ? ( modulo le nombre de tour dans le coil (ici mini 1)( et donc ici max54V/50 =0.045V ?? puisqu'on a d autre part le ration 5A /50 = 0.1 A)

Ou alors il me manque une formule...?

Ltr



Ltr

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #166 le: avril 02, 2024, 04:29:07 pm »
En fait je suis à 2.7Mohms et 470nF
Le produit des deux te donne grosso modo le temps comme tu l'as compris.

La valeur de la résistance te donne la tension en sortie par rapport au courant produit par le coil.
On a le courant de départ (par exemple 1,5mA pour une roue résistive de 10kOhms et alimentation DCC à 15V)
Il est divisé par le nombre de spires du coil (1000 pour le zmct103c)
Et multiplié par le nombre de tours passés dans le trou du coil.
Le courant multiplié par la résistance te donne la tension en sortie, donc le seuil que tu dois tester.

Le temps de retour à la voie libre va dépendre du courant. Il faut plus de temps avec une loco qu'avec une seule roue.
Le temps minimum va dépendre de la proximité du seuil par rapport au courant d'une roue.
Le temps maximum va dépendre du seuil par rapport au voltage max.
Si on veut limiter l'écart entre les deux on peut utiliser une zener avec une tension plus faible, ou réduire le nombre de tours du coil,
ou augmenter la valeur de la résistance et diminuer celle du condensateur.
Je pense qu'il faut surtout avoir un temps assez grand pour une roue de manière à réduire les libérations intempestives par faux contacts.
A noter que la résistance ne joue pas sur le temps de charge du condensateur, seulement sur le temps de décharge.

laurentr

  • Hero Member
  • *****
  • Messages: 642
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #167 le: avril 02, 2024, 05:50:22 pm »
Merci Etienne

On voit bien que si on substitue les COILs (selon leur nombre de tours)  il faut alors ajuster les résistances et capa du montage... sinon on va être au delà des seuils.

Si je reprends le calcul évoqué précédemment et que je mets un COIL 50 tours j ai ceci

0.0015 A= 1.5mA
1.5mA / 50 Tours = 0.00003
NB de passages = 1
 27000000 r = 2.7Mo
0.00003 * 2 700 000 = 81 MORTEL!

Si on veut toujours être sous 5V alors R =< 150000r = 150Ko

car
 0.00003*150000 = 4.5V qui sont ici bien compatible avec la plage d entrée de notre Arduino/AVR qui accepte 5V sur ses entrées

On arriverait à des calculs analogues avec une entrée 3V3 et les valeurs devrait donc être adaptées
 pour R et
Cote capa pour mini 1sec avec 150Ko on pourra partir sur 10uF

car 150 000 x 0.000 010 = 1.5.

(on fait ici abstraction des 2/3 de temps ou des 5emes requis pour la charge complète et la décharge complète en gardant l idée d une linéarité plus simple à comprendre)

Etienne, tu me confirmes bien que le schéma suivant est le bon ?( avec les valeurs indiquées pour un COIL 1000 tours et pas celle pour un COIL 50 tours qui doivent alors avoir pour R 150Ko et C 10uF!)


Laurent





laurentr

  • Hero Member
  • *****
  • Messages: 642
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #168 le: avril 03, 2024, 02:13:13 pm »
Bonjour

Petit update sur les calculs des valeurs que j ai reprise dans le tableau suivant en appliquant les formules données.

Tout à droite on voit les hypothèses appliquées au montage d'ETIENNE66 avec les valeurs de R 2.7Mo C 470nF C = 1000 TUNRS et 1 en roulement autours.

Si on fait varier la tension VDCC  on peut dépasser
Idem si on a plus de 1 essieux de 10K en shunt on diminue la résistance d entrée ( mise en parallèle de résistances) ce qui influe aussi sur les valeurs du montage

On voit de fait que la ZENER ne vas pas être superflue pour écrêter tout ce qui dépasse. (elle va même avoir du boulot!)

Si je ne me trompe pas la puissance que doit absorber la zener va être du (delta entre Vin et Vzener) * I en sortie de R.

A priori pas un monstre à prévoir mais pas trop petit non plus.

En rouge les lignes ou les seuils V ou steps sont dépassés. SI la zener écrête on reste sur Vzener en VMax in cote CPU IN et donc au max des pas du convertisseur ADC ( 1023 si 10 bits, 4095 si 12bits,...)

Ou alors j ai mal fait mes calculs...?

De ce que j en déduit il faut:

ajuster les composants selon le nombre de tours du COIL
Déterminer le VDCC ( la norme pouvant aller jusqu à 24V....) nous serons peut être plus raisonnables en nous bornant à l intervalle [16V;18V]
Dimensionner les valeurs selon les seuils attendus et paramètres ayant court.

En montage SMD et fabrication industrialisée il est indispensable de connaitre les valeurs des composants. En revanche en montage traversant, chacun pourra avec ses inputs ajuster les valeurs à monter.

En SMD il serait toutefois possible de combiner avec des sélecteurs mais dans le volume imparti on passerait sur du double couche ( c est bcp plus cher à produire) et il n en est pas moins de devoir retenir quels valeurs imputer aux composants...

Donc reste confirmer ces hypothèses de calculs...

Ltr

 
« Modifié: avril 03, 2024, 05:10:52 pm par laurentr »

laurentr

  • Hero Member
  • *****
  • Messages: 642
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #169 le: avril 06, 2024, 12:51:31 pm »
Bonjour

Petit interlude pour connaitre le mapping de sensibilité(s) que vous arrivez à déceler depuis le primaire? ( et du range de valeurs en sorties).

Quid en fait du seul correspondant en "bruit" et donc d une valeur en deca la mesure de détection est à "nettoyer"?

Ltr

Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #170 le: avril 06, 2024, 09:39:25 pm »
C'est plus compliqué à calculer car on est sur un signal carré en entrée, il y a le condensateur à charger,
et la diode nous fait aussi perdre un peu.
Et surtout, il y a la linéarité du coil. Le 0.2% de linéarité dans la datasheet du zmct103c est mesuré entre 250mA et 6A et on est loin en dessous à 1.5mA pour une roue.
Du coup on est bien en dessous de la valeur calculée.

Mais bon, l'important est qu'on a des valeurs utilisables et fiables.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1055
  • HO avec DCC++
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #171 le: avril 06, 2024, 10:47:26 pm »
De mon côté, avec le montage que j'ai présenté précédemment, je ne rencontre aucune difficulté. Les lectures sont très stables et fiables. Au travers du switch, on a 4 choix possibles pour la détection de présence et 4 autres choix pour les seuils de courts-circuits. J'ai pu régler finement les détections sur mon réseau.

C'est un ATtyni44 qui assure la lecture analogique. Le code utilise la lecture et l'écriture directe des ports ce qui accélère grandement la vitesse d'exécution.

Par acquis de conscience, je réalise 4 lectures dont je fais la moyenne pour obtenir les consommations de courant.

En cas de court-circuit, le relais coupe très rapidement l'alimentation DCC sur les rails. Avant même que la centrale elle même ne coupe l'alimentation générale ce qui est bien sûr le but recherché. En même temps, un signal digital est envoyé sur la sortie CC.

/*

  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);
}
« Modifié: avril 07, 2024, 07:31:03 am par bobyAndCo »

laurentr

  • Hero Member
  • *****
  • Messages: 642
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #172 le: avril 08, 2024, 04:53:51 pm »
Bonjour

En effet se passer de "AnaloguRead() comme nous en avons discuté va éviter des temps de traitement relativement "longs" qui plus est sur les AVR "historiques"

Sur les AVR plus récents ( AVR Dx et MEGATINY) il y a 2 éléments à considérer:
1 l analoguRead est beaucoup plus rapide que sur les anciens AVR.

Les mesures faites par Spence KONDE en témoignent:
https://github.com/SpenceKonde/DxCore/blob/master/megaavr/extras/Ref_Analog.md voir la section mTC/DxC) bool analogSampleDuration(duration)

En grosso ici lecture unique sur 12us ( comme sur les anciens AVR) et temps de traitement (10us) amènent à 22us ( 4 fois plus rapide que sur AVR anciens)

2/ Ces nouveaux AVR on vu 3 versions successives d'ADC et ne se commandent pas de la même façon (ce que masque cependant le analoguRead() classique)

Et pour utiliser directement les registres il faudra selon le CPU retenu tout se "palucher" à la main...

J'ai déjà écrit une partie mais elle n'est pas déclinable à toutes les broches ( il faudrait la retravailler) mais comme l analoguRead est (à priori) "assez rapide" c'est peut être  pousser un peu loin sans réel besoin... A voir par quelques tests.

A noter que sur les nouveaux AVR l'échantillonnage étant réglable (par configuration) peut sortir directement une valeur dont il restera à diviser par le nombre d'échantillons demandés. (le fameux >>4 utilisé par Christophe dans le code ci dessus pour la moyenne de 4 lectures successives)

Lorsque j aurai reçu le matos nécessaire je ferai quelques tests et vous communiquerai les résultats.

Ltr



Etienne66

  • Jr. Member
  • **
  • Messages: 98
    • Voir le profil
Re : Re : DCC : Détection par consommation avec des courants faibles
« Réponse #173 le: septembre 07, 2024, 05:47:08 pm »
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.

Bonjour, et excusez moi du déterrage mais après avoir déménagé j'ai enfin attaqué la construction de mon réseau et j'ai donc pu faire des tests en réel.
Et ça ne marche pas  >:( >:( >:(
Après divers tests et quelques recherches internet j'ai trouvé pourquoi.
L'impédance statique (résistive) des entrées analogiques de l'arduino sont assez élévées, mais ça dégringole dès qu'on commence à lire les entrées.
L'explication se trouve dans la charge d'un condensateur pour échantillonner l'entrée avant l'envoi sur l'ADC qui détruit l'impédance effective.
Et ça provoque des erreurs qui ressemblent à une interférence entre les entrées adjacentes.
On recommende une impédance du circuit qui alimente les entrées analogiques de moins de 10 Kohms ( et moi j'ai 2.7Mohms :-[)
Du coup j'ai commandé des LM324N qui vont me servir de buffers entre les circuits à base de ZMCT103C et les entrées de l'arduino.
Affaire à suivre quand j'aurai reçu mes circuits de chez ChinoisExpress.

rNe

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
    • Le blog à René
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #174 le: septembre 12, 2024, 11:45:37 pm »
Bonsoir à tous.

Pour info voici les tensions que j'ai mesurées sur 4 détecteurs différents pour mon réseau d'essai à l'échelle N et deux locomotives.
La boucle primaire de la self fait une spire, soit 2 passages dans le centre de la self.
J'ai converti ces mesures en valeurs fournies par le convertisseur A/D.
Tenant compte de ces mesures j'ai défini les seuils à programmer dans l'ATtiny; les essais confirment ces mesures.
Mon réseau d'essai étant un ovale à plat, les tensions pour une consommation maxi. sont à confirmer sur un réseau réel avec relief.

Cordialement
Cordialement

L'expérience a ceci d'étrange : elle ressemble aux cure-dents - personne veut s'en servir après vous...

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1055
  • HO avec DCC++
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #175 le: septembre 13, 2024, 11:12:06 pm »
Salut René,

Bon retour parmi nous. Il faudrait que tu mettes une photos de ta carte car on ne comprends pas forcement qu'il s'agit d'un montage complètement différents de celui d'Etienne. Et peut être que tu expliques le principe et pourquoi ça marche dans ton cas.

Christophe

rNe

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
    • Le blog à René
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #176 le: septembre 15, 2024, 10:27:46 am »
Bonjour à tous.

Tu as raison Christophe je suis parti à fond vent arrière en oubliant de préciser le contexte.
En fait il s'agit du montage détection de courant tel que tu l'as décrit sur le site éditorial.
La seule différence se situe au niveau du brochage de l'ATTiny (ce qui est sans incidence sur les mesures présentées ci-dessus).
J'ai réalisé ces mesures lors des tests que je réalise sur la carte que j'ai développé et qui rassemble à la fois le détecteur Railcom + les mesures d'intensité pour la détection de présence et les CC. Le tout dans le but de fournir aux satellites autonomes les interfaces nécessaires à leur fonctionnement et sans s'éparpiller en une multitude ce cartes.
A ce stade je pourrai déjà diffuser le schéma de principe de la carte; mais est-ce le bon endroit pour faire ? Ne vaut-il pas mieux attendre la fin des tests pour le diffuser ainsi que les fichiers GERBER ?
J'ai effacé la photo de la carte par précipitation. Je refais dans la journée.

René
Cordialement

L'expérience a ceci d'étrange : elle ressemble aux cure-dents - personne veut s'en servir après vous...

rNe

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
    • Le blog à René
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #177 le: septembre 15, 2024, 11:25:44 am »
Voici la photo de la carte proto.

C'est tout simplement une compilation des deux cartes décrites dans le site éditorial (Railcom + détection de présente + cc).
Cordialement

L'expérience a ceci d'étrange : elle ressemble aux cure-dents - personne veut s'en servir après vous...

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1055
  • HO avec DCC++
    • Voir le profil
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #178 le: septembre 15, 2024, 08:02:35 pm »
Dis moi René, tu n'as qu'une seule spire dans ton coil ? Pourquoi pas, mais j'avais constaté pour ma part que les mesures étaient plus justes avec deux.

Christophe

rNe

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
    • Le blog à René
Re : DCC : Détection par consommation avec des courants faibles
« Réponse #179 le: septembre 15, 2024, 11:27:16 pm »
Au début j'avais fait 2 boucles dans la self. Les valeurs mesurées étaient plus élevées et je n'arrivais pas à atteindre les seuils que tu avais proposé pour l'échelle N.
J'ai alors fait des mesures pour comprendre où était le PB. Les tensions étaient beaucoup plus élevées et leur conversion dépassait de beaucoup les seuils programmés, même les plus élevés.
Pour revenir dans les valeurs que tu avais proposé, j'ai diminué à 1 spire.
C'était encore trop. J'ai donc relevé les seuils dans le programme.
Comme cela tout marche à merveille.
Cordialement

L'expérience a ceci d'étrange : elle ressemble aux cure-dents - personne veut s'en servir après vous...