Boutons anti-débordement


32

J'ai récemment lu un article sur le rebond des boutons et je me demandais si je devais garder cela à l'esprit lorsque je travaillais, par exemple, avec un Arduino (ATMega mC)? Je suppose que c'est un problème, surtout lorsque vous travaillez avec des interruptions.

Alors, est-il préférable de détecter les rebonds dans le code, ou faut-il s'en occuper avec le matériel? S'il vous plaît élaborer.


Réponses:


17

Je recommanderais fortement de raccorder un oscilloscope (j'espère que vous en avez un ou que vous pouvez en avoir un à utiliser) jusqu'à votre commutateur. J'ai vu un projet d'étudiant qui a eu un rebond sur son commutateur qui est passé de 5v à -5v, de 4v à -3v, puis à 2v, puis de retour à 0v. Lorsque nous avons examiné le tirage au sort actuel, nous avons relevé une très très forte hausse.

Dans son cas particulier, il avait vraiment besoin de faire échec à son changement de matériel.

Cependant, par contre, j'ai constaté que les commutateurs ont un effet beaucoup plus petit et pourraient facilement être supprimés à l'aide d'un logiciel.

Vous devez cependant peser vos options. Si vous avez une quantité très complexe de microprogrammes, l'ajout de temps système à la fois en tant que programmeur et l'utilisation du processeur risquent de ne pas en valoir la peine et il serait préférable d'ajouter un peu de matériel. Maintenant, si vous essayez de réduire les coûts et la taille, vous voudrez supprimer autant de matériel que possible et tout faire dans le firmware si vous le pouvez.


J'ai scopé une image de switch bounce et l'ai postée sur Wikipedia: fr.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O

@Thomas O c'est une image assez amusante de rebond. Je veux juste m'assurer que @Vincent Van Den Berghe comprend que tout le rebond ne ressemblera pas à cela. Ce rebond est limité à 0-5v, il ne ressemblera pas toujours à ça.
Kellenjb

2
@Thomas O, nous avons créé une pratique qui consiste à échouer les élèves qui prennent des images Oscope comme cela. Flash sur un écran est horrible. Nous allons également un peu plus loin et poussons les étudiants à collecter des points de données réels, en utilisant quelque chose comme un fichier CSV ou Labview, afin de pouvoir les utiliser facilement dans les rapports et l'analyse de données.
Kellenjb

@ Kellenjb, je vais bientôt avoir une imprimante pour mon scope qui supporte HP-IB. De plus, j'ai découvert que le mode "Sports" sur mon appareil photo permet de prendre de bonnes photos de l'écran de l'oscilloscope sans flash ni flou.
Thomas O

1
@Lundin Dans un environnement en temps réel, vous dépendez beaucoup des interruptions. Si vous appuyez sur une touche pendant une interruption, vous ne voulez pas vraiment que votre système en temps réel soit interrompu plusieurs fois par une simple pression sur une touche. Vous ne voulez pas non plus avoir à consacrer des ressources à attendre 10 ms.
Kellenjb

15

Si vous êtes un concepteur d'électronique professionnel, votre patron ne vous laissera même pas le faire en matériel. La raison est simple: si votre lot de production est suffisamment grand, le logiciel est pratiquement gratuit , tandis que le matériel doit être payé pour chaque unité produite. Et tandis que les résistances et les condensateurs sont très bon marché, leur montage sur une carte de circuit imprimé peut coûter jusqu'à 20 fois leur prix d'achat.

Que vous utilisiez des logiciels ou du matériel, vous devez toujours sélectionner des boutons de qualité. Le fameux bouton de 157ms de l'article n'est tout simplement pas digne d' une application.
Je teste habituellement le bouton à des intervalles de 32 ms , ce qui est suffisant pour combler le temps d'anti-rebond d'un bon bouton. Je suis assez fan des commutateurs SKQG TACT Alps .

Commutateur de contact des Alpes

Sur les quelques appareils que j'ai testés, le temps de rebond initial était inférieur à 10 ns. Alors qu'il a une durée de vie de 100 000 cycles, nous l'avons testé pendant 200 000 cycles et même dans ce cas, le rebond de 32 ms était suffisant. (J'imagine que j'aurais dû mesurer le niveau actuel du rebond, mais notre principal intérêt à l'époque était le comportement du produit final. Quoi qu'il en soit, nous l'utilisions hors spécifications.)

Si vous voulez vraiment une solution matérielle, j'appuie la solution SR à bascule mentionnée dans l'article comme étant la meilleure solution sur le plan technique:

circuit anti-rebond

La bascule peut être construite avec une double porte NAND , qui est disponible dans un petit paquet VSSOP8, par exemple. L'inconvénient majeur de cette solution est qu'il vous faut un bouton-poussoir SPDT, où SPST est beaucoup plus couramment disponible.


12

Il y a beaucoup (et beaucoup) de différentes façons de supprimer les boutons. Que vous le fassiez en logiciel ou en matériel dépendra des exigences de votre projet et du type de commutateur.

Voici quelques liens vers différentes méthodes:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/


J'allais aller chercher un lien vers Ganssle quand j'ai vu la question.
Kortuk

L'article de ganssle est la raison pour laquelle j'ai posé cette question, il est lié à ma question :) Merci pour le lien vers les extraits de code anti-rebond.
Vincent Van Den Berghe

Souhaitez-vous résumer quelques cas d'utilisation pour illustrer le moment d'utiliser un logiciel / matériel? (C'est probablement subjectif, mais j'aimerais quand même quelques exemples)
Vincent Van Den Berghe

1
@ Vincent, Kellenjb a résumé sa réponse en expliquant comment décider. Je n'ai pas cliqué sur votre lien car il portait un nom amusant. Maintenant que je l'ai cliqué, je vois Ganssle!
Kortuk

Si tel est le consensus / la règle générale, alors en effet, il n’est pas nécessaire de donner plus d’exemples.
Vincent Van Den Berghe

6

Cet article est la "bible" sur le rebond. Le rebond de contact peut être un problème avec n'importe quelle application.

Il est généralement préférable de supprimer les commutateurs dans le logiciel, car il est plus facile d’ajuster les retards de commutateurs particuliers, car ils diffèrent par la quantité de rebond de contact. Il est souvent également nécessaire de faire rebondir la libération de clé. Les fabricants de commutateurs spécifient souvent la quantité de rebond pour leurs produits, généralement entre 10 et 20 ms.


Pourquoi les gens votent-ils?
Toby Jaffey

Bon point à propos du rebouncing de clé!
Vincent Van Den Berghe

1
Je ne l’ai pas baissé, mais dire que le faire avec un logiciel est une idée terrible. C'est une bonne idée de caractériser.
Kortuk

J'ai dit "en général", ce qui est le cas, et j'ai donné la raison. Cela minimise également les coûts de nomenclature et augmente la fiabilité.
Leon Heller

cela augmente uniquement la fiabilité si le signal reste dans les limites de sécurité de votre contrôleur. Cette action augmentera la fiabilité si vous réduisez le nombre de composants sans augmenter l'usure des composants. Je ne disais pas que je n'étais pas d'accord avec votre concept de publication, mais je travaille constamment avec des ingénieurs qui viennent sur le terrain et qui obtiennent une réponse comme celle-ci et ils vont tout contester dans le logiciel. Vous devez toujours caractériser. Je ne vous ai pas non plus voté vers le bas, mais je n’ai pas voté au-dessus non plus. Je pense qu’une réponse aussi large qu’un logiciel risquerait pour les nouveaux développeurs de risquer leur matériel.
Kortuk

1

Le rebond de commutateur peut durer des dizaines de millisecondes. Si vous interrogez un commutateur d'une routine d'interruption qui fonctionne sur une minuterie, le rebond ne sera pas un problème, car même si vous interrogez le commutateur au beau milieu d'une tempête de rebond, vous obtenez immédiatement le nouvel état. ou, dans le pire des cas, récupère l'ancien état et ne voit pas le nouvel état avant le prochain interrogation basée sur le minuteur. La scrutation à partir d’un ISR temporisé comme celui-ci constitue une forme d’anti-rebond logiciel.

Toutefois, si vous utilisez ce commutateur pour provoquer l'interruption et si vous vous attendez à ce que la routine de service d'interruption s'exécute rapidement, en moins de 10 millisecondes par exemple, vous aurez besoin d'un anti-rebond matériel, sans quoi un événement de commutateur risque de générer un nombre quelque peu aléatoire. interrompt, et certainement souvent plus que celui attendu. D'un autre côté, si la routine d'interruption est suffisamment longue, le rebond du commutateur sera réglé avant la fin des ISR, et tout ira bien pour vous, mais la plupart des ISR bien construits ne prennent pas très longtemps.


Avoir le commutateur à l'origine de l'interruption est une bonne idée. Mais une fois que vous l'obtenez, n'autorisez plus d'interruptions: fermez-les et démarrez une minuterie pour le temps d'anti-rebond spécifié.
Lundin

@Lundin - si des minuteries sont disponibles, vous pouvez simplement utiliser la minuterie pour mettre en œuvre l'approche interrogée, sans avoir à vous soucier que le commutateur génère des interruptions.
JustJeff

0

La meilleure façon de faire est de choisir celle qui vous convient le mieux. Toutefois, lorsque vous avez déjà un microcontrôleur, vous pouvez utiliser un logiciel sans perdre le moindre effort de code.

La solution la plus simple consiste à vérifier les boutons à des moments plus éloignés que le temps de rebond le plus long. 50 ms semble être la limite supérieure du temps de rebond des commutateurs «normaux». Ainsi, lorsque vous pouvez organiser votre logiciel de cette manière, vous êtes en clair:

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop

Et utilisez les minuteries sur puce de votre MCU pour cela.
Lundin

C'est bien sûr possible, mais vous pouvez écrire beaucoup de programmes sans.
Wouter van Ooijen

3
Les logiciels professionnels dans les produits de qualité utiliseront toujours des minuteries sur puce. Les amateurs peuvent s’en tirer avec des "NOP" pour des scrutations en boucle ou en attente. Mais il n’ya aucune raison de faire cela dans de vrais produits, quels que soient vos besoins en temps réel. "Je ne sais pas comment le minuteur fonctionne et cette boucle morte prend 10 secondes pour que mon auto paresseux puisse écrire" n'est pas un argument valable pour un ingénieur.
Lundin

Bullocks. Les professionnels doivent être efficaces, ce qui signifie (selon le projet à exécuter) signifier (entre autres choses) «utiliser le plus efficacement possible le matériel informatique» ou «utiliser le temps du professionnel de la manière la plus efficace possible». Donc, votre avis s’applique certainement dans certains cas (probablement dans tous les cas que vous avez traités) mais certainement pas dans tous les cas.
Wouter van Ooijen

L'implémentation du minuteur intégré prend une heure au maximum. Ce n’est guère complexe, c’est l’ingénierie quotidienne du pain et du beurre. Vous ne pouvez même pas investir une heure dans votre projet pour obtenir une solution nettement meilleure et globalement de meilleure qualité? Ouais bien ... si vous ne connaissez pas beaucoup la programmation, cela pourrait vous prendre une semaine. Mais alors peut-être que vous ne devriez pas travailler avec des logiciels en premier lieu ... ou peut-être que vous devriez travailler davantage avec, donc vous apprendrez à mettre en œuvre cette petite chose simple en un rien de temps.
Lundin

0

Une approche de la suppression du rebond qui n’a pas encore été mentionnée consiste à utiliser un commutateur à double lancer avec un lancer lié à la DMV et l’autre au sol. Enfoncez-le dans une broche qui (via un logiciel ou du matériel) sera faiblement tirée vers son état actuel. Une telle approche offrira les avantages d'un commutateur à double course, mais ne nécessitera qu'une seule broche d'E / S au lieu de deux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.