Entprellen von Schaltflächen


32

Ich habe kürzlich einen Artikel über das Entprellen von Schaltflächen gelesen und mich gefragt, ob ich dies berücksichtigen sollte, wenn ich zum Beispiel mit einem Arduino (ATMega mC) arbeite. Ich gehe davon aus, dass dies ein Problem ist, insbesondere bei der Arbeit mit Interrupts.

Ist es also besser, einen Sprung im Code zu erkennen, oder sollte dies mit Hardware behoben werden? Bitte erläutern Sie.


Antworten:


17

Ich würde wärmstens empfehlen, ein Oszilloskop (hoffentlich haben Sie eines oder können eines in die Hände bekommen) an Ihren Schalter anzuschließen. Ich habe ein Studentenprojekt gesehen, dessen Schalter einen Sprung von 5 V auf -5 V auf 4 V auf -3 V und dann auf 2 V und dann wieder auf 0 V aufwies. Als wir uns die aktuelle Auslosung eines Zielfernrohrs anschauten, gab es einige sehr, sehr große Spitzen.

In seinem speziellen Fall war es sehr, sehr wichtig, dass er seinen Schalter in Hardware entlarvte.

Auf der anderen Seite habe ich jedoch Schalter gesehen, die einen viel geringeren Effekt haben, der einfach in der Software entfernt werden könnte.

Sie müssen jedoch Ihre Optionen abwägen. Wenn Sie eine sehr komplexe Menge an Firmware haben, lohnt es sich möglicherweise nicht, den Overhead sowohl für Sie als Programmierer als auch für die CPU-Auslastung zu erhöhen, und Sie sollten nur ein wenig Hardware hinzufügen. Wenn Sie jedoch versuchen, Kosten und Größe zu senken, sollten Sie so viel Hardware wie möglich entfernen und alles in der Firmware tun, wenn Sie können.


Ich habe ein Bild von switch bounce erstellt und es auf Wikipedia gepostet: en.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O

@Thomas O das ist ein ziemlich lustiges Bild von Bounce. Ich möchte nur sicherstellen, dass @Vincent Van Den Berghe versteht, dass nicht alle Bounce so aussehen. Dieser Sprung ist auf 0-5 V begrenzt, es wird nicht immer so aussehen.
Kellenjb

2
@Thomas O, als Randnotiz haben wir eine Praxis geschaffen, bei der Schüler, die Oscope-Bilder wie diese aufnehmen, versagen. Flash auf einem Bildschirm ist schrecklich. Wir gehen noch einen Schritt weiter und fordern die Schüler auf, tatsächliche Datenpunkte mithilfe einer CSV- oder LabView-Datei zu erfassen, damit sie problemlos in Berichten und Datenanalysen verwendet werden können.
Kellenjb

@Kellenjb, ich bekomme bald einen Drucker für mein Oszilloskop, der HP-IB unterstützt. Außerdem habe ich festgestellt, dass der "Sport" -Modus meiner Kamera gute Bilder auf dem Oszilloskop-Bildschirm ohne Blitz und ohne Unschärfe aufnehmen kann.
Thomas O

1
@Lundin In einer Echtzeitumgebung sind Sie häufig auf Interrupts angewiesen. Wenn Sie auf einen Interrupt einen Tastendruck ausführen, möchten Sie nicht, dass Ihr Echtzeitsystem mehrmals durch einen einzigen Tastendruck unterbrochen wird. Sie möchten auch keine Ressourcen für das Warten auf 10 ms reservieren müssen.
Kellenjb

15

Wenn Sie ein professioneller Elektronikdesigner sind, besteht die Möglichkeit, dass Ihr Chef Sie nicht einmal in Hardware arbeiten lässt. Der Grund ist einfach: Wenn Ihre Produktionscharge groß genug ist , ist die Software praktisch kostenlos , während die Hardware für jede produzierte Einheit bezahlt werden muss. Und während Widerstände und Kondensatoren spottbillig sind, kann die Montage auf einer Leiterplatte das 20-fache ihres Kaufpreises kosten.

Unabhängig davon, ob Sie in Software oder in Hardware debounten, müssen Sie dennoch hochwertige Drucktasten auswählen. Der berüchtigte 157ms-Knopf aus dem Artikel ist einfach nicht für irgendeine Anwendung geeignet.
Normalerweise probiere ich die Taste in Intervallen von 32 ms aus , was ausreicht, um die Entprellzeit einer guten Taste zu überbrücken. Ich bin ein ziemlicher Fan der Alps SKQG TACT Switches.

Alps Tastschalter

Bei den wenigen Geräten, die ich getestet habe, betrug die anfängliche Bounce-Zeit weniger als 10 ns. Während es eine Lebensdauer von 100 000 Zyklen hat testeten wir es für 200 000 Zyklen und selbst dann war die 32ms debounce ausreichend. (Ich denke, ich hätte den tatsächlichen Grad der Entprellung messen sollen, aber unser Hauptinteresse war zu diesem Zeitpunkt das Verhalten des Endprodukts. Wir haben es jedenfalls außerhalb der Spezifikation verwendet.)

Wenn Sie wirklich eine Hardwarelösung wünschen, empfehle ich die im Artikel erwähnte SR-Flip-Flop-Lösung als technisch beste Lösung:

Entprellungsschaltung

Das Flip-Flop kann mit einem Doppel-NAND-Gatter aufgebaut sein , das beispielsweise in einem kleinen VSSOP8-Paket erhältlich ist. Der Hauptnachteil dieser Lösung besteht darin, dass Sie einen SPDT-Druckknopf benötigen, bei dem SPST viel häufiger verfügbar ist.


12

Es gibt viele (und viele) verschiedene Möglichkeiten, Schaltflächen zu entprellen. Ob Sie dies in Software oder Hardware tun, hängt von Ihren Projektanforderungen und dem Switch-Typ ab.

Hier einige Links zu verschiedenen Methoden:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/


Ich wollte einen Link zu Ganssle bekommen, als ich die Frage sah.
Kortuk

Der Ganssle-Artikel war der Grund, warum ich diese Frage gestellt habe. Sie ist in meiner Frage verlinkt :) Vielen Dank für den Link zu den Debounce-Code-Snippets.
Vincent Van Den Berghe

Würde es Ihnen etwas ausmachen, einige Anwendungsfälle zusammenzufassen, um zu veranschaulichen, wann Soft- / Hardware verwendet werden muss? (Dies ist wahrscheinlich subjektiv, aber ich möchte trotzdem einige Beispiele)
Vincent Van Den Berghe

1
@ Vincent, Kellenjb fasste es auf seine Antwort, wie man sich entscheidet. Ich habe nicht auf Ihren Link geklickt, weil er einen lustigen Namen hatte. Jetzt, wo ich darauf geklickt habe, sehe ich Ganssle!
Kortuk,

Wenn dies der Konsens / die allgemeine Regel ist, sind in der Tat keine weiteren Beispiele erforderlich.
Vincent Van Den Berghe

6

Dieser Artikel ist die "Bibel" beim Entprellen. Kontaktsprung kann bei jeder Anwendung ein Problem sein.

Im Allgemeinen ist es am besten, Schalter in der Software zu entprellen, da sich die Verzögerungen für bestimmte Schalter leichter anpassen lassen, da sie sich in der Größe der Kontaktprellen unterscheiden. Auch das Entprellen der Schlüsselfreigabe ist häufig erforderlich. Die Hersteller von Switches geben häufig den Bounce-Wert für ihre Produkte an. Dieser liegt in der Regel bei 10 ms bis 20 ms.


Warum stimmen die Leute das ab?
Toby Jaffey

Guter Punkt zum Debouncen von Schlüsselversionen!
Vincent Van Den Berghe

1
Ich habe es nicht abgelehnt, aber es ist eine schreckliche Idee, es nur in Software zu tun. Es ist eine gute Idee zu charakterisieren.
Kortuk

Ich sagte "allgemein", was der Fall ist, und gab den Grund an. Außerdem werden die Stücklistenkosten minimiert und die Zuverlässigkeit erhöht.
Leon Heller

Dies erhöht die Zuverlässigkeit nur, wenn sich das Signal innerhalb der sicheren Grenzen Ihrer Steuerung befindet. Diese Aktion erhöht die Zuverlässigkeit, wenn Sie die Anzahl der Komponenten verringern, ohne den Verschleiß der Komponenten zu erhöhen. Ich habe nicht gesagt, dass ich mit Ihrem Beitragskonzept nicht einverstanden bin, aber ich arbeite ständig mit Ingenieuren zusammen, die nur vor Ort sind und eine Antwort wie diese haben, und sie werden alles in der Software entlarven. Sie müssen immer charakterisieren. Ich habe Sie auch nicht herabgestimmt, aber ich habe auch nicht heraufgestimmt. Ich denke, eine breite Antwort wie Software birgt das Risiko, dass neuere Entwickler ihre Hardware riskieren.
Kortuk 18.11.10

1

Switch Bounce kann einige zehn Millisekunden dauern. Wenn Sie einen Switch von einer Interruptroutine abfragen, die auf einem Timer ausgeführt wird, ist das Bounce kein Problem, denn selbst wenn Sie den Switch mitten in einem Bounce-Sturm abfragen, erhalten Sie entweder sofort den neuen Status , oder im schlimmsten Fall erhalten Sie den alten Zustand und sehen Sie den neuen Zustand erst bei der nächsten timergestützten Abfrage. Das Abrufen von einem solchen zeitgesteuerten ISR stellt eine Form der Software-Entprellung dar.

Wenn Sie diesen Schalter jedoch verwenden, um den Interrupt auszulösen, und Sie erwarten, dass die Interrupt-Serviceroutine in weniger als 10 Millisekunden schnell ausgeführt wird, müssen Sie die Hardware entprellen. Andernfalls kann ein Switch-Ereignis zu einer zufälligen Anzahl von führen unterbricht, und sicherlich oft mehr als man erwartet. Wenn die Interruptroutine jedoch lange genug ausgeführt wird, hat sich der Switch Bounce eingestellt, bevor die ISR beendet ist, und es würde Ihnen nichts ausmachen, aber die meisten gut konstruierten ISRs dauern nicht allzu lange.


Es ist eine gute Idee, den Schalter zu haben, um den Interrupt auszulösen. Lassen Sie jedoch keine weiteren Interrupts zu, sondern schalten Sie sie aus und starten Sie stattdessen einen Timer für die angegebene Entprellzeit.
Lundin

@Lundin - Wenn Timer verfügbar sind, können Sie den Timer einfach zum Implementieren des Polling-Ansatzes verwenden, ohne dass der Switch Interrupts generiert.
JustJeff

0

Der beste Weg, etwas zu tun, ist der Weg, der am besten zu Ihnen passt. Wenn Sie jedoch bereits über einen Mikrocontroller verfügen, können Sie die Software nur mit einem gewissen Codeaufwand entpacken.

Der einfachste Weg, in der Software zu debounten, besteht darin, die Schaltflächen zu Zeitpunkten zu überprüfen, die weiter voneinander entfernt sind als die längste Bounce-Zeit. 50 ms scheinen eine Obergrenze für die Bounce-Zeit von "normalen" Switches zu sein. Wenn Sie also Ihre Software wie folgt anordnen können, sind Sie im klaren:

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop

Verwenden Sie dazu die On-Chip-Timer Ihrer MCU.
Lundin

Das ist natürlich möglich, aber Sie können viele Programme ohne schreiben.
Wouter van Ooijen

3
Professionelle Software für Qualitätsprodukte verwendet immer On-Chip-Timer. Hobbyisten können mit etwas "NOP" für Loop oder Dead Wait Polling davonkommen. Es gibt jedoch keinen Grund, dies in realen Produkten zu tun, unabhängig von Ihren Echtzeitanforderungen. "Ich weiß nicht, wie der Timer funktioniert, und es dauert 10 Sekunden, bis ich faul bin", ist kein gültiges Argument für einen Ingenieur.
Lundin

Ochsen. Profis müssen effektiv sein, was (je nach Projekt) unter anderem bedeuten kann, „die Hardware so effektiv wie möglich zu nutzen“ oder „die Zeit des Profis so effektiv wie möglich zu nutzen“. Daher trifft Ihr Kommen in einigen Fällen (wahrscheinlich in allen Fällen, mit denen Sie sich befasst haben) sicherlich nicht in allen Fällen zu.
Wouter van Ooijen

Die Implementierung des On-Chip-Timers dauert höchstens eine Stunde. Das ist kaum etwas Komplexes, es ist alltägliche Brot & Butter-Technik. Sie können nicht einmal eine Stunde in Ihr Projekt investieren, um eine wesentlich bessere Lösung und insgesamt eine bessere Qualität zu erzielen? Ja, wenn Sie nicht viel über Programmierung wissen, kann es eine Woche dauern. Aber dann sollten Sie vielleicht gar nicht erst mit Software arbeiten ... oder Sie sollten mehr damit arbeiten, damit Sie lernen, diese einfache Kleinigkeit in kürzester Zeit zu implementieren.
Lundin

0

Ein Ansatz zum Entprellen, der noch nicht erwähnt wurde, ist die Verwendung eines Umschalters mit zwei Schaltern, von denen einer mit VDD und der andere mit Masse verbunden ist. Führen Sie das in einen Stift ein, der (entweder über Software oder Hardware) schwach in seinen gegenwärtigen Zustand gezogen wird. Ein solcher Ansatz bietet die Vorteile eines Double-Throw-Schalters, erfordert jedoch nur einen E / A-Pin anstelle von zwei.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.