Устранение дребезга механического переключателя
← Все статьи

Устранение дребезга механического переключателя

5 мин

Переключатель не переключается чисто

Металлические контакты настоящего механического переключателя физически ударяются друг о друга при каждом нажатии или отпускании, порождая всплеск быстрых, паразитных переходов 0/1, длящийся несколько миллисекунд, прежде чем сигнал наконец устоится — слишком быстро, чтобы заметить глазом, но вполне достаточно быстро, чтобы схема, опрашивающая сигнал много раз в секунду, приняла это за десятки отдельных нажатий. Собственная симуляция Boolflow идеализирована и не воспроизведёт этот дребезг, но любая схема, предназначенная для работы на настоящем железе, должна учитывать его.

ДребезгСтабильнодребезг

Опрос в регистр сдвига

Стандартное решение — опрашивать сигнал переключателя в небольшой регистр сдвига с умеренной фиксированной частотой (от такта, замедленного через CLK_DIV, значительно ниже частоты дребезга) и принимать новое значение только тогда, когда все биты, хранящиеся в регистре, совпадают.

Условие принятия — полное согласие

Подайте четыре выходных бита SHIFT4 параллельно на AND4 и NOR4: AND4 выдаёт 1, только когда все четыре последних опроса были 1, а NOR4 выдаёт 1, только когда все четыре были 0. Срабатывание любого из них — это и есть устойчивое, отфильтрованное от дребезга показание: всё, что ещё дребезжит, содержит в регистре смесь 0 и 1 и не удовлетворяет ни одному из условий.

Попробуйте сами

Соберите этот фильтр в редакторе схем, тактируемый медленным CLOCK, а затем подайте его устойчивый выход — вместо необработанного переключателя INPUT — на детектор фронта перед счётчиком: именно такое сочетание нужно любой реальной схеме, управляемой кнопкой.

Собрать фильтр дребезга в редакторе схем →