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

Содержание

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

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

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

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

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

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

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

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

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

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

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

Лампа накаливания не может менять свою яркость с такой скоростью, и тем более не может реагировать на изменения наш мозг.

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

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

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

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

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

Вот пример скетча, в котором непременно обнаружится ошибка дребезга. Мы сможем увидеть в мониторе порта в первые мгновения после нажатия целый набор нулей и единиц в случайной последовательности (не важно, что означает 1 – нажатие или отпускание кнопки, важен сам факт появления хаоса).
void loop() { if (digitalRead(PIN_BUTTON)) { Serial.println(“1”); } else { Serial.println(“0”); } }

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

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

Самым простым способом справиться с проблемой дребезга кнопки является выдерживание паузы. Мы просто останавливаемся и ждем, пока переходный процесс не завершится.

Для этого можно использовать функцию delay()или millis()  (за подробной информации можете обратиться к статье про использование функций delay() и millis() в ардуино).

10-50 миллисекунд – вполне нормальное значение паузы для большинства случаев.

int currentValue, prevValue; void loop() { currentValue = digitalRead(PIN_BUTTON); if (currentValue != prevValue) { // Что-то изменилось, здесь возможна зона неопределенности // Делаем задержку delay(10); // А вот теперь спокойно считываем значение, считая, что нестабильность исчезла currentValue = digitalRead(PIN_BUTTON); } prevValue = currentValue; Serial.println(currentValue); }

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

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

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

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

#include ; #define PIN_BUTTON 2 #define PIN_LED 13 // Создаем объект Bounce debouncer = Bounce(); void setup() { // Устаовили тип пина pinMode(PIN_BUTTON, INPUT_PULLUP); // Даем бибилотеке знать, к какому пину мы подключили кнопку debouncer.attach(PIN_BUTTON); debouncer.interval(5); // Интервал, в течение которого мы не буем получать значения с пина //Setup the LED : pinMode(PIN_LED, OUTPUT); } void loop() { // Даем объекту бибилотеки знать, что надо обновить состояние – мы вошли в новый цкил loop debouncer.update(); // Получаем значение кнопки int value = debouncer.read(); // Теперь мы точно знаем, в каком состоянии находится наша кнопка if ( value == LOW ) { digitalWrite(PIN_LED, HIGH ); } else { digitalWrite(PIN_LED, LOW ); } }

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

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

Но далеко не всегда его можно использовать – ведь 10 миллисекунд – это целая вечность для многих процессов в электроном мире.

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

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

Аппаратный способ устранения дребезга основан на использовании сглаживающих фильтров.

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

Выбирайте подходящий вариант, в зависимости от требований к проекту и ваших возможностей.

В статье использовались материалы сайтов: http://codius.ru, https://uscr.ru

Источник: https://ArduinoMaster.ru/datchiki-arduino/ustranenie-drebezg-kontaktov-knopki/

Что такое дребезг контактов и чем он так вреден

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

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

yandex.ru

Оглавление

Что такое дребезг контактов Причины возникновения дребезга Чем так вредно “дребезжание” Как устраняют и подавляют дребезг Заключение

Что такое дребезг контактов

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

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

Именно это явление и стали называть – дребезгом контактов и борются с ним почти с самого начала, как только появились элементы автоматизированных систем.

yandex.ru

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

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

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

Последующие отталкивания происходят с затухающей амплитудой, пока полностью не прекратятся.

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

yandex.ru

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

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

yandex.ru

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

При этом число касаний контактов зависит от:

1. Свойств компонентов коммутирующего узла.

2. Напряжения на обмотках коммутационного реле.

3. От упругости контактов и некоторых прочих факторов.

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

yandex.ru

Чем так вредно “дребезжание”

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

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

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

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

Как устраняют и подавляют дребезг

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

Но существуют и другие способы устранения дребезга, а именно:

Аппаратный способ

Для уменьшения коммутационного износа во всевозможных реле зачастую используют:

1. Шунтирующие RC – цепочки.

2. Варисторы.

3. Обратные диоды.

4. Стабилитроны.

5. Схемы, в которых использована комбинация нескольких устройств.

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

yandex.ru

У каждой схемы есть как свои недостатки, так и явные преимущества.

Использование триггеров

Так же отлично справляются с подавлением дребезга контактов так называемые триггеры – специализированная электронная схема.

Данные схемы трансформируют аналоговый сигнал в цифру, а так же выполняют инверсию логических уровней.
yandex.ru

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

Применение герконов

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

yandex.ru

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

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

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

yandex.ru

Дребезг контактов: что это за явление, способы его устранения и подавления

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

В этой статье мы рассмотрим такое распространенное и вредное явление как дребезг контактов. Ознакомимся с основными причинами возникновения дребезга. Изучим основные методы аппаратного и программного устранения данного явления.

Что такое дребезг контактов?

В конструкциях всех электромеханических устройств, предназначенных для замыкания-размыкания цепей, существует одна или несколько контактных пар. С их помощью происходит коммутация соответствующих электрических компонентов.

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

Это явление получило название – дребезг контактов, а борьбу с ним ведут практически с того момента когда появились первые элементы автоматизированных систем.

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

Причины возникновения

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

Иллюстрацией может служить металлический шарик, падающий на стальную плиту. Сила упругости возвращает его в положение, близкое к изначальному, откуда шарик снова падает на плиту и процесс повторяется.

Происходит колебательное движение с затухающей амплитудой.

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

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

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

Разницу между идеальной и реальной формой импульсов видно на рис. 1.

Рисунок 1. Сравнение идеального импульса с реальным

Как видно из рисунка идеальным является сигнал с одним прямоугольным импульсом. На практике всё выглядит иначе. Дребезг изменяет осциллограмму сигнала. Определённые коррективы вносит искрение. Форма импульсов на рисунке сильно приукрашена. В реальной ситуации осциллограмма выглядит более потрёпанной.

Частота и количество касаний контактов зависит:

  • от свойств компонентов коммутирующего узла;
  • уровня напряжения на обмотках реле;
  • от упругости пружины и некоторых других факторов.

Дребезг наблюдается и во время размыкания контактов. Обычно при механическом размыкании контакты меньше дребезжат.

На рисунке 2 наглядно изображена осциллограмма напряжения в результате коммутации электрического тока вследствие нажатия на кнопку.

Рисунок 2. Осциллограмма коммутационного тока

На осциллограмме видно серии импульсов, характеризующих процесс дребезга.

Вредное влияние дребезга

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

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

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

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

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

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

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

Без конструктивного изменения контактной системы устранить либо подавить дребезг принципиально невозможно. Примером таких конструктивных изменения можно наблюдать в узлах галетных переключателей или в кнопках типа П2К. В упомянутых конструкциях дребезг практически отсутствует. Нет его и у механического переключателя ползункового типа.

Аппаратный способ

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

Для снижения уровня коммутационного износа в различных реле и силовых выключателях применяют искрогасящие цепочки:

  • шунтирующие RC-цепи;
  • варисторы, препятствующие скачкообразному изменению напряжения;
  • обратные диоды, подавляющие напряжения самоиндукции;
  • стабилитроны;
  • комбинированные схемы (варистор +RC-цепь).

Эти цепочки помогают устранить дребезг путём выравнивания скачкообразных характеристик тока. Их подключают параллельно нагрузке либо к контактам реле. Существуют также схемы, в которых искрогасящие цепи подключаются одновременно и к нагрузке и к реле.

Схемы цепей изображены на рис. 3.

Рисунок 3. Схемы искрогасящих цепей

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

Управление приборами чувствительными к дребезгу осуществляется через ФНЧ (например, через RC-цепочку). Обладая электрической емкостью, конденсатор забирает часть энергии в момент касания контактов. После разрыва цепи вследствие дребезга накопленная энергия возвращается. Таким образом, происходит сглаживание амплитуды колебаний.

Установки триггеров

Ещё один способ борьбы с дребезгом состоит в использовании специальных электронных схем, включающих rs-триггеры.

Роль триггеров заключается в преобразовании входного аналогового сигнала в цифровой и инверсии (переворачивания) логических уровней. Наглядно инверсию объясняет схема на рисунке 4.

Рис. 4. Наглядная схема инверсии сигнала

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

Простая схема с триггером показана на рисунке 5.

Рис. 5. Наглядная схема подключения rs-триггеров

Промежутки между пороговыми значениями называются гистерезисом. Форма таких импульсов используется для шумоподавления во время переключения логических сигналов.

Сигнал от контакта поступает на схему, имеющую передаточную статическую характеристику в виде петли гистерезиса (триггер Шмидта).

Только после этого сигнал с выходов триггера подаётся на вход цифрового устройства для тактирования.

Использование герконов

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

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

Программный метод

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

  • путём временной задержки сигнала, на период вероятного дребезга контактов;
  • методом многократного считывания состояния контактов, на заданном временном интервале. Программа считает цепь замкнутой, если на этом промежутке времени наступает период устойчивого замыкания контакта;
  • используя алгоритм подсчёта, при котором учитывается количество совпадающих значений сигналов замкнутости в определённый промежуток времени (в пределах от 10 до 100 мкс). Если программой будет замечено заданное число совпадений состояния замкнутости, она посчитает контакт устойчиво замкнутым и пропустит сигнал.

Сигнал, полученный программным способом, довольно надёжный и устойчивый. К недостаткам такой схемы подавления дребезга можно отнести разве что небольшую задержку сигнала, которая не превышает 0,1 с. Этот промежуток времени настолько мал, что им можно пренебречь во многих случаях. Обычно палец человека задерживается на клавише до момента отпускания кнопки свыше 0,2 с.

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

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

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

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

в развитие темы

Источник: https://www.asutpp.ru/drebezg-kontaktov.html

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

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

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

Теория

Что такое дребезг контактов? Когда вы нажимаете на кнопку или на микропереключатель или изменяете положение тумблера, два металлических контакта замыкаются. Для пользователя может показаться, что контакт наступил мгновенно. Это не совсем правильно. Внутри коммутатора есть движущиеся части.

Когда вы нажимаете на коммутатор, он вначале создает контакт между металлическими частями, но только в кратком разрезе микросекунды. Затем он делает контакт немного дольше, а затем еще немного дольше. В конце коммутатор полностью замыкается. Коммутатор скачет (дребезжит) между состояниями наличия и отсутствия контакта.

«Когда коммутатор замыкается, два контакта фактически разъединяются и снова соединяются обычно от 10 до 100 раз за время, примерно равное 1 мс» («Искусство схемотехники», Хоровиц и Хилл, второе издание). Обычно оборудование работает быстрее, чем дребезг, что приводит к тому, что оборудование думает, что вы нажали на кнопку несколько раз.

Оборудование часто является интегральной микросхемой. Следующие скриншоты иллюстрируют типовой дребезг контактов без какой-либо обработки:

Осциллограмма дребезга контактов
Каждый коммутатор обладает своими собственными характеристиками относительно дребезга. Если вы сравните два одинаковых коммутатора, есть большая вероятность того, что они будут «дребезжать» по-разному.

Я покажу вам дребезг четырех разных коммутаторов. Я меня есть две микрокнопки, 1 кнопка и 1 тумблер:

Исследуемые коммутаторы

Настройка оборудования

Все коммутаторы будут подключены одинаково (это важно, если мы собираемся сравнивать результаты). Сначала мы увидим, как коммутаторы ведут себя без обработки. Основой нашей схемы будет HCF4017BE.

Это десятичный счетчик/делитель, производимый STMicroelectronics. Они больше не производят эту микросхему, так как этот тип устарел.

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

Микросхема получает тактовый импульс на вывод 14, после чего загорается светодиод, подключенный к Q1. Когда принимается следующий тактовый импульс, микросхема отключает Q1 и зажигает Q2, и так далее. Когда счетчик достигает Q8 (вывод 9), он подает импульс на вывод 15, который является выводом сброса. Это означает запуск отсчета, начиная с Q0.

Наша основная схема:

Схема тестового макета (описание выше)

Сначала мы попробуем не обрабатывать дребезг совсем. Схемы подачи тактового сигнала показаны ниже:

Тактовый вывод удерживается на уровне лог. 0,
импульс – лог. 1

Тактовый вывод удерживается на уровне лог. 1,
импульс – лог. 0

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

:

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

Для коммутатора A:

Дребезг контактов коммутатора A

Для коммутатора B:

Дребезг контактов коммутатора B

Для коммутатора C:

Дребезг контактов коммутатора C

Для коммутатора D:

Дребезг контактов коммутатора D

И один скриншот я снял для коммутатора C при использовании правой схемы подачи импульсов: тактовый вывод удерживается на уровне логической единицы, импульс соответствует уровню логического нуля.

Дребезг контактов коммутатора C (импульс соответствует логическому нулю)

Как вы можете видеть, микросхеме кажется, что было несколько нажатий на коммутатор. Хотя это и не так, поскольку на коммутатор было выполнено только одно нажатие.

Добавим керамический конденсатор:

Тактовый вывод удерживается на уровне лог. 0,
импульс – лог. 1

Тактовый вывод удерживается на уровне лог. 1,
импульс – лог. 0

При добавлении конденсатора мы создаем RC-цепь. RC-цепи здесь не обсуждаются.

Новые скриншоты осциллографа сильно отличаются от полученных ранее. Это показывает, что RC-цепь отфильтровывает дребезг.

Данное видео показывает, как работает схема с керамическим конденсатором 0,1 мкФ:

Для коммутатора A:

Сигнал с коммутатора A после добавления конденсатора

Для коммутатора B:

Сигнал с коммутатора B после добавления конденсатора

Для коммутатора C:

Сигнал с коммутатора C после добавления конденсатора

Для коммутатора D:

Сигнал с коммутатора D после добавления конденсатора

Для коммутатора C (импульс соответствует логическому нулю):

Сигнал с коммутатора C после добавления конденсатора (импульс соответствует логическому нулю)

Эти скриншоты говорят нам о том, что дребезг устранен, и что микросхема «видит» только одно нажатие или переключение. Это то, чего мы и хотели.

Программное подавление дребезга

При работе с микроконтроллерами мы можем справиться с дребезгом контактов по-другому, что позволит сэкономить и место под детали, и деньги.

Некоторые программисты не задумываются о дребезжащих коммутаторах и просто добавляют 50 мс задержки после первого «отскока». Это заставляет микроконтроллер ждать остановку дребезга 50 мс, а затем продолжить работу программы.

На самом деле это не очень хорошая практика, так как она удерживает микроконтроллер в ожидании окончания задержки.

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

Ниже показано простое программное подавление дребезга контактов для Arduino.

/* Программное подавление дребезга * * При каждом переходе от LOW к HIGH или от HIGH к LOW * выполняется подавление дребезга во входном сигнале * путем выборки по нескольким считываниям в течение * нескольких миллисекунд. Входной сигнал не считается * устоявшимся на уровне LOW или HIGH до тех пор, пока * не будет считан по крайней мере в течение * “debounce_count” (10) миллисекунд в новом состоянии. * * Примечания: * Отрегулируйте значение debounce_count, чтобы * отобразить время, в течение которого входной * сигнал может дребезжать, прежде чем перейдет * в устойчивое состояние. * */ int inPin = 7; // номер входного вывода int outPin = 13; // номер выходного вывода int counter = 0; // сколько раз мы должны получить новое значение int reading; // текущее значение, прочитанное с входного вывода int current_state = LOW; // входное значение, полученное после подавления дребезга // следующая переменная long, потому что время, измеренное в миллисекундах, // быстро станет числом, большим, чем может храниться в int. long time = 0; // время последней выборки входного вывода int debounce_count = 10; // количество миллисекунд/выборок для решения, что сигнал на входе принял устойчивое состояние void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); digitalWrite(outPin, current_state); // установить выход светодиода в начальное состояние } void loop() { // Если мы перешли к следующей миллисекунде if(millis() != time) { reading = digitalRead(inPin); if(reading == current_state && counter > 0) { counter–; } if(reading != current_state) { counter++; } // Если вход показывает одно значение достаточно долго, давайте переключим его if(counter >= debounce_count) { counter = 0; current_state = reading; digitalWrite(outPin, current_state); } time = millis(); } }

Код выше был написан в Arduino IDE.

Следующая программа мигает двумя светодиодами, подключенными к PIC микроконтроллеру. Код может быть похожим на этот:

// включения #include #include #include // конфигурация #pragma config FOSC = INTOSCIO // Биты выбора генератора (INTOSC генератор: I/O функция на выводе RA6/OSC2/CLKOUT, I/O функция на выводе RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Бит включения сторожевого таймера (WDT выключен) #pragma config PWRTE = OFF // Бит включения таймера включения (PWRT выключен) #pragma config MCLRE = ON // Бит выбора функции вывода RA5/MCLR/VPP (функция вывода RA5/MCLR/VPP – это is MCLR) #pragma config BOREN = ON // Бит включения обнаружения просадки питания (BOD включен) #pragma config LVP = ON // Бит включения низковольтного программирования (функция вывода RB4/PGM – это PGM, низковольтное программирование включено) #pragma config CPD = OFF // Бит защиты данных памяти eeprom (защита данных памяти eeprom выключена) #pragma config CP = OFF // Бит защиты кода Flash памяти программ (защита кода выключена) // Определения #define _XTAL_FREQ 4000000 #define LED1 PORTBbits.RB3 #define LED2 PORTBbits.RB2 #define BTN PORTBbits.RB5 // Переменные char BTN_pressed = 0; char BTN_press = 0; char BTN_release = 0; char Bouncevalue = 500; // Основная программа int main(int argc, char** argv) { // Компараторы выключены CMCON = 0x07; // Направления портов, RB5 вход, остальные – выходы TRISA = 0b00000000; TRISB = 0b00100000; // Состояние портов, на всех лог. 0 PORTA = 0b00000000; PORTB = 0b00000000; // Начинаем с включенным (лог. 1) LED1 и выключенным (лог. 0) LED2 LED1 = 1; LED2 = 0; while (1) { // Если кнопка BTN нажата if (BTN == 1) { // Дребезг началсь, поэтому увеличим BTN_press на 1 при каждом отскоке к высокому логическому уровню BTN_press++; // “сбросить” BTN_release BTN_release = 0; // Если отскоков столько, что BTN_press больше Bouncevalue, // кнопка должно быть нажата if (BTN_press > Bouncevalue) { // Это первоначальное значение BTN_pressed. // Если программа дошла до этого места, кнопка должно быть нажата if (BTN_pressed == 0) { // Поменять состояния светодиодов LED1 = 1; LED2 = 1; // Устанавливаем BTN_pressed в 1, убеждаясь что мы // не попадем снова в этот блок кода BTN_pressed = 1; } // Светодиоды переключены, установить BTN_press в 0, чтобы мы могли снова войти // в блок переключающего кода BTN_press = 0; } } else { // Увеличить “низкий уровень” на 1 для подавления дребезга BTN_release++; BTN_press = 0; // Если BTN_release больше Bouncevalue, то кнопка у нас не нажата if (BTN_release > Bouncevalue) { BTN_pressed = 0; BTN_release = 0; } } } return (EXIT_SUCCESS); }

Этот пример написан MPLAB X с компилятором XC8. Микроконтроллер – это PIC 16F628A, и я использовал внутренний генератор на 4 МГц. Вам необходимо поэкспериментировать с Bouncevalue. У меня лучше всего программа работала со значением 500.

Микроконтроллер без какого-либо подавления дребезга контактов:

Это пример того, как коммутатор может «запутать» микроконтроллер. Нормального переключения светодиодов не получилось. Похоже, что при нажатии кнопки они живут своей жизнью.

Микроконтроллер с управлением подавлением дребезга контактов:

Как видите, светодиоды хорошо включаются и выключаются по нажатию кнопки.

Теги

MCUДребезг контактовКлючКнопкаМикроконтроллер

Источник: https://radioprog.ru/post/251

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

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

Определение и суть проблемы в электронике

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

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

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

Пример осциллограммы дребезга контактов изображен на рисунке ниже:

Устранение эффекта

Чтобы устранить дребезг контактов, возможно использовать аппаратное или программное решение. К аппаратным решениям относится:

  1. Установка конденсаторов параллельно входу. Тогда может снижаться быстродействие реакции на нажатие при слишком большой ёмкости и неполного устранения дребезга при слишком маленькой.
  2. Введение триггеров Шмидта во входную цепь устройства. Более сложное решение, которое затруднительно для реализации в ходе доработки уже готового изделия, но и более технологичное и совершенное.

Если рассмотреть это явление на примере сдвигового регистра, то в этом видео наглядно показано его воздействие. После каждого нажатия кнопки должен загораться следующий светодиод.

Схема включения регистра и светодиодов на рисунке ниже:

Кнопка подключена так, как показано на схеме:

Пример осциллограммы сигнала с выраженным дребезгом:

Установив конденсатор на 1 мкФ параллельно кнопке для его подавления, получаем стабильное и точное срабатывание:

Схема подавления:

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

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

На следующем рисунке изображены другие варианты схем на логических элементах для борьбы с дребезгом контактов:

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

Пример программного подавления дребезга контактов в Arduino IDE вы можете скачать, перейдя по ссылке: код для подавления дребезга.

Дребезжание реле

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

Когда датчик выдаёт сигнал на пороге срабатывания устройства, получается неопределенное состояние и логика схемы то включает, то отключает его. И при срабатывании реле не всегда наблюдается устойчивое удержание контактов, оно начинает как бы вибрировать, включаясь и отключаясь.

На эпюре ниже наглядно изображена эта проблема на примере регулятора температуры:

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

А так выглядит схема с дополнением в виде задержки включения на логических элементах 2И-НЕ отечественной микросхемы К561ЛА7:

Иногда с этой же проблемой справляются с помощью установки стабилитрона в сигнальные цепи.

Аналогично дребезгу кнопок при включении реле, его контакты могут повторно несколько раз перекоммутироваться. Явление опасно тем, что в этот момент происходит зажигание и гашение дуги, что значительно снижает срок службы аппарата. Особенно часто это происходит при срабатывании реле на переменном токе.

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

Также рекомендуем посмотреть хорошее видео на эту тему:

Источник: https://samelectrik.ru/chto-takoe-drebezg-kontaktov-i-kak-ego-ustranit.html

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.