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 :

Interruption LM393 comportement RISING


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Octobre 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 169
    Par défaut Interruption LM393 comportement RISING
    Bjr,
    Une question sur le comportement du paramètre RISING dans attachinterrupt.
    J'ai une interruptions lorsque le
    Capteur LM 393 passe de 0 à 1 mais également lors du passage de 1 à 0 comment cela est il possible ?

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    const byte pin = 2;
     
    volatile byte state = LOW;
    volatile unsigned long temps = 0, last_temps = 0;
    volatile byte cpt = 0;
     
    void setup() { 
     
    	pinMode( pin, INPUT_PULLUP );
     
    	attachInterrupt( digitalPinToInterrupt( pin ), set_interrupt, RISING );
     
    	Serial.begin( 9200 );
    }
     
     
    void loop() {
     
    	Serial.print( "temps " );
    	Serial.println( temps );
    	Serial.print ( "compteur trous " );
    	Serial.println(  cpt );
    	Serial.print ( "etat  " );
    	Serial.println( state );
     
    	delay(1000);
     
    }
     
     
    void set_interrupt(){
     
    			temps = millis();
     
    			state = 0;
     
    			// rebond du capteur
    			if( ( temps - last_temps ) > 100 ) {
     
    				++cpt;
    				last_temps = temps;
     
    				state = 3;
    			}
    }

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 253
    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 253
    Par défaut
    Salut,
    Ça dépend de plusieurs choses. Peut être qu'il faut générer un seuil d'hystérésis pour éviter une sorte d'oscillation logique autour de la valeur de comparaison.

    Peut être que le système que tu as relié au comparateur est sujet aux rebonds, que tu retrouves dans ton analyse du problème.

    - Qu'est-ce que tu as relié au comparateur LM393 ?
    - Il nous faut le schéma.

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 232
    Billets dans le blog
    48
    Par défaut
    Salut à tous,

    A mon avis, la logique de l'antirebonds logiciel sur interruption est bancale ici...

    - si l'interruption se produit entre deux Serial.print, l'information affichée est fausse
    - si la variable state passe bien à 3 lors de la détection d'un front montant "valide", elle repasse illico à 0 au moindre rebond


    Capteur LM 393 passe de 0 à 1 mais également lors du passage de 1 à 0 comment cela est il possible ?
    Le signal étant à l'état 1 depuis un moment (+ de 100 ms), il bascule à l'état 0 ==> OK, c'est un front descendant...
    Mais si le signal bascule avec des rebonds ! Au premier rebond qui sera un front montant, hop, le système croit que le signal bascule à l'état 1.

  4. #4
    Membre confirmé

    Inscrit en
    Octobre 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 169
    Par défaut
    Bjr,
    Merci de votre aide.
    Nom : LM393.jpg
Affichages : 2513
Taille : 117,2 Ko

    Donc en fait il y aurait encore des rebonds si je comprend bien. (Effectivement la variable state reste toujours à 0 même après increment du compteur)

    J'imagine qu'un filtre est envisageable...

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    le LM393 est un comparateur pas un capteur... Quelles sont ses entrées ? ses sorties ? Quel module utilises-tu ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 232
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    C'est un module avec une fourche optique. Ton montage est un codeur incrémental rotatif, c'est ça ?

    Nom : codeurs1.gif
Affichages : 1465
Taille : 8,5 Ko
    http://rco.fr.nf/index.php/2016/07/06/codeurs-et-robotique/

    Cela m'étonne qu'il y a des rebonds sur ce dispositif Tu as constaté des rebonds à l'oscillo, ou en affichant des valeurs dans le terminal Série ?
    Et puis 100 ms, ça me semble long (ou alors la vitesse de rotation est plutôt lente, peut-être en sortie d'un réducteur, mais ça dépend aussi du diamètre et du nombre de trous).

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 232
    Billets dans le blog
    48
    Par défaut
    Bonsoir,

    Il serait plus logique d'afficher la nouvelle valeur du compteur quand un trou est détecté (c.à.d quand state=3) et de supprimer le delay(1000) :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    const byte pin = 2;
     
    volatile byte state = 0;
    volatile unsigned long temps = 0, last_temps = 0;
    volatile byte cpt = 0;
     
    void setup() { 
     
    	pinMode( pin, INPUT_PULLUP );
     
    	attachInterrupt( digitalPinToInterrupt( pin ), set_interrupt, RISING );
     
    	Serial.begin( 9200 );
    }
     
     
    void loop() {
            if (state==3) {
                state=0;
    	    Serial.print( "temps " );
    	    Serial.println( temps );
    	    Serial.print ( "compteur trous " );
    	    Serial.println(  cpt );
            }
    }
     
     
    void set_interrupt(){
     
    			temps = millis();
     
    			// rebond du capteur
    			if( ( temps - last_temps ) > 100 ) {
     
    				++cpt;
    				last_temps = temps;
     
    				state = 3;
    			}
    }
    Ce ne serait pas Serial.begin(9600) plutôt ? (9200 dans ton code)

Discussions similaires

  1. Interruption rising change
    Par laurent1133 dans le forum Arduino
    Réponses: 0
    Dernier message: 18/09/2018, 18h18
  2. interruption clavier
    Par pyrostan dans le forum C
    Réponses: 4
    Dernier message: 13/01/2003, 17h33
  3. interruption materiel port parrallele
    Par pyrostan dans le forum C
    Réponses: 2
    Dernier message: 13/01/2003, 08h22
  4. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22
  5. Bouquins d'Assembleur - interruptions matérielles
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/11/2002, 21h23

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