Наверняка все кто подключал к микроконтроллеру кнопку, сталкивались с такой проблемой. Например решил ты сделать счетчик нажатий той самой кнопки, с выводом результата например на какой нибудь дисплей. Написал код нажал на кнопку и удивился, нажал то я один раз а прибавилось больше и это значение не постоянно. Вообщем и я когда то столкнулся с этим явлением, название ему дребезг контактов.
Иллюстрация процесса :
Происходит это из-за дрожания контактов, причин этого явления несколько (инерция, не идеальность поверхности контактов).
Решение проблемы:
- Программное (путем задержки перед считыванием состояния)
- Аппаратное (электрическая цепь)
*Примечательно у контроллеров STM для обработки инкрементального энкодера (механического) есть встроенное решение.
Я в основном использую решение с применением электрической цепи (RC), весьма эффективно но не практично (лишние компоненты в схеме).
Схема:
В исходном состоянии (контакты разомкнуты) конденсатор заряжен, при замыкании контактов конденсатор начинает разряжаться через резистор R33. Время разряда конденсатора T = 5R33C за это время напряжение на конденсаторе изменяется на 99,2%. Время заряда получается больше потому как к R33 добавляется R34. Принцип работы такой: емкость конденсатора подавляет всплески напряжения, чем больше емкость и скорость изменения напряжения тем сильнее подавляется всплеск.
На этом все дорогие друзья, дерзайте и используйте во благо.