Ultimativer Leitfaden zum Switch Debounce (Teil 3)
HeimHeim > Blog > Ultimativer Leitfaden zum Switch Debounce (Teil 3)

Ultimativer Leitfaden zum Switch Debounce (Teil 3)

Jun 15, 2024

In Teil 1 dieser Miniserie haben wir das Konzept des Switch Bounce vorgestellt; Das heißt, wenn wir einen Schalter öffnen (deaktivieren) oder schließen (aktivieren), kann er mehrere Übergänge durchführen, bevor er schließlich seinen neuen Zustand einnimmt (siehe auch meine Spalten „Schaltertypen“ und „Schalterterminologie“). Wir haben auch festgestellt, dass dies bei Kippschaltern, Wippschaltern, Drucktastenschaltern usw. der Fall ist – bei so ziemlich allem außer den Schaltern, die die meisten von uns sowieso nie verwenden, wie zum Beispiel Quecksilber-Kippschalter.

In Teil 2 haben wir uns eingehender mit dem Prellen befasst, das mit einpoligen, einpoligen (SPST) und einpoligen, zweipoligen (SPDT) Kippschaltern verbunden ist, einschließlich einiger empirischer Daten dazu, wie lange das Prellen des Schalters andauern kann und wie weit das Welche einzelnen Bounce-Impulse es gibt und wie viele Bounces wir voraussichtlich sehen werden. Außerdem haben wir darauf hingewiesen, dass es wichtig ist, dass die Technik nicht durch gelegentliche „Störimpulse“ oder „Spitzen“ des Rauschens getäuscht wird, unabhängig davon, welche Technik wir zur Behebung des Schalterprellens verwenden – Vorverarbeitung des Signals in der Hardware oder Nachbearbeitung in der Software. verursacht durch Übersprechen, EMI (elektromagnetische Interferenz), RFI (Radiofrequenzinterferenz) oder ESD (elektrostatische Entladung).

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

In diesem Diagramm fungiert der Widerstand R1 als Pull-up-Widerstand. Wenn der Schalter geöffnet ist, erhöht R1 das NO-Signal auf einen +ve-Wert (logisch 1). Wenn der Schalter geschlossen ist, schließt er das NO-Signal auf 0 V (logisch 0) kurz.

Jetzt, in Teil 3, sind wir an dem Punkt angelangt, an dem metaphorisch gesprochen „das Gummi auf die Straße trifft“. Hier beginnen wir, über verschiedene Lösungen für unsere Prellschalter nachzudenken.

Hardware vs. Software (Ein bisschen Geschichte)

Als Mikroprozessoren etwa Anfang und Mitte der 1970er-Jahre zum ersten Mal auf den Markt kamen, gab es relativ viele Entwickler von Elektronik-Hardware-Designern, aber relativ wenige Software-Entwickler, und die meisten Leute, die sich mit Software auskannten, arbeiteten an den „Großen“. Eisen“-Großrechnern oder auf Minicomputern.

Mikroprozessoren waren zu dieser Zeit in Bezug auf Speicher und Taktzyklen begrenzt (dh sie hatten relativ niedrige Taktfrequenzen, sodass jeder Taktzyklus geschätzt wurde). Ein Großteil der Programmierung wurde mühsam in Assembler durchgeführt, und – nur um den Spaß und die Frivolität zu steigern – wurde ein Großteil des Codes von Hardware-Designingenieuren erstellt, die normalerweise nicht mit der Programmierung im Allgemeinen und mit guten Programmierpraktiken im Besonderen vertraut waren.

All dies erklärt, warum viele der frühen Lösungen für das Switch-Bounce-Problem hardwarebasiert waren – aber Moment, es gibt noch mehr …

Die 74xx-Serie integrierter Transistor-Transistor-Logik-Schaltkreise (TTL) von Texas Instruments (TI) tauchte erstmals Mitte der 1960er Jahre auf. In den 1970er Jahren waren Leiterplatten (PCBs) mit diesen Geräten – und ähnlichen Familien anderer Anbieter – allgegenwärtig.

Jedes 74xx-Gerät enthielt typischerweise eine Handvoll Jellybean-Logikgatter oder -Funktionen. Beispielsweise enthielt der 7400 vier NAND-Gatter mit zwei Eingängen; Der 7474 enthielt zwei durch positive Flanken ausgelöste D-Typ-Flip-Flops, jedes mit seiner eigenen asynchronen Voreinstellung und Löschung. und der 74118 enthielt sechs SR-Latches.

Der Punkt ist, dass eine Leiterplatte Hunderte dieser 74xx-Geräte enthalten könnte und fast ausnahmslos ungenutzte Funktionen blieben – ein NAND-Gatter hier, ein SR-Latch dort, vielleicht sogar ein D-Typ-Flip-Flop, das nicht berücksichtigt wurde.

Hardware-Designingenieure betrachteten diese nicht festgeschriebenen Logikfunktionen als „faires Spiel“ für die Entprellung ihrer Schalter. Ein kleiner „Wermutstropfen“ ist sozusagen, dass es nicht ungewöhnlich war, dass jeder Schalter mit einer anderen Technik entprellt wurde, je nachdem, wer den Entwurf gemacht hatte und welche verbleibenden Logikgatter und Funktionen verfügbar waren .

Im Laufe der Zeit wurde die digitale Logik zunehmend in immer weniger Geräten konsolidiert, wodurch die Anzahl einfacher „Glue-Logic“-Funktionen, die nicht mehr zur Verfügung standen, reduziert wurde. Außerdem wurden die Speichergrößen der Mikroprozessoren größer, die Taktfrequenzen erhöht und immer mehr Menschen begannen, Software zu entwickeln.

Aus all diesen Gründen wurde es zunehmend üblich, die Schalterentprellung in der Software zu beheben. Das einzige klitzekleine Problem besteht hier darin, dass die Mehrheit der Softwareentwickler überhaupt nicht wusste, dass Schalter abprallten – zumindest so lange, bis ihre Systeme nicht funktionierten, wenn sie benötigt wurden, funktionierten, wenn sie nicht benötigt wurden, oder zeitweise funktionierten, woraufhin sie nachfragten Den Hardware-Ingenieuren wurde klar, was vor sich ging, und es begann eine steile Lernkurve.

Einige der von Softwareentwicklern erstellten Lösungen sind lächerlich simpel, während andere unglaublich kompliziert und komplex sind (was nicht bedeutet, dass sie so gut funktionieren, wie man es sich erhofft), aber wir werden gleich darauf zurückkommen. Lassen Sie uns zunächst über die Hardware-Seite der Dinge nachdenken und darüber nachdenken …

Traditionelle Hardware-Entprellung: RC Networks

Die einfachste Hardware-Entprelllösung basiert auf der Verwendung eines Widerstands-Kondensator-Netzwerks (RC). Die RC-Zeitkonstante des RC-Netzwerks, auch Tau (τ) genannt, wird in Sekunden gemessen und ist gleich dem Produkt aus Widerstand (in Ohm) und Kapazität (in Farad).

Laden und Entladen eines RC-Netzwerks (Bildquelle: Max Maxfield)

Wenn eine Gleichspannung an das RC-Netzwerk angelegt wird, ist der Kondensator nach 1 RC auf etwa 63 % seines Endwerts aufgeladen, und nach 5 RC ist der Kondensator auf etwa 99 % seines Endwerts aufgeladen. Wenn der Kondensator entladen wird, hat er nach 1 RC etwa 37 % seines Endwerts und nach 5 RC etwa 1 % seines Endwerts erreicht.

Wir können eine Variation dieser Schaltung verwenden, um die Schaltersprünge zu glätten, wie unten gezeigt. Wenn wir den Schalter schließen, ist es, als hätten wir ihn durch ein Stück leitenden Draht ersetzt, und der Kondensator entlädt sich über den Widerstand R2, sodass die RC-Zeitkonstante (R2 * C1) beträgt. Wenn wir den Schalter öffnen, ist es, als hätten wir ihn aus dem Stromkreis entfernt, und der Kondensator lädt sich über die Widerstände R1 und R2 auf, sodass die RC-Zeitkonstante ((R1 + R2) * C1) ist.

Verwendung eines RC-Netzwerks zum Entprellen eines Kippschalters (Bildquelle: Max Maxfield)

Beachten Sie, dass bei korrekter Auswahl der Widerstands- und Kondensatorwerte alle Rauschspitzen in unbedeutende Ausreißer geglättet werden. Der Schaltersprung überlagert den VC-Wert mit einer Welligkeit, die jedoch wiederum geglättet wird, wenn die Widerstands- und Kondensatorwerte richtig ausgewählt werden.

Wie wählt man diese Werte am besten aus? Nun, in diesem Fall werde ich den Wiesel-Ausweg wählen und mich auf den Teil „Mathe machen“ von Jack Ganssles Aufsatz beschränken (darf ich Sie an das alte Sprichwort erinnern: „Adler mögen zwar fliegen, aber Wiesel werden selten hineingezogen). Strahltriebwerke“).

Eines der Probleme bei der oben dargestellten Lösung besteht darin, dass die Ladezeit bei geöffnetem (deaktiviertem) Schalter länger ist als die Entladezeit bei geschlossenem (aktiviertem) Schalter. Für viele Anwendungen, bei denen die Aktivierung des Schalters als wichtiger Teil des Prozesses angesehen wird, stellt dies möglicherweise kein Problem dar. Wenn jedoch eine Verkürzung der Deaktivierungszeit erforderlich ist, kann dies durch Hinzufügen einer Diode erreicht werden, wie unten dargestellt.

Hinzufügen einer Diode zum RC-Netzwerk (Bildquelle: Max Maxfield)

Nehmen wir rein aus Diskussionsgründen an, dass unser +ve-Wert 5 V beträgt. Nehmen wir außerdem an, dass wir mit geöffnetem Schalter und auf 5 V geladenem Kondensator beginnen. Das heißt, wenn wir den Schalter schließen, liegt die Kathode (k) der Diode bei 5 V, während ihre Anode (a) bei 0 V liegt. Dies bedeutet, dass die Diode in Sperrichtung vorgespannt ist, was bedeutet, dass sie nicht leitet, was bedeutet, dass es so ist, als ob sie überhaupt nicht vorhanden wäre. Der Kondensator entlädt sich erneut über den Widerstand R2.

Wenn wir im Vergleich dazu den Schalter schließlich wieder öffnen (nachdem der Kondensator entladen wurde), liegt die Kathode der Diode auf 0 V des Kondensators und die Diode wird von der 5-V-Versorgung über R1 in Vorwärtsrichtung vorgespannt. Solange die Potentialdifferenz über dem Durchlassspannungsabfall der Diode bleibt, leitet die Diode und scheint ein Kurzschluss zu sein, als wäre sie durch ein Stück Draht ersetzt worden. Da wir R2 praktisch kurzgeschlossen haben, ist es, als ob dieser Widerstand aus dem Stromkreis entfernt worden wäre, sodass der Kondensator nur über den Widerstand R1 aufgeladen wird.

Im Falle einer kleinen Siliziumdiode, die mit ihrem Nennstrom betrieben wird, beträgt der Durchlassspannungsabfall etwa 0,6 bis 0,7 Volt (bei anderen Diodentypen ist der Wert anders; Schottky-Dioden können bis zu 0,2 V ausgelegt sein, während Germaniumdioden in der Norm sind). (Bereich 0,25 bis 0,3 V). Geht man also von einer kleinen Siliziumdiode mit einem Vorwärtsspannungsabfall von 0,7 V aus, kommt R2 nur dann ins Spiel, wenn der Kondensator kurz vor dem Ende seines Ladezyklus steht und seine Spannung 4,3 V erreicht, also lange nach dem Zeitpunkt, an dem wir den Schalter als geöffnet registriert haben.

Im Hinblick auf unsere RC-Entprellungslösung müssen wir noch über einen letzten Punkt nachdenken – die Tatsache, dass das VC-Signal langsame Anstiegs- und Abfallzeiten hat. Digitale Funktionen bevorzugen es, die an ihren Eingängen anliegenden Signale so zu sehen, dass sie unter einem bestimmten Wert liegen, der als logische 0 gilt, oder über einem bestimmten Wert, der als logische 1 angesehen wird. Diese Werte variieren je nach Technologie (z. B. TTL vs. CMOS). ) und der Versorgungsspannung (z. B. 5,0 V vs. 3,3 V). Bei Standard-TTL mit einer 5-V-Versorgung wird jedes Signal unter 0,8 V als logische 0 betrachtet, während jedes Signal über 2,0 V als logische 1 betrachtet wird.

Bei einem Mikrocontroller-basierten System variieren diese Werte auch je nach Mikrocontroller (MCU). Im Fall der Atmel (jetzt Microchip Technology) ATMega328 MCU, die beispielsweise im Arduino Uno verwendet wird, wird jeder an einem digitalen Eingang anliegende Wert, der unter 1,5 V oder über 3,0 V liegt, als logische 0 oder logisch betrachtet 1 bzw.

Der Sinn all dessen besteht darin, dass digitale Funktionen im Allgemeinen und Mikrocontroller im Besonderen es nicht mögen, wenn Eingangssignale im undefinierten Bereich zwischen einer „guten“ logischen 0 und einer „guten“ logischen 1 herumwandern. Das ist bedauerlich, weil der allmähliche Anstieg oder Abfall des vom RC-Netzwerk kommenden Signals (relativ gesehen) viel Zeit in dieser „verbotenen Zone“ verbringt.

Glücklicherweise erfand im Jahr 1934 ein junger Doktorand namens Otto Herbert Schmitt etwas, das wir heute als Schmitt-Trigger kennen (diese Erfindung war das Ergebnis von Ottos Studie über die Ausbreitung neuronaler Impulse in den Nerven von Tintenfischen). Am besten lässt sich dies anhand einer Abbildung wie unten dargestellt beschreiben.

Standardpuffer vs. Schmitt-Trigger-Puffer (Bildquelle: Max Maxfield)

Ein Standardpuffer hat nur einen einzigen Schaltschwellenwert, was bedeutet, dass ein verrauschtes Signal – einschließlich eines Signals mit etwas Welligkeit – zu mehreren Übergängen am Ausgang führen kann. Im Vergleich dazu hat ein Schmitt-Trigger-Puffer – also ein Puffer mit einem Schmitt-Trigger-Eingang – zwei Schwellenwerte. Die Ausgabe ändert sich nur, wenn die Eingabe den oberen oder unteren Schwellenwert überschreitet. Diese doppelte Schwellenwertwirkung wird als Hysterese (die Abhängigkeit des Zustands eines Systems von seiner Geschichte) bezeichnet, was bedeutet, dass der Auslöser über ein Gedächtnis verfügt.

Im Fall des RC-Netzwerks, das wir als einfache SPST-Schalter-Entprellschaltung verwenden, würden wir einen Schmitt-Trigger-Puffer zwischen dem RC-Netzwerk und dem Mikrocontroller hinzufügen, wie unten dargestellt.

Hinzufügen eines Schmitt-Trigger-Puffers zum RC-Netzwerk (Bildquelle: Max Maxfield)

Als letzten Punkt sollten wir vielleicht anmerken, dass der Grund, warum wir einen nicht invertierenden Schmitt-Trigger-Puffer gezeigt haben, darin besteht, die Dinge einfach zu halten (dh alle Signale gehen in die gleiche allgemeine Richtung auf und ab). In der Realität wäre es üblicher, einen invertierenden Schmitt-Trigger-Puffer zu verwenden, da invertierende Funktionen schneller sind als ihre nicht invertierenden Gegenstücke.

Wenn wir einen invertierenden Puffer verwenden würden, müssten wir die Dinge in der Software „vertauschen“. Das heißt, anstatt eine logische 0 als Darstellung des Schließens des Schalters zu betrachten, würden wir jetzt eine logische 1 als Anzeige dieses Schalterzustands betrachten und umgekehrt.

Nennen Sie mich pedantisch, wenn Sie so wollen

Ich fürchte, ich bin mit meiner Beschreibung der RC-Entprellschaltung etwas übertrieben, nicht zuletzt, weil uns so viele andere Hardware-Entprelltechniken zur Verfügung stehen. Der Zweck dieser Kolumnen besteht jedoch darin, die kniffligen Fragen aller zu beantworten. Als Teil davon möchte ich die Hardware-Seite der Dinge so erklären, dass Software-Leute verstehen können, was vor sich geht, und – wenn wir irgendwann zu Softwarelösungen kommen, diese so erklären, dass Leute auf der Hardware-Seite diese verstehen Der Zaungast kann verstehen, worüber wir reden.

Ich erinnere mich auch daran, wie es war, als ich anfing. Die Leute warfen ohne Erklärung Dinge in die Konversation (oder schriftliche Beschreibungen) und verstreuten Begriffe wie „Sperrvorspannung“, „Vorwärtsspannungsabfall“ und „Schmitt-Trigger“ wie Konfetti, vorausgesetzt, ich hatte eine Ahnung, worüber sie sprachen. Leider war dies oft eine ungerechtfertigte Annahme.

Was denken Sie? Gefällt Ihnen die Art und Weise, wie ich die Dinge darlege, oder möchten Sie, dass ich das Tempo beschleunige?