IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Parasites sur un montage Arduino Uno


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 31
    Par défaut Parasites sur un montage Arduino Uno
    Bonjour,
    j'ai réalisé autour d'un Arduino Uno, une logiciel pour gérer des course de petites voitures sur circuit (type scalextric pour ceux qui connaissent).
    J'utilise pour la détection de passage des autos un LM393 par piste (x2) connecté via les ports analogiques (A0, A1). Pour la gestion du courant un L298N ( double pont en H) qui permet de couper ou ouvrir le courant par piste.
    Tout fonctionne parfaitement, sauf que parfois, de façon aléatoire une détection "sauvage", qui me semble être liée à des moments où on accélère, c'est à dire où on pousse l'alimentation à plus d'1 A (alimentation qui est vendue pour 5 A), le détecteur détecte une auto qui est à l'autre bout de la piste... et ce quelquefois jamais sur 5 tours de circuit, puis 1 ou 2 fois sur un seul tour.
    Ce montage est installé chez 3 amis, qui n'ont jamais ce problème. J'ai vérifié les soudures, qui sont OK.
    J'avoue être perdu, étant plutôt informaticien qu'électronicien.
    Merci de tout l'aide que vous pourrez m'indiquer pour des pistes de recherche.

    JF

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour slotizer

    Une piste du côté de l'impédance des entrées A0 et A1, du fait que la sortie du LM393 est collecteur ouvert, as-tu initialisé les entrées en INPUT_PULLUP, si oui, ce n'est peut-être pas suffisant car ton milieu est trop "perturbé", ajoutes, sur chacune de ces 2 entrées, une résistance de 4.7k. contre le +5V, en supposant que tu attendes un passage à LOW comme signal.

    Cordialement
    jpbbricole

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 31
    Par défaut parasite et arduino uno
    Citation Envoyé par jpbbricole Voir le message
    Bonjour slotizer

    Une piste du côté de l'impédance des entrées A0 et A1, du fait que la sortie du LM393 est collecteur ouvert, as-tu initialisé les entrées en INPUT_PULLUP, si oui, ce n'est peut-être pas suffisant car ton milieu est trop "perturbé", ajoutes, sur chacune de ces 2 entrées, une résistance de 4.7k. contre le +5V, en supposant que tu attendes un passage à LOW comme signal.

    Cordialement
    jpbbricole
    Bonjour Jp
    Tout d'abord merci de d'intéresser à mon problème.
    Je t'envoie mon setup pour l'histoire de pullup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void setup()
    {
      pinMode ( PinIRail1 ,  INPUT_PULLUP )           ;      // A0     ILS1
      pinMode ( PinIRail2 ,  INPUT_PULLUP )           ;      // A1     ILS2
      pinMode (amp [ 1 ] , INPUT )                    ;      // A2     ----   non connecté
      pinMode (amp [ 2 ] , INPUT )                    ;      // A3     ----   non connecté
      pinMode (volt , INPUT )                         ;      // A4     ----   non connecté
                                                             // A5     ----
      pinMode ( bouton [ 1 ] , INPUT )                ;      // D2     Bouton
      pinMode ( bouton [ 2 ] , INPUT )                ;      // D3     Bouton
      pinMode ( rgb [ 1 ] , OUTPUT )                  ;      // D4     Vert   non connecté
      pinMode ( rgb [ 2 ] , OUTPUT )                  ;      // D5     Rouge  non connecté
      //pinMode ( rgb [ 3 ] , OUTPUT )                ;      // D6     Rien
      pinMode ( frein [ 1 ] , OUTPUT )                ;      // D7     Coupure
      pinMode ( frein [ 2 ] , OUTPUT )                ;      // D8     Coupure
      pinMode ( moteur [ 1 ] , OUTPUT )               ;      // D9     Alime
      pinMode ( moteur [ 2 ] , OUTPUT )               ;      // D10    Alime
      pinMode ( ledpasse [ 1 ] , OUTPUT )             ;      // D11    Led
      pinMode ( ledpasse [ 2 ] , OUTPUT )             ;      // D12    Led
      pinMode ( ledtest , OUTPUT )                    ;      // D13    Led
     
      Serial.begin(9600);
    En relisant mon script, peut-il y avoir une interférence avec des ports programmés dans le setup et non branchés ?

    Comme je te l'ai dit, je ne connais pas grand chose à l'électronique : il faut brancher une résistance 4,7 kO entre le +5V de la carte et chaque port analogique ?

    Merci d'éclairer ma lanterne pas forcément très lumineuse

    JF

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Bonjour,
    Il faudrait aussi voir une photo du câblage (les fils) car si tu as des grosses variations de courant alors tu as nécessairement un environnement bruyant (électromagnétiquement parlant).

    Il y a des techniques pour réduire ces couplages parasites :
    - câble torsadé
    - câble blindé
    - plan de masse sur lequel les fils reposent (comme dans les avions)
    - ...

  5. #5
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour slotizer
    Citation Envoyé par slotizer Voir le message
    En relisant mon script, peut-il y avoir une interférence avec des ports programmés dans le setup et non branchés ?
    Je doute.

    Citation Envoyé par slotizer Voir le message
    Comme je te l'ai dit, je ne connais pas grand chose à l'électronique : il faut brancher une résistance 4,7 kO entre le +5V de la carte et chaque port analogique ?
    Oui, sur les ports des ILS.

    Dans ton programme tu as 2 boutons:

    pinMode ( bouton [ 1 ] , INPUT ) ; // D2 Bouton
    pinMode ( bouton [ 2 ] , INPUT ) ; // D3 Bouton

    Qui n'ont pas de PULL_UP. Le problème dans le cas de pas de résistance de PULL_UP, quand cette entrés n'a rien dessus, c'est à dire bouton pas pressé, elle peut faire office d'antenne et saisir les perturbations qui passent par là, perturbations provoquées par l'accélération d'une voiture par exemple. En mettant ces résistances comme l'option PULL_UP le fait en interne, on se prémunit de ça. L'ajout de résistances 4.7k sur les entrées ILS malgré l'initialisation en PULL_UP sont nécessaires, dans ton environnement, parce que les PULL_UP internes de l'Arduino sont trop hautes.
    Jette un œil ici.

    Dans ma jeunesse j'ai fait du slot racing, c'est vieux mais j'adorais ça!

    Cordialement
    jpbbricole

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 31
    Par défaut
    [/QUOTE]
    Citation Envoyé par jpbbricole Voir le message
    Bonjour slotizer

    Dans ton programme tu as 2 boutons:

    pinMode ( bouton [ 1 ] , INPUT ) ; // D2 Bouton
    pinMode ( bouton [ 2 ] , INPUT ) ; // D3 Bouton

    jpbbricole
    J'ai fait la modif, ainsi que la mise en place des résistances. Je vais tester ça vendredi soir avec des amis.

    Dans ma jeunesse j'ai fait du slot racing, c'est vieux mais j'adorais ça!
    J'habite en Normandie, si tu veux te replonger dans ton enfance, tu es le bienvenu...

    Merci pour ton aide et te donne le résultat sans doute samedi
    Cordialement

    JF

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    si vous le pouvez, passez Serial à un débit beaucoup plus important pour ne pas avoir de blocages lors de l'émission s'il y a bcp de "bavardage"

    vous devriez traiter le tableau comptageP utilisé dans les interruptions en section critique dans la loop. de plus vous faites un tableau d'entier (4 octets) alors que vous les utilisez comme des booléens

    déclarez le tableau comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    volatile bool comptageP [3]  = { false} ;
    les interruptions deviennent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void interruptILS1 () {
      comptageP [1] = true ;
    }
    void interruptILS2 () {
      comptageP [2] = true ;
    }
    et on crée une copie du tableau en section critique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      // ==================    fin du switch   ============================
      bool copieComptageP[sizeof comptageP]; // on travaille sur une copie
      // section critique
      noInterrupts();
      memcpy(copieComptageP, comptageP, sizeof comptageP); // https://www.cplusplus.com/reference/cstring/memcpy/
      memset(comptageP, false, sizeof comptageP); // https://www.cplusplus.com/reference/cstring/memset/?kw=memset
      interrupts();
    et bien sûr ensuite dans la boucle for vous utilisez la copie

    notez aussi que si vous laissez le système allumé longtemps cette partie du code va mal gérer le rollover de millis()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (tpsled [indice] + delailed < millis() && flagled [indice ] == true )
    il vaut mieux écrire (et on peut se passer du == true)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((millis() - tpsled [indice] >= delailed)  && flagled [indice ] )


    PS: c'est ballot de perdre l'entrée 0 de tous vos tableaux vous devriez compter depuis l'index 0

Discussions similaires

  1. Buzzer sur Arduino uno
    Par Stéphanie13000 dans le forum Arduino
    Réponses: 4
    Dernier message: 18/12/2018, 14h28
  2. Réponses: 6
    Dernier message: 14/02/2018, 11h53
  3. Petit problème de programmation sur arduino uno Wifi.
    Par Jeano81 dans le forum Arduino
    Réponses: 2
    Dernier message: 06/11/2017, 17h12
  4. Interruptions sur arduino uno
    Par joury dans le forum Arduino
    Réponses: 3
    Dernier message: 17/04/2017, 18h52
  5. Réponses: 10
    Dernier message: 13/02/2017, 07h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo