Hoe hardware-debounce voor schakelaars en relais te implementeren wanneer software-debounce niet geschikt is

Door Clive "Max" Maxfield

Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey

In de context van de elektrische en elektronische techniek is een schakelaar een onderdeel dat een elektrische stroomkring kan "maken" of "verbreken", waarbij een elektrische stroom wordt onderbroken of van de ene geleider naar de andere wordt afgeleid. Zoals ingenieurs kunnen bevestigen, zijn er veel verschillende soorten schakelaars, waaronder tuimelschakelaars, tuimelschakelaars, drukknopschakelaars, microschakelaars en eindschakelaars, magneetschakelaars, reedschakelaars en relais. Ze hebben allemaal één ding gemeen: ze stuiteren. Het is gewoon wat ze doen.

Gewoonlijk heeft deze bounce weinig of geen effect op de schakeling, maar als de digitale schakeling snel genoeg is om meerdere bounces te detecteren en erop te reageren, kunnen er ernstige gevolgen zijn. Het is de taak van de ingenieur om de effecten van deze bounce te vermijden of te verzachten, of de schakelaar te "debouncen". Hoewel de industrie reeds lang gebruik maakt van hardware debounce, is zij recentelijk overgeschakeld op software-gebaseerde debounce benaderingen. Er zijn echter situaties waarin hardware debounce een betere optie is.

Dit artikel geeft uitleg over bounce en bespreekt software- en hardwarebenaderingen voor debounce. Vervolgens wordt gewezen op gevallen waarin hardware-debounce een betere optie is, alvorens te laten zien hoe dit kan worden geïmplementeerd. Voorbeeldschakelapparatuur en hardware debounce-componenten worden geïntroduceerd aan de hand van voorbeelden van NKK Switches, ON Semiconductor, Texas Instruments, Maxim Integrated, en LogiSwitch.

Wat is switch bounce?

Wanneer een schakelaar of relais wordt omgedraaid of omgeschakeld, kan wat een mens waarneemt als een onmiddellijke reactie telkens wanneer het toestel van toestand verandert, in feite 100 of meer make-or-breakacties inhouden die verschillende duizendsten van een seconde duren voordat het contact uiteindelijk op zijn plaats valt.

Neem bijvoorbeeld een SPST (single pole, single throw) normally open (NO) paneelmontageschakelaar zoals een M2011SS1W01 van NKK. Stel dat de ene kant van deze schakelaar, die als ingang kan worden beschouwd, verbonden is met massa (0 volt), terwijl de andere kant, die in dit geval de uitgang is, via een pull-up-weerstand (R1) verbonden is met een voeding van 5 volt (weergegeven als +ve) (figuur 1).

Schema van SPST-NO tuimelschakelaar die stuitert (klik om te vergroten)Afbeelding 1: In het geval van een SPST-NO tuimelschakelaar kan zowel bij het activeren als bij het deactiveren van de schakelaar bouncing optreden. (Bron afbeelding: Maxfield))

Merk op dat de schakelaar kan terugspringen zowel wanneer hij geactiveerd (gesloten) als gedeactiveerd (geopend) is. Soms kunnen de stoten helemaal overgaan tussen de voedingssporen, hier beschouwd als logische 0 en 1 toestanden. In dit geval, zijn dit "schone" bounces. Ter vergelijking: als het signaal slechts een tussenliggende spanning bereikt, worden dit "vuile" stoten genoemd.

In het geval van een SPDT-paneelinbouwschakelaar (single pole, double throw), zoals NKK's M2012SS1W01-BC, kan stuiteren optreden op zowel de normaal open (NO) als de normaal gesloten (NC) aansluitklemmen (figuur 2). In dit geval zijn omwille van de eenvoud alleen "schone" stuiters weergegeven.

Schema van SPDT-tuimelschakelaar met bouncing (klik om te vergroten)Figuur 2: In het geval van een SPDT-tuimelschakelaar kan zowel op de NO- als op de NC-klem een bouncing optreden wanneer de schakelaar wordt geactiveerd en gedeactiveerd. (Bron afbeelding: Maxfield))

In veel gevallen is de duur van deze signaalstuit zo lang dat het geen effect heeft. Problemen ontstaan wanneer een schakelaar is verbonden met een elektronisch apparaat dat snel genoeg is om meerdere stoten te detecteren en erop te reageren. Wat nodig is, is een manier om het signaal dat van de schakelaar komt te debounden voordat het door de elektronische apparatuur wordt beïnvloed.

Software versus hardware debounce

In de jaren 1960 en 1970 werd switch debounce geïmplementeerd met behulp van een verscheidenheid van hardwaretechnieken, van eenvoudige weerstand-capaciteit (RC) vertragingscircuits gebruikt met SPST-schakelaars tot meer geavanceerde set/reset (SR) vergrendelingsfuncties.

Meer recentelijk, en omdat veel systemen zijn uitgerust met een microprocessor (MPU) of microcontroller (MCU), is het gebruikelijk geworden om softwaretechnieken te gebruiken om het signaal dat van een schakelaar komt te debouncen. Software debounce is echter niet altijd de beste aanpak. Er zijn toepassingen waarbij kleine, weinig performante processoren met een beperkt geheugen betrokken zijn, met een beperkte beschikbare code-ruimte en/of klokcycli om debounce-routines te implementeren. In deze gevallen kan een hardware-implementatie een betere oplossing zijn.

Ook zijn veel softwareontwikkelaars niet bekend met de fysische kenmerken van schakelaars, zoals het feit dat de stuiterkarakteristieken van een schakelaar niet alleen per activering kunnen verschillen, maar ook kunnen worden beïnvloed door omgevingsfactoren zoals temperatuur en vochtigheid.

Het probleem van het gebrek aan deskundigheid van softwareontwikkelaars op het gebied van wissels wordt nog verergerd door het feit dat de beschikbare literatuur over het stuiteren van wissels vaak verwarrend en tegenstrijdig is. Het is bijvoorbeeld gebruikelijk te lezen dat een schakelaar 1 milliseconde (ms) na de activering of deactivering is gestopt met stuiteren. De bekende expert op het gebied van ingebedde systemen Jack Ganssle heeft echter empirische tests uitgevoerd op verschillende soorten schakelaars, waarbij hij elke schakelaar 300 keer heeft geactiveerd en de minimale en maximale hoeveelheid stuiterbewegingen voor zowel het openen als het sluiten van de contacten heeft genoteerd. Hij meldde een gemiddelde stuitduur van 1,6 ms en een maximale stuitduur van 6,2 ms. Sommige industriële en militaire "beste praktijken" bevelen aan 20 ms na de eerste activering te wachten alvorens aan te nemen dat de schakelaar is gestopt met stuiteren; anderen bevelen aan 20 ms na de laatste gedetecteerde stuiter te wachten alvorens enige actie te ondernemen.

Bovendien zijn er veel eenvoudige, niet-processor-gebaseerde systemen waarvoor ook schakelaars moeten worden gedebounced. Enkele voorbeelden van dergelijke systemen zijn een binaire teller die zeven-segment displays aanstuurt en pulsen van een relais telt; de trigger-ingang van een 555 one-shot timer die wordt gebruikt als motorbesturing voor een deur of poort; en een register-gebaseerde eindige-toestandsmachine (FSM) die gebruik maakt van gesleutelde ingangen. Er zijn ook elektronische trimpotentiometers (potmeters) waarvan de waarden worden gewijzigd met behulp van schakelingangen (omhoog, omlaag, en soms opslaan) waarbij het stuiteren van schakelaars problematisch zou zijn.

Al deze voorbeelden maken duidelijk dat enige kennis van het uitvoeren van hardware debounce nuttig kan zijn voor elke ontwerper of ontwikkelaar.

Hardware debouncing van een SPST schakelaar met een RC netwerk

Een van de eenvoudigste hardware-gebaseerde switch debounce oplossingen maakt gebruik van een weerstand-capaciteit (RC) netwerk in combinatie met een SPST schakelaar. Er zijn vele variaties van zo'n circuit. Een van de meest veelzijdige uitvoeringen bestaat uit twee weerstanden en een diode (figuur 3).

Schema van RC netwerk om een SPST schakelaar te debounden (klik om te vergroten)Afbeelding 3: Bij gebruik van een RC-netwerk om een SPST-schakelaar te debouncen (boven), dwingt de toevoeging van de diode (D1) de condensator (C1) om zich op te laden via weerstand R1 en te ontladen via weerstand R2. (Bron afbeelding: Maxfield))

Wanneer de schakelaar wordt geactiveerd (gesloten), wordt condensator C1 ontladen via weerstand R2. Indien diode D1 in deze schakeling was weggelaten, dan zou bij het deactiveren (openen) van de schakelaar, C1 via weerstanden (R1 + R2) worden opgeladen. De aanwezigheid van D1 betekent echter dat C1 alleen via R1 wordt geladen.

In sommige gevallen is alleen de activering van de schakelaar van belang (d.w.z. dat deze acties in gang zet), in welk geval D1 kan worden weggelaten. Indien echter acties moeten worden geactiveerd wanneer de schakelaar zowel geactiveerd als gedeactiveerd wordt, en indien het minimaliseren van de vertraging een overweging is, wordt de toevoeging van D1 aanbevolen.

Let op de exponentiële laad- en ontlaadcurve van de condensatorspanningVC. Het zou geen goed idee zijn om dit signaal rechtstreeks naar de ingang van een downstream digitale logische functie te voeren, die het niet op prijs zou stellen een signaal te zien dat treuzelt in het ongedefinieerde gebied tussen "goede" logische 0 en logische 1 waarden. In plaats daarvan wordt dit signaal toegevoerd aan de ingang van een buffer met een Schmitt-triggeringang. Bovendien wordt meestal een inverterende buffer gebruikt, zoals één kanaal van een CD74HC14M96 van Texas Instruments, omdat inverterende functies sneller schakelen dan hun niet-inverterende tegenhangers.

Debouncen van een SPDT schakelaar met een SR latch

In het geval van een SPDT schakelaar is een gebruikelijke hardware debounce oplossing het gebruik van een SR latch. Sinds bedrijven als IBM deze techniek gebruikten voor de schakelpanelen op hun mainframe computers rond de jaren '60, wordt deze aanpak beschouwd als de crème de la crème van eenvoudige hardware debounce oplossingen. Een dergelijke vergrendeling kan worden gevormd met behulp van twee rug-aan-rug NAND-poorten met twee ingangen; bijvoorbeeld door gebruik te maken van twee kanalen van een SN74HC00DR viervoudig NAND-IC met twee ingangen van Texas Instruments (figuur 4).

Schema van een op NAND gebaseerde SR-latch om een SPDT-schakelaar te deboundenAfbeelding 4: Het gebruik van een NAND-gebaseerde SR-latch om een SPDT-schakelaar te debouncen is een zeer effectieve hardware-debounce-oplossing. (Bron afbeelding: Max Maxfield)

Wanneer de NC-aansluiting van de schakelaar met massa is verbonden, zoals in de bovenste helft van Afbeelding 4, dwingt dit de uitgang van poort g2 tot logica 1. Op hun beurt dwingen de twee logische 1's op de ingangen van poort g1 de uitgang ervan tot logica 0. Ter vergelijking: wanneer de NO-aansluiting van de schakelaar met massa is verbonden, zoals weergegeven in de onderste helft van figuur 4, wordt de uitgang van poort g1 op logica 1 gezet. Op hun beurt dwingen de twee logische 1's op de ingangen van poort g2 de uitgang ervan tot logica 0.

De reden waarom deze schakeling zo goed werkt is dat wanneer beide ingangen in hun inactieve logische 1-toestand zijn, de SR-latch zijn vorige waarde onthoudt. Zoals geïllustreerd in figuur 2, wordt bij het omschakelen van een SPDT-schakelaar de klem die op dat moment met massa is verbonden, het eerst geactiveerd. Aangezien deze stoten zich tussen de oorspronkelijke waarde (logica 0) en de nieuwe waarde (logica 1) bevinden, hebben zij geen effect op de huidige toestand van de SR-latch. Pas als deze klem ophoudt te stuiteren, begint zijn tegenpool te stuiteren, op welk moment de SR-klok van toestand verandert.

Debouncing van een SPST-schakelaar met een speciaal apparaat

Een probleem met de vorige oplossing is dat veel ontwerpers de voorkeur geven aan SPST-schakelaars omdat die over het algemeen minder kosten dan SPDT's. Er zijn een aantal bekende SPST debounce-apparaten op de markt, zoals de MC14490DWG van ON Semiconductor en de MAX6818EAP+T van Maxim Integrated.

Een andere fabrikant, LogiSwitch, biedt een reeks debounce-oplossingen met drie, zes en negen kanalen in zowel through-hole als surface mount device (SMD) pakketten. Neem bijvoorbeeld een schakeling met een LogiSwitch LS18-S apparaat (figuur 5).

Schema van een speciale driekanaals LS18-S chip voor het debounden van een SPDT schakelaarAfbeelding 5: Gebruik van een speciale driekanaals LS18-S chip voor het debouncen van een SPDT schakelaar (er zijn ook zes- en negenkanaals apparaten verkrijgbaar). (Bron afbeelding: Max Maxfield)

Zoals alle leden van de LogiSwitch-familie, ondersteunt de LS18-S een bedrijfsspanningsbereik van 2,5 tot 5,5 volt (de waarde van de voedingsspanning heeft geen invloed op de responstijd van het apparaat). In tegenstelling tot sommige andere specifieke IC-oplossingen, vereisen LogiSwitch debounce-apparaten geen extra componenten zoals een externe klok, een RC-timingsnetwerk of pull-up-weerstanden aan de ingangen of uitgangen.

De LS18-S maakt gebruik van LogiSwitch' eigen adaptieve NoBounce-technologie, die een hoge mate van ruisongevoeligheid biedt. Geluidspieken met een duur van minder dan 20 ms mogen een cyclus niet starten of beëindigen, en de uitgangen worden vertraagd gedurende een periode van 20 ms na de laatste stuiter van de schakelaar bij zowel inschakelen als loslaten, ongeacht de duur van de stuiter.

Conclusie

Er zijn veel verschillende soorten schakelaars, waaronder tuimelschakelaars, tuimelschakelaars en drukknopschakelaars, die allemaal kunnen stuiteren. Indien dit niet wordt gemitigeerd, kunnen microprocessoren en andere elektronische circuits een enkele activering van een schakelaar als een samenstel van meerdere gebeurtenissen beschouwen.

Het stuiterende signaal van een schakelaar wordt vaak gedebounced met behulp van software die in een microcontroller draait. Hoewel dit een goedkope oplossing is, zoals blijkt, is het wellicht niet in alle gevallen de beste optie, met inbegrip van systemen die gebaseerd zijn op microcontrollers met beperkte prestaties en weinig geheugen, softwareontwikkelaars die geen deskundigheid hebben op het gebied van schakelaargerelateerde kwesties, of systemen die zonder microcontroller worden uitgevoerd.

Als alternatief kan debouncing hardwarematig worden uitgevoerd met behulp van diverse benaderingen, variërend van weerstand-capacitor-netwerken tot SR-latches en specifieke geïntegreerde circuits.

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Achtergrondinformatie over deze auteur

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield received his BSc in Control Engineering in 1980 from Sheffield Hallam University, England and began his career as a designer of central processing units (CPUs) for mainframe computers. Over the years, Max has designed everything from silicon chips to circuit boards and from brainwave amplifiers to steampunk Prognostication Engines (don't ask). He has also been at the forefront of Electronic Design Automation (EDA) for more than 30 years.

Max is the author and/or co-author of a number of books, including Designus Maximus Unleashed (banned in Alabama), Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: Instant Access, and How Computers Do Math. Check out his “Max’s Cool Beans” blog.

Over deze uitgever

De Noord-Amerikaanse redacteurs van DigiKey