Найти тему
Ардуинщик

Дребезг контактов

Дребезг контактов - явление, возникающее в электромеханических устройствах. Связано оно с тем, что контакты при замыкании короткое время многократно отскакивают друг от друга ввиду того, что им требуется время для зарядки. На графике выглядит оно так:

Как с этим бороться?

Можно выделить два способа: аппаратный и программный.

Программный способ подразумевает собой написание функции "АнтиДребезг". Эта функция будет при смене сигнала с 0 на 1 или наоборот будет производить дополнительную проверку через 12 миллисекунд. Если через 12 мс сигнал не изменится, значит смена сигнала произошла не из-за дребезга.

Напишем такую функцию. В нашем примере она будет проверять дребезг кнопки.

void debounce() {
// последнее состояние кнопки
lastFlash=digitalRead(ButtonPin) ;
delay(12);
if (digitalRead(ButtonPin)==lastFlash && lastFlash==1){
//допустим, будем запускать светодиод
digitalWrite(led, HIGH);
}
if( digitalRead(ButtonPin)==lastFlash && lastFlash==0 ){
// если кнопку наоборот отпустили
digitalWrite(led, LOW);
}
}

В функции мы проводили однократную проверку. Можно повторить данную проверку дважды или трижды по необходимости.

Это конечно все хорошо, но каждый раз вызывать функцию неудобно. К тому же, функция может подвести. Для этого придумали аппаратный способ.

-2

Взглянем на схему. Мы просто связали две контактные рельсы кнопки конденсатором на 100мкф. Это подавило дребезг. Это ведь намного проще чем программное подавление. Впечатляет?

Если разобраться в матчасти, то мы собрали низкочастотный фильтр, применение которого намного шире, чем подавление дребезга кнопки.

Подпишись! Лайк! Спасибо!