Дребезг контактов способы борьбы ним

Дребезг контактов кнопки ардуино и его подавление и удаление

Дребезг контактов кнопки ардуино – одно из самых неприятных и непонятных явлений, с которыми сталкивается начинающий ардуинщик. Устранение дребезга необходимо для корректной работы проекта, в противном случае на короткий отрезок времени схема становится практически неуправляемы. В этой статье мы рассмотрим основные причины возникновения и способы подавления дребезга. О том, что такое кнопка, как правильно подключать модуль и писать для него скетч вы можете прочитать в первой статье, посвященной кнопкам в ардуино.

Причины дребезга кнопок

Кнопка ардуино – один из самых популярных и простых видов датчиков. В основе работы любой кнопки лежит механический способ смыкания-размыкания контактов. Нажимая на любую, даже самую простую тактовую кнопку, мы формируем определенное давление на внутренние механизмы (пластины или пружины), в результате чего происходит сближение или расхождение металлических пластин.

Мы люди взрослые и хорошо понимаем, что идеального в мире ничего не существует, в том числе идеально гладких поверхностей, контактов без неровностей, сопротивления и паразитной емкости. В нашем неидеальном мире в момент нажатия на кнопку в месте соединения контакты не соприкасаются мгновенно, микро-неровности на поверхности не позволяют пластинам мгновенно соединиться. Из-за этого в короткий промежуток времени на границе пластинок меняется и сопротивление, и взаимная емкость, из-за чего возникают масса разнообразных изменений уровня тока и напряжения. Другими словами, возникают очень интересные, хотя и не очень приятные процессы, которые в электротехнике называют переходными.

Переходные процессы протекают очень быстро и исчезают за доли миллисекунд. Поэтому мы редко их замечаем, например, когда включаем свет в комнате. Лампа накаливания не может менять свою яркость с такой скоростью, и тем более не может реагировать на изменения наш мозг. Но, обрабатывая сигал от кнопки на таком быстром устройстве, как Arduino, мы вполне можем столкнуться с такими переходными эффектами и должны их учитывать при программировании.

В идеальном мире форма сигнала после нажатия на кнопку должна быть строго прямоугольная. В реальных же условиях вместе резкого перехода мы видим множество пиков и спадов.

Ошибки дребезга кнопки

Как отразится дребезг на нашем проекте? Да самым прямым образом – мы будем получать на входе совершенно случайный набор значений. Ведь если мы считываем значение с кнопки непрерывно, в каждом новом рабочем цикле функции loop, то будем замечать все “всплески” и “падения” сигнала. Потому что пауза между двумя вызовами loop составляет микросекунды и мы измерим все мелкие изменения.

Если мы хотим отследить ситуацию, когда кнопка была отпущена после нажатия, то получим множество ложных сигналов – она будет “нажата-отпущена” десятки раз, хотя мы выполнили лишь однократное нажатие.

Вот пример скетча, в котором непременно обнаружится ошибка дребезга. Мы сможем увидеть в мониторе порта в первые мгновения после нажатия целый набор нулей и единиц в случайной последовательности (не важно, что означает 1 – нажатие или отпускание кнопки, важен сам факт появления хаоса).

Читайте также:  Скорость при координатном способе описания движения

Естественно, такое поведение ни к чему хорошему не приведет и нам нужно придумать способ борьбы с дребезгом. В нашем арсенале есть два способа: программный и аппаратный. Первый довольно простой, но не всегда его можно использовать в реальных проектах. Второй – более надежный, но требует существенных изменений в схеме. Давайте рассмотрим оба способа подробнее.

Программный способ устранения дребезга кнопок

Самым простым способом справиться с проблемой дребезга кнопки является выдерживание паузы. Мы просто останавливаемся и ждем, пока переходный процесс не завершится. Для этого можно использовать функцию delay()или millis() (за подробной информации можете обратиться к статье про использование функций delay() и millis() в ардуино). 10-50 миллисекунд – вполне нормальное значение паузы для большинства случаев.

В данном примере мы использовали задержку в программе, чтобы не реагировать на случайные всплески и определить реальную смену сигнала.

Борьба с дребезгом кнопки с помощью библиотеки ардуино

Проблема с дребезгом настолько популярна, что есть специальные библиотеки, в которых вам не надо организовывать ожидание и паузы вручную – это все делается внутри специального класса. Пример популярной библиотеки для борьбы с дребезгом кнопок – библиотека Bounce.

Пример использования библиотеки:

Аппаратный способ подавления дребезга кнопки

Подавление дребезга кнопки с помощью задержек в скетче – способ очень распространенный и не требующий изменения самой схемы. Но далеко не всегда его можно использовать – ведь 10 миллисекунд – это целая вечность для многих процессов в электроном мире. Также программный способ невозможно применять при использовании прерываний – дребезг приведет к многократному вызову функций и повлиять на этот процесс в скетче мы не сможем.

Более правильный (и более сложный) способ борьбы с дребезгом – использование аппаратного решения, сглаживающего импульсы, посылаемые с кнопки. Для этого, правда, придется внести изменения в схему.

Аппаратный способ устранения дребезга основан на использовании сглаживающих фильтров. Сглаживающий фильтр, как следует из названия, занимается сглаживанием всплесков сигналов за счет добавления в схему элементов, имеющих своеобразную “инерцию” по отношению к таким электрическим параметрам как ток или напряжение. Самым распространенным примером таких “инерционных” электронных компонентов является конденсатор. Он может “поглощать” все резкие пики, медленно накапливая и отдавая энергию, точно так же, как это делает пружина в амортизаторах.

За счет инерции устройство как утюгом походит по “мятому” сигналу с большим количеством пиков и впадин, создавая пусть и не идеальную, но вполне гладкую кривую, у которой легче определить уровень срабатывания.

Пример простого фильтра на базе RC-цепочки

Схема подключение фильтра для устранения дребезга:

Пример подключения к плате ардуино

Форма сигнала после использования фильтра:

Как видим, “лес” дребезга сменился достаточно плавной линией, с которой уже можно работать дальше.

Подавление дребезга с помощью триггера шмидта

Сделать квадратную форму сигнала с помощью простой RC цепочки невозможно. Для “огранения” сглаженных форм используется специальный компонент, который называется триггер шмидта. Его особенностью является срабатывание при достижении определенного уровня сигнала. На выходе триггера шмидта мы получим или высокий или низкий уровень сигнала, никаких промежуточных значений. Выход триггера инвертированный: при спаде входного сигнала он выдает на выходе включение и наоборот. Ниже представлена схема и результат работы с триггером шмидта.

Читайте также:  Способы увеличить размер мужского

Иллюстрация результата работы:

Как видим, мы практически полностью избавились от результатов переходных процессов, сперва превратив хаос в почти гладкую кривую линию, а затем с помощью триггера шмидта “отрубили” хвосты, придав сигналу практически идеальный вид. Подав его на вход ардуино, мы уже можем не беспокоиться о ложных срабатываниях и смело использовать в скетче метод digitalRead и прерывания.

Заключение

Явление дребезга кнопок – распространенная проблема, встающая перед всеми разработчиками ардуино. У нас в арсенале есть несколько возможностей устранения дребезга. Программный метод заключается в добавлении задержки в процессе измерения сигнала. Аппаратный способ подавления дребезга с помощью сглаживающего фильтра и триггера шмидта более сложный, но надежный. Выбирайте подходящий вариант, в зависимости от требований к проекту и ваших возможностей.

Источник

Схемы подавления дребезга контактов

Аппаратные подавители дребезга механических контактов коммутирующих
элементов: кнопок, выключателей, герконов, энкодеров и т. п.

С таким неприятным эффектом, как «дребезг» контактов переключателя сталкивается практически любой разработчик цифровых или микропроцессорных устройств. Явление это представляет собой процесс многократного неконтролируемого замыкания и размыкания контактов в моменты переключения любого механического коммутирующего устройства. Продолжительность дребезга контактов зависит от качества переключателя и может находиться в диапазоне – от десятка до сотни миллисекунд (Рис.1).


Рис.1 Реальная форма сигнала при замыкании–отпускании переключателя

Во многих случаях корректная работа логических устройств требует подавления эффекта дребезга контактов, так как без этого возникают предпосылки для многократных ложных срабатываний элементов, например – при подаче таких сигналов на тактовые входы счётчиков.

Использование пассивных подавителей дребезга, к примеру, изображённых на Рис.2 а) и б) и им подобным, как правило, к ожидаемому результату не приводит. И хотя они и вносят некоторый вклад в дело борьбы с паразитными импульсами, но до полной победы им, как ни крути, довольно далеко.

Рис.2 а) и б) – пассивные подавители, в) – схема подавления дребезга на триггере Шмитта

Другое дело, если к пассивной цепи, изображённой на Рис.2 б), присовокупить логический элемент, представляющий собой триггер Шмитта (Рис. 2 в)).
Предпочтительно, чтобы данный элемент был выполнен по КМОП технологии (к примеру, 561ТЛ2, 74HC14N, CD40106 или что-нибудь в этом духе) и имел высокое входное сопротивление.
Поскольку, по сравнению с простыми логическими вентилями, триггер Шмитта имеет дополнительную зону нечувствительности, равную разнице между напряжениями его срабатывания и отпускания, то и эффективность подавления паразитных импульсов, сглаженных интегрирующей цепочкой R2, C1 у него окажется значительно выше. К тому же имеющаяся в нём внутренняя положительная обратная связь обуславливает крутой фронт выходного сигнала, что является важным обстоятельством для нормальной работы большинства счётчиков.

Постоянная времени τ = R2*С1 интегрирующей цепи выбирается исходя из продолжительности дребезга контактов и составляет на приведённой схеме 10 миллисекунд.

Читайте также:  Трестолон ацетат мент способ према

Длительность выходного импульса соответствует времени замыкания контактов, а фронт и спад импульса несколько задержаны относительно моментов замыкания и размыкания контактов.

Рис.3 Подавление дребезга на триггере Шмитта

Если факт незначительной задержки выходного импульса является нежелательным, то на помощь приходят схемы подавления дребезга на RS-триггерах (Рис.4).
Данные триггеры могут быть реализованы: как на расхожих элементах 2И-НЕ либо 2ИЛИ-НЕ, так и на готовых RS-триггерах типа К561ТР2, CD4043 и т. д.

Рис.4 Схемы подавления дребезга на RS-триггерах

Подавители дребезга, выполненные на RS-триггерах, имеют длительность, а также фронт и спад выходного импульса полностью совпадающие с сигналом, идущим с контакта коммутирующего элемента. Помимо этого, они не содержат частотозависимых элементов, что позволяет им работать с любыми переключателями независимо от продолжительности дребезга. Однако при всех своих достоинствах, имеют и серьёзное конструктивное ограничение – в виде необходимости применения кнопки или выключателя с двумя группами контактов (on-off).

Одноконтактные схемы подавления дребезга, выполненные на ждущих мультивибраторах и прочих устройствах задержки, сужения или расширения импульсов, никакой практической ценности, на мой взгляд, не имеют. По сравнению со схемой на триггере Шмитта, они содержат большее количество элементов, часто довольно капризны и, в большинстве случаев, не имеют никаких функциональных преимуществ. Поэтому и рассматривать подобные устройства в рамках этой статьи мы не будем.

Однако было бы неправильно обойти вниманием такой класс приборов, как специализированные ИМС для удаления дребезга контактов, к примеру, микросхему MC14490 (Рис.5).

Рис.5 Схема включения ИМС 6-канального подавителя дребезга MC14490

Раньше эта микросхема выпускалась фирмой «ON Semiconductor» и стоила не вполне адекватных денег, теперь же – нашими китайскими друзьями, которые с удовольствием вам её отдадут по 100 с небольшим рублей, причём сразу аж за 5 шт.
Эта микросхема содержит в одном корпусе 6 подавителей дребезга, работающих по принципу цифрового интегратора.
Согласно документации MC14490 имеет следующие характеристики:

– Защитные диоды на всех входах;
– Подтягивающие к плюсу резисторы на всех цифровых входах;
– Возможность использования внутреннего генератора или внешнего тактового сигнала;
– ТТЛ совместимые уровни входов и выходов;
– Подавление дребезга на обоих фронтах сигнала;
– Напряжение питания 3. 18В;
– Собственное потребление тока 0,1. 0,65мА (в зависимости от напряжения питания).

В документации на микросхему есть формула для расчёта ёмкости конденсатора С1, определяющей частоту внутреннего генератора, но её можно подобрать и опытным путем. Обычно номинал этого конденсатора составляет: от 50. 200 пФ для энкодеров и до 1. 10 нФ для обычных кнопок.


Если же хочется построить нечто подобное, но на микросхемах стандартной логики, то это с лёгкостью можно исполнить по схеме, приведённой на Рис.6.

Данный подавитель дребезга предполагает наличие внешнего генератора, который также легко можно реализовать на стандартных КМОП вентилях.
Причём одного внешнего генератора окажется вполне достаточным для работы практически с неограниченным количеством таких подавителей.

Рис.6 Схема подавителя дребезга на D-триггере

Кстати, по принципу действия это устройство весьма напоминает продукты программной реализации подавителей дребезга на микроконтроллере.

Источник

Оцените статью
Разные способы