Zrozumienie problemu:
* Przełącz odbijanie kontaktu: Przełączniki mechaniczne po naciśnięciu lub zwolnieniu nie przechodzą natychmiastowo między stanem otwartym i zamkniętym. Wielokrotnie „odbijają się” z powodu wibracji mechanicznych i niedoskonałości styku.
* Wiele wyzwalaczy: To odbijanie może generować wiele sygnałów elektrycznych, nawet jeśli użytkownik zamierzał tylko jedno naciśnięcie. Może to powodować niezamierzone zachowanie obwodów, szczególnie tych wrażliwych na synchronizację.
Dlaczego zdemaskować?
* Dokładna interpretacja sygnału: Zapobiega wpływowi fałszywych sygnałów na logikę lub funkcje sterujące obwodu.
* Niezawodne działanie: Zapewnia, że obwód zareaguje tylko raz na pojedyncze naciśnięcie przełącznika.
Metody odrzucania:
1. Odbijanie sprzętu:
* Obwód RC: Najpopularniejsza metoda. Rezystor (R) i kondensator (C) są połączone równolegle w przełączniku. Kondensator ładuje się i rozładowuje powoli, odfiltrowując szybko odbijające się sygnały.
* Jak to działa: Kiedy przełącznik się zamyka, kondensator ładuje się przez rezystor. Sygnały odbicia są zbyt szybkie, aby w pełni naładować kondensator, dlatego przechodzi tylko pojedynczy, czysty sygnał.
* Oparte na diodach: Wykorzystuje diodę, aby zapobiec zbyt szybkiemu rozładowaniu kondensatora. Zapewnia to czysty sygnał, nawet jeśli odbicie jest długotrwałe.
2. Odrzucanie oprogramowania:
* Licznik programowy: Mikrokontroler można zaprogramować tak, aby ignorował zmiany sygnału wejściowego przez krótki czas po naciśnięciu przełącznika. Wszelkie zmiany w tym czasie uznawane są za odrzucenie.
* Jak to działa: Odliczanie czasu zostaje uruchomione po pierwszym naciśnięciu przełącznika. Wszelkie dalsze zmiany w czasie trwania timera są ignorowane. Po upływie czasu timera nowy stan przełącznika zostaje zaakceptowany.
* Maszyna stanu: Używa maszyny stanu do śledzenia stanu przełącznika. Maszyna zmienia stany dopiero z opóźnieniem, odfiltrowując odbijające się sygnały.
3. Specjalistyczne układy scalone odbijające:
* Odrzucanie układów scalonych: Zaprojektowane specjalnie do tłumienia sygnałów, zapewniając solidne i niezawodne rozwiązania.
Wybór właściwej metody:
* Odbijanie sprzętu: Najlepsze do prostych obwodów i gdy ważna jest opłacalność.
* Debouncing oprogramowania: Oferuje większą elastyczność i może obsługiwać bardziej złożone scenariusze.
* Specjalistyczne układy scalone odbijające: Idealny do zastosowań wymagających dużej dokładności, szybkości lub gdy przestrzeń jest ograniczona.
Kluczowe kwestie:
* Czas odbicia: Opóźnienie lub okno czasowe używane do odbicia powinno być dłuższe niż czas trwania odbicia przełącznika, ale krótsze niż oczekiwany czas reakcji użytkownika.
* Złożoność obwodu: Wybrana metoda usuwania odbić powinna być odpowiednia do złożoności obwodu i dostępnych zasobów.
Przykładowy kod (debouncing oprogramowania z Arduino):
```c++
stała int przełącznikPin =2; // Pin podłączony do przełącznika
int stanprzełączenia =0; // Stan początkowy przełącznika
unsigned long lastDebounceTime =0; // Ostatni raz, gdy przełącznik zmienił stan
const unsigned long debounceDelay =50; // Opóźnienie w milisekundach
unieważnij konfigurację() {
pinMode(przełącznikPin, INPUT_PULLUP); // Skonfiguruj pin dla wejścia
Serial.begin(9600);
}
pusta pętla() {
int czytanie =digitalRead(switchPin);
// Jeśli przełącznik się zmienił, zresetuj licznik czasu
if (czytanie!=stanprzełączenia) {
lastDebounceTime =millis();
}
if ((millis() - lastDebounceTime)> opóźnienie debounce) {
// Jeśli opóźnienie jest wystarczająco duże, uznaj zmianę za ważną
switchState =odczyt;
// Przetwórz stan przełącznika
if (stanprzełączenia ==NISKI) {
Serial.println("Przełącznik wciśnięty!");
} jeszcze {
Serial.println("Przełącznik zwolniony!");
}
}
}
```
Ten kod Arduino implementuje odrzucanie oprogramowania poprzez sprawdzenie stanu przełącznika i porównanie go z poprzednim stanem. Jeśli zostanie wykryta zmiana, resetuje licznik czasu. Dopiero po pewnym opóźnieniu (debounceDelay) zmiana zostaje uznana za ważną i przetworzoną.