Главная > Микроконтроллеры > Дребезг контактов.

Дребезг контактов.

Дребезг контактов на осциллографеВрага надо знать в лицо!


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

Характеристика дребезга, если можно так выразиться, не стабильна. Количество замыканий, длительность дребезга, амплитуда и форма сигнала весьма разнообразна. Во многих источниках приводится данные, что длительность дребезга составляет от 40—100 мс. А количество импульсов может доходить до тысячи. Последнее утверждение меня немного озадачило и мягко говоря вызвало сомнение. Неужели все обстоит так плохо?
Проведем эксперимент, в котором будут участвовать четыре кнопки.

  • Тактовая кнопка (от мыши проработавшей более 9 лет);
  • Тактовая кнопка (от мыши срок работы чуть меньше – 6 лет);
  • Кнопка малогабаритная КМ1-1;
  • Микро кнопка включения питания с корпуса персонального компьютера фромфактора ATX
Тактовая кнопка

Тактовая кнопка (от мыши проработавшей более 9 лет)

Тактовая кнопка (от  мыши срок работы чуть меньше – 6 лет)

Тактовая кнопка (от мыши срок работы чуть меньше – 6 лет)

Кнопка малогабаритная КМ1-1

Кнопка малогабаритная КМ1-1

Микро кнопка включения питания

Микро кнопка включения питания с корпуса персонального компьютера фромфактора ATX

Для подсчета количества импульсов, выдаваемых кнопкой при нажатии/отпускании, используем простейшую схему с использованием микроконтроллера ATmega8 приведенную на рисунке 1.
Кнопка (SA2) подключена на 4 ножку микроконтроллера, который настроен принимать прерывание по спаду импульса. При возникновении каждого прерывания увеличивается значение переменной на единицу. Это значение выводится на восемь светодиодов, которые в шестнадцатеричной системе исчисления индицируют количество полученных импульсов от кнопки. Для возращения схемы в исходное состояние подключена кнопка сброса(SA1).
Исходный текст программы приведен в конце статьи.

Дребезг контактов.

Длительность и форму импульсов понаблюдаем с помощью осциллографа. Осциллограмма снималось с четвертой ножки микроконтроллера.

На рис.2 приведена осциллограмма тактовой кнопки взятой от мыши проработавшей в общей сложности более 9 лет по 8 часов в сутки.

Дребезг контактов - как он выглядит.

Рис.2 Дребезг контактов.

Если честно, то я ожидал увидеть более печальное зрелище. Но картинка на осциллографе при нажатии кнопки даже чем-то завораживает. Импульсы правильной формы, постепенно уменьшающейся длительности даже весьма симпатичны. В опыте из 50 нажатий, кнопка показала максимальное число импульсов равное 14. На осциллограмме четко видно 9 спадов импульсов при нажатии кнопки. Длительность дребезга контактов в этом случае составила 1,9мс. При отпускании данная кнопка ни разу не проявила эффекта дребезга контактов.

На рис.3 приведена осциллограмма малогабаритной кнопки КМ1-1( рис.4 более растянут предел развертки). Длительность дребезга контактов в этом случае составила примерно 0,9мс. Но форма и количество импульсов оправдало ожидание, как из определения дребезга «случайные многократные неконтролируемые замыкания и размыкания контактов». Причем дребезг контактов у этой кнопки наблюдался и при размыкании контактов. В опыте из 50 нажатий, кнопка показала максимальное число импульсов равное 19.

Рис.3 Дребезг контактов. Кнопка малогабаритная КМ1-1

Рис.3 Дребезг контактов. Кнопка малогабаритная КМ1-1

Рис.4 Дребезг контактов. Кнопка малогабаритная КМ1-1

Рис.4 Дребезг контактов. Кнопка малогабаритная КМ1-1

Самое интересное из всех опытов то, что лидером в испытании стала кнопка с корпуса системного блока. Поймать более-менее различимую картинку на осциллографе мне не удалось. В опыте из 50 нажатий, кнопка показала максимальное число импульсов равное 4. Хотя она порой и звенит при отпускании. Конструкция данной кнопки не дает производить быстрые нажатия (ход штока кнопки длиннее, чем у всех кнопок, что участвовали в эксперименте).

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

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

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

;*****************************************************
;AVRASM ver. 2.1.17
;
;Project : Ловушка для импульсов дребезга контактов
;Version : 1.0
;Date    : 31.08.2012
;Author  : Amator
;Company : mastergid.com
;
;Chip type           : ATmega8L
;Clock frequency     : 1,000000 MHz
;*****************************************************
.include "m8def.inc"
;**** Global Register Variables ****
.def	temp	= r16		; Временная переменная
.def	result	= r17		; Переменная для хранения результата
.cseg
.org 0
;****************************************************
; Настройка векторов прерывания
;****************************************************
rjmp	RESET         ; Reset Handle
rjmp	INT_0         ; INT0 handle
;****************************************************
;
; ИНИЦИАЛИЗАЦИЯ
;
;****************************************************
RESET:
; *** инициализация стека ***
  ldi	temp, LOW(RAMEND)
  out	spl, temp
  ldi	temp, HIGH(RAMEND)
  out	sph, temp
; *** инициализация прерывания INT0 по спаду фронта ***
  ldi	temp,(1<<ISC01)+(0<<ISC00)
  out	MCUCR,temp
  ldi	temp,(1<<INT0)
  out	gicr,temp
; *** Настройка портов ввода/вывода ***
  ldi	temp, 0x00
  out   DDRD, temp     ; порт D на ввод
  ldi	temp, 0xff
  out   PORTD, temp    ; Подключение подтягивающих резисторов порта D
  out   DDRDB, temp    ; порт B на вывод
; разрешить глобальное прерывание
  sei
; обнулим result (на всякий случай)
  ldi	result, 0x00
  out   PORTB, result
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
forever:
  rjmp forever
;**********************************************************
;          Обработка внешнего прерывания INT0
;
; если на ножке фиксируется спад фронта, то вызывается этот
; обработчик прерывания, который увеличивает счетчик вызова
; прерываний на единицу и выводит результат в порт B
;на который подключены светодиоды.
;
;**********************************************************
INT_0:                                  ; INT0 handle
 inc  result
 out  PORTB, result
reti

Микроконтроллеры

Просмотров: 10,606

  1. 2ктпб
    18 Март 2018 в 22:37 | #1

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

  2. Павел
    29 Январь 2018 в 11:56 | #2

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

  3. Павел
    29 Январь 2018 в 11:49 | #3

    +100. Респект. Вот бы еще с тактовыми кнопками разобраться. Особенно интересует картина при отпускании.

  4. RK
    15 Сентябрь 2018 в 08:41 | #4

    Первый раз вижу такую картинку. Познавательно. Ставлю +.

-->