Ultimativer Leitfaden zum Switch Debounce (Teil 2)

Blog

HeimHeim / Blog / Ultimativer Leitfaden zum Switch Debounce (Teil 2)

Oct 01, 2023

Ultimativer Leitfaden zum Switch Debounce (Teil 2)

Wie wir in Teil 1 dieser Miniserie besprochen haben, kann es sein, dass wir einen Schalter betätigen

Wie wir in Teil 1 dieser Miniserie besprochen haben, kann es beim Betätigen eines Schalters dazu kommen, dass er mehrmals springt, bevor er in seinem neuen Zustand zur Ruhe kommt (siehe auch meine Spalten „Schaltertypen“ und „Schalterterminologie“). Dies liegt daran, dass die Kontakte in Schaltern meist aus federnden Metallen bestehen. Wenn sie zusammenschlagen, können sie aufgrund ihres Impulses und ihrer Elastizität ein- oder mehrmals auseinanderspringen, bevor sie einen dauerhaften Kontakt herstellen. Je nachdem, mit wem Sie sprechen, wird dies möglicherweise als „Switch Bounce“, „Contact Bounce“ oder „Chatter“ bezeichnet.

Das Ergebnis ist ein schnell gepulster elektrischer Strom anstelle eines sauberen Übergangs von Null auf Vollstrom, wenn der Schalter eingeschaltet ist, und umgekehrt, wenn der Schalter ausgeschaltet ist. Schalterprellen ist in einigen Anwendungen wie Stromkreisen (z. B. einem an der Wand montierten Lichtschalter) kein Problem, kann jedoch Probleme in Logikschaltungen und Mikrocontroller-basierten Systemen verursachen, die schnell genug reagieren, um die Ein-Aus-Impulse fälschlicherweise als Datenstrom zu interpretieren .

Hüpfend. Hüpfend

Schalterprellen tritt bei allen Schaltern auf, die wir üblicherweise verwenden, wie Kippschalter, Wippschalter und Drucktastenschalter (paradoxerweise sind die einzigen Schalter, die nicht betroffen sind, diejenigen, die wir selten verwenden, wie zum Beispiel Quecksilber-Kippschalter). Es tritt auch sowohl beim Schließen des Schalters als auch beim erneuten Öffnen auf. Beginnen wir mit einem SPST-NO-Kippschalter (einpolig, einpolig, normalerweise offen), wie unten dargestellt.

Schalterprellen an einem SPST-NO-Kippschalter (Bildquelle: Max Maxfield)

Manchmal liegen die Sprünge zwischen +ve und 0V. Nennen wir diese „sauberen“ Bounces.

Manchmal wechselt das Signal nicht vollständig, sondern schwankt zwischen dem Anfangswert und einer Zwischenspannung hin und her. Obwohl dies keine offizielle Terminologie ist, nennen wir diese „schmutzigen“ Bounces. Und manchmal haben wir eine zufällige Mischung von Bounce-Typen.

Die einzige Konstante ist der Wandel, denn jeder Schalter verhält sich auf seine eigene Art und Weise. Schlimmer noch: Wie in meiner vorherigen Kolumne erwähnt, „können die Eigenschaften des gleichen Schalters je nach Temperatur, Luftfeuchtigkeit, Tageszeit, Richtung des vorherrschenden Windes und der Farbe Ihrer karierten Polyester-Golfhose variieren.“

Betrachten wir als Nächstes einen SPDT-Kippschalter (Single Pole, Double Throw), wie unten dargestellt (der Einfachheit halber zeigen wir nur saubere Sprünge).

Schalterprellen an einem SPDT-Kippschalter (Bildquelle: Max Maxfield)

Beachten Sie, dass wir davon ausgehen, dass es sich bei unserem Schalter um eine Break-before-make-Kategorie (BBM) handelt, die auch als „nicht kurzschließender Schalter“ bekannt ist und die am weitesten verbreitete Variante ist. Wie in meiner Kolumne zur Schalterterminologie erläutert, bedeutet dies, dass der bewegliche Kontakt die bestehende Verbindung mit dem aktuellen Wurf unterbricht, bevor er eine neue Verbindung mit dem anderen Wurf herstellt.

Im Fall des Schalterprellens bedeutet dies, dass wir zunächst ein Prellen an dem Terminal sehen, das gerade eine Unterbrechung durchführt (öffnet), gefolgt von einer kurzen Verzögerung, gefolgt von einem Prellen an dem Terminal, das gerade eine Unterbrechung ausführt (schließt).

In Bezug auf die oben gezeigte Schaltung und unter der Annahme, dass logisch 0 = 0 V und logisch 1 = +ve, bedeutet dies, dass die NO- und NC-Klemmen 10 und 01 sind, wenn sich der Schalter in einem stabilen Zustand befindet, und (möglicherweise) 11 im stabilen Zustand Der Fall von „sauberen“ Sprüngen beim Übergang zwischen Zuständen, aber niemals 00. Ist das von Bedeutung? Nun, das könnte der Fall sein, wenn Sie sich dafür entscheiden, die Entprellung per Software an einem SPDT-Schalter durchzuführen (was ehrlich gesagt unwahrscheinlich ist, weil dadurch zwei Pins Ihres Mikrocontrollers pro Schalter belegt würden, aber wir leben in einer unsicheren Welt, und das ist bei allen Dingen der Fall möglich).

Laut Laut

In nicht allzu ferner Zukunft werden wir verschiedene Techniken zur Bewältigung von Switch Bounce diskutieren. Eine Sache, die wir im Auge behalten müssen, ist das Potenzial für Rauschen, das aus einer Vielzahl von Quellen stammen kann, darunter Übersprechen (von anderen Kabeln im System), EMI (elektromagnetische Interferenz) durch Ströme in Kabeln, RFI (Hochfrequenzinterferenz). B. durch Funksysteme, die Signale ausstrahlen, ESD (elektrostatische Entladung), beispielsweise durch die Berührung des Systems durch jemanden (siehe auch Abenteuer in ESD) und natürliche Ursachen wie elektrostatische Störungen und Blitzschlag.

Die Switch-Bounce-Lösung darf sich nicht durch Rauschen täuschen lassen (Bildquelle: Max Maxfield)

Sofern die Konstrukteure dies nicht berücksichtigt haben, sind Reset-Signale besonders anfällig für Probleme, da sie dazu neigen, sich überall hin und her zu bewegen. Bei einem Arduino-basierten System wird beispielsweise das Reset-Signal auf der Hauptplatine auf etwaige Tochterkarten (Shields) aufgefächert.

Nebenbei bemerkt: Wenn Sie mehr über RFI, EMI und EMV (elektromagnetische Verträglichkeit) erfahren möchten, sollten Sie sich vielleicht an Ken Wyatt von Wyatt Technical Services wenden und sich seine Seminar- und Präsentationsangebote ansehen, aber wir schweifen ab …

Es ist wichtig, dass die Technik, die wir zur Behebung des Schalterprellens verwenden – Vorverarbeitung des Signals in der Hardware oder Nachverarbeitung in der Software –, nicht durch gelegentliche „Störimpulse“ oder „Spitzen“ des Rauschens getäuscht wird. Es wäre bedauerlich, wenn eine „Selbstzerstörungs“-Sequenz beispielsweise dadurch ausgelöst würde, dass jemand einen Staubsauger einschaltet (das Positive daran ist, dass der Weltuntergang zumindest mit sauberen Teppichen einhergehen würde).

Empirische Daten

Wie lange bleibt der Switch-Bounce bestehen? Wie breit sind die einzelnen Schaltprellimpulse? Mit wie vielen Impulsen können wir rechnen? Nun, ich bin froh, dass Sie gefragt haben. Die zuverlässigsten Daten, die ich habe, stammen von zwei meiner Freunde: Jack Ganssle, eine Legende im Raumzeitkontinuum eingebetteter Systeme, und David Ashton, der aus Down Under stammt und eine Legende in seinem eigenen Mittagskontinuum ist.

Vor langer Zeit erstellte Jack seinen eigenen Leitfaden zum Entprellen. Als ich Teil 1 dieser Miniserie schrieb, sagte ich Dinge in der Art, dass „das Switch-Bounce-Problem weit verbreitet ist“ und „es mittlerweile so viele Lösungen im Internet verstreut gibt – wohin die meisten jungen Ingenieure gehen, um ihren Wissensdurst zu stillen.“ Es lässt einen schwindlig werden. Das Positive daran ist, dass einige dieser Angebote tatsächlich funktionieren; der Nachteil ist, dass ihr Funktionieren möglicherweise eher auf Zufall als auf Design zurückzuführen ist.“

Glücklicherweise ist Jack einer ähnlichen Meinung. In seinem Leitfaden sagt er: „Surfen Sie im Internet, um verschiedene Ansätze zur Entprellung auszuprobieren. Die meisten sind ziemlich lahm.

Was Jack also tat, war, 18 verschiedene Arten von Schaltern zu nehmen, einen Prüfstand ähnlich unseren obigen Schaltkreisen mit einer 5-V-Versorgung und einem 1-kΩ-Pull-up-Widerstand zu bauen und dann jeden Schalter 300 Mal zu drücken und dabei die minimale und maximale Anzahl zu protokollieren Prellen sowohl beim Öffnen als auch beim Schließen der Kontakte. Nachdem zwei Ausreißer verworfen wurden, zeigten die verbleibenden Schalter einen durchschnittlichen Sprung von 1.557 µsec und einen maximalen Sprung von 6.200 µsec. Jack stellt außerdem fest, dass die Breite der einzelnen Bounce-Impulse zwischen weniger als 1 µsec und Hunderten von µsec variiert.

Dies stimmt weitgehend mit dem überein, was David in zwei von ihm verfassten Kolumnen gefunden hat: „Switch Bounce Around“ und „SPDT Switch Debounce with an SR Latch“. Im Fall von David erzählte er mir, dass die Breite der einzelnen von ihm beobachteten Spitzen „zwischen einigen ns und etwa 100 µs“ schwankte.

Während wir hier sind, sollten wir wahrscheinlich beachten, dass die Breite eines ESD-Impulses zwischen einigen ns und mehr als 100 ns liegen kann, was bedeutet, dass ein ESD-Impuls leicht mit einem einzelnen Schalterprellereignis verwechselt werden kann.

Und wie viele Bounces können wir erwarten? Nun, laut „The Art of Electronics“ von Horowitz & Hill (Seite 506 der zweiten Auflage) „trennen sich die beiden Kontakte tatsächlich, wenn der Schalter geschlossen wird, und verbinden sich wieder, typischerweise 10 bis 100 Mal über einen Zeitraum von etwa 1 ms.“ Dies zeigt nur, wie undefiniert dieses Fachgebiet ist, denn dieses Buch wird von vielen Ingenieuren als die „Elektronikbibel“ angesehen, aber ihr Wert von 1 ms (was mir als junger Ingenieur gesagt wurde) ist geringer als der von Jack durchschnittliche Erkenntnisse, geschweige denn seine maximalen Erkenntnisse.

Eine letzte Sache, auf die wir beim Umgang mit Switch Bounce achten müssen, ist das Gesamtprofil der Impulse. Ich denke, die Art und Weise, wie die meisten von uns dies erwarten, würde mit dem folgenden Screenshot aus Davids zweiter Kolumne übereinstimmen.

Wellenformen für einen SPDT-Schalter, der einen SR-Latch speist (Bildquelle: David Ashton).

In diesem Beispiel schalten wir einen SPDT-Schalter aus. Das erste, was wir sehen, ist, dass der NC-Anschluss von 0 auf 1 übergeht, wobei er etwas springt, wenn er unterbricht (öffnet). Nach einer Verzögerung beginnt der NO-Anschluss mit dem Übergang von 1 auf 0, wobei er dabei etwas springt (schließt). Es ist die anfängliche abfallende Flanke am NO-Anschluss, die das Umschalten des SR-Latchs bewirkt, was sich in seinen QA- und QB-Ausgängen widerspiegelt.

Der Sinn all dessen besteht darin, dass das Schalterspringen in der Nähe der anfänglichen Übergänge an den NC- und NO-Klemmen auftritt, was nicht allzu überraschend erscheint. Aber nicht immer ist alles so ordentlich und aufgeräumt. In Jacks Aufsatz notiert er zum Beispiel Folgendes über seine O- und Q-Schalter (die Diagramme unten sind nur meine billigen und fröhlichen Interpretationen – Sie können die Originale in Jacks Aufsatz sehen).

Sprungmuster für Jacks Schalter O und Q (Bildquelle: Max Maxfield aus Jacks Original)

Wie Jack in seiner Arbeit sagt: „O ist ein sehr schöner, qualitativ hochwertiger Mikroschalter, der nie mehr als 1,18 ms Prellen zeigte. Aber als ich genauer hinschaute, stellte ich fest, dass er normalerweise eine Impulsfolge erzeugte, die mit einfachem Filtercode garantiert Chaos anrichtete. Es gibt kein Hoch.“ -Geschwindigkeits-Hash, nur schwer zu eliminierende feste Einsen und Nullen. Eine Betätigung ergab 7 saubere Nullen mit einer Zeitspanne von 12 bis 86 µs und 7 logische Einsen mit einer Zeitspanne von 6 bis 95 µs. Leicht zu filtern? Sicher. Aber nicht durch Code, der nur nach ein paar identischen Lesevorgängen sucht.“

Im Fall des Schalters Q sagt Jack: „Wenn Q losgelassen wird, geht es 480 Usec lang hoch, bevor es 840 Usec Hash generiert – ein sicherer Weg, ein Interrupt-System in den Wahnsinn zu treiben, wenn es schlecht konzipiert ist.“

Nächstes Mal…

Nun, ich denke, wir haben die Situation angemessen vorbereitet; Jetzt sind wir bereit zum Rock'n'Roll. In meiner nächsten Kolumne befassen wir uns mit den verschiedenen Hardware- und Softwaretechniken, mit denen wir unsere unanständigen Hüpfsignale in klare, saubere Äquivalente umwandeln können, auf die unsere Mütter stolz wären.