Auteur Sujet: DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS  (Lu 18069 fois)

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« le: février 07, 2024, 02:55:02 pm »
Bonjour

Ce sujet important est souvent abordé en filigrane mais n'a jamais encore fait l'objet d'une section dédiée.

Consacrons nous y.

Traditionnellement il est d usage de mesurer la consommation et en cas de dépassement d un seuil fixé de procéder à une coupure de l alimentation, ce qui met fin au court circuit ou à la surcharge.

Historiquement des fusibles à plomb, calibrés assuraient ce rôle.

D autre solutions existe aussi comme des lampes ballaste.

La solution "ultime" repose toujours sur un temps de réaction le plus bref possible ce qui assure l'efficacité de la protection.

Un disjoncteur mécanique actionne des contacts d une position fermée assurant la continuité à une position ouverte qui coupe la continuité!.
C est ce que réalise un relais

Les temps de bascules sont de l'ordre de quelques milli secondes. (ms) à quelques dizaines de ms.

Si ceci est mécaniquement rapide c'est électriquement ( et donc électroniquement) long voir très long.

En effet nos microprocesseurs travaillent à des vitesses beaucoup plus rapide. Les composants électroniques aussi.

Autant alors optimiser le tout dans une mise en œuvre visant une efficacité optimale que nous allons pouvoir développer dans ce post.

Ltr


laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #1 le: février 07, 2024, 03:00:23 pm »
Voici le schéma de base ( partiel) que nous allons utiliser pour nous affranchir de la présence de relais.

Ils seront ici remplacés par de transistor MSOFET canal N. ( des canal P pourraient produire un résultat analogue)

Nous utiliserons un "driver MOS" qui pilotera la commutation rapide des transistors MOS.

Lors d'un CC, un changement d état aura lieu sur une broche RST_PINx que traitera un CPU qui procèdera alors à une commutation/bascule.

Voici un schéma qui illustre cette mise en œuvre.


laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #2 le: février 07, 2024, 03:08:01 pm »
Lors d un CC cela signifie que COMx qui est alimenté par la source avec un pole J ou K rencontre le pole opposé K ou J respectivement.

On détecte alors ce CC au niveau du pont diviseur pilotant la gate du NMOS dans la ligne de l opto coupleur.

La magie opère et les états respectifs des entrées sorties sont alors alignées afin que les pole soient de nouveau alignés.
Un petit mécanisme devra verrouillé la 1ere interruption survenue pour éviter une double bascule que pousserait la seconde qui ne résoudrait alors pas le problème initial.

Le schéma ne présente que 50/100 des composants de commutations pour la gestion d'une boucle mais reste suffisant pour un simple disjoncteur de protection.

Ltr

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1114
  • HO avec DCC++
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #3 le: février 07, 2024, 03:58:47 pm »
Très intéressant, vivement la suite !

Christophe

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #4 le: février 07, 2024, 04:23:35 pm »
Hello

La suite est ce que l'on veut en écrire à présent pour décliner ceci en réalisation.
Puissances à commuter, nombre de composants... utilisation en disjoncteur global, commutateur.( LOOP etc)...

Exemple un composant" tout en un" comme le TLP3553 va bien aider mais il est limite en tension (20V) et ampérage( 3A)
https://www.mouser.fr/datasheet/2/408/TLP3553_datasheet_en_20200325-1108741.pdf

Les drivers MOS VOM1271 et TLP3906 nécessiteront plus de composants mais laisseront le choix de leur dimensionnement.
https://www.mouser.fr/pdfDocs/vom1271.pdf

https://www.mouser.fr/datasheet/2/408/TLP3906_datasheet_en_20191222-1916273.pdf


Pour bien comprendre les mécanismes opérants il ne faut pas hésiter à écrire les tables de vérité des états auprès de chaque item.

Subtilité pour ne NMOS à DEPLETION
Prendre pour exemple le BSS139.
Lorsque sa GATE est à 0V il est passant et inversement des que l on quitte le 0V il se bloque au delà de 1V (en gros).

Les résistances du pont diviseur sont à dimensionner en conséquence.

Si on veut rester sous 2 W par exemple il faut tabler sur 100r, ( une SMD en 2512 fait parfaitement le job)  si on réduit leur valeur on augmentera la dissipation à conduire , question de compromis donc.

Ltr




« Modifié: février 07, 2024, 09:17:07 pm par laurentr »

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #5 le: février 08, 2024, 12:22:34 am »
Bonsoir

Dans le cadre de la gestion du traitement  en mode LOOP avec le montage décrit précédemment le code suivant doit pouvoir tourner.

Il faut savoir que le moment ou les interruptions vont se produire lors du chevauchement des roues par dessus les coupures des rails des sections fixe et commutable, ne sont pas identiques.
Il y en aura toujours une qui arrivera quelques tantièmes de secondes  plus tôt que l'autre.( même avec des coupure bien parallèles, et encore plus vrai avec des coupures en quinconce!)

Afin d'éviter un double changement qui conduirait de fait à n'en produire aucun (ordre et contre ordre quasi immédiat) il faut neutraliser les effets de l'interruption arrivant en seconde position puisque la bascule est (déjà) en cours pour aligner les polarités des sections.

On rejette l utilisation de detachinterrupt() qui prendrait trop de temps en lui préférant une variable stockée ( bool)  dans un registre (ca va très vite ainsi) et qui sera considérée dans les operations à mener.

Lors du changement des états de pin de commande on désactive aussi toute autre interruption pour garder une séquence de commutation rapide et groupée.

Si une temporisation est requise (temps de commutation des états au niveau CPU et de réaction de l'électronique)  on utilisera une boucle while() pour incrémenter une valeur jusqu'à un seuil défini avant de conclure!

Voici la trame d'un code pouvant mener ces opérations.

Cela vous semble t il "convenable"?

#include <Arduino.h>

/*
  DCC ADVANCED AUTO LOOP REVERSER: V1.0
  Author: Laurent ROEKENS LTR
  Version 1.0.0
  Date rev: 07/02/2024: initial release design for MOSFET BACK TO BACK DESIGN
 

  Specially designed for MEGATINY x06 (806,1606,816,1616,826,1626,3226 CPU Parts)

  SWAP PIN NAMES OF 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_PC0)
  #define PIN_PC0 10
#endif

#if !defined(PIN_PC1)
  #define PIN_PC0 11
#endif

#if !defined(PIN_PC2)
  #define PIN_PC0 12
#endif

#if !defined(PIN_PC3)
  #define PIN_PC0 13
#endif



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

#define CHANGING GPIOR1 //same for CHANGING state value

#define CDE_SET1      PIN_PC0
#define CDE_SET2      PIN_PC1
#define CDE_SET3      PIN_PC2
#define CDE_SET4      PIN_PC3


#define RST_PIN_1             PIN_PA1
#define RST_PIN_2             PIN_PA2


#define CDE_SET1_SET_ON   PORTC.OUTSET = PIN0_bm //faster than PORTC.OUT |= PIN0_bm
#define CDE_SET1_SET_OFF  PORTC.OUTCLR = PIN0_bm //faster than PORTC.OUT  &= ~PIN0_bm

#define CDE_SET2_SET_ON   PORTC.OUTSET = PIN1_bm //faster than PORTC.OUT |= PIN1_bm
#define CDE_SET2_SET_OFF  PORTC.OUTCLR = PIN1_bm //faster than PORTC.OUT  &= ~PIN1_bm

#define CDE_SET3_SET_ON   PORTC.OUTSET = PIN2_bm //faster than PORTC.OUT |= PIN2_bm
#define CDE_SET3_SET_OFF  PORTC.OUTCLR = PIN2_bm //faster than PORTC.OUT  &= ~PIN2_bm

#define CDE_SET4_SET_ON   PORTC.OUTSET = PIN3_bm //faster than PORTC.OUT |= PIN3_bm
#define CDE_SET4_SET_OFF  PORTC.OUTCLR = PIN3_bm //faster than PORTC.OUT  &= ~PIN3_bm

void toggle_state();


void toggle_state()
{
  if(CHANGING == true) //no new change till current one is not over so lock it beacause change is in progress
  {
    return;
  }
 
  if(CHANGING == false)
  { 
    TOGGLE = !TOGGLE;

    CHANGING = true;
  }
}



///////////////////////////////
//SETUP
///////////////////////////////
void setup()
{
 
  pinMode(CDE_SET1, OUTPUT);
  pinMode(CDE_SET2, OUTPUT);
  pinMode(CDE_SET3, OUTPUT);
  pinMode(CDE_SET4, OUTPUT);
 

  pinMode(RST_PIN_1, INPUT);
  pinMode(RST_PIN_2, INPUT);

  //init STATE:

  TOGGLE = false; //init state NORMAL

  CHANGING = false; //no change in progress

  //NORMAL MODE: SET STATES FOR EACH DRIVING PINS:
  CDE_SET1_SET_ON;
  CDE_SET2_SET_OFF;

  CDE_SET3_SET_OFF;
  CDE_SET4_SET_ON;


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

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

}

void tempo() //tempo 10us
{
  uint16_t i = 0;
  //@20Mhz ==> 1 cycle = 0.000 000 050 sec = 50ns (50 nano seconds)
  // 200 cycle give 10us
  //need adjustements may be
  while(i < 200)
  {
    i++;
  }
}


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

  switch(TOGGLE)
  {
    case false:

      if(CHANGING == true)
      {
        noInterrupts(); //stop any new interrup if any

        //SET ALL PINS OFF:
        //CDE_SET1_SET_OFF; //ALREADY OFF
        CDE_SET2_SET_OFF;

        CDE_SET3_SET_OFF;
        //CDE_SET4_SET_OFF;  //ALREADY OFF
     

        // tempo();           

        //SET NEW STATE:
        CDE_SET1_SET_ON;
        //CDE_SET2_SET_OFF; //ALREADY DONE

        //CDE_SET3_SET_OFF; //ALREADY DONE
        CDE_SET4_SET_ON;

        CHANGING = false;

       // tempo();

        interrupts(); // inerrupt are now allowed
      }

    break;

    case true:

      if(CHANGING == true)
      {
        noInterrupts();

        //SET ALL PINS OFF:
        CDE_SET1_SET_OFF;
        //CDE_SET2_SET_OFF; //ALREADY OFF

        //CDE_SET3_SET_OFF; //ALREADY OFF
        CDE_SET4_SET_OFF; 

        // tempo();

        //SET NEW STATE:
        //CDE_SET1_SET_OFF; //ALREADY OFF
        CDE_SET2_SET_ON;

        CDE_SET3_SET_ON;
        //CDE_SET4_SET_OFF; //ALREADY OFF

        CHANGING = false;

        // tempo();

        interrupts();
      }

    break;

  }

}



Ltr


laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #6 le: février 08, 2024, 12:28:35 am »
Dans le cas d'une simple coupure comme disjoncteur on ne pilote alors que 2 sorties CDE_SETx qui agiront comme un interrupteur.

Nous avons notre disjoncteur DCC ultra rapide et sans relais!

Je pense qu'il sera toujours préférable de confier la gestion des ces opérations de commutation à un "petit" CPU dédié exclusivement pour des questions d'efficacité et de priorisation.

Le réarmement se fera par un commande externe.

Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #7 le: février 08, 2024, 03:08:40 am »
Pour illustrer une version "FAST LOOP REVERSER" simple, rapide et compact voici une implémentation possible dans l'esprit "LK200".


Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #8 le: février 08, 2024, 12:52:53 pm »
Très intéressant, vivement la suite !

Christophe

Je crois que c'est un montage dans ce style qui devrait te convenir.

Il gère nativement  l'inversion de façon autonome.

Si on le désire, il rapporte à l'extérieur la position, qui peut être basculée/réinitialisée de façon externe ou localement en manuel.

Des indicateurs lumineux formalisent ces informations.

La compacité du montage et les composants mis en œuvre assureront 2.5A sans encombre voir plus.

Qu'en penses tu?

Ltr

La conso cote boucle est monitorée à l'aide de l'ACS712 et si elle dépasse un seuil sur un intervalle de temps donné on peut mettre en protection

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1114
  • HO avec DCC++
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #9 le: février 08, 2024, 03:05:54 pm »
Bonjour Laurent,

En effet ce montage m'intéresse beaucoup pour les satellites autonomes et c'est pour cela que je te disais que j'avais hâte d'en savoir plus, en particulier les différents composants retenus et le schéma électronique.

Pour le code, j'ai regardé ce que tu avais proposé mais je dois avouer que je suis complètement paumé. C'est assez spécifique au hard que tu utilises (MegaTiny ?) et rien ne compile chez moi.

A plus donc pour de nouveaux avancements.

Christophe.

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #10 le: février 08, 2024, 05:34:15 pm »
Bonsoir

Voici les éléments.

J ai retenu ici un MEGATINY à 14 broches.( x4) ( utilisez MEGATINYCORE https://github.com/SpenceKonde/megaTinyCore)
Il couvre bien nos besoins, dispo et économique. Selon la taille du code produit on pourra mieux cibler les versions mais toutes sont éligibles.

Attention c'est expérimental à ce stade même si un certain degrés d'optimise reste de mise! :)

On se bornera avec les composants ici présents à ne pas dépasser 2.5A ( le montage peut encaisser plus)

Laurent.


laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #11 le: février 08, 2024, 05:36:22 pm »
Le layout


laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #12 le: février 08, 2024, 05:39:16 pm »
Christophe

Sur le montage tu as le OFF global avec les 4 commandes PIN_SETx  @ "0" ce qui produit la coupure recherchée.

Sinon on a "l'auto sense" sur la sortie par rapport à l'entrée. et on active alors 2 des 4 sorties selon la direction recherchée.

Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #13 le: février 08, 2024, 05:43:53 pm »
Rm: dans l'exemple de code fourni pour illustrer plus haut qui était prévu pour un MEGATINY x6 à 20 broches les ports sont différents.

Il faut donc remplacer les 4 port B du x6 part des port C sur le x4 qui ne dispose pas de port B sur son hardware.

Ltr

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : DETECTION ET PROTECTION CONTRE LES COURT-CIRCUITS
« Réponse #14 le: février 27, 2024, 12:34:53 am »
Bonsoir

Je devrais recevoir le montage exposé ci dessus en début de semaine prochaine ce qui permettra de le tester et le valider. ( il est repris sur le module de protection et d inversion des satellites autonomes V2 en approche modulaire).

En attendant j'ai repris la trame du code de celui ci.

"BETTER, (REALLY) FASTER, STRONGER & ATOMIC!" ont été la trame directive.

Par itérations successives qui permettront quelques tests intermédiaires je suis arrivé au niveau "atomic" des traitements. C'est à dire à un niveau de traitement unitaire le plus élémentaire afin de gagner en vélocité de traitement pour favoriser la réaction la plus rapide en cas de détection de court circuit.

A titre d exemple si une solution à base de l'utilisation de la fonction attachdigitalinterrupt() peut très bien fonctionner, celle ci est en fait "très longue" pour s'exécuter et il y a plus "efficace" à condition de coder cela autrement via l'utilisation des ISR du hardware. (à l'aide des vecteurs d'interruption)

A ce sujet je vous renvoie vers les très bonnes explications données par Spence KONDE à qui l'on doit les librairies DXCORE, MEGATINYCORE

DXCORE:
https://github.com/SpenceKonde/DxCore

MEGATINY CORE:
https://github.com/SpenceKonde/megaTinyCore


et plus spécifiquement ces rubriques:
https://github.com/SpenceKonde/DxCore/blob/master/megaavr/extras/Ref_PinInterrupts.md

et
https://github.com/SpenceKonde/DxCore/blob/master/megaavr/extras/Ref_Interrupts.md

Ces optimisations permettent également une économie importante de ressources et permettent même de traiter sur les CPU avec de plus faibles ressources.

Verdict très bientôt donc...

Ltr