Схемы ·
Дребезг кнопки: как убрать ложные повторные срабатывания на низковольтном входе
Ложные повторные срабатывания убирают двумя способами: программной задержкой после первого изменения входа или RC-фильтром у самого входа. Начните с осциллограммы — она покажет длительность дребезга, и по ней выбирают задержку больше самого длинного выброса. Работайте только с низковольтной цепью кнопки, при отключённом питании, если предстоит пайка.
Как выглядит дребезг кнопки на осциллограмме

Дребезг — это серия быстрых замыканий и размыканий контакта за одно нажатие: металлические пластины отскакивают друг от друга, пока не прижмутся окончательно. На экране вместо одного чистого перепада видно несколько фронтов, разнесённых на доли или единицы миллисекунд.
Подключите щуп к входу сигнала кнопки и нажмите её несколько раз. Синхронизацию ставьте по фронту, развёртку — так, чтобы одно нажатие занимало заметную часть экрана. Запишите число выбросов и длительность самого долгого: это исходные данные для любого решения.
Если вход микроконтроллера читает каждое изменение уровня, одно физическое нажатие превращается в несколько событий в счётчике или в очереди прерываний. Причина не в кнопке, а в том, что код принимает каждый отскок за отдельное нажатие.
Программная задержка: как подтвердить нажатие
Алгоритм простой: код замечает первое изменение входа, ждёт фиксированное время и перечитывает вход. Если уровень остался новым, нажатие считают настоящим. Задержка должна быть больше максимального дребезга, но меньше времени, за которое человек отпускает кнопку, — иначе нажатия начнут теряться.
Проверяемый результат шага: после нажатия и отпускания счётчик событий увеличивается ровно на единицу. Прогоните десять нажатий и сравните с ожидаемым числом. Если счётчик прибавляет больше, задержка мала; если меньше — велика или код пропускает короткие нажатия.
Отдельно проверьте входы, которые считают импульсы аппаратно или вызывают прерывание на каждом фронте. Программная задержка в основном цикле там не поможет: прерывание уже сработало на отскоке. Для таких входов нужен фильтр до контроллера.
Расчёт RC-цепи для низковольтного входа
Резистор последовательно с входом и конденсатор от входа на землю образуют фильтр нижних частот. Он сглаживает быстрые выбросы раньше, чем они дойдут до цифрового входа. Постоянная времени считается по формуле τ = R × C, где R — в омах, C — в фарадах.
Пример: R = 10 кОм и C = 100 нФ дают τ = 10 000 × 0,0000001 = 0,001 с, то есть 1 мс. Такой фильтр ослабляет выбросы короче миллисекунды, но задерживает полезный фронт примерно на несколько миллисекунд. Для кнопки это обычно приемлемо, для быстрых сигналов — нет.
Номиналы сверяйте с документацией на вход: у части микроконтроллеров есть ограничения на скорость нарастания сигнала и на входные пороги логических уровней. Слишком большая ёмкость вместе с сопротивлением подтяжки может не дать уровню дойти до порога за время нажатия.
| Способ | Что даёт | Ограничение |
|---|---|---|
| Программная задержка | Не требует пайки, легко меняется | Не спасает аппаратный счётчик и прерывания на каждом фронте |
| RC-фильтр | Подавляет выбросы до входа | Добавляет детали и задерживает полезный фронт |
| Оба средства | Фильтр убирает короткие выбросы, код подтверждает устойчивое состояние | Нужно согласовать τ с частотой опроса |
Что выбрать: программа или RC-фильтр
Если кнопка опрашивается в основном цикле и дребезг короткий, достаточно программной задержки: она не занимает места на плате и правится без паяльника. Если вход связан с аппаратным счётчиком или прерыванием, без фильтра на входе не обойтись — код уже не успевает вмешаться.
На практике часто ставят оба средства. RC-цепь срезает самые короткие отскоки, а программа подтверждает, что уровень продержался достаточно долго. Выбор зависит от того, где именно возникает лишнее событие: в коде или в аппаратном узле.
Кнопка подключена к цифровому входу с питанием 3,3 В и подтяжкой 10 кОм к плюсу. На осциллограмме при одном нажатии видно три провала длительностью 0,2 мс, 0,5 мс и 0,3 мс, а код выдаёт три события. В программе после первого изменения вход перечитывают через 2 мс: при десяти нажатиях счётчик прибавляет десять, а не тридцать. Если дребезг окажется дольше 2 мс, задержку увеличивают по осциллограмме.
Порядок действий при ложных срабатываниях
- Обесточьте низковольтную цепь перед любыми изменениями монтажа.
- Подключите осциллограф к входу и запишите число и длительность выбросов при нескольких нажатиях.
- Выберите задержку больше максимального выброса или RC-фильтр с τ примерно в 2–5 раз больше длительности дребезга.
- После доработки повторите нажатия и проверьте, что счётчик меняется на единицу.
- Отдельно проверьте поведение прерывания, если вход к нему подключён.
Если после доработки счётчик всё равно прибавляет лишнее, вернитесь к осциллограмме: возможно, выброс длиннее выбранной задержки или помеха приходит не от кнопки, а по проводу. Тогда проверяют длину и экранирование линии, а также качество общего провода.
Следующее действие: прогоните серию из двадцати нажатий с интервалом в несколько секунд и запишите результат в журнал проверки — так вы увидите, стабильно ли решение или сбой проявляется только на части нажатий.