Förstå problemet:
* Switch Contact Bounce: Mekaniska omkopplare, när de trycks ned eller släpps, övergår inte direkt mellan öppet och stängt läge. De "studsar" flera gånger på grund av mekaniska vibrationer och kontaktfel.
* Flera utlösare: Denna studsning kan generera flera elektriska signaler även om användaren bara avsåg en enda tryckning. Detta kan orsaka oavsiktligt beteende i kretsar, särskilt de som är känsliga för timing.
Varför Debounce?
* Exakt signaltolkning: Förhindrar falska signaler från att påverka din krets logik eller kontrollfunktioner.
* Tillförlitlig drift: Säkerställer att din krets bara reagerar en gång på en enda knapptryckning.
Debouncing-metoder:
1. Hårdvaruavvisning:
* RC-krets: Den vanligaste metoden. Ett motstånd (R) och en kondensator (C) är parallellkopplade över omkopplaren. Kondensatorn laddas och laddas ur långsamt och filtrerar bort de snabbt studsande signalerna.
* Så fungerar det: När omkopplaren stänger laddas kondensatorn genom motståndet. Studssignalerna är för snabba för att ladda kondensatorn helt, så bara en enda, ren signal passerar igenom.
* Diodbaserad: Använder en diod för att förhindra att kondensatorn laddas ur för snabbt. Detta säkerställer en ren signal, även om studsen är utdragen.
2. Programvaruavvisning:
* Programvarutimer: En mikrokontroller kan programmeras att ignorera ingångsändringar under en kort tid efter en strömbrytartryckning. Alla förändringar inom den tiden betraktas som studsar.
* Så fungerar det: En timer startas första gången strömbrytaren trycks in. Alla ytterligare ändringar inom timerns varaktighet ignoreras. Efter att timern har löpt ut, accepteras det nya växlingsläget.
* Statsmaskin: Använder en tillståndsmaskin för att spåra switchtillståndet. Maskinen ändrar endast tillstånd efter en fördröjning och filtrerar bort de studsande signalerna.
3. Specialiserade debouncing-IC:er:
* Debouncing ICs: Designad speciellt för att avvisa signaler, vilket ger robusta och pålitliga lösningar.
Välja rätt metod:
* Debouncing av maskinvara: Bäst för enkla kretsar och när kostnadseffektivitet är viktigt.
* Debouncing av programvara: Erbjuder större flexibilitet och kan hantera mer komplexa scenarier.
* Specialiserade debouncing-IC:er: Idealisk för applikationer som kräver hög noggrannhet, hastighet eller när utrymmet är begränsat.
Nyckelöverväganden:
* Destudstid: Fördröjningen eller tidsfönstret som används för avstudsning bör vara längre än varaktigheten av switch-studs men kortare än användarens förväntade svarstid.
* Kretskomplexitet: Den valda avstudsningsmetoden bör vara lämplig för kretsens komplexitet och tillgängliga resurser.
Exempelkod (programvara som debouncing med Arduino):
```c++
const int switchPin =2; // Pin ansluten till switchen
int switchState =0; // Omkopplarens initiala tillstånd
unsigned long lastDebounceTime =0; // Senaste gången omkopplaren ändrade tillstånd
const unsigned long debounceDelay =50; // Fördröjning i millisekunder
void setup() {
pinMode(switchPin, INPUT_PULLUP); // Konfigurera stiftet för input
Serial.begin(9600);
}
void loop() {
int läsning =digitalRead(switchPin);
// Om omkopplaren ändrades, återställ timern
if (läser !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Om fördröjningen är tillräckligt lång, betrakta ändringen som giltig
switchState =läsning;
// Bearbeta switchtillståndet
if (switchState ==LÅG) {
Serial.println("Switch nedtryckt!");
} annat {
Serial.println("Switch släppt!");
}
}
}
```
Denna Arduino-kod implementerar mjukvaruavvisning genom att kontrollera switchtillståndet och jämföra det med det tidigare tillståndet. Om en ändring upptäcks återställer den en timer. Först efter en viss fördröjning (debounceDelay) anses ändringen vara giltig och bearbetad.