Логотип

AVR микроконтроллеры для начинающих

материалы в категории

Что такое дребезг контактов и как с ним бороться

Многие, наверное уже слышали такое выражение как дребезг контактов. Что такое дребезг контактов?
Да все легко и просто: все дело в том что при любом механическом включении (нажатии на кнопку, например), контакты замыкаются не сразу, а как-бы еще "вибрируют" какое-то время...
Если в электрике эта самая вибрация сильного влияния может и не оказать на работоспособность всего устройства (разве только что может быть ускорит подгорание контактов), то в электронике, особенно там где речь идет о быстродействующих процессах, дребезг контактов очень даже запросто может вызвать ложное срабатывание устройства или сбой программы.

В общем давайте посмотрим на рисунок который отображает физический  процесс дребезга контактов

дребезг контактов процесс

Чем это может быть чревато?
Допустим, к примеру, программа микроконтроллера отслеживает определенный порт ввода и она должна сработать когда уровень на этом входе станет равным 0. Ладно, мы нажали на кнопку и подали логический ноль на этот порт. Вроде-бы все в порядке...
А на самом деле что происходит? За короткий промежуток времени логический уровень на этом вводе поменяется хаотично несколько раз! Результат такого воздействия может быть просто непредсказуем!...

Способы устранения дребезга контактов

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

Программное устранение дребезга контактов

Программное устранение проблемы дребезга контактов сводится к задержке во времени. В программу вводится определенный временной интервал, во время которого микроконтроллер не реагирует на перепады логических уровней.
 
В случае подключения кнопки к порту ввода/вывода алгоритм обработки может выглядеть следующим образом.
 
устранение дребезга контактов
При достижении напряжением на выводе порта необходимого уровня выполняется подпрограмма, а затем идет блок задержки. Цикл задержки можно реализовать на инкрементировании до определенного числа или декрементировании до нуля нескольких регистров.
 
Если кнопка используется для инициализации внешнего прерывания, то структура обработки прерывания может быть реализована по следующему алгоритму.
 
устранение дребезга контактов
В обработке прерывания мы запрещаем внешнее прерывание и запускаем таймер. По прерыванию таймера мы вновь разрешим внешние прерывания.
 
Время необходимой задержки зависит от длительности процесса дребезга контактов. В среднем процесс дребезга может длиться 0,01 - 0,3 секунд. Можно выполнить задержку интервалом в 0,5 секунд, чего хватит с головой. В критичных по времени случаях необходимо подгонять это время на этапе отладки.
 
Устранение дребезга контактов при помощи дополнительных элементов
Здесь так-же используется принцип временной задержки. Решить вопрос временной задержки для устранения дребезга контактов можно двумя способами:
1. на простой логике
 
устранение дребезга контактов

Работа этих схем основана на временных задержках, создаваемых при помощи RC – цепочек. На рисунке 2а показана схема, работа которой осуществляет задержку включения и выключения, рисунок 2в содержит схему с задержкой только включения, а на рисунке 2д показана схема с задержкой выключения. Эти схемы представляют собой одновибраторы, о которых уже было написано в одной из частей данной статьи. На рисунках 2б, 2г, 2е показаны их временные диаграммы.

Нетрудно видеть, что эти формирователи выполнены на микросхемах серии К561, которая относится к КМОП микросхемам, поэтому номиналы резисторов и конденсаторов указаны именно для таких микросхем. Эти формирователи должны использоваться в схемах, построенных на микросхемах серий К561, К564, К176 и подобных.

2. Применение RS  триггера

устранение дребезга контактов

Проще всего устранить дребезг контактов при помощи уже хорошо нам знакомого RS – триггера, который собран на логической микросхеме К155ЛА3, точнее на ее элементах DD1.1 и DD1.2. Условимся, что прямой выход RS – триггера это вывод 3, соответственно инверсный выход это вывод 6.

Когда RS – триггер собирается из элементов логических микросхем, приходится делать такое соглашение. Если же триггером является готовая микросхема, например К155ТВ1, положение прямого и инверсного выходов оговорено ее справочными данными. Но, даже и в этом случае, если не используются JK и C входы, а микросхема используется просто как RS – триггер, вышеупомянутое соглашение может быть вполне уместно. Например, для удобства монтажа микросхемы на плате. Конечно, при этом RS – входы также меняются местами.

В положении переключателя, показанном на схеме, на прямом выходе RS – триггера уровень логической единицы, а на инверсном, естественно, логический нуль. Состояние счетного триггера DD2.1 пока остается таким, в каком он оказался при включении питания.

Если в этом есть необходимость, то его можно сбросить при помощи кнопки SB2. Чтобы сбросить триггер в момент включения питания между R – входом и общим проводом подключают конденсатор небольшой емкости, в пределах 0,05…0,1 мкФ, а между плюсом питания и R – входом резистор сопротивлением 1…10 КОм. Пока конденсатор не зарядится на R – входе кратковременно присутствует напряжение логического нуля. Этого короткого нулевого импульса вполне достаточно для сброса триггера. Если по условиям работы устройства необходимо триггер при включении питания установить в единичное состояние, то такую RC – цепочку подключают к S – входу. Абзац об RC – цепочке будем считать лирическим отступлением, а теперь продолжим про борьбу с дребезгом контактов.

Нажатие кнопки SB1 приведет к замыканию ее правого по рисунку контакта с общим проводом. При этом на выводе 5 микросхемы DD1.2 появится целая серия импульсов дребезга. Но быстродействие микросхем даже самых медленных серий намного выше, чем быстродействие механических контактов. И поэтому первым же импульсом RS – триггер сбросится в нулевое состояние, чему соответствует высокий уровень на инверсном выходе.

В этот момент на нем формируется положительный перепад напряжения, который по C – входу переключает триггер DD2.1 в противоположное состояние, что можно наблюдать при помощи светодиода HL2. Последующие импульсы дребезга влияние на состояние RS – триггера не оказывают, поэтому состояние триггера DD2.1 остается неизменным.

При отпускании кнопки SB1 триггер на элементах DD1.1 DD1.2 переходит снова в единичное состояние. В этот момент на инверсном выходе (вывод 6 DD1.2) формируется отрицательный перепад напряжения, который не изменяет состояние триггера DD2.1. Для того чтобы вернуть счетный триггер исходное состояние кнопку SB1 придется нажать еще раз. С таким же успехом в подобном устройстве будет работать и JK – триггер.

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

Примечание: при подготовке статьи были использованы материалы с сайтов:
http://electrik.info/
http://easymcu.ru/

Почта сайта