Источники питания Keen Side

Два вывода микроконтроллера сканируют 16-кнопочную клавиатуру, используя емкость человеческого тела и цепочку резисторов

Dave Vanden Bout

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

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

Сначала вывод P1 МК конфигурируется как выход, а P2 как вход. На P1 подается высокий уровень, которым заряжается емкость через часть резисторной цепочки между P1 и той площадкой, до которой дотронулись в данный момент. В нашем примере, сопротивление части цепочки равно 2R. В это же время запускается таймер, который фиксирует время, за которое напряжение на P2 (и что то же, на конденсаторе) достигнет уровня "лог. 1". Это время T2, пропорциональное 2R × C, запоминается. P2 на время заряда конденсатора существенного влияния не оказывает, т.к. входное сопротивление вывода очень велико.

Затем оба вывода P1 и P2 переключают на выход и подают на них низкие уровни, чтобы как можно быстрее разрядить конденсатор. И наконец, P2 делают выходом, а P1 входом. Время заряда конденсатора до напряжения переключения входа P1 будет пропорционально 3R × C. МК вычисляет соотношение T1 и T2:

T1/T2 = (3RC)/(2RC) = 3/2.

Соотношение не зависит ни от емкости человека, ни от номинала резисторов (при условии, что резисторы идентичны). МК просматривает таблицу соотношений T1/T2 для всех кнопок, выбирает ближайшее и определяет номер нажатой кнопки.

Если емкость человеческого тела равна 100 пФ, при сопротивлении 10 кОм приращение времени заряда между соседними кнопками будет иметь порядок микросекунды. Это время может быть зафиксировано большинством микроконтроллеров.

Я уже говорил, что описанный метод использовался для сканирования клавиатуры из 16 клавиш. Очевидным ограничивающим фактором здесь является паразитная емкость цепочки резисторов и выводов МК. Кроме того, необходимо использовать резисторы с хорошо согласованными номиналами, с допуском 1%, а еще лучше, 0.1%. (Выбор допусков определяется и числом кнопок). Напряжения переключения входов МК должны быть одинаковыми. Кроме того, если есть возможность, неплохо было бы организовать "обучение" контроллера, и запомнить соотношения T1/T2 для каждой кнопки в EEPROM или флеш-памяти.

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

Если в вашем распоряжении есть еще один свободный вывод МК (P3), вы сможете сканировать до 32 кнопок, подключив одну цепочку резисторов между выводами P1-P2, а другую между P1-P3. В общем случае, задействовав N выводов МК, вы можете обслуживать 16N•(N – 1) кнопок.

Перевод: AlexAAN по заказу РадиоЛоцман

На английском языке: Series Resistors, Body Capacitance Scan 16 Buttons With Two MCU Pins

ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Честно, признаюсь, я бы до этого не додумался (может из-за того, что еще не приходилось обслуживать большую клавиатуру в своих схемах). Но обязательно приму к сведению данный материал.
  • Интересное включение кнопок. Интересует, а сможет такое включение, для расширения функциональности кнопок, идентифицировать нажатие двух или трех (болше не надо) кнопок одновременно.
  • При небольшом количестве кнопок (например 4) надо думать что получится определять. Нужно наверное более точно определять соотношение интервалов. Можно еще при помощи одного входа обслуживать нажатие 16 кнопок , если это вход АЦП, В этом случае неполучится изготовить сенсорные кнопки. При помощи двух выводов мк и регистра сдвига можно контролировать и большее кол-во кнопок и проблем меньше.
  • С подобной системой управления сталкивался несколько раз. В касетном плеере (пульт дублирующий ккнопки на шнуре наушников),телевизор SHARP, ... Использование данного метода целесообразно при необходимости отнести пульт от самого прибора. Это позволяет обойтись только ДВУМЯ проводами. Альтернотивой микропоцессору может служить микросхема UAA180. Она имеет 12 выходов (открытый коллектор) и управляется НАПРЯЖЕНИЕМ, которое можно получить с резисторного делителя, как предложено в статье.
  • Но расстояние, мне кажется, может отрицательно сказаться на точности определения нажатой кнопки.
  • Определение, какая кнопка замкнуда, 1 - производится по ПОСТОЯННОМУ току. 2 - сопративление проводов несоизмеримо меньще сопративления делителя напряжения и их длинна Если не десятки метров не повлияют.
  • Все понятно, спасибо. Т.е. можно пробовать осваивать в своих конструкциях...
  • #7 относится к схемам подобным UAA180. Описаная в статье схема работает в динамическом режиме.
Полный вариант обсуждения »