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

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

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

Чаще всего с дребезгом сталкиваются при подключении кнопки, но почему так происходит? Вот пример при котором это будет:

void loop() {
   if (digitalRead(PIN_BUTTON)) {
     Serial.println("1");
   } else {
     Serial.println("0");
   }
}

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

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

Пример программного решения проблемы:

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

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

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

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

Однако, когда мы сталкиваемся с системами, способными фиксировать состояние объектов вплоть до миллисекунды, все эти процессы становятся заметными и крайне проблемными. А всё дело в том, что каждая строчка кода, которую вы прописываете при программировании системы, каким-то образом должна учитывать и обрабатывать все сигналы, в том числе и тот самый пресловутый «дребезг контактов».

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

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

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

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

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

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

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

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

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

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

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

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

https://youtube.com/watch?v=Ekk2Cq9RZ-I

Материалы по теме:

  • Что делать, если греются контакты
  • Как сделать реле времени своими руками
  • Кодовый замок на Ардуино

Опубликовано:
30.08.2018
Обновлено: 30.08.2018

Подавление дребезга контактов

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

Популярные статьи  Электро-, звуко- и шумоизоляционные материалы

Для тех кто пишет на Verilog или хочет узнать о других способах реализации рекомендуем: Подавляем дребезг контактов в ПЛИС. Debouncer на Verilog

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

Что такое дребезг контактов и как его устранить?
Рисунок 1 – Дребезг контактов при замыкании кнопки

Что такое дребезг контактов и как его устранить?
Рисунок 2 – Диаграмма нажатия кнопки

Схема для подавления дребезга контактов показана на рисунке 3 и состоит из двухступенчатого D-триггера, работающего по переднему фронту (по умолчанию в Quartus II), и генератора управляющих импульсов. Для генерации управляющих импульсов используется внешний тактовый генератор и делитель частоты.

Рисунок 3 – Функциональная схема подавителя дребезга

Схема фиксирует логическое состояние на сигнальной линии только в момент времени подачи импульса. Время фиксации определяется длительностью фронта управляющего импульса и для микросхемы EP1C3T144C8 (ПЛИС FPGA) составляет несколько нано секунд (нс). За это время уровень на линии кнопки измениться не может и в триггер будет записано текущее состояние кнопки.

Частота тактового генератора в учебных стендах LESO2 равна 6 МГц, в стендах LESO2.1 и LESO2.3 – 50 МГц. Делитель частоты должен обеспечить интервал между импульсами больше, чем длительность дребезга и менее чем длительность нажатия кнопки. Мы рекомендуем выбрать интервал 50 – 100 мс. На рисунке 4 показаны диаграммы работы схемы.

Что такое дребезг контактов и как его устранить?
Рисунок 4 – Диаграмма работы подавителя дребезга (debounce)

На рисунке 5 показана схема подавителя дребезга в графическом редакторе Quartus II. На рисунках 6 и 7 показано как добавить в проект счетчик-делитель частоты и настроить его с помощью MegaWizerd Plug in Manager.

Что такое дребезг контактов и как его устранить?
Рисунок 5 – Схема подавителя дребезга (debounce) в среде Quartus II

На устаревших стендах LESO2 для того, чтобы внешний генератор заработал, необходимо на pin91 подать логическую «1», в новых стендах LESO2.1 и LESO2.3 этого делать не нужно.

Что такое дребезг контактов и как его устранить?
Рисунок 6 – Выбор счетчика (lpm_counter) в среде Quartus II

Что такое дребезг контактов и как его устранить?
Рисунок 7 – Настройка счетчика (lpm_counter)

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

Примечания[ | ]

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

Найти и оформить в виде сносок ссылки на независимые авторитетные источники, подтверждающие написанное.

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

Фильтр дребезга из триггера Шмитта

Таким образом простой фильтр дребезга может быть собран из триггера Шмитта, и RC-цепочки. Причем резистор подходящего номинала уже присутствует в модуле энкодера (подтягивающий резистор на 10 кОм). Остается добавить конденсатор между выводом энкодера и землей. Емкость конденсатора определяется временем дребезга контактов: чем дольше дребезг, тем больше должна быть емкость. Я подобрал подходящую емкость опытным путем: конденсатор 104 позволил устранить большую часть шумов, но временами небольшие всплески все же проскакивали. После добавления второго конденсатора скачки на вход триггера Шмитта уже не проходили, т.е. мне хватило емкости 0.2 мкФ. Можно было бы использовать конденсатор с кодом 224 на 0.22 мкФ, у меня таких не нашлось. Касаемо используемого триггера: в стандартные серии цифровых микросхем входят триггеры Шмитта, представляющие собой инверторы (ТЛ2 — 6 инверторов), элементы 2И-НЕ (ТЛ3 — 4 элемента) и элементы 4И-НЕ (ТЛ1 — 2 элемента). Поэтому в схеме используется инвертирующий триггер Шмитта (я использую микросхему SN74HC14N, аналог отечественной К561ТЛ2).

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

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

Искаженный дребезгом сигнал на выводах энкодера
Сигнал, сглаженный RC-цепочкой
Сигнал, восстановленный триггером Шмитта

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

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

Датчик движения HC-SR501 и его применение

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

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

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

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

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

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

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

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

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

Что такое дребезг контактов и как его устранить?
Рисунок 3. Схемы искрогасящих цепей

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

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

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

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

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

Что такое дребезг контактов и как его устранить?
Рис. 4. Наглядная схема инверсии сигнала

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

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

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

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

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

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

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

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

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

Код в статье плох использованием delay. Об использовании этой функции в программах для ESP8266/ESP32/Arduino лучше вообще забыть, поскольку она блокирует обработку событий другим блоками программы, не относящимся к коду debouncer. Нужно использовать millis() или библиотеку вроде bouncer2.

Вот простой пример использования millis(). В нем я не стал подключать к выходу микроконтроллера светодиод для индикации состояния геркона. Лишь сделал вывод информации о состоянии LED в Serial.

int pinButton = 14; //D5 — Пин кнопки bool flag = HIGH; //Индикатор текщего состояния, например, светодиода bool lastButton = LOW; unsigned long currentMillis = 0; unsigned long previousMillis = 0; int debounceInterval = 20; //20 ms void setup() { pinMode(pinButton, INPUT_PULLUP); Serial.begin(9600, SERIAL_8N1); } void loop() { bool currentButton = digitalRead(pinButton); currentMillis = millis(); if (currentButton != lastButton) { previousMillis = currentMillis; //Сохраняем время получения первого импульса при срабатывании геркона lastButton = currentButton; } else { if (currentMillis — previousMillis > debounceInterval) //Если состояние кнопки не изменилось за debounceInterval { if (flag != currentButton) //Сравниваем состояние и если оно отличается от состояния кнопки, меняем состояние LED { String state = currentButton ? «OFF» : «ON»; Serial.println(«Button is » + state); flag = currentButton; lastButton = currentButton; } } } }

Популярные статьи  Электроизмерительные клещи - виды, принцип действия, использование

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

Транскрипт

1 Тема 3.1(Ч.4). Способы устранения дребезга механических контактов при вводе информации в МПС. План 1. Причины возникновения дребезга контактов. 2. Схемотехнические средства борьбы с дребезгом контактов 3. Программные способы устранения дребезга механических контактов. Причины возникновения дребезга контактов. При работе микроконтроллера с датчиками, имеющими механиче- ские или электромеханические контакты (кнопки, клавиши, реле и клавиатуры), возникает явление, называемое дребезгом (см. рис. 1). Это явление заключается в том, что при замыкании контактов воз- можно появление отскока контактов, которое приводит к переходно- му процессу. При этом сигнал с контакта может быть прочитан МК как случайная последовательность нулей и единиц. Рис. 1 Проявление дребезга контактов

2 Рис. 2 Схемотехнические средства борьбы с дребезгом контактов Подавить это нежелательное явление можно схемотехническими средствами с использованием буферного триггера, как показано на рис. 2. Наиболее надежной и простой в схемном решении является схема подавления дребезга на статическом RC — триггере (рис. 2 — а). Сигнал 0, подаваемый с помощью переключателя к одному из входов этого триггера опрокидывает его. Причем при каждом срабатывании переключателя (кнопки) триггер реагирует на первое же замыкание соответствующей контактной пары и последующие замыкания уже не изменяют его состояние. Недостатком такой схемы подавления дребезга является необходимость использования контактов на переключение, что не всегда приемлемо. В тех случаях, когда кнопка (переключатель) имеет всего одну пару контактов только на замыкание, применяются схемы, использующие постоянную времени перезаряда конденсатора. Формирователь, показанный на рис. 2-б лишен этого недостатка. Он состоит из триггера Шмидта, на входе которого включена интегрирующая цепь (R2, C). При замыкании контактов кнопки SB напряже-

3 ние на входе цепи R2 C падает до нуля. Возникающее в процессе переключения кратковременные импульсы, вызванные дребезгом, сглаживаются интегрирующей цепью. Постоянная времени интегрирующей цепи выбирается так, чтобы амплитуда пульсаций сигнала на её выходе была меньше порога чувствительности триггера Шмидта. Рассматриваемый формирователь может работать и без сопротивления R2 (его включают в качестве токоограничивающего сопротивления через замкнутые контакты кнопки). Благодаря малому сопротивлению замкнутых механических контактов первое же их замыкание приводит к полному разряду конденсатора. Последующие же размыкания контактов, вызванные дребезгом, практически не увеличивают напряжение на конденсаторе вследствие относительно большой постоянной времени его заряда. Формирователь импульсов на одном инверторе (рис. 1-в) позволяет получить относительно большую постоянную времени перезаряда конденсатора при малой его емкости. При замыкании контактов кнопки конденсатор С быстро разряжается через R2. В отличие от рассмотренных выше формирователей, здесь на выходе вырабатывается импульс, длительность которого определяется постоянной времени RC цепи.

4 Рис. 3. Блок-схемы алгоритмов программного устранения дребезга контактов Часто устранение дребезга контактов выполняется программными способами, наибольшее распространение из которых получили сле- дующие два: 1) подсчет заданного числа совпадающих значений сиг- нала; 2) временная задержка. Блок-схемы алгоритмов реализации этих способов приведены на рис. 3. Суть первого способа состоит в многократном считывании сигнала с контакта. Подсчет удачных опросов (т.е. опросов, обнаруживших, что контакт устойчиво замкнут) ведется программным счетчиком. Если после серии удачных опросов встречается неудачный, то подсчет начинается сначала. Контакт считается устойчиво замкнутым (дребезг устранен), если последовало N удачных опросов. Число N подбирается экспериментально для каждого типа используемых датчиков и лежит в пределах от 5 до 50. Устранение дребезга контакта путем введения временной задерж- ки заключается в следующем. Программа, обнаружив замыкание кон- такта, запрещает опрос состояния этого контакта на время, заведомо большее длительности переходного процесса. Временная задержка (в пределах 1-20 мс) подбирается экспериментально для каждого типа датчиков. Вопросы для самоконтроля 1. Причины дребезга контактов.. 2. Схемотехнические способы устранения дребезга механических контактов. 3. Программные способы устранения дребезга механических кон-

5 тактов.

Рейтинг
( Пока оценок нет )
Денис Серебряков/ автор статьи
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: