Both sides previous revisionPrevious revisionNext revision | Previous revision |
fr:examples:digi:switch_debounce [2010/03/07 21:04] – sdeniaud | fr:examples:digi:switch_debounce [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
====== Élimination du rebond d'un interrupteur ====== | ====== Élimination du rebond d'un interrupteur ====== |
| |
//Connaissances nécessaires: [HW] [[en:hardware:homelab:digi]], [AVR] [[en:avr:io]], [LIB] [[en:software:homelab:library:pin]], [LIB] [[en:software:homelab:library:delay]], [PRT] [[en:examples:digi:switch]]// | //Necessary knowledge: [HW] [[en:hardware:homelab:digi]], [AVR] [[en:avr:io]], [LIB] [[en:software:homelab:library:pin]], [LIB] [[en:software:homelab:library:delay]], [PRT] [[en:examples:digi:switch]]// |
| //Connaissances nécessaires: [HW] [[fr:hardware:homelab:digi]], [AVR] [[fr:avr:io]], [LIB] [[fr:software:homelab:library:pin]], [LIB] [[fr:software:homelab:library:delay]], [PRT] [[fr:examples:digi:switch]]// |
| |
===== Théorie ===== | ===== Théorie ===== |
Comme il a déjà été mentionné dans l'introduction du chapitre sur les interrupteurs, il existe un phénomène de rebond ou de clignotement lorsqu'on utilise des interrupteurs mécaniques. Le problème est d'autant plus important lorsqu'on utilise des contacteurs en métal qui admettent une certaine élasticité. Au moment de la connexion ou de la déconnexion, les contacteurs peuvent rebondir et peuvent fausser le résultat de l'interruption. Le nombre et la durée des changements dépendent du type d'interruption, ils se réalisent le plus souvent en quelques millisecondes. Dans le cas de l'utilisation d'un interrupteur pour démarrer un matériel électrique, le rebond n'est pas considéré comme un gros problème. Cependant, s'il est utilisé pour contrôler un matériel, plusieurs interruptions pourraient être nuisibles pour le matériel. | Comme il a déjà été mentionné dans l'introduction du chapitre sur les interrupteurs, il existe un phénomène de rebond ou de clignotement lorsqu'on utilise des interrupteurs mécaniques. Le problème est d'autant plus important lorsqu'on utilise des contacteurs en métal qui admettent une certaine élasticité. Au moment de la connexion ou de la déconnexion, les contacteurs peuvent rebondir et peuvent fausser le résultat de l'interruption. Le nombre et la durée des changements dépendent du type d'interruption, ils se réalisent le plus souvent en quelques millisecondes. Dans le cas de l'utilisation d'un interrupteur pour démarrer un matériel électrique, le rebond n'est pas considéré comme un gros problème. Cependant, s'il est utilisé pour contrôler un matériel, plusieurs interruptions pourraient être nuisibles pour le matériel. |
| |
[{{ :examples:digi:switch:switch_input_rc_filter.png?200|Filtre-RC d'un interrupteur}}] | [{{ :examples:digi:switch:switch_input_rc_filter.png?200|Filtre RC d'un interrupteur}}] |
| |
La principale méthode utilisée pour éviter le clignotement est de filtrer le rebond causé par les contacteurs. Le filtrage peut être réalisé électriquement ou par un programme. Pour filtrer électriquement, l'interrupteur doit être connecté à un filtre passe-bas - comme par exemple un filtre RC - qui lisse les changements de tension. Par conséquent, les pattes du micro-contrôleur ne sont pas perturbées par des valeurs transitoires. Le filtre RC est présenté sur le schéma. Le filtrage par un programme est réalisé en estimant la valeur de la patte à laquelle est connectée l'interrupteur ; si la valeur est la même pendant un laps de temps prédéfini, on considère que la position est stable et n'est donc pas concerné par l'effet de clignotement. Cependant, pour chaque types de filtrage, un facteur de délai pour définir l'état doit être pris en compte. | La principale méthode utilisée pour éviter le clignotement est de filtrer le rebond causé par les contacteurs. Le filtrage peut être réalisé électriquement ou par un programme. Pour filtrer électriquement, l'interrupteur doit être connecté à un filtre passe-bas - comme par exemple un filtre RC - qui lisse les changements de tension. Par conséquent, les broches du micro-contrôleur ne sont pas perturbées par des valeurs transitoires. Le filtre RC est présenté sur le schéma. Le filtrage par un programme est réalisé en estimant la valeur de la patte à laquelle est connectée l'interrupteur ; si la valeur est la même pendant un laps de temps prédéfini, on considère que la position est stable et n'est donc pas concerné par l'effet de clignotement. Cependant, pour chaque types de filtrage, un facteur de délai pour définir l'état doit être pris en compte. |
| |
===== Entrainement ===== | ===== Pratique ===== |
| |
Le filtrage électrique ne sera pas utilisé dans les interrupteurs du //Home Lab// car il ne permettrait pas d'exercer l'élimintation d'une mauvais interruption à l'aide d'un programme. L'exercice est en deux parties. Le but de la première partie est de montrer le rebond des des interrupteurs du module d'entrée - sortie numérique. Le programme suivant est utilisé pour cela ; chaque pression sur le bouton allume la LED suivante sur la ligne. Mal appuyer sur le bouton causerait le clignotement des LED plusieurs fois et on pourrait croire ainsi qu'elles s'allument aléatoirement. | Le filtrage électrique ne sera pas utilisé dans les interrupteurs du //Home Lab// car il ne permettrait pas d'exercer l'élimintation d'une mauvais interruption à l'aide d'un programme. L'exercice est en deux parties. Le but de la première partie est de montrer le rebond des des interrupteurs du module d'entrée - sortie numérique. Le programme suivant est utilisé pour cela ; chaque pression sur le bouton allume la LED suivante sur la ligne. Mal appuyer sur le bouton causerait le clignotement des LED plusieurs fois et on pourrait croire ainsi qu'elles s'allument aléatoirement. |
</code> | </code> |
| |
Plusieurs solutions logiciels sont utiliser pour filtrer, tout cela peut être réalisé à la fois simplement ou de manière compliquée avec ses avantages et inconvénients. Si le programme est configuré pour n'avoir que quelques appuis non fréquents sur le bouton, une longue pause peut être configurée à la suite d'un appui, cela empêchera la réaction, a tort, de l'interrupteur a cause d'un rebond. Cependant, en utilisant cette méthode on doit considérer - le cas où l'utilisateur garde le bouton appuyé pendant un long moment, le programme va réagir a cause du relâchement du bouton. Un programme qui contrôle l'état de l'interrupteur de nombreuses fois dans une période fixe est plus conseillée (plus longue est le temps et plus le nombre de contrôles est sure, meilleur est le résultat). La fonction ci-dessous permet de lire les valeurs filtrés d'un bouton d'un module d'entrée - sorties digitales: | Plusieurs solutions logiciels sont utiliser pour filtrer, tout cela peut être réalisé à la fois simplement ou de manière compliquée avec ses avantages et inconvénients. Si le programme est configuré pour n'avoir que quelques appuis peu fréquents sur le bouton, une longue pause peut être réalisée à la suite d'un appui, cela empêchera la réaction, a tort, de l'interrupteur a cause d'un rebond. Cependant, en utilisant cette méthode on doit considérer - au cas où l'utilisateur garde le bouton appuyé pendant un long moment, le programme va réagir a cause du relâchement du bouton. Un programme qui contrôle l'état de l'interrupteur de nombreuses fois dans une période fixe est plus conseillée (plus la durée est longue et plus le nombre de contrôles réalisés est important, plus le résultat est meilleur). La fonction ci-dessous permet de lire les valeurs filtrées d'un bouton pour le module d'entrée - sorties numérique : |
| |
<code c> | <code c> |
</code> | </code> |
| |
Cette fonction génère un délai utilisé par la fonction qui est expliqué dans l'exercice correspondant. En ce moment, tout ce que nous voulons savoir à propos de la fonction délai est quelle génère un délai de 1ms à la fin de chaque cycle pour renvoyer l'état du bouton. Si le bouton est dans le même état pendant 8 lectures, cet état est retourné à la position du compteur. Dans le cas d'un bouton instable la procédure entière prendra 100ms. Cette fonction est incluse directement dans la librairie qui concerne les barrettes, il n'est donc pas nécessaire de l'ajouter dans le programme au cours de cet exemple. Afin de pouvoir essayer cette première partie d'exercice, qui à été légèrement altéré - incluant la librairie pour générer le délai dans le programme et au point de lecture de l'état du bouton, appliquant directement la fonction avec le filtre. Le résultat est tel que: | Cette fonction génère un délai en utilisant une fonction qui est expliquée dans l'exercice correspondant. Pour le moment, tout ce que nous devons connaître à propos de la fonction délai est qu'elle génère un délai de 1ms à la fin de chaque cycle afin de lire l'état du bouton. Si le bouton est dans le même état pendant 8 lectures, il renvoie la position comptée. Dans le cas d'un bouton instable, la procédure entière prendra 100ms. Cette fonction est incluse directement dans la bibliothèque qui concerne les barrettes, il n'est donc pas nécessaire de l'ajouter dans le programme au cours de cet exemple. Afin de pouvoir essayer cette première partie d'exercice, il doit être légèrement altéré - inclure la bibliothèque pour générer le délai dans le programme et à l'endroit où la valeur du bouton était lue, appliqer directement la fonction avec le filtre. Le résultat est le suivant : |
| |
<code c> | <code c> |