Forstå problemet:
* Skift kontakt bounce: Mekaniske kontakter, når de trykkes eller slippes, skifter ikke øjeblikkeligt mellem åben og lukket tilstand. De "hopper" flere gange på grund af mekaniske vibrationer og kontaktfejl.
* Flere udløsere: Denne hoppe kan generere flere elektriske signaler, selvom brugeren kun havde til hensigt et enkelt tryk. Dette kan forårsage utilsigtet adfærd i kredsløb, især dem, der er følsomme over for timing.
Hvorfor debounce?
* Nøjagtig signalfortolkning: Forhindrer falske signaler i at påvirke dit kredsløbs logik eller kontrolfunktioner.
* Plidelig drift: Sikrer, at dit kredsløb kun reagerer én gang på et enkelt kontakttryk.
Debouncing-metoder:
1. Hardware Debouncing:
* RC-kredsløb: Den mest almindelige metode. En modstand (R) og en kondensator (C) er forbundet parallelt over afbryderen. Kondensatoren oplades og aflades langsomt og filtrerer de hurtige hoppende signaler fra.
* Sådan virker det: Når kontakten lukkes, oplades kondensatoren gennem modstanden. Afvisningssignalerne er for hurtige til at oplade kondensatoren helt, så kun et enkelt, rent signal passerer igennem.
* Diode-baseret: Bruger en diode for at forhindre, at kondensatoren aflades for hurtigt. Dette sikrer et rent signal, selvom hoppet er forlænget.
2. Software Debouncing:
* Software-timer: En mikrocontroller kan programmeres til at ignorere inputændringer i en kort periode efter et tryk på en kontakt. Enhver ændring inden for denne tid betragtes som afvisning.
* Sådan virker det: En timer startes, første gang der trykkes på kontakten. Eventuelle yderligere ændringer inden for timerens varighed ignoreres. Når timeren udløber, accepteres den nye switch-tilstand.
* Statsmaskine: Bruger en tilstandsmaskine til at spore skiftetilstanden. Maskinen skifter kun tilstand efter en forsinkelse og filtrerer de hoppende signaler fra.
3. Specialiserede debouncing IC'er:
* Debouncing IC'er: Designet specifikt til at afvise signaler, hvilket giver robuste og pålidelige løsninger.
Valg af den rigtige metode:
* Hardware Debouncing: Bedst til simple kredsløb, og når omkostningseffektivitet er vigtig.
* Softwaredebouncing: Tilbyder større fleksibilitet og kan håndtere mere komplekse scenarier.
* Specialiserede debouncing IC'er: Ideel til applikationer, der kræver høj nøjagtighed, hastighed, eller når pladsen er begrænset.
Vigtige overvejelser:
* Debouncing Time: Forsinkelsen eller tidsvinduet, der bruges til at debouncing, skal være længere end varigheden af switch-bouncen, men kortere end brugerens forventede responstid.
* Kringløbskompleksitet: Den valgte debouncing-metode bør være passende for kompleksiteten af kredsløbet og de tilgængelige ressourcer.
Eksempelkode (software, der debouncing med Arduino):
```c++
const int switchPin =2; // Pin forbundet til switchen
int switchState =0; // Starttilstand for kontakten
unsigned long lastDebounceTime =0; // Senest skiftede kontakten tilstand
const unsigned long debounceDelay =50; // Forsinkelse i millisekunder
void setup() {
pinMode(switchPin, INPUT_PULLUP); // Konfigurer stiften til input
Serial.begin(9600);
}
void loop() {
int læsning =digitalRead(switchPin);
// Hvis kontakten ændres, skal du nulstille timeren
if (læser !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Hvis forsinkelsen er lang nok, betragtes ændringen som gyldig
switchState =læsning;
// Behandle skiftetilstanden
if (switchState ==LAV) {
Serial.println("Switch trykket!");
} andet {
Serial.println("Switch frigivet!");
}
}
}
```
Denne Arduino-kode implementerer software-debouncing ved at kontrollere switch-tilstanden og sammenligne den med den tidligere tilstand. Hvis der registreres en ændring, nulstiller den en timer. Først efter en vis forsinkelse (debounceDelay) betragtes ændringen som gyldig og behandlet.