Tasten entprellen, eine kleine Einführung

Einleitung

Durch Schwingungen neigen mechanische Kontakte dazu sich nach dem Schliessen des Kontaktes noch ein- bis mehrmals zu öffnen und wieder zu schliessen. Dieser Vorgang wird Prellen (von Abprallen) genannt und dauert typischerweise nur wenige Mikro- bis Millisekunden; meist liegt die Zeit unter 3 ms. Die hierbei auftretenden sehr kurzen Pulse, die das hauptsächliche Problem sind, werden als Glitches bezeichnet.
Um diese Störungen zu beseitigen, gibt es verschiedene Strategien, die entweder in Hardware oder Software realisiert sind. Wegen dem geringeren Aufwand und den geringeren Kosten liegt im Folgenden der Schwerpunkt bei den Software-basierten Entprell-Methoden, weil diese in der Praxis am häufigsten sind. Der Grund hierfür ist, dass von den Herstellern generell alles eingespart wird, was möglich ist.
Diese Methoden sind auch ohne mechanischen Schalter nicht unwichtig, da es Schwingungen beim Umschalten nicht nur mechanisch sondern auch elektrisch gibt.

Entprellen mit Hardware


Bei den meisten Mikrokontrollern, beispielsweise dem MSP430, reicht etwas Software zum Entprellen meist völlig aus, so dass man den Aufwand zum Entprellen mit Hardware meistens einsparen kann. In einer störreichen Umgebung und bei einigen Mikrocontrollern wie beispielsweise dem S3C2410 (ARM9-Kern) ist dieser Aufwand aber manchmal doch nötig.

Entprellen durch Integration

Da die Preller nur kurzzeitig auftreten, kann man sie mit einem Tiefpass (=Integration) herausfiltern. Reicht die Flanken-Steilheit hinter dem Tiefpass nicht, wird ein Schmitt-Trigger hinter den Tiefpass geschaltet:

Entprellen durch Integration
Hierbei ist noch ein Entlade-Widerstand R0 eingezeichnet, da der Entladungs-Puls sonst induktiv Störungen verursachen kann. Es reicht aus R0 = R/10 einzusetzen.
Ein Beispiel ist ein Tiefpass mit C = 100 nF und R = 33 kOhm. Als Schmitt-Trigger kann z. B. ein 74HCT14 verwendet werden.

Hierdurch braucht die Software nur den aktuellen Schalter-Zustand (nach Filterung +ggf. Schmitt-Trigger) abzufragen, so dass der Software-Aufwand hierbei Null ist. Der Nachteil ist der Hardware-Aufwand und der Strom-Verbrauch für den Schmitt-Trigger. Alternativ kann man auch die Flanken interrupt-gesteuert verarbeiten und das regelmässige Abfragen des Schalter-Zustands sparen, aber hierfür muss zumindest beim Initialisieren der Schalter-Zustand ermittelt werden.

Entprellen mit Flip-Flop

Beim Entprellen mit Flip-Flop werden die Ausgänge eines an Masse angeschlossenen Umschalters/Tasters an die beiden Eingänge eines RS-Flip-Flops (kurz RS-FF) angeschlossen:

Entprellen mit Flip-Flop
Hierbei sind die FF-Eingänge mit Pullup-Widerständen an die Versorgungsspannung angeschlossen. Das Prinzip hierbei ist, dass der FF-Ausgang nur dann umschaltet, wenn sich beide Eingänge geändert haben, also der Umschalter sowohl den einen Eingang freigegeben hat als auch den anderen auf Masse geschaltet hat.
Dabei ist der Nachteil, dass ein Umschalter aufwendiger ist als ein Ein/Aus-Schalter/Taster und dass ein Flip-Flop etwas aufwendiger ist als ein Schmitt-Trigger. Dafür ist diese Schaltung ohne Verzögerung, da der verzögernde Tiefpass entfällt.
Neben der Geschwindigkeit gibt es auch andere Aspekte wie die Stromaufnahme. Wenn man einen Taster verwendet, wird bei der zuletzt genannten Schaltung ständig Strom durch einen Pullup-Widerstand verbraucht, was bei Low-Power-Schaltungen nachteilig ist. Dem gegenüber ist die vorherige Schaltung mit einem Taster, der nur beim Betätigen Strom durch den Pullup-Widerstand zieht, günstiger. Allerdings kann man den Stromverbrauch durch hohe Pullup-Widerstände (10 MOhm) stark reduzieren.

Entprellen durch Auswerten der Flanken von einem Umschalter

Das oben beschriebene Entprellen mit Flip-Flop kann man natürlich auch mit Software und zwei interruptfähigen Eingängen in Software nachbilden, die negativ flanken-getriggert sind, also nur auf fallende Flanken reagieren. Der Grund ist, dass es beim Umschalter das Prellen nur an dem Ausgang gibt, an dem sich der Umschalt-Kontakt gerade befindet. Folglich reicht es immer aus, nur auf die fallenden Flanken zu reagieren und nach dem Eintreffen einer solchen Flanke der betreffenden Ader "low" zuzuordnen.
Dieses Verfahren ist ebenfalls verzögerungsfrei, aber um den Preis, dass statt einem einfachen Schalter/Taster ein Umschalter benötigt wird und zudem zwei interruptfähige Eingänge benötigt werden. Dieses Verfahren verwendet kein Entprellen per Software, da die Software keine Glitches heraus filtert.

Preller-Tolerantes Design

Beim Entprellen ist machmal auch das Design wichtig. Ein Beispiel hierfür ist ein Winkelgeber, der den aktuellen Winkel binär codiert parallel ausgibt: Wenn durch einfache binäre Codierung alle N Bits gleichzeitig kippen können, muss der Ausgabe-Wert mittels Polling (oder anderer Entprellung) und zusätzlichem Abwarten aller Zustandswechsel, also dem Stabilisieren der N Signale, ermittelt werden. Hierfür ist es nötig, a) jeden der N Eingänge zu entprellen und b) nach jeder Änderung an einer Ader das Stabilisieren ALLER N Signale abzuwarten. Ansonsten würden auch völlig falsche Zwischen-Zustände eingelesen werden, beispielsweise beim Wechsel von 0xff..f auf 0x00..0.
Verwendet man stattdessen eine Gray-Codierung, so kann zu jedem Zeitpunkt maximal ein Bit kippen und auf daher meist auf Entprellen verzichtet werden. Durch den Gray-Code erstpart man sich aber in jedem Fall das zusätzliche Abwarten aller Zustandswechsel, also Teil b) und kann schon hierdurch höhere Auslese-Frequenzen erreichen.

Ein anderer Design-Punkt ist das Abschirmen, also Verhindern des Einkoppelns von Störungen in die Signal-Adern und das Übersprechen, die hier aber nicht weiter erläutert werden, da sie über das Entprellen weit hinaus gehen.

Entprellen mit Software

Der Zweck des Entprellens mit Software ist meist das Einsparen der Hardware zum Entprellen. Deshalb ist dies die am häufigsten verwendete Methode zur Entprellung. Hierbei wird üblicherweise an den betreffenden Eingang ein Pullup-Widerstand von einigen Kiloohm angeschlossen und der Schalter zwischen Eingang und Masse (= 0 V) angeschlossen.
Dabei teilt man die verwendeten Methoden ein in das (regelmässigen) Einlesen des Schalter-Zustandes (Polling) und dem asynchronen Interrupt-gesteuerten Einlesen.
Weil für das Herausfiltern der Glitches etwas Zeit benötigt wird, gibt es hiebei immer eine Verzögerung.

Entprellen durch zweite Abfrage des Schalters

Eine einfache Entprellung per Software fragt kurz nach dem Ende der Prell-Zeit ab, welcher Zustand vorhanden ist und setzt diesen als den aktuellen Schalter-Zustand. Die Strategie ist hierbei also, das Signal nach der ersten Flanke nochmal einzulesen, wenn es sich beruhigt hat. Hierfür muss zunächst die erste Flanke per Interrupt registriert werden, etwas länger als die Prell-Zeit gewartet werden und dann ein zweites mal eingelesen werden. Hierfür wird meist ein Timer verwendet.

Entprellen durch Polling

Nur wenig aufweniger ist es den Schalter regelmässig, beispielsweise alle 100 Mikrosekunden abzufragen, also zu pollen. Das Prinzip hierbei ist, dass nur mehrfach eingelesene Zustandsänderungen übernommen werden, also kurzzeitige Zustandswechsel nicht übernommen und damit ausgefiltert werden. Diese Methode ist dadurch zuverlässiger als nur eine zweite Abfrage und wird auch von den meisten Tastatur-Controllern verwendet.
Als aktueller Zustand wird dann beispielsweise derjenige genommen, der zuletzt mindestens N mal in Folge (d. h. ohne Unterbrechung) vorhanden war. Der Nachteil dieses einfachen Algorithmus ist, dass er relativ langsam ist, da er erst N Takte nach der letzten Zustandsänderung umschaltet.
Zur Beschleunigung kann man auch andere Algorithmen verwenden und beispielsweise einen Tiefpass mit nachfolgenden Schmitt-Trigger nachbilden.
Ein anderer schneller Algorithmus ist das gesättigte Zählen von +1 bei "aktuell geschlossen" und -1 bei "aktuell geöffnet". Hierbei wird der Zähler nur bis maximal zum oberen Limit N inkrementiert und maximal bis zum unteren Limit -N dekrementiert. Ein Zählerwert von > 1 bedeutet dann "geschlossen" und einer von <= 0 bedeutet "offen".

Entprellen durch Auswerten aller Flanken beim Drehgeber

Beim gewöhnlichen zweiadrigen Drehgeber, machmal auch Drehimpulsgeber oder Inkrementalgeber genannt, hat man beim Wechsel von einer Raster-Position in die nächste zwei Flanken. Ein Beispiel hierfür ist der Drehgeber mit der Best.-Nr. 705514 bei www.conrad.de. Tritt Prellen auf, so hat man mehr Flanken, und das zeigt sich dadurch, dass die Software statt dem aktuellen Wechsel der Raster-Position häufig a) keine Änderung, b) eine zu grosse Änderung oder c) eine Änderung in die falsche Richtung registriert. Die einfache Auswertung des Drehgeber-Signals, die nur eine Sorte Flanken (steigend oder fallend) auswertet, indem nur der Zustand der Signal-Ader abgefragt wird, von der die Flanke nicht kam, ist hierfür besonders anfällig. Deutliche Abhilfe bringt hier das Auswerten mit beiden Flanken und registrieren der aktuelle Änderung (=halber Raster-Schritt). Im Vergleich zu der einfachen Auswertung, bei der nur eine Sorte von Flanken ausgewertet wird, ergibt sich hierdurch eine doppelt genaue Auswertung, die die meisten Preller herausfiltert. Der Nachteil hierbei ist natürlich, dass statt einer Flanken-Sorte beide ausgewertet werden müssen. Dafür hat man beim Auswerten aller Flanken halbe Schritte, also doppelte Auflösung.

Dasselbe kann man mit Polling besser erreichen, also nur über Interrupts, weil von sehr kurzzeitigen Glitches nicht alle Flanken registriert werden können.

Links

Entprellen mit Hardware:
http://www.eng.uwaterloo.ca/~tnaqvi/downloads/DOC/sd192/SwitchDebouncing.htm

Prellen mit dem Oszilloskop sichbar gemacht und Entprellen mit Software:
http://www.eng.uwaterloo.ca/~tnaqvi/downloads/DOC/sd192/SwitchDebouncing.htm

Theorie +Implementierung der Gray-Codierung:
Buch Numerical Recipes in C, Kapitel 20.2.
In den anderen Bücher der Numerical Recipes-Serie sollte es ebenfalls in Kapitel 20.2 stehen.

Selbstbauanleitung für einen Winkelgeber mit 8 Bit/Vollkreis und Gray-Codierung:
http://www.eng.uwaterloo.ca/~tnaqvi/downloads/DOC/sd192/SwitchDebouncing.htm

Schluss

Als Fazit ergibt sich, dass die Entprellung per Hardware prinzipiell am zuverlässigsten und schnellsten ist, da die Software immer einige Zeit zum Auswerten und Ausfiltern von Glitches benötigt. Zudem kann mit Hardware verzögerungsfrei entprellt werden.
Von den Software-Entprell-Methoden ist das Polling am zuverlässigsten. Daher sollte man generell Polling verwenden.
Das Entprellen mit Software ist zwar am billigsten, aber um den Preis einer Verzögerung, die für die Auswertung benötigt wird.
In der Praxis hat die Verzögerung von wenigen Millisekunden aber praktisch keine Bedeutung aussser vielleicht für das Marketing von Gaming-Zubehör oder vielleicht militärischem Zubehör, wenn es auf jede Millisekunde ankommt, und man schneller sein muss als der Gegner.

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1104569