Muss ein Schalter beim Öffnen entprellt werden?

8

Angenommen, an einem Eingang eines Mikrocontrollers ist ein Pullup-Widerstand gegen 5 V und ein Schalter gegen Masse (normalerweise offen) angeschlossen. Ich weiß, dass ein Switch beim Schließen (in meinem Fall in der Software) entprellt werden sollte, aber ist ein Entprellen beim Öffnen eines Schalters erforderlich?

Nate
quelle

Antworten:

11

Ja, das Entprellen in beide Richtungen ist erforderlich, wenn Sie bei jedem Wechsel des Schalters eine garantierte Einzelflanke wünschen.

Glücklicherweise benötigen Sie keine zusätzliche Hardware zum Entprellen, wenn der Switch an einen Mikrocontroller angeschlossen ist. Wenn das Mikro über einen internen Pullup verfügt, was viele tun, benötigen Sie äußerlich nichts weiter als den Schalter zwischen dem Mikrostift und Masse.

Ich finde, 50 ms sind eine gute Entprellzeit. Die meisten Schalter springen deutlich weniger, aber einige können fast so lang sein. 50 ms fühlen sich für einen menschlichen Benutzer jedoch immer noch augenblicklich an, sodass Sie genauso gut besonders zuverlässig sein können. Der einzige Unterschied ist die Anzahl, bis zu der Sie in der Firmware zählen, also keine zusätzlichen Kosten. Normalerweise habe ich aus anderen Gründen ohnehin einen periodischen Interrupt von 1 ms. Wenn sich der Switch in diesem Interrupt 50 Mal hintereinander im selben Status befindet, erklären Sie, dass er in den neuen Status entprellt wurde.

Details zur Entprelllogik als Antwort auf einen Kommentar:

Im Allgemeinen haben Sie ein globales Bit, das den offiziellen Status des Switches anzeigt. Dies ist, was jede Logik, die wissen muss, auf welche Weise der Schalter eingestellt ist, verwendet. Der einzige zusätzliche Status, den Sie benötigen, ist ein Zähler, normalerweise ein einzelnes Byte, in der Interruptroutine. Angenommen, der Interrupt erfolgt alle 1 ms und die Entprellzeit beträgt 50 ms. Für jeden Interrupt:

Wenn der momentane Zustand mit dem entprellten Zustand übereinstimmt:
  Zähler auf 50 zurücksetzen
  Erledigt

Wenn der momentane Zustand vom entprellten Zustand abweicht:
  Dekrementzähler
  Wenn der Zähler 0 erreicht:
    Deklarieren Sie den neuen entprellen Zustand
    Zähler auf 50 zurücksetzen
  Erledigt
Olin Lathrop
quelle
Vor einiger Zeit gab es auf www.embedded.com einen sehr guten Artikel. Der Autor griff nach einer Reihe von Schaltern und stellte sie zwischen ein Netzteil und einen digitalen Speicherbereichseingang, um die Bounce-Eigenschaften zu untersuchen. Die letzte Schlussfolgerung ist, dass Sie keine Entprellzeit "Einheitsgröße" auswählen können: Sie müssen jeden einzelnen Schalter charakterisieren und sehen, wie er abprallt.
John R. Strohm
@ John: Kannst du den Link geben? Ich verstehe nicht, warum eine Annahme der maximalen Absprungzeit im ungünstigsten Fall nicht für alle Switches verwendet werden kann, vorausgesetzt, sie ist kurz genug, um den Benutzer zufrieden zu stellen. IME die 50ms Olin Erwähnungen erfüllt beide Kriterien.
Wouter van Ooijen
Danke Olin. Wie können Sie also verfolgen, in welchem ​​Zustand sich der Switch in den letzten 50 Interrupts befunden hat? Ich würde eine Variable erhöhen, wenn sich der Switch im selben Status wie der letzte Interrupt befindet, sie löschen, wenn sich der Status geändert hat, und den Switch als entprellt betrachten, wenn er 50 erreicht. Ist das ein effizienter Weg, dies zu tun?
Nate
1
Dies ist möglicherweise nicht der oben erwähnte Artikel, aber er enthält viele interessante Informationen: ganssle.com/debouncing.htm Jeder, der sich mit dem Entprellen befasst, sollte ihn lesen.
UnconditionallyReinstateMonica
1
@Nate: Siehe Ergänzung zur Antwort.
Olin Lathrop
2

Ja, ich würde einen verwenden, der Mechanismus ist im Grunde der gleiche. Wenn Sie den Kontakt unterbrechen, haben Sie Zeitpunkte, an denen der Schalter einen guten elektrischen Kontakt herstellt und keinen guten elektrischen Kontakt herstellt. Das gleiche wie beim Herstellen des Kontakts.

Irgendein Hardware-Typ
quelle
1

Im Allgemeinen ja. Mechanische Schalter können sowohl beim Schließen als auch beim Öffnen elektrische Geräusche (Prellen) erzeugen.

Dave Tweed
quelle
1

Im Allgemeinen ja, aber es hängt immer davon ab, was Sie mit dem digitalen Eingang machen. Ich hatte einige Systeme, die absolut nicht in beide Richtungen entprellt werden mussten.

Wenn Sie jedoch einen Interrupt fahren, sollten Sie höchstwahrscheinlich entprellen.

Scott Seidman
quelle