Sådan implementeres hardware-debounce til switche og relæer, når software-debounce ikke er passende
Bidraget af DigiKeys nordamerikanske redaktører
2021-02-09
I forbindelse med elektrisk og elektronisk teknik er en switch en komponent, der kan "skabe" eller "bryde" et elektrisk kredsløb og derved afbryde en elektrisk strøm eller omdirigere den fra en leder til en anden. Som ingeniører kan bevidne, er der mange forskellige typer af switch'es, herunder vippekontakter, trykomskiftere (rocker switch'es), trykknap, mikro- og endestopkontakter, magnet- og reed-afbrydere og relæer. Alle har en ting til fælles: De bounce (har prel). Det er deres natur.
Normalt har denne bounce lille eller ingen effekt på kredsløbet, men hvis det digitale kredsløb er hurtigt nok til at detektere og reagere på flere bounces, kan der have alvorlige konsekvenser. En ingeniørs opgave er at undgå eller forhindre virkningerne af denne bounce eller debounce switch'en. Mens branchen længe har praktiseret hardware-debounce, er den for nylig ændres til softwarebaserede debounce-metoder. Der er dog situationer, hvor hardware-debounce er en bedre mulighed.
Denne artikel forklarer bounce og diskuterer software og hardware tilgange til debounce. Det peger derefter på tilfælde, hvor hardware-debounce er en bedre mulighed, før det viser, hvordan det kan implementeres. Eksempel på switch-enheder og hardware-debounce komponenter introduceres ved hjælp af eksempler fra NKK Switches, ON Semiconductor, Texas Instruments, Maxim Integrated og LogiSwitch.
Hvad er switch-bounce?
Når en switch eller et relæ skifter tilstand, kan det, som et menneske opfattes som et øjeblikkeligt enkelt svar. Men hver gang enheden skifter tilstand involvere dette 100 eller flere tilstandsskift, der varer i flere 1/1000 af et sekund, før kontakten endelig er stabil.
Overvej f.eks. en enkelt pol, enkelt kontaktpunkt(Throws) (SPST), som normalt er åben (NO), panelmonteret vippekontakt som en M2011SS1W01 fra NKK. Antag, at den ene side af denne switch, som kan betragtes som indgangen, er forbundet til jord (0 volt), mens den anden side, som i dette tilfælde er output, er forbundet til en 5 volt strømforsyning (vist som +ve ) via en pull-up modstand (R1) (figur 1).
Figur 1: I tilfælde af en SPST-NO vippekontakt kan bouncing forekomme både når switch'en bliver aktiveret og deaktiveret. (Billedkilde: Max Maxfield)
Vær opmærksom på, at switch-bounce kan forekomme både når switch'en bliver aktiveret (lukket) og deaktiveret (åbnet). Undertiden kan bounces overgå hele vejen mellem forsyningsskinnerne, her betragtes som logik 0 og 1. I dette tilfælde er disse “rene” bounces. Til sammenligning, hvis signalet kun når en mellemspænding, betegnes disse som "snavsede" bounces.
I tilfælde af en enkelt pol, dobbelt kontaktpunkt (SPDT) panelmonteret vippekontakt som NKK M2012SS1W01-BC, bounce kan forekomme på både de normalt åbne (NO) og normalt lukkede (NC) terminaler (figur 2). I dette tilfælde er kun "rene" bounces blevet vist for enkelhedens skyld.
Figur 2: I tilfælde af en SPDT-vippekontakt, kan der være bounce på både NO- og NC-terminalerne, når switch'en aktiveres og deaktiveres. (Billedkilde: Max Maxfield)
I mange tilfælde er varigheden af dette signal-bounce så lille at det ikke har nogen effekt. Problemer opstår, når switch'en er forbundet til et stykke elektronisk udstyr, der er hurtig nok til at opdage og reagere på flere bounces. Det, der kræves, er en måde at debounce-signalet, der kommer fra switch'en, før det bliver modtaget af det elektroniske udstyr.
Software vs. hardware debouncing
I 1960'erne og 1970'erne blev switch-debounce implementeret ved hjælp af en række hardware-teknikker, fra enkle RC-forsinkelseskredsløb, der blev brugt sammen med SPST-switche, til mere sofistikerede sæt/reset (SR)-låsefunktioner.
For nylig, da mange systemer har en mikroprocessorenhed (MPU) eller mikrokontrollerenhed (MCU), er det blevet almindeligt at bruge softwareteknikker til at debounce signalet, der kommer fra enhver tilstandsskift. Imidlertid er software-debounce ikke altid den bedste tilgang. Der er nogle applikationer, der involverer små, hukommelsesbegrænsede processorer med begrænset ydeevne og begrænset kode plads og/eller clock-cycles til rådighed til implementering af debounce-rutiner. I disse tilfælde kan en hardware implementering være en bedre løsning.
Også mange softwareudviklere er ukendte med switch'es fysiske egenskaber. Faktum er at ud over at variere fra en aktivering til en anden, kan bounce-egenskaberne ved en switch påvirkes af miljømæssige forhold som temperatur og fugtighed.
Spørgsmålet om softwareudvikleres manglende switch-ekspertise forværres af det faktum, at tilgængelig litteratur om switch-bounce ofte er forvirrende og modstridende. For eksempel er det almindeligt at læse, at en switch-bounce kan vare 1 millisekund (ms) efter dens aktivering eller deaktivering. Imidlertid udførte den velkendte embedded systems-ekspert Jack Ganssle empiriske tests på en række forskellige switch-typer, der skiftede tilstand 300 gange. Han loggede den minimale og maksimale bounce for både åbning og lukning af kontakterne. Han rapporterede en gennemsnitlig bounce-tid på 1,6 ms og en maksimal bounce-tid på 6,2 ms. Nogle industrielle og militære "best practice" anbefaler at vente 20 ms efter den første aktivering, før man antager, at switch'en er stoppet med at bounche. Andre foretrækker at vente 20 ms efter den endelige detekterede debouncing, før de udløser handlinger.
Derudover er der mange enkle ikke-processorbaserede systemer, der også kræver, at switche debounces. Et par eksempler på sådanne systemer er en binær tæller, der driver syv-segment-displays, der tæller impulser fra et relæ; tiggerindgangen til en 555 one-shot timer, der bruges som motorstyring til en dør eller port; og en registerbaseret FSM (finite state machine), der anvender tastede input. Der er også elektroniske trim-potentiometer (potter) med værdier, der er modificeret ved hjælp af switch-indgange (op, ned og undertiden gemme), hvor switch-bounce ville være problematisk.
Alle disse eksempler gør det klart, at en vis viden om, hvordan man udfører debounce af hardware, kan være nyttig for enhver designer eller udvikler.
Hardware der debouncer en SPST-switch med et RC-netværk
En af de enkleste hardwarebaserede debounce-løsninger anvender et RC-netværk i forbindelse med en SPST-switch. Der er mange variationer af et sådant kredsløb. En af de mere alsidige implementeringer involverer to modstande og en diode (figur 3).
Figur 3: Når du bruger et RC-netværk til at debounce en SPST-switch (øverst), tvinger tilføjelsen af dioden (D1) kondensatoren (C1) til at oplade via modstand R1 og afladning via modstand R2. (Billedkilde: Max Maxfield)
Når switch'en er aktiveret (lukket), aflades kondensator C1 via modstand R2. Hvis diode D1 var udeladt fra dette kredsløb, ville C1 blive opladet via modstande (R1 + R2), når switch'en blev deaktiveret (åbnet). Tilstedeværelsen af D1 betyder imidlertid, at C1 kun lades op via R1.
I nogle tilfælde er kun aktivering af switch'en af interesse (dvs. udløser handlinger, der skal forekomme), i hvilket tilfælde D1 kan udelades. Men hvis handlinger skal blive triggered, når switch'en aktiveres og deaktiveres, og hvis minimering af forsinkelse er en overvejelse, anbefales tilføjelse af D1.
Overhold de eksponentielle opladnings- og afladningskurver, som kondensatorspændingen VC. Det ville ikke være en god ide at føre dette signal direkte til indgangen til en downstream digital logikfunktion, som ikke ville sætte pris på at se et signal, der lyser i det udefinerede område mellem "god" logisk 0 og logisk 1-værdi. I stedet føres dette signal til input af en buffer med en Schmitt trigger-input. Desuden anvendes en inverterende buffer typisk, såsom en kanal af en CD74HC14M96 fra Texas Instruments, fordi inverterende funktioner skifter hurtigere end deres ikke-inverterende kolleger.
Debouncing af en SPDT-switch med en SR-lås
I tilfælde af en SPDT-switch er en fælles løsning af hardware-debouncing, at anvende en SR-lås. Lige siden virksomheder som IBM brugte denne teknik til switch-panelerne på deres mainframe-computere omkring 1960'erne, er denne tilgang blevet betragtet som den crème de la crème af enkle løsninger til debouncing af hardware. En sådan lås kan dannes ved anvendelse af back-to-back dual-input NAND-porte; for eksempel ved at anvende to kanaler af en SN74HC00DR quad to-input NAND-IC fra Texas Instruments (figur 4).
Figur 4: Brug af en NAND-baseret SR-lås til at debounce en SPDT-switch er en meget effektiv metode til hardware-debouncing. (Billedkilde: Max Maxfield)
Når switch'ens NC-terminal er forbundet til jord, som vist i den øverste halvdel af figur 4, tvinger dette output fra gate g2 til logik 1. Til gengæld tvinger de to logiske 1'er på indgangene til gate g1, dens output til logik 0. Til sammenligning, når switch'ens NO-terminal er forbundet til jord (vist i den nedre halvdel af figur 4), tvinges dette output fra gate g1 til logik 1. Til gengæld tvinger de to logiske 1'er på indgangene til gate g2, dens output til logik 0.
Årsagen til, at dette kredsløb fungerer så godt, er at når begge dets indgange i deres inaktive logiske 1-tilstande, husker SR-låsen tidligere tilstand. Husk at som illustreret i figur 2 at når en SPDT-switch skifter tilstand, hvilken af dens terminaler der er forbundet til jorden bouncer først. Da disse debouncer er mellem dens oprindelige værdi (logik 0) og dens nye værdi (logik 1), har de ingen indflydelse på den aktuelle tilstand for SR-låsen. Det er først efter at denne terminal ophører med at bounce, at dens modpart begynder at bounce, når SR-låsen ændrer sin tilstand.
Debouncing af en SPST-switch med en dedikeret enhed
Et problem med den tidligere løsning er, at mange designere foretrækker at bruge SPST-switche, da de generelt koster mindre end SPDT'er. Der er et antal kendte dedikerede enheder til SPST-debouncing på markedet, såsom MC14490DWG fra ON Semiconductor og MAX6818EAP+T fra Maxim Integrated.
En anden producent, LogiSwitch, tilbyder en pakke med tre-kanals, seks-kanals og ni-kanals debouncing-løsninger til både gennemgående hul og SMD-pakker. Overvej f.eks. et kredsløb, der bruger en LogiSwitch LS18-S enhed (figur 5).
Figur 5: Brug af en dedikeret trekanals LS18-S-chip til at debounce en SPDT-switch (seks- og ni-kanals enheder er også tilgængelige). (Billedkilde: Max Maxfield)
Som alle medlemmer af LogiSwitch-familien understøtter LS18-S et driftsspændingsområde på 2,5 til 5,5 volt (værdien af forsyningsspændingen påvirker ikke enhedens responstid). Også i modsætning til nogle af de andre dedikerede IC-løsninger gør LogiSwitch debounce enheder det ikke kræve yderligere komponenter såsom et eksternt clock, et RC-timingsnetværk eller pull-up-modstande på ind- eller udgangene.
LS18-S bruger LogiSwitchs proprietære adaptive NoBounce-teknologi, der tilbyder et højt støjimmunitet. Støjspidser med en varighed på mindre end 20 ms forhindres i at starte eller afslutte en cyklus, og output er forsinket i en periode på 20 ms efter den sidste switch-bounce ved både aktivering og frigivelse uanset bounce-tiden.
Konklusion
Der er mange forskellige typer af switche, herunder vippekontakt, trykomskiftere og trykknapafbrydere, som alle kan bounce. Hvis ikke-dæmpet, kan switch-bounce få mikroprocessorer og andre elektroniske kredsløb til at se en enkelt switch-aktivering som flere tilstandsskift.
Det signal der bouncer fra en switch debounces ofte ved hjælp af software, der kører i en mikrokontroller. Selvom dette er en billig løsning, som vist, er det muligvis ikke den bedste løsning i alle tilfælde som systemer baseret på ydeevne og hukommelsesbegrænsede mikrokontroller, softwareudviklere, der mangler ekspertise i switch-relaterede problemer eller systemer implementeret uden en mikrokontroller.
Som et alternativ kan debouncing udføres i hardware ved hjælp af en række tilgange, der spænder fra RC-netværk til SR-låse til dedikerede integrerede kredsløb.
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.




