Razumevanje težave:
* Odboj prek stika: Mehanska stikala, ko jih pritisnete ali spustite, ne preidejo takoj med odprtim in zaprtim stanjem. Večkrat "odskočijo" zaradi mehanskih tresljajev in nepopolnosti kontakta.
* Več sprožilcev: To poskakovanje lahko ustvari več električnih signalov, čeprav je uporabnik želel le en sam pritisk. To lahko povzroči nenamerno vedenje v tokokrogih, zlasti tistih, ki so občutljivi na čas.
Zakaj Debounce?
* Natančna interpretacija signala: Preprečuje, da bi lažni signali vplivali na logiko ali krmilne funkcije vašega vezja.
* Zanesljivo delovanje: Zagotavlja, da se vaše vezje odzove le enkrat na en sam pritisk stikala.
Metode odstranjevanja odbojev:
1. Odboj strojne opreme:
* RC vezje: Najpogostejša metoda. Prek stikala sta vzporedno povezana upor (R) in kondenzator (C). Kondenzator se počasi polni in prazni, s čimer filtrira hitre odbojne signale.
* Kako deluje: Ko se stikalo zapre, se kondenzator napolni skozi upor. Odbojni signali so prehitri, da bi popolnoma napolnili kondenzator, zato gre skozi le en sam, čist signal.
* Na osnovi diode: Uporablja diodo, ki preprečuje prehitro praznjenje kondenzatorja. To zagotavlja čist signal, tudi če je odboj dolgotrajen.
2. Odstranjevanje programske opreme:
* Programski časovnik: Mikrokrmilnik je mogoče programirati tako, da po pritisku stikala za kratek čas prezre vhodne spremembe. Vse spremembe v tem času se štejejo za zavrnjene.
* Kako deluje: Časovnik se zažene ob prvem pritisku na stikalo. Vse nadaljnje spremembe znotraj trajanja časovnika se ne upoštevajo. Po poteku časovnika je novo stanje stikala sprejeto.
* State Machine: Za sledenje stanju stikala uporablja stanje stroj. Stroj spremeni stanja samo po zakasnitvi in filtrira odbojne signale.
3. Specializirani IC-ji za odbijanje:
* Odbojni IC-ji: Zasnovan posebej za odbijanje signalov, kar zagotavlja robustne in zanesljive rešitve.
Izbira prave metode:
* Odbijanje strojne opreme: Najboljše za preprosta vezja in kadar je pomembna stroškovna učinkovitost.
* Odbijanje programske opreme: Ponuja večjo prilagodljivost in lahko obravnava bolj zapletene scenarije.
* Specializirani IC-ji za odbijanje: Idealen za aplikacije, ki zahtevajo visoko natančnost, hitrost ali kadar je prostor omejen.
Ključni premisleki:
* Čas odboja: Zakasnitev ali časovno okno, uporabljeno za odbijanje, mora biti daljše od trajanja odboja stikala, vendar krajše od pričakovanega odzivnega časa uporabnika.
* Zapletenost vezja: Izbrana metoda odboja mora ustrezati kompleksnosti vezja in razpoložljivim virom.
Primer kode (odboj programske opreme z Arduinom):
``c++
const int switchPin =2; // Pin povezan s stikalom
int switchState =0; // Začetno stanje stikala
unsigned long lastDebounceTime =0; // Nazadnje je stikalo spremenilo stanje
const unsigned long debounceDelay =50; // Zakasnitev v milisekundah
void setup() {
pinMode(switchPin, INPUT_PULLUP); // Konfigurirajte pin za vnos
Serial.begin(9600);
}
void loop() {
int branje =digitalRead(switchPin);
// Če se stikalo spremeni, ponastavite časovnik
if (branje !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Če je zamuda dovolj dolga, velja sprememba za veljavno
switchState =branje;
// Obdelaj stanje stikala
if (switchState ==LOW) {
Serial.println("Stikalo pritisnjeno!");
} drugače {
Serial.println("Stikalo sproščeno!");
}
}
}
```
Ta koda Arduino implementira odbijanje programske opreme tako, da preveri stanje stikala in ga primerja s prejšnjim stanjem. Če je zaznana sprememba, ponastavi časovnik. Šele po določenem zamiku (debounceDelay) se sprememba šteje za veljavno in obdelano.