Как работает RC-подавление дребезга контактов
Механический контакт кнопки или тумблера при замыкании не срабатывает чисто: упругие пластины несколько раз отскакивают друг от друга, и линия успевает пройти через ноль и единицу десятки раз за первые миллисекунды. Для входа микроконтроллера это выглядит как серия быстрых нажатий — один щелчок засчитывается как три-пять событий. Явление называют дребезгом (bounce), и бороться с ним можно программно или аппаратно. Аппаратный способ — RC-фильтр: резистор ограничивает ток заряда конденсатора, поэтому напряжение на входе логики нарастает не скачком, а по плавной экспоненте. Пока контакт «звенит», короткие импульсы не успевают дозарядить конденсатор до порога, и логический уровень остаётся стабильным. Это тот же RC-фильтр нижних частот, только настроенный на подавление быстрых переходов, а не гармоник сигнала.
τ = R · C задержка до порога t = −τ · ln(1 − Vпор/Vпит)
для порога 50%: t ≈ 0,69·τ полный заряд ≈ 5·τ
Постоянная времени τ = R·C задаёт масштаб всего процесса: за одну τ конденсатор заряжается до 63,2 % питания, за 5τ — практически полностью. Момент, когда вход логики «увидит» единицу, зависит от порога переключения Vпор/Vпит и вычисляется через натуральный логарифм. Именно эту задержку и считает калькулятор — она и есть время, на которое RC-цепочка «глушит» дребезг. Формула та же, что в базовом расчёте постоянной времени RC, здесь она лишь применена к конкретной задаче фронта кнопки.
Сколько длится дребезг и какую задержку выбирать
Длительность дребезга — свойство самого контакта, а не схемы. У миниатюрных тактовых кнопок она обычно 1–5 мс, у крупных тумблеров и микропереключателей — 5–20 мс, у изношенных или дешёвых контактов доходит до 30–50 мс. Отпускание нередко дребезжит дольше нажатия. Практическое правило: задержка RC-цепочки должна быть заметно больше самого долгого «звона», но оставаться незаметной для человека. Диапазон 5–20 мс перекрывает большинство кнопок и не воспринимается как «тормоз»: глаз не видит задержки короче ~30 мс. Слишком малое τ не отфильтрует звон, слишком большое (сотни мс) сделает кнопку «вялой» и съест быстрые повторные нажатия. Виджет подсвечивает оба края: он предупредит, если расчётная задержка меньше 5 мс или больше 50 мс.
Как подобрать R и C
Нужную задержку дают многие пары R и C — важно их произведение. Резистор берут в диапазоне 4,7–100 кОм: слишком малый бессмысленно нагружает источник и линию, слишком большой делает вход чувствительным к наводкам и току утечки. Ёмкость выбирают из ряда 0,1–1 мкФ; удобны керамические конденсаторы, для крупных ёмкостей — плёночные (маркировку удобно расшифровать в калькуляторе кода конденсатора). Типовое сочетание «10 кОм + 100 нФ» даёт τ = 1 мс и коротковатую защиту, а «10 кОм + 1 мкФ» — τ = 10 мс, надёжный вариант для большинства кнопок. Ниже — готовые пары и задержка до порога 50 %.
| R | C | τ = R·C | Задержка (порог 50 %) |
| 10 кОм | 100 нФ | 1 мс | 0,69 мс |
| 10 кОм | 470 нФ | 4,7 мс | 3,3 мс |
| 10 кОм | 1 мкФ | 10 мс | 6,9 мс |
| 47 кОм | 470 нФ | 22,1 мс | 15,3 мс |
| 100 кОм | 1 мкФ | 100 мс | 69 мс |
Порог 50 % — усреднённая точка для КМОП-входа; у реальной логики он плавает (у ТТЛ ниже, у КМОП около половины питания), поэтому фактическая задержка отличается от табличной на десятки процентов. Меняя поле «Порог логики» в калькуляторе, легко увидеть, как сдвигается момент срабатывания: чем выше порог, тем позже вход считает единицу и тем длиннее защита. Обратите внимание, что при отпускании кнопки конденсатор разряжается через тот же резистор с той же постоянной времени, поэтому задержка симметрична для фронта и спада — обе кромки сглажены одинаково.
Типичные ошибки и тонкости
Первая ошибка — считать, что RC-цепочка сама даёт чистый цифровой уровень. Она лишь замедляет фронт; в зоне порога медленно ползущее напряжение легко перескакивает туда-сюда от наводок, и без гистерезиса вход всё равно ловит ложные срабатывания. Поэтому RC почти всегда работает в паре с триггером Шмитта или с программным подтверждением уровня. Вторая ошибка — ставить конденсатор прямо на контакт кнопки без токоограничивающего резистора: в момент замыкания заряженный конденсатор разряжается через контакты броском тока, что искрит и выжигает металл площадок. Резистор в цепи заряда обязателен. Третья тонкость — ток утечки и входной ток пина: при очень больших R (сотни кОм и выше) они смещают установившийся уровень и время срабатывания, поэтому резистор держат в разумных пределах. Наконец, номиналы из рядов E12/E24 дают дискретный набор τ — точное «круглое» значение задержки получить не всегда возможно, да и не нужно: разброс дребежга всё равно шире.
Где применяют — и где не годится
RC-антидребезг ставят на входы кнопок, концевых выключателей, энкодеров и любых механических контактов, идущих на пин микроконтроллера или логическую микросхему. Часто RC совмещают с подтягивающим резистором — тогда «верхнее плечо» цепи выполняет и подтяжку, и ограничение тока (похожий расчёт — в калькуляторе pull-up для I2C). После RC желательно поставить логический элемент с гистерезисом — триггер Шмитта: плавный экспоненциальный фронт в зоне порога сам по себе может дать несколько переключений от шума, а гистерезис превращает его в один чистый перепад. Способ хорош простотой и нулём кода, но занимает место на плате и добавляет фиксированную задержку. Если вывод один и место дорого, дребезг гасят программно — по таймеру-счётчику МК: читают вход и подтверждают уровень, только если он держится стабильно N миллисекунд. Для генерации импульсов и таймингов, не связанных с кнопкой, RC работает в других ролях — например, в обвязке таймера NE555.
Пример
Возьмём значения по умолчанию: R = 10 кОм, C = 1 мкФ, порог 50 %. Постоянная времени τ = R·C = 10000 Ом · 0,000001 Ф = 0,01 с = 10 мс. Задержка до порога 50 %: t = −τ · ln(1 − 0,5) = −0,01 · ln(0,5) = 0,01 · 0,6931 = 0,006931 с = 6,93 мс — как раз перекрывает типичный дребезг тактовой кнопки в 1–5 мс, но не ощущается на нажатии. Полный заряд конденсатора наступает за 5τ = 50 мс. Если контакт «звенит» дольше, увеличьте ёмкость до 2,2–4,7 мкФ или резистор до 22–47 кОм — задержка вырастет пропорционально произведению R·C.
См. также: RC постоянная времени · RC-фильтр НЧ/ВЧ · триггер Шмитта · таймер NE555 · все калькуляторы
|