Know-how: Contactdender onderdrukken

(gepubliceerd op 22-04-2022)

Mechanische schakelaars sluiten en openen niet eenmalig, maar zullen het contact een aantal keren maken en verbreken. Dit verschijnsel noemt men contactdender of -bouncing en dit kan tientallen milliseconden duren.

Contactdender in de praktijk


Wat is contactdender of -bouncing?
Wanneer u een schakelaar of relais bedient verwacht u een onmiddellijke en eenduidige reactie op de uitgang. Als u door middel van het drukken op een drukknop een spanning aan een schakeling aanbiedt moet die spanning verschijnen op het moment dat u de drukknop indrukt en verdwijnen op het moment dat u de drukknop weer loslaat. In de praktijk zal dat echter nooit het geval zijn. De mechanische constructie in de schakelaar heeft last van mechanische oscillaties. Het metalen lipje dat het contact moet openen of sluiten zal, op het moment dat u de schakelaar bedient, even gaan trillen of stuiteren alvorens het definitief van positie verandert. De mechanische energie die u in het lipje pompt op het moment dat u de schakelaar bedient wordt omgezet in botsingsenergie op het moment dat het lipje het contact raakt. Deze energie veroorzaakt de mechanische oscillaties. Als u dus op een drukknop drukt kunnen er tientallen maak- of verbreek-acties optreden voordat het contact definitief gesloten wordt.

Elektronica wordt onbetrouwbaar
Deze verschijnselen duren meestal maar een paar tientallen milliseconden, maar kunnen de werking van de te bedienen elektronica onbetrouwbaar maken. Stel bijvoorbeeld dat u het aantal buitenlandse vrachtwagens moet tellen dat dagelijks door een straat rijdt. In theorie is niets eenvoudiger dan dat. U bouwt een aantal in cascade geschakelde tientellers en stuurt de ingang van de eerste teller met een drukknop. U drukt op de knop als er een vrachtwagen met een buitenlands nummerbord voorbij rijdt. U moet er dan echter wél zeker van zijn dat de teller-inhoud met slecht één eenheid wordt verhoogd als u op de drukknop drukt. Zonder anti-dender maatregelen zult u merken dat de inhoud van de teller al meer dan honderd bedraagt als u slechts tien keer op de knop hebt gedrukt.

Voorbeeld 1: een drukknop
Als u, zoals in de onderstaande figuur is voorgesteld, een weerstand via een drukknop naar de massa trekt moeten er in theorie twee mooie eenmalige spanningssprongen verschijnen over de schakelaar, namelijk eerst van +Ub naar GND en nadien weer van GND naar +Ub.

Contactdender-elimineren-01 (© 2022 Jos Verstraten)
Het naar de massa trekken van een weerstand met een drukknop.
(© 2022 Jos Verstraten)

In de praktijk klopt daar echter helemaal niets van! Wij hebben bovenstaand schakelingetje opgebouwd met een goedkoop Chinees drukknopje en het spanningsverloop over de schakelaar op de oscilloscoop gezet. Op het onderstaande panorama oscillogram ziet u hoe de spanning over de schakelaar verloopt. Bij het indrukken van de schakelaar gaat de spanning over de schakelaar wel naar nul, maar springt nadien weer gedurende 100 μs naar de +Ub omdat het contactlipje even terug stuitert. Tussen beide momenten ziet u nog een heel smal pulsje, waarbij de spanning halverwege blijft steken. Dit soort verschijnselen worden 'dirty bounces' genoemd. Bouncing pulsjes waarbij de spanning het andere schakelniveau wél bereikt worden 'clean bounces' genoemd.
Ook bij het loslaten van de drukknop gaat de spanning over de schakelaar niet netjes naar +Ub, maar stuitert de schakelaar een groot aantal keren waardoor een heleboel clean bounces ontstaan.
Als u dit experiment uitvoert zult u merken dat iedere druk op de drukknop een eigen patroon oplevert van dirty en clean bounces, maar dat het vrijwel nooit zal voorkomen dat deze verschijnselen niet optreden. 

Contactdender-elimineren-02 (© 2022 Jos Verstraten)
Het échte spanningsverloop over de drukschakelaar. (© 2022 Jos Verstraten)

Voorbeeld 2: een tuimelschakelaar
Wij hebben het experiment herhaald, maar nu met een van de bekende miniatuur tuimelschakelaars. Deze schakelaar S1 schakelt de voedingsspanning +Ub naar twee weerstanden R1 en R2. Gedurende het omschakelen staan de twee uitgangen gedurende een tijd ∆t beiden op GND, omdat het schakellipje in de ideale situatie even vrij in de lucht hangt tussen de twee schakelcontacten.

Contactdender-elimineren-03 (© 2022 Jos Verstraten)

Schakelen met een tuimelschakelaar. (© 2022 Jos Verstraten)


In het onderstaande oscillogram ziet u wat er in de praktijk gebeurt. De uitgang Uuit2 (gele trace) schakelt netjes van +Ub naar de massa, maar de uitgang Uuit1 (blauwe trace) heeft heel veel last van contactdender. Ook een dergelijke tuimelschakelaar schakelt dus onbetrouwbaar om.

Contactdender-elimineren-04 (© 2022 Jos Verstraten)
Omschakelen van een tuimelschakelaar.
(© 2022 Jos Verstraten)

Voorbeeld 3: een kamrelais
Zou een kamrelais zijn contact betrouwbaarder omschakelen dan uw vinger het doet? Om dat uit te zoeken hebben wij het onderstaande experiment uitgevoerd. Dat is vergelijkbaar met het vorige, alleen schakelt de schakelaar niet om onder invloed van de mechanische kracht in uw vinger, maar onder invloed van het magnetisch veld van de relaisspoel. De invloed van de contactdender van de drukknop wordt geëlimineerd door de inductieve traagheid van de relaisspoel. 

Contactdender-elimineren-05 (© 2022 Jos Verstraten)
Testen van de bounce van een kamrelais. (© 2022 Jos Verstraten)

Zoals uit het onderstaande oscillogram blijkt is de contactdender hier nog veel groter dan bij een mechanische tuimelschakelaar.

Contactdender-elimineren-06 (© 2022 Jos Verstraten)
De contactdender van een kamrelais. (© 2022 Jos Verstraten)

Conclusie
Het denderen van (elektro)mechanische schakelaars is een groot probleem voor de ontwerper van elektronische schakelingen die met drukknoppen of schakelaars worden aangestuurd. U moet er zeker van zijn dat het bouncen van schakelaarcontacten de betrouwbaarheid van de schakeling niet in gevaar brengt. Debouncing, het onderdrukken van de bouncing, is absoluut noodzakelijk!


Hardware of software debouncing?

In de moderne elektronica, waar vrijwel alles onder controle staat van een microcontroller, kiest men uiteraard voor het debouncen van schakelaars door middel van een eenvoudige software routine. Maar soms is het toch noodzakelijk om te kiezen voor hardware oplossingen, bijvoorbeeld omdat er geen microcontroller in de schakeling in gebruik is. Dan moet u wat extra elektronica ontwerpen achter iedere schakelaar om het bouncen van de mechanische contacten te onderdrukken. Gelukkig zijn de noodzakelijke schakelingen niet er ingewikkeld.

Hardware debouncing
Wij bespreken de onderstaande manieren van debouncing:
       - Debouncing met RC-netwerken
       - Debouncing met een RS flip-flop
       - Debouncing met een monostabiele multivibrator
       - Debouncing met dedicated IC's

Debouncing met RC-netwerken


De eenvoudigste schakeling
De eenvoudigste schakeling voor het ontdenderen van een drukknop is getekend in de onderstaande figuur. Het volstaat een kleine condensator over de drukknop te zetten en deze aan te sluiten op de ingang van een schmitt-trigger poort. Omdat deze poort inverterend werkt is het noodzakelijk een tweede identieke poort achter de eerste te schakelen, zodat het indrukken van de drukknop weer overeenkomt met een overgang van 'H' naar 'L'. Als poorten kunt u gebruik maken van een 74HC14, een CD40106 of een CD4093. In de 74HC14 en de CD40106 zitten zes identieke inverterende schmitt-triggers, u kunt met één chip dus drie schakelaars ontdenderen. De CD4093 bevat vier inverterende schmitt-triggers met ieder twee ingangen. Die twee ingangen moet u parallel schakelen.
Een ander IC dat u kunt toepassen is de 74LVC1G17. Dat is een 'Single Schmitt-Trigger Non-inverting Buffer' voor maximale +Ub van 5,5 V. Het voordeel van deze chip is dat hij niet inverteert, zodat de IC2 uit het bovenstaande schema overbodig is.
De werking van de schakeling is eenvoudig uit te leggen. In rust laadt de condensator C1 via de weerstand R1 op tot de voedingsspanning. Drukt u op de drukknop, dan wordt de condensator opeens ontladen. Eventuele bounce van de schakelaar wordt opgevangen door de trage reactie van de condensator op zo'n snelle gebeurtenis. Laat u de drukknop los, dan wordt de condensator weer geladen via de weerstand. Ook nu zorg de trage reactie van de condensator voor het gladstrijken van eventuele bounce van het contact. De twee schmitt-triggers zorgen ervoor dat de trage achterflank van de puls over de schakelaar wordt omgezet in een mooie, steile achterflank op de uitgang.
Bedenk wel dat de weerstand R1 tussen de +Ub en de GND wordt geschakeld als u de drukknop indrukt. U kunt deze weerstand dus niet te klein maken, want dit veroorzaakt alleen maar vermogensverlies als u op de knop drukt.

Contactdender-elimineren-07 (© 2022 Jos Verstraten)
De eenvoudigste ontdendering van een drukknop. (© 2022 Jos Verstraten)

Een iets betere schakeling
Niet iedereen is even enthousiast over het idee om een condensator rechtstreeks over schakelaarcontacten te ontladen. U maakt immers een kortsluiting en de lading in de condensator kan een vrij grote beginstroom door de contacten van de schakelaar veroorzaken. Om dit eventuele probleem op te lossen kunt u gebruik maken van de onderstaande schakeling. Drukt u op de drukknop S1, dan wordt de condensator C1 ontladen via de weerstand R2. Deze weerstand beperkt de ontlaadstroom van de condensator. Laat u de drukknop los, dan wordt de condensator geladen via de weerstand R1 en de diode D1. Uit het oscillogram blijkt dat er nu helemaal geen sprake kan zijn van contactdender. Iedere bounce van de drukknop wordt onderdrukt door de trage RC-tijden van de laad- en ontlaadcircuits van de condensator.

Contactdender-elimineren-08 (© 2022 Jos Verstraten)
Met deze schakeling wordt de ontlaadstroom beperkt. (© 2022 Jos Verstraten)

Debouncing met een RS flip-flop


Uitsluitend voor omschakelaars
De onderstaande schakeling is uitsluitend te gebruiken met een omschakelaar. Omdat er niet alleen tuimelschakelaars met omschakelcontact in de handel zijn, maar ook drukknoppen, is dit een universele debouncing-schakeling. Hart van de schakeling is een uit twee NAND-poorten samengestelde zogenaamde SET/RESET flip-flop, ook SR flip-flop genoemd. De voornaamste eigenschap van een NAND-poort is dat de uitgang uitsluitend 'L' is als beide ingangen 'H' zijn.
De twee wisselcontacten van de omschakelaar worden door middel van de pull-up weerstanden R1 en R2 op 'H' gezet. In de getekende stand van de schakelaar, de ruststand, is één ingang van de bovenste poort NAND1 'L' en is de uitgang Q dus 'H'. Beide ingangen van de onderste poort zijn 'H' en bijgevolg is de uitgang van deze schakeling 'L'. Beide ingangen van de bovenste poort zijn dus 'L', de uitgang van deze schakeling is 'H'.
Als u de schakelaar bedient wordt de onderste ingang van de onderste poort 'L'. De uitgang van die poort gaat in ieder geval naar 'H'. Beide ingangen van de bovenste poort worden 'H', dus de uitgang gaat naar 'L'. Het gevolg is dat beide ingangen van de onderste poort 'L' worden. Door het denderen van de contacten wordt de onderste ingang van de onderste poort verschillende keren 'L' en 'H', maar omdat de bovenste ingang van de onderste poort 'L' is maakt dat niets uit. De uitgang blijft 'H'. De parasitaire bounce-pulsen hebben geen invloed op de schakeling.
Een identieke stabiele situatie ontstaat als u de schakelaar weer omschakelt.
In de rechter grafieken zijn ter vergelijking de uitgangsspanningen van de schakelaar en de uitgangsspanning van de flip-flop getekend.

Contactdender-elimineren-09 (© 2022 Jos Verstraten)
Debouncen met een SR flip-flop. (© 2022 Jos Verstraten)

Debouncing met een monostabiele multivibrator


Bruikbaar bij drukknoppen
Bij dit principe wordt het drukken op een drukknop, met alle onvoorspelbare bounces tot gevolg, omgezet in één puls met een bepaalde tijdsduur. Die tijdsduur is zo lang dat de puls nog aanwezig is op het moment dat u de drukknop weer loslaat. Het gevolg is dat de drukknop zoveel kan bouncen als hij lust heeft, op de uitgang verschijnt maar één mooie puls.
Dé schakeling voor het genereren van zo'n eenmalige puls met een goed gedefinieerde breedte is uiteraard de monostabiele multivibrator, afgekort tot MMV.

Drukknop debouncing met een 555
In de onderstaande figuur is het schema getekend met een als MMV geschakelde timer 555. De werking is simpel. In rust in pen 2 via de weerstand R1 verbonden met de positieve voeding +Ub. Het gevolg is dat de 555 zijn pen 7 via een interne transistor naar de massa trekt. De condensator C1 is volledig ontladen en de uitgang op pen 3 is 'L'. Als u op de drukknop drukt wordt pen 2 met de massa verbonden. Een interne SR flip-flip slaat om, pen 7 wordt hoogimpedant en de uitgang op pen 3 wordt 'H'. De condensator C1 kan via R2 opladen tot de voedingsspanning. Op het moment dat de spanning over de condensator C1 gestegen is tot ⅔ van de voedingsspanning klapt de interne flip-flop weer om. De uitgang op pen 3 wordt 'L' en pen 7 wordt weer met de massa verbonden. De condensator C1 wordt onmiddellijk ontladen. Door het selecteren van de waarde van de onderdelen R2 en C1 kunt u de breedte van de uitgangspuls aanpassen. U moet die puls in ieder geval langer maken dan de langste tijd dat de drukknop wordt geactiveerd. Met de getekende waarden is de pulsduur ongeveer een tiende seconde of 100 ms.

Contactdender-elimineren-10 (© 2022 Jos Verstraten)
Debouncen van een drukknop met een 555. (© 2022 Jos Verstraten)

Drukknop debouncing met een halve CD4011
Met twee NAND-poorten kunt u een eenvoudige MMV samenstellen volgens onderstaand schema. De ingang van de schakeling hangt via de weerstand R1 aan de voeding en wordt door de drukknop naar de massa getrokken. De schakeling reageert met een naar 'L' gaande puls met een instelbare breedte op de uitgang. Uiteraard wordt de breedte van de puls weer bepaald door de RC-tijdconstante C1-R2.
In rust staan beide ingangen van de rechter poort op 'L', de uitgang van de schakeling is dus 'H'. Deze 'H' wordt teruggekoppeld naar de bovenste ingang van de linker poort. Beide ingangen van deze poort zijn 'H', de uitgang is 'L'.
Als u op de drukknop drukt wordt de onderste ingang van de linker poort 'L'. De uitgang van deze poort wordt 'H'. Deze spanningssprong wordt door de condensator doorgekoppeld naar de twee ingangen van de rechter poort. De uitgang van de schakeling wordt dus 'L'. Deze spanning wordt teruggekoppeld naar de bovenste ingang van de linker poort. De uitgang van deze poort blijft dus 'H', wat ook de bouncing van de schakelaar doet met de spanning op de onderste ingang. De lading in de condensator C1 gaat nu via de weerstand R2 langzaam afvloeien. Op een bepaald moment wordt de spanning op beide ingangen van de rechter poort zo laag dat de uitgang 'H' wordt. Deze spanning wordt weer teruggekoppeld naar de bovenste ingang van de linker poort. Omdat u de drukknop inmiddels weer hebt losgelaten zijn beide ingangen van de rechter poort 'H', de schakeling staat weer in de ruststand. 

Contactdender-elimineren-11 (© 2022 Jos Verstraten)
Debouncen van een drukknop met een CD4011. (© 2022 Jos Verstraten)

Debouncing met dedicated IC's


Speciale chip's voor dit doel
Door diverse IC-fabrikanten worden IC's op de markt gebracht die speciaal zijn ontwikkeld voor het debouncen van schakelaars. Hoewel deze chip's meestal een duurdere oplossing bieden dan de besproken schakelingen werken zij betrouwbaarder. Er zit soms zelfs vrij uitgebreide intelligentie in, die het verloop van de spanning over een schakelaar nauwgezet volgt en uitsluitend een actie uitvoert als deze spanning gedurende een bepaalde tijd stabiel 'L' of 'H' blijft. Op deze manier wordt de bouncing-periode ondubbelzinnig gedetecteerd en wordt de werking volledig onafhankelijk van hoe lang u de drukknop indrukt.

Share

De LS18, LS19 en LS20 van LogiSwitch

Dit zijn chip's waarmee u respectievelijk 3, 6 en 9 drukschakelaars kunt debouncen. Het voordeel van deze IC's is dat de uitgangstrap bestaat uit een totempaal schakeling die 25 mA kan leveren (sourcen) of opnemen (sinken). De schakelingen worden gevoed uit +5 V en leveren aan de uitgangen OUT een naar 'L' gaande puls als u de ingangen SW met drukknoppen met de GND verbindt. Deze ingangen hangen intern met een pull-up weerstand aan de VDD. In de onderstaande figuur zijn de aansluitgegevens van de drie schakelingen samengevat.

Contactdender-elimineren-12 (© LogiSwitch)
Aansluitgegevens van de IC's van LogiSwitch. (© LogiSwitch)

De IC's van LogiSwitch zijn 'intelligent' in zoverre dat zij in staat zijn de spanningspulsen die aan de SW-ingangen verschijnen te evalueren naar hun breedte. Alle pulsen die smaller zijn dan 20 ms worden gediscrimineerd. Als op de SW-ingangen een neergaande puls verschijnt die breder is dan 20 ms zal op de uitgang een neergaande puls verschijnen. Deze puls is dus ongeveer 20 ms vertraagd ten opzichte van de ingangspuls en duurt ook ongeveer 20 ms langer dan de ingangspuls. In de onderstaande figuur is de werking van deze IC's verduidelijkt.

Contactdender-elimineren-13 (© LogiSwitch)
De werking van de LS18, LS19 en LS20 van LogiSwitch. (© LogiSwitch)

De MC14490 van ON Semiconductor
Dit IC bevat zes identieke schakelingen die een ingang hebben die u met een drukknop aan de massa moet leggen en een uitgang hebben die een neergaande puls levert. De MC14490 is een vrij oud IC dat oorspronkelijke door Motorola op de markt werd gebracht en in de reguliere handel zult u het zelden aantreffen. Via AliExpress worden het echter door diverse aanbieders te koop aangeboden voor prijzen vanaf € 0,40 per stuk. De aansluitgegevens en het intern blokschema zijn samengevat in de onderstaande figuur.

Contactdender-elimineren-14 (© ON Semiconductor)
De MC14490 van ON Semiconductor. (© ON Semiconductor)

In grote lijnen geschetst komt de werking van de MC14490 er op neer dat de schakeling alleen een neergaande uitgangspuls genereert als het signaal op de ingang gedurende een aantal interne klokpulsen stabiel 'L' is gebleven. Hetzelfde geldt voor het einde van de drukknop-actie. Alleen als de ingang weer gedurende een aantal interne klokpulsen stabiel 'H' is gebleven gaat de uitgang naar 'H'. Op deze manier worden de twee bounce-perioden gedetecteerd en gediscrimineerd.

Contactdender-elimineren-15 (© ON Semiconductor)
Het timing-diagram van de MC14490. (© ON Semiconductor)

De MAX6816, MAX6817 en MAX6818 van Maxim
Deze IC's bevatten respectievelijk 1, 2 en 8 debouncers. Ook deze chip's samplen het signaal op de ingang en besluiten tot een uitgangsactie als het signaal op de ingang gedurende een aantal samples (40 ms) stabiel blijft. De eenkanaal uitvoering MAX6816 wordt uitsluitend geleverd in SOT143 SMD-uitvoering.

Contactdender-elimineren-16 (© Maxim)
De MAX6816, MAX6817 en MAX6818 van Maxim. (© Maxim)

De ingangen moeten weer met een drukknop naar de massa worden getrokken, de uitgangen leveren na de debouncing periode een puls die van 'H' naar 'L' gaat. De ingangen van deze IC's zijn door middel van interne schakelingen bestand tegen statische spanningen tot ±15 kV, getest volgens het 'Human Body Model'. 

Contactdender-elimineren-17 (© Maxim)
Het intern blokschema van één kanaal van de Maxim-IC's. (© Maxim)

MAX16054 van Maxim
Dat is een interessant IC omdat u er een drukknop mee kunt transformeren tot een betrouwbare AAN/UIT schakelaar. De chip bevat, naast de noodzakelijke anti-dender schakelingen, een flip-flop die verantwoordelijk is voor de AAN/UIT-functie van het IC. Zoals uit het onderstaande blokschema blijkt, worden beide uitgangen van deze flip-flop naar buiten gebracht, zodat het drukken op de drukknop zowel een 'L' als een 'H' tot gevolg kan hebben. Bovendien kunt u de flip-flop ook nog eens resetten via de CLEAR-ingang.

Contactdender-elimineren-18 (© Maxim)
Intern blokschema van de MAX16054 van Maxim. (© Maxim)

Uit het onderstaande timing-diagram blijkt dat de flip-flip ongeveer 50 ms (tDP) na het aflopen van de bouncingperiode omschakelt. Een 'H' op de CLEAR stuurt 'OUT' naar 'L'.

Contactdender-elimineren-19 (© Maxim)

Timing-diagram van de MAX16054 van Maxim. (© Maxim)





(Open Circuit sponsor advertentie)
ECell breadboard-plugin componentenpakket