Ongelman ymmärtäminen:
* Vaihda yhteyshenkilön palautusta: Mekaaniset kytkimet, kun niitä painetaan tai vapautetaan, eivät siirry välittömästi avoimen ja kiinni tilan välillä. Ne "pomppaavat" useita kertoja mekaanisen tärinän ja kosketusvirheiden vuoksi.
* Useita laukaisimia: Tämä pomppiminen voi tuottaa useita sähköisiä signaaleja, vaikka käyttäjä tarkoitti vain yhtä painallusta. Tämä voi aiheuttaa tahatonta käyttäytymistä piireissä, erityisesti niissä, jotka ovat herkkiä ajoitukselle.
Miksi Debounce?
* Tarkka signaalin tulkinta: Estää vääriä signaaleja vaikuttamasta piirisi logiikkaan tai ohjaustoimintoihin.
* Luotettava toiminta: Varmistaa, että piirisi reagoi vain kerran yhteen kytkimen painallukseen.
Palautusmenetelmät:
1. Laitteiston palautus:
* RC-piiri: Yleisin menetelmä. Vastus (R) ja kondensaattori (C) on kytketty rinnan kytkimen yli. Kondensaattori latautuu ja purkautuu hitaasti suodattaen nopeasti pomppivat signaalit.
* Miten se toimii: Kun kytkin sulkeutuu, kondensaattori latautuu vastuksen kautta. Pomppimissignaalit ovat liian nopeita lataamaan kondensaattoria täyteen, joten vain yksi puhdas signaali kulkee läpi.
* Diodipohjainen: Käyttää diodia estämään kondensaattoria purkautumasta liian nopeasti. Tämä varmistaa puhtaan signaalin, vaikka pomppiminen kestäisikin pitkään.
2. Ohjelmiston palautus:
* Ohjelmiston ajastin: Mikro-ohjain voidaan ohjelmoida ohittamaan tulomuutokset lyhyen ajan kytkimen painalluksen jälkeen. Kaikki tämän ajan sisällä tehdyt muutokset katsotaan palautumisiksi.
* Miten se toimii: Ajastin käynnistyy, kun kytkintä painetaan ensimmäisen kerran. Kaikki muut muutokset ajastimen keston sisällä ohitetaan. Kun ajastin umpeutuu, uusi kytkintila hyväksytään.
* Tilakone: Käyttää tilakonetta kytkimen tilan seuraamiseen. Kone vaihtaa tiloja vasta viiveen jälkeen suodattaen pois pomppivat signaalit.
3. Erikoistuneet palautuvat IC:t:
* Poistavat IC:t: Suunniteltu erityisesti häivyttämään signaaleja ja tarjoamaan kestäviä ja luotettavia ratkaisuja.
Oikean menetelmän valinta:
* Hardware Debouncing: Paras yksinkertaisille piireille ja kun kustannustehokkuus on tärkeää.
* Ohjelmiston palautus: Tarjoaa enemmän joustavuutta ja pystyy käsittelemään monimutkaisempia skenaarioita.
* Erikoistuneet palautuvat IC:t: Ihanteellinen sovelluksiin, jotka vaativat suurta tarkkuutta, nopeutta tai kun tilaa on rajoitetusti.
Tärkeimmät huomiot:
* Palautusaika: Palautukseen käytettävän viiveen tai aikaikkunan tulee olla pidempi kuin vaihdon palautuksen kesto, mutta lyhyempi kuin käyttäjän odotettu vasteaika.
* Piirin monimutkaisuus: Valitun palautusmenetelmän tulee olla sopiva piirin monimutkaisuuteen ja käytettävissä oleviin resursseihin.
Esimerkkikoodi (ohjelmiston palautus Arduinon kanssa):
``` c++
const int switchPin =2; // Nasta kytketty kytkimeen
int switchState =0; // Kytkimen alkutila
allekirjoittamaton pitkä viimeinenDebounceTime =0; // Viimeksi kytkin vaihtoi tilaa
const unsigned long debounceViive =50; // Viive millisekunteina
void setup() {
pinMode(kytkinPin, INPUT_PULLUP); // Määritä nastainen syötettä varten
Serial.begin(9600);
}
void loop() {
int lukeminen =digitalRead(kytkinPin);
// Jos kytkin vaihtui, nollaa ajastin
if (luetaan !=switchState) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> debounceDelay) {
// Jos viive on riittävän pitkä, katso muutos olevan voimassa
switchState =lukeminen;
// Käsittele kytkimen tila
if (switchState ==LOW) {
Serial.println("Kytkintä painettu!");
} muu {
Serial.println("Kytkin vapautettu!");
}
}
}
```
Tämä Arduino-koodi toteuttaa ohjelmistojen palautumisen tarkistamalla kytkimen tilan ja vertaamalla sitä edelliseen tilaan. Jos muutos havaitaan, se nollaa ajastimen. Vasta tietyn viiveen (debounceDelay) jälkeen muutos katsotaan voimassa olevaksi ja käsitellyksi.