Как подавить дребезг контактов кнопки Arduino

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

Дребезг контактов Ардуино
Дребезг контактов Ардуино — одно из самых неприятных и непонятных явлений.

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

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

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

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

Главные причины дребезга контактов

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

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

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

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

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

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

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

Что понадобится для проекта

Устранить явление перекоммутации можно 2 способами:

  1. Аппаратным.
  2. Программным.
Перекоммутация
Устранить явление можно аппаратным и программным способами.

Для реализации аппаратного метода понадобится либо конденсатор, либо RS-триггер (триггер Шмитта). При выборе программного способа устранения достаточно написать в коде прошивки микроконтроллера несколько строк.

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

Алгоритм подавления

Принцип аппаратного способа устранения дребезга состоит в следующем:

  1. При использовании конденсатора. Напряжение на нем не может измениться мгновенно, поэтому множество коротких переходных процессов соединяются в 1 процедуру.
  2. При использовании RS-триггера (триггера Шмитта). Это устройство, которое имеет только 1 активное положение — сброшен/установлен (логические ноль/единица).
Алгоритм подавления
RS-триггер представляет собой простейший управляющий автомат.

Алгоритм действия программного метода состоит в следующем:

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

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

Методы устранения перекоммутации:

  1. С помощью задержки.
  2. Через bounce-библиотеку.
  3. С применением фильтра.
  4. С использованием триггера Шмитта.

С помощью задержки

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

В качестве отсрочки используются следующие команды:

  • delay() (применяется в коде с 1 переменной, где не требуется возвращать таймер отсчета времени к начальному значению);
  • millis() (выгоднее использовать в скетчах, где задействованы 2 и более переменных, позволяет организовать параллельную работу нескольких процессов).

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

С помощью задержки
Нужно активировать паузу после каждого нажатия на кнопку.

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

Например:

if(digitalRead(button2Pin) == HIGH)

{

digitalWrite(led2Pin,HIGH);

delay(3000);

digitalWrite(led2Pin,LOW);

}

Алгоритм данного кода следующий:

  1. Клавиша имеет уровень логической единицы.
  2. Зажечь светодиод.
  3. Подождать.
  4. Погасить светодиод.

Таким образом получается реализовать простой алгоритм мигания лампочки.

С помощью библиотеки Bounce

Для подавления дребезга создана специальная библиотека Bounce, которая позволяет использовать классы для инициализации объектов.

Типичный вид объекта следующий: Bounce (byte *номер вывода контроллера, к которому подключен ключ*, unsugned long *время в миллисекундах, в течение которого длится дребезг*).

С помощью библиотеки Bounce
Для подавления дребезга используют Bounce.

Чтобы библиотеку использовать в скетче, нужно:

  • подключить ее командой #include ;
  • инициализировать объект (например, Bounce bouncer = Bounce(BUTTON,5);
  • в коде, где считывается или записывается состояние кнопки, добавлять приставку «bouncer.» (например, bouncer.read()).

Пример использования функций Bounce в программе: http: //greenoakst.blogspot.com /2012/06/ arduino-bounce. Html

При помощи сглаживающего фильтра

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

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

Преимущества использования аппаратного устранения дребезга:

  1. Освобождаются ресурсы микроконтроллера для выполнения других задач.
  2. Упрощается процесс отладки кода (чем меньше в нем строк, тем он проще).

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

https://youtube.com/watch?v=yvdV5dNzRHQ

Посредством триггера Шмитта

Триггер Шмитта — операционный усилитель (ОУ) с положительной обратной связью. При достижении установленной разности напряжений на входах ОУ устройство переключается, т. е. переводит состояние выхода из логической единицы в ноль или наоборот.

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

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

Ссылка на основную публикацию