Das Problem verstehen:
* Kontakt-Bounce wechseln: Mechanische Schalter wechseln beim Drücken oder Loslassen nicht sofort zwischen geöffnetem und geschlossenem Zustand. Aufgrund mechanischer Vibrationen und Kontaktfehler „springen“ sie mehrmals.
* Mehrere Auslöser: Dieses Springen kann mehrere elektrische Signale erzeugen, auch wenn der Benutzer nur einen einzigen Tastendruck beabsichtigt hat. Dies kann zu unbeabsichtigtem Verhalten in Schaltkreisen führen, insbesondere in Schaltkreisen, die empfindlich auf Timing reagieren.
Warum Debounce?
* Genaue Signalinterpretation: Verhindert, dass Störsignale die Logik- oder Steuerfunktionen Ihrer Schaltung beeinträchtigen.
* Zuverlässiger Betrieb: Stellt sicher, dass Ihre Schaltung nur einmal auf einen einzigen Schalterdruck reagiert.
Entprellungsmethoden:
1. Hardware-Entprellung:
* RC-Schaltung: Die gebräuchlichste Methode. Ein Widerstand (R) und ein Kondensator (C) sind parallel zum Schalter geschaltet. Der Kondensator lädt und entlädt sich langsam und filtert die schnell springenden Signale heraus.
* Wie es funktioniert: Wenn der Schalter schließt, lädt sich der Kondensator über den Widerstand auf. Die Bounce-Signale sind zu schnell, um den Kondensator vollständig aufzuladen, sodass nur ein einziges, sauberes Signal durchgelassen wird.
* Diodenbasiert: Verwendet eine Diode, um zu verhindern, dass sich der Kondensator zu schnell entlädt. Dies gewährleistet ein sauberes Signal, auch wenn der Prellvorgang länger dauert.
2. Software-Entprellung:
* Software-Timer: Ein Mikrocontroller kann so programmiert werden, dass er Eingabeänderungen nach dem Drücken eines Schalters für kurze Zeit ignoriert. Alle Änderungen innerhalb dieser Zeit gelten als Bounce.
* Wie es funktioniert: Beim ersten Drücken des Schalters wird ein Timer gestartet. Alle weiteren Änderungen innerhalb der Timerdauer werden ignoriert. Nach Ablauf des Timers wird der neue Schaltzustand übernommen.
* Zustandsmaschine: Verwendet eine Zustandsmaschine, um den Schalterzustand zu verfolgen. Die Maschine ändert den Zustand erst mit einer Verzögerung und filtert die Prellsignale heraus.
3. Spezialisierte Entprell-ICs:
* ICs entprellen: Speziell für die Entprellung von Signalen entwickelt und bieten robuste und zuverlässige Lösungen.
Die richtige Methode wählen:
* Hardware-Entprellung: Am besten geeignet für einfache Schaltkreise und wenn es auf Kosteneffizienz ankommt.
* Software-Entprellung: Bietet mehr Flexibilität und kann komplexere Szenarien bewältigen.
* Spezialisierte Entprell-ICs: Ideal für Anwendungen, die eine hohe Genauigkeit und Geschwindigkeit erfordern oder wenn der Platz begrenzt ist.
Wichtige Überlegungen:
* Entprellzeit: Die für die Entprellung verwendete Verzögerung oder das Zeitfenster sollte länger sein als die Dauer des Switch-Bounces, aber kürzer als die erwartete Reaktionszeit des Benutzers.
* Schaltungskomplexität: Die gewählte Entprellungsmethode sollte der Komplexität der Schaltung und den verfügbaren Ressourcen angemessen sein.
Beispielcode (Software-Entprellung mit Arduino):
„c++
const int switchPin =2; // Pin mit dem Schalter verbunden
int switchState =0; // Anfangszustand des Schalters
unsigned long lastDebounceTime =0; // Letztes Mal, als der Schalter seinen Zustand geändert hat
const unsigned long debounceDelay =50; // Verzögerung in Millisekunden
void setup() {
pinMode(switchPin, INPUT_PULLUP); // Den Pin für die Eingabe konfigurieren
Serial.begin(9600);
}
void loop() {
int reading =digitalRead(switchPin);
// Wenn sich der Schalter geändert hat, setze den Timer zurück
if (reading !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Wenn die Verzögerung lang genug ist, betrachten Sie die Änderung als gültig
switchState =lesen;
// Den Schaltzustand verarbeiten
if (switchState ==LOW) {
Serial.println("Schalter gedrückt!");
} sonst {
Serial.println("Schalter freigegeben!");
}
}
}
„
Dieser Arduino-Code implementiert die Software-Entprellung, indem er den Schalterzustand überprüft und ihn mit dem vorherigen Zustand vergleicht. Wenn eine Änderung erkannt wird, wird ein Timer zurückgesetzt. Erst nach einer bestimmten Verzögerung (debounceDelay) gilt die Änderung als gültig und wird verarbeitet.