Большинство опытных инженеров работающих с электроникой, знакомы с данным явлением и отлично справляются с ним.
Что такое дребезг контактов. Если металлический шарик уронить, на твердую поверхность, например кафельная плитка, то за счет собственной упругости и упругости плитки, шарик несколько раз подскочит.
Конечно, это будут не супер отскоки как у баскетбольного мяча, но несколько отрывов произойдет. Если посмотреть на фото перекидных контактов реле, то заметим, что они из металла и обладают определенной упругостью.
В момент переключения будет происходит от 3 до 7 касаний, прежде чем они сомкнуться плотно.
Как видим из электрической диаграммы, в момент переключения проходит несколько импульсов. В работе цифровых устройств, дребезг примет уже такой вид.
Хотя в ТТЛ логике данная диаграмма дребезга переднего фронта не "заметит", а вот задний фронт, каждое касание и отрыв, будут формировать новый импульс. Это может сказаться в целом на работе устройства, например работе счетчика импульсов. Даже при работе с Ардуино вы столкнетесь с ним, при работе с кнопками или концевиками.
Следующая задача, это устранение данной технической помехи. Тут можно предложить три варианта решения,
1. Это выбор коммутационных устройств с отсутствием дребезга, точнее они уже конструктивно включают способы устранения или не допущения дребезга. Но по сути его можно приравнять ко второму пункту.
2. Аппаратное решение проблемы - установка дополнительной схемы на входе микроконтроллера.
Здесь, конечно, решений тысячи, начиная от применения RC - фильтров и заканчивая двухтактными D - триггерами.
Решения с фильтром:
В данной схеме, как только нажата кнопка S2 ёмкость через неё мгновенно разряжается по замкнутому контуру через S2. В тот момент, когда S2 кратковременно разомкнута, на разряженной емкости логический 0 и пока она зарядится требуется время, заряд идет по цепи, VCC - R2 -C1 - GND. Но есть у схемы недостаток: в момент отключения S2, ёмкости требуется время для заряда (восстановление заряда) ёмкости, а пока она заряжается, на входе логический 0.
3. Решение - это программное. в целом принято считать, что любое переключение заканчивается в период 50 миллисекунд, но при желании опытным путем можно точно для Вашего случая измерить время дребезга и взять время задержки с запасом. Итак идея программного компенсирования дребезга в том, что после сработки входа, мы выдерживаем паузу и после этого пропускаем импульс в обработку.
Пример программы:
Вводим две переменные
a -текущее состояние
b - предыдущее состояние.
Запускаем цикл опроса кнопки.
Считываем значение значение кнопки а,
Сравниваем a и b
Если а = b то продолжаем цикл опроса.
иначе делаем паузу и снова проверяем Если а <> b то числу b присваиваем число a
Выполняем необходимые процедуры и снова заходим на цикл опроса кнопки.
Это один из простейших примеров, программы. Грамотные программисты пишут под себя модули уже сразу с задержкой в командах.
Обратите внимание, что недостаток это программы в том, что в момент делаем паузу : программа ожидает заданное время, то есть общая остановка процесса вычисления, при этом на входе в эту паузу, может творится все, что угодно.
Достоинство алгоритма в том, что он прост и понятен.
При работе с енкодером (преобразователь вращения в импульсы), обязательно ставятся фильтры и настраивается система в целом, так как при быстром вращении, нужный импульс может проигнорироваться как дребезг.
Эта тема важна именно тем, кто работает с кнопками, концевиками и любыми сухими контактами.
Учитесь с нами, если видите недочеты, то пишите лично.
Для поиска публикаций через поисковые системы, просто вводите слово Вивитроника.
Свои комментарии можете предлагать в группе вконтакте,
Если есть вопросы или по желания, то пишите, через Обратную связь.
Канал телеграм.