Het probleem begrijpen:
* Contactbounce wijzigen: Mechanische schakelaars schakelen, wanneer ze worden ingedrukt of losgelaten, niet onmiddellijk over tussen open en gesloten toestanden. Ze "stuiteren" meerdere keren als gevolg van mechanische trillingen en contactonvolkomenheden.
* Meerdere triggers: Dit stuiteren kan meerdere elektrische signalen genereren, ook al bedoelde de gebruiker slechts één keer drukken. Dit kan onbedoeld gedrag in circuits veroorzaken, vooral in circuits die gevoelig zijn voor timing.
Waarom debouncen?
* Nauwkeurige signaalinterpretatie: Voorkomt dat valse signalen de logica of besturingsfuncties van uw circuit beïnvloeden.
* Betrouwbare werking: Zorgt ervoor dat uw circuit slechts één keer reageert op een enkele druk op de schakelaar.
Debouncing-methoden:
1. Hardware-debouncing:
* RC-circuit: De meest voorkomende methode. Een weerstand (R) en een condensator (C) zijn parallel over de schakelaar geschakeld. De condensator laadt en ontlaadt langzaam en filtert de snelle stuitersignalen eruit.
* Hoe het werkt: Wanneer de schakelaar sluit, wordt de condensator opgeladen via de weerstand. De stuitersignalen zijn te snel om de condensator volledig op te laden, zodat er slechts één enkel, schoon signaal doorkomt.
* Op diodes gebaseerd: Maakt gebruik van een diode om te voorkomen dat de condensator te snel ontlaadt. Dit zorgt voor een schoon signaal, zelfs als de bounce langer duurt.
2. Software-debouncing:
* Softwaretimer: Een microcontroller kan worden geprogrammeerd om invoerwijzigingen gedurende een korte tijd te negeren nadat een schakelaar wordt ingedrukt. Alle wijzigingen binnen die tijd worden als bounce beschouwd.
* Hoe het werkt: Er wordt een timer gestart wanneer de schakelaar voor het eerst wordt ingedrukt. Eventuele verdere wijzigingen binnen de timerduur worden genegeerd. Nadat de timer is afgelopen, wordt de nieuwe schakelstatus geaccepteerd.
* Statemachine: Gebruikt een statusmachine om de schakelaarstatus te volgen. De machine verandert pas na een vertraging van status en filtert de stuiterende signalen eruit.
3. Gespecialiseerde debouncing-IC's:
* IC's debouncen: Specifiek ontworpen om signalen te debouncen en robuuste en betrouwbare oplossingen te bieden.
De juiste methode kiezen:
* Hardware-debouncing: Het beste voor eenvoudige circuits en wanneer kosteneffectiviteit belangrijk is.
* Software-debouncing: Biedt meer flexibiliteit en kan complexere scenario's aan.
* Gespecialiseerde debouncing-IC's: Ideaal voor toepassingen die een hoge nauwkeurigheid en snelheid vereisen, of wanneer de ruimte beperkt is.
Belangrijke overwegingen:
* Debouncing-tijd: De vertraging of het tijdvenster dat wordt gebruikt voor debouncen moet langer zijn dan de duur van de switch-bounce, maar korter dan de verwachte responstijd van de gebruiker.
* Circuitcomplexiteit: De gekozen debouncingmethode moet geschikt zijn voor de complexiteit van het circuit en de beschikbare bronnen.
Voorbeeldcode (software-debouncing met Arduino):
```c++
const int switchPin =2; // Pin aangesloten op de schakelaar
int schakelstatus =0; // Beginstatus van de schakelaar
niet-ondertekend lang lastDebounceTime =0; // Laatste keer dat de schakelaar van status veranderde
const niet-ondertekende lange debounceDelay =50; // Vertraging in milliseconden
ongeldige setup() {
pinMode(schakelaarPin, INPUT_PULLUP); // Configureer de pin voor invoer
Serieel.begin(9600);
}
lege lus() {
int lezen =digitalRead(switchPin);
// Als de schakelaar is gewijzigd, stelt u de timer opnieuw in
if (lezen !=switchState) {
laatsteDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Als de vertraging lang genoeg is, beschouw de wijziging dan als geldig
switchState =lezen;
// Verwerk de schakelstatus
als (schakelstatus ==LAAG) {
Serial.println("Schakelaar ingedrukt!");
} anders {
Serial.println("Schakelaar vrijgegeven!");
}
}
}
```
Deze Arduino-code implementeert software-debouncing door de schakelaarstatus te controleren en deze te vergelijken met de vorige status. Als er een verandering wordt gedetecteerd, wordt een timer gereset. Pas na een bepaalde vertraging (debounceDelay) wordt de wijziging als geldig beschouwd en verwerkt.