Forstå problemet:
* Bytt kontaktsprett: Mekaniske brytere, når de trykkes eller slippes, går ikke umiddelbart mellom åpen og lukket tilstand. De "spretter" flere ganger på grunn av mekaniske vibrasjoner og kontaktfeil.
* Flere utløsere: Denne sprettende kan generere flere elektriske signaler selv om brukeren bare hadde til hensikt ett enkelt trykk. Dette kan forårsake utilsiktet oppførsel i kretser, spesielt de som er følsomme for timing.
Hvorfor debounce?
* Nøyaktig signaltolkning: Forhindrer falske signaler fra å påvirke kretsens logikk eller kontrollfunksjoner.
* Pålitelig drift: Sikrer at kretsen din bare reagerer én gang på et enkelt brytertrykk.
Debouncing-metoder:
1. Maskinvareavvisning:
* RC-krets: Den vanligste metoden. En motstand (R) og kondensator (C) er koblet parallelt over bryteren. Kondensatoren lader og utlades sakte, og filtrerer ut de raske sprettsignalene.
* Slik fungerer det: Når bryteren lukkes, lades kondensatoren gjennom motstanden. Sprettsignalene er for raske til å lade kondensatoren helt, så bare et enkelt, rent signal går gjennom.
* Diodebasert: Bruker en diode for å hindre at kondensatoren utlades for raskt. Dette sikrer et rent signal, selv om sprett er forlenget.
2. Programvareavvisning:
* Programvaretimer: En mikrokontroller kan programmeres til å ignorere inngangsendringer i en kort periode etter et brytertrykk. Eventuelle endringer innen den tiden regnes som sprett.
* Slik fungerer det: En timer startes når bryteren trykkes inn første gang. Eventuelle ytterligere endringer innenfor tidtakerens varighet ignoreres. Etter at tidtakeren utløper, aksepteres den nye brytertilstanden.
* State maskin: Bruker en tilstandsmaskin for å spore brytertilstanden. Maskinen endrer tilstand kun etter en forsinkelse, og filtrerer ut sprettsignalene.
3. Spesialiserte debouncing-ICer:
* Debouncing ICs: Designet spesielt for å avvise signaler, og gir robuste og pålitelige løsninger.
Velge riktig metode:
* Debouncing av maskinvare: Best for enkle kretser og når kostnadseffektivitet er viktig.
* Programvareavvisning: Tilbyr større fleksibilitet og kan håndtere mer komplekse scenarier.
* Spesialiserte debouncing IC-er: Ideell for applikasjoner som krever høy nøyaktighet, hastighet, eller når plassen er begrenset.
Nøkkelhensyn:
* Utkoblingstid: Forsinkelsen eller tidsvinduet som brukes for avhopping skal være lengre enn varigheten av brytersprett, men kortere enn brukerens forventede responstid.
* Kretskompleksitet: Den valgte debouncing-metoden bør være passende for kompleksiteten til kretsen og de tilgjengelige ressursene.
Eksempelkode (programvare som debouncing med Arduino):
```c++
const int switchPin =2; // Pin koblet til bryteren
int switchState =0; // Starttilstand for bryteren
unsigned long lastDebounceTime =0; // Sist gang bryteren endret tilstand
const unsigned long debounceDelay =50; // Forsinkelse i millisekunder
void setup() {
pinMode(switchPin, INPUT_PULLUP); // Konfigurer pinnen for input
Serial.begin(9600);
}
void loop() {
int lesing =digitalRead(switchPin);
// Hvis bryteren endret seg, tilbakestill tidtakeren
if (leser !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Hvis forsinkelsen er lang nok, anser endringen som gyldig
switchState =lesing;
// Behandle brytertilstanden
if (switchState ==LAV) {
Serial.println("Bytter trykket!");
} annet {
Serial.println("Switch utgitt!");
}
}
}
```
Denne Arduino-koden implementerer programvaredebouncing ved å sjekke brytertilstanden og sammenligne den med forrige tilstand. Hvis en endring oppdages, tilbakestiller den en tidtaker. Først etter en viss forsinkelse (debounceDelay) anses endringen som gyldig og behandlet.