Un interrupteur doit-il être rebondi à l'ouverture?


8

Supposons qu'une entrée sur un microcontrôleur possède une résistance de rappel à 5V et un interrupteur à la masse (normalement ouvert) qui lui est connecté. Je sais qu'un interrupteur doit être rebondi (dans mon cas, dans le logiciel) lorsqu'il est fermé, mais est-il nécessaire de rebondir lorsqu'un interrupteur est ouvert?

Réponses:


11

Oui, un anti-rebond dans les deux sens est nécessaire si vous voulez un front unique garanti chaque fois que le commutateur change d'état.

Heureusement, vous n'avez pas besoin de matériel supplémentaire pour anti-rebond si le commutateur est connecté à un microcontrôleur. Si le micro a un pullup interne, ce que beaucoup font, vous n'avez besoin de rien de plus externe que le commutateur entre la micro broche et la masse.

Je trouve que 50 ms est un bon temps de rebond. La plupart des commutateurs rebondissent bien moins que cela, mais quelques-uns peuvent être presque aussi longs. Mais, 50 ms sembleront toujours instantanés pour un utilisateur humain, vous pourriez donc aussi bien être extrêmement fiable. La seule différence est le nombre que vous comptez dans le firmware, donc pas de frais supplémentaires. J'ai généralement une interruption périodique de 1 ms pour d'autres raisons de toute façon, donc si le commutateur est dans le même état 50 fois de suite dans cette interruption, alors vous le déclarez rebondi au nouvel état.

Détails sur la logique anti-rebond en réponse au commentaire:

Généralement, vous aurez un bit global qui indique l'état de rebond officiel du commutateur. C'est ce que toute logique qui a besoin de savoir de quelle manière le commutateur est réglé utilise. Le seul état supplémentaire dont vous avez besoin est un compteur, généralement un seul octet, dans la routine d'interruption. Disons que l'interruption est toutes les 1 ms et le temps de rebond est de 50 ms. Pour chaque interruption:

Si l'état instantané correspond à l'état anti-rebond:
  Remettre le compteur à 50
  Terminé

Si l'état instantané diffère de l'état anti-rebond:
  Décrémenter le compteur
  Si le compteur atteint 0:
    Déclarer le nouvel état rebondi
    Remettre le compteur à 50
  Terminé

Il y a un très bon article sur www.embedded.com. L'auteur a saisi un tas de commutateurs et les a mis entre une alimentation et une entrée de portée de stockage numérique, pour examiner les caractéristiques de rebond. La conclusion finale est que vous ne pouvez pas choisir un temps de rebond «taille unique»: vous devez caractériser chaque commutateur particulier et voir comment il rebondit.
John R. Strohm du

@John: pouvez-vous donner le lien? Je ne comprends pas pourquoi une hypothèse de temps de rebond maximal dans le pire des cas ne peut pas être utilisée pour tous les commutateurs, à condition qu'elle soit suffisamment courte pour satisfaire l'utilisateur. IME les 50ms mentionnés par Olin répondent aux deux critères.
Wouter van Ooijen,

Merci Olin. Alors, comment gardez-vous un état de l'état du commutateur au cours des 50 dernières interruptions? J'incrémenterais une variable si le commutateur est dans le même état que la dernière interruption, l'effacerais si l'état a changé et considérerais le commutateur rebondi s'il atteint 50. Est-ce une manière efficace de le faire?
Nate

1
Il ne s'agit peut-être pas de l'article mentionné ci-dessus, mais il contient de nombreuses informations intéressantes: ganssle.com/debouncing.htm Quiconque traite de l'anti-rebond doit le lire.
UnconditionallyReinstateMonica

1
@Nate: Voir l'addition pour répondre.
Olin Lathrop

2

Ouais j'en utiliserais un, le mécanisme est fondamentalement le même. Lorsque vous coupez le contact, vous aurez des moments où l'interrupteur établit un bon contact électrique ainsi que ne fait pas un bon contact électrique. Comme lorsque vous établissez le contact.


1

En général, oui. Les interrupteurs mécaniques peuvent produire du bruit électrique (rebond) à la fois en fermeture et en ouverture.


1

Généralement, oui, mais cela dépend toujours de ce que vous faites avec l'entrée numérique. J'ai eu quelques systèmes qui n'avaient absolument pas besoin d'être rebondis dans les deux sens.

Si vous conduisez une interruption, cependant, vous devriez probablement rebondir.

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.