В копилку разработчику, который привык уделять внимание мелочам
Рассмотрим простую и надежную методику аппаратного подавления дребезга контактов. Будем говорить исключительно о сигнальных линиях, не затрагивая сильноточные цепи и большие напряжения. Например, об обычных тактильных кнопках (как в клавиатуре).
Есть два метода подавления ложных срабатываний: аппаратный – с помощью схемы, и программный – с помощью алгоритма. В каждом конкретном случае надо смотреть, какой из методов лучше использовать. Я работаю в сфере медицины, поэтому приоритет – надежность, цена реализации на втором месте. Для надежности бороться с ложными срабатываниями будем, используя аппаратный подход как первую ступень защиты, а если это не поможет, добавим программный алгоритм как вторую ступень. На Рисунке 1 представлена схема подавления дребезга контактов для одной кнопки.
Рисунок 1. | Схема подавления дребезга контактов на RC-фильтре и триггере Шмитта с инвертором. |
На входе 2 микросхемы D1 (SN74LVC1G14) расположен RC-фильтр с постоянной времени 11 мс. Фильтр, состоящий из элементов R1, R2 и C1, выполняет основную работу по подавлению дребезга. А микросхема логики «НЕ» с триггером Шмитта, во-первых, инвертирует сигнал, чтобы с ним было удобнее работать (кнопка нажата – на выходе «1», отпущена – «0»). Во-вторых, как бы дофильтровывает сигнал, делая это за счет гистерезиса триггера Шмитта. Получается надежная фильтрация.
Работает схема на Рисунке 1 следующим образом. Будем считать, что в исходном положении кнопка SB1 разомкнута.
При подаче питания на схему (в нашем случае 3.3 В) через резисторы R1 и R2 начинает заряжаться конденсатор C1. Микросхема логики стартует быстро и за какие-то микросекунды уже готова к работе. При этом конденсатор C1 заряжается достаточно медленно, и в момент запуска на входе 2 микросхемы D1 низкое напряжение, которое распознается как 0. А значит, микросхема по своей логике «НЕ» переключает свой выход 4 в единицу. На Рисунке 2 показана осциллограмма при подаче питания на схему (точка А).
Рисунок 2. | Канал 1 – напряжение питания схемы; канал 2 – напряжение на входе 2 микросхемы D1; канал 3 – напряжение на выходе 4 микросхемы D1. |
Примерно через 10 мс, которые задаются сопротивлениями R1, R2 и емкостью C1, напряжение на входе микросхемы достигнет порога переключения, и выход микросхемы D1 притянется к земле (точка Б на осциллограмме). Таким образом, надо учитывать, что в момент подачи питания на выходе микросхемы проскочит импульс длительностью примерно 10 мс (расстояние от точки А до точки Б, Рисунок 2).
Для того чтобы получить обратную логику работы кнопки, то есть, чтобы при нажатии SB1 на выходе D1 был «0», а при отпускании – «1», надо использовать триггер Шмитта без логического «НЕ» (например SN74LVC1G17). При использовании такой микросхемы после подачи питания логическая «1» на выходе D1 появится спустя 10 мс, которые также определяются зарядом конденсатора C1.
Теперь, как подавляется дребезг. При нажатии на кнопку дребезг контактной пары обычно ниже, чем при отпускании, поэтому поймать его на экране осциллографа непросто. Но фильтрация одинаково хорошо происходит как в момент замыкания, так и размыкания контактов. На Рисунке 3 показана осциллограмма в момент нажатия на кнопку SB1 (точка А).
Рисунок 3. | Канал 1 – напряжение на кнопке; канал 2 – напряжение на входе 2 микросхемы D1; канал 3 – напряжение на выходе 4 микросхемы D1. |
При замыкании кнопки SB1 конденсатор C1 начинает разряжаться через резистор R2. Как только уровень напряжения на нем упадет ниже порогового уровня триггера Шмитта, микросхема «подтянет» выход к плюсу питания, то есть в «1» (точка Б, Рисунок 3). На Рисунке 4 изображена осциллограмма в момент отпускания кнопки (точка А).
Рисунок 4. | Канал 1 – напряжение на кнопке; канал 2 – напряжение на входе 2 микросхемы D1; канал 3 – напряжение на выходе 4 микросхемы D1. |
На Рисунке 4 отчетливо видно возникновение дребезга контактов в момент отпускания кнопки (точка В). Условно говоря, дребезг контактной пары частично заряжает конденсатор C1 через резисторы R1 и R2, но из-за своей малой длительности не может поднять напряжение на входе триггера Шмитта выше порогового уровня переключения. Когда же дребезг пропадает (контактная пара кнопки полностью разомкнулась), напряжение на конденсаторе C1 начинает расти, и дойдя до порогового значения, переключает триггер Шмитта в «0» (точка Б, Рисунок 4).
Таким образом, схема подавляет любые импульсы длительностью ниже постоянной времени RC-фильтра на элементах R1, R2, C1 (при указанных на схеме номиналах – это около 10-11 мс). Указанных номиналов обычно хватает практически для любых тактильных кнопок. Если у вас кнопка отвратительного качества, то надо увеличить постоянную времени RC-фильтра, например, поставив конденсатор C1 емкостью 4.7-10 мкФ. Если же вы хотите использовать эту схему для подавления ложных срабатываний энкодера, то номинал C1 надо, наоборот, уменьшить (на практике до 10 нФ). Иначе быстрое вращение ручки энкодера будет восприниматься схемой как помеха.
Несколько слов о резисторе R3. Он нужен для ограничения тока в случае замыкания выхода «OUT» на «землю» или на плюс питания. Такое может случиться, если схема расположена на плате с кнопками, а сигнал принимается на другой плате через шлейф (например, замыкание оголенных проводов, перепутаны контакты и т. д.). Второе его назначение – сделать восходящий и нисходящий фронт сигнала более пологими. Это необходимо для прохождения тестов на электромагнитную совместимость (ЭМС), особенно если длина проводника от выхода микросхемы D1 до входа микроконтроллера большая.
Рисунок 5. | Фронт выходного сигнала микросхемы D1 при отсутствии резистора R3. |
Если R3 не устанавливать, то положительный и отрицательный фронты сигнала будут примерно по 10 нс. На Рисунке 5 показан положительный фронт сигнала при переключении микросхемы D1 в единицу при отсутствии резистора R3.
На Рисунке 6 показан положительный фронт сигнала при переключении микросхемы D1 в единицу при установленном резисторе R3 номиналом 270 Ом.
Рисунок 6. | Фронт выходного сигнала микросхемы D1 с установленным резистором R3 (270 Ом). |
Нагрузкой выхода схемы служит вывод микроконтроллера STM32F405, сконфигурированный как вход. Как видно из Рисунка 6, при установленном резисторе R3 фронт сигнала увеличивается примерно до 50 нс. Увеличивая сопротивление резистора R3, можно еще больше растягивать фронт сигнала.
Теперь пару слов о финансовой стороне вопроса. Цена микросхемы SN74LVC1G14 производителя Youtai на сегодняшний день (ноябрь 2024 года) составляет около 10 рублей в магазине Чип и Дип (это, можно сказать, потолок цены). Остальные элементы в расчет не беру – они копеечные. Если вы, к примеру, делаете средний по сложности проект, содержащий клавиатуру из 10 кнопок, 4-5 внешних датчика и пару энкодеров, то в сумме вы получаете 10 + 5 + 2 = 17 каналов для фильтрации. 17×10 руб. = 170 руб. Много это или мало за стабильность устройства в целом? Думаю, ответ очевиден.