Наверняка каждый из нас хоть раз сталкивался, а многие уже давно пользуются приборами с емкостными сенсорными кнопками и емкостными экранами. Сенсорные панели используются в бытовых приборах (кухонные варочные поверхности и вытяжки, телевизоры), компьютерной технике (Touch Pad ноутбуков), платежных терминалах, планшетных компьютерах, смартфонах и других массовых приборах. Преимущества сенсорных технологий очевидны – увеличение надежности по сравнению с контактными кнопками, улучшение внешнего вида приборов.
Компания Microchip уделяет большое внимание сенсорным технологиям. Сенсорные технологии Microchip, объединенные под общим названием mTouch, предлагают разработчикам различные методы работы с сенсорами, микроконтроллеры поддержанные библиотеками программ, специализированные микросхемы для работы, как с одиночными емкостными сенсорами, так и с емкостными экранами с поддержкой multi Touch, распознавания 2D и 3D жестов. В статье представлен анализ предлагаемых компанией Microchip Technology Inc. технологий под общим наименованием «mTouch™»
В основе работы с емкостными сенсорами лежит измерение емкости. Емкость конденсатора описывается формулой:
C = εr ε0 S/d | {1} |
---|---|
где | |
εr – диэлектрическая проницаемость материала, | |
S – площадь конденсатора, | |
d – расстояние между обкладками конденсатора. |
Обычно емкостной сенсор – это участок металлизации на печатной плате (хотя это не обязательно так – рассмотрим другие варианты позже). Емкость такого сенсора определяется базовой (паразитной) емкостью сенсора (CP) и емкостью CF, вносимой при «касании» сенсора или покрывающего его лицевой панели или при приближении к сенсорной поверхности в случае реализации датчика приближения. Таким образом, задача детектирования касания сенсора, это задача измерения емкости CF, причем нам не нужно знать абсолютное значение вносимой емкости, главное детектировать изменение емкости.
Общая емкость сенсора C_SENSOR определяется как:
CSENSOR = CF + CP | {2} |
---|---|
где | |
CF – емкость, вносимая при «касании» сенсора, | |
CP – паразитная емкость сенсора. |
В зависимости от конфигурации печатной платы величина паразитной емкости может достигать значений 50-100пФ, в то время как вносимая при касании емкость лежит в диапазоне 1-15пФ. Таким образом, задача определения «касания» сенсора состоит в детектировании достаточно малых изменений емкостей.
Существует несколько методов измерения емкости, рассмотрим некоторые из них. Самый простой способ измерения емкости, это частотный метод. В данном методе емкостной сенсор является частотозадающим элементом генератора. Для построения такого генератора может использоваться интегрированная в PIC микроконтроллеры периферия – от простого компаратора 1), до связки компараторов с RS-триггером 2) или специализированного периферийного модуля CSM 3).
Простейшую емкостную кнопку или датчик приближения можно сделать на одном 6-и выводном микроконтроллере с интегрированным компаратором PIC10F и двух внешних элементах – диоде и резисторе [1]. Более совершенные схемы для реализации многоканального сенсорного управления могут быть построены с использованием встроенного RS-триггера и двух компараторах или специализированного периферийного модуля CSM – Capacitive Sensing Module (тоже частотный метод измерения, не требует внешних элементов).
Рис 1. Пример реализации сенсорной кнопки на встроенных в микроконтроллер RS-триггере и двух компараторах.
Рис. 2. Увеличение числа емкостных кнопок за счет использования встроенного мультиплексора.
Недостатком частотного метода является сравнительно низкое быстродействие и бОльший уровень генерируемых шумов.
Подробно о применении частотного метода при построении емкостных клавиатур описано в 4). Так же на нашем сайте есть пример реализации сенсорных кнопок на этом принципе с исходными кодами.
Другой метод измерения емкости основан на заряде емкости и измерении полученного напряжения по истечении фиксированного интервала времени. Напряжение на конденсаторе определяется выражением:
V=I t/C | {3} |
---|---|
где | |
I – ток, | |
t – время заряда, | |
C - емкость. |
Многие микроконтроллеры семейств PIC18, PIC24 и PIC32 имеют аппаратный модуль измерения времени заряда (CTMU – Charge Time Measurement Unit), который имеет программируемый источник тока. При постоянном токе и заданном времени заряда напряжение на конденсаторе будет зависеть только от емкости конденсатора (см. рис.3).
Рис. 3. Измерение емкости с помощью CTMU.
Подробно об измерении емкости с помощью модуля CTMU описано в 5).
Более подробно хотелось бы остановиться на методе измерения емкости с помощью емкостного делителя напряжения (Capacitive Voltage Divider). Метод основан на уравнивании зарядов двух емкостей. Например, мы имеем два конденсатора, емкость одного из них постоянна (С1), емкость другого (С2) – может меняться. Если зарядить С1 до напряжения VDD и подключить к разряженному C2, то часть заряда «перетечет» из С1 в С2 и изменится общее напряжение на обоих конденсаторах. Результирующее напряжение будет зависеть от соотношения емкостей С1 и С2 и при изменении одной из емкости так же будет меняться и напряжение. Для применения метода CVD для построения сенсорных клавиатур в качестве С1 используют емкость устройства выборки и хранения – УВХ АЦП (CHOLD), а в качестве С2 – емкость сенсора (CSENSOR = CP + CF). Метод CVD имеет несколько преимуществ:
Метод CVD позволяет измерять емкость сенсора относительно емкости устройства выборки и хранения АЦП. Спецификация PIC микроконтроллеров определяет типовое значение емкости УВХ АЦП, однако из-за технологических особенностей производства микроконтроллеров величина емкости в зависимости от экземпляра микроконтроллера может отличаться на величину до 20%. По этой причине метод CVD не рекомендован для измерения абсолютного значения емкости. Емкостные сенсоры приближения и касания не требуют измерения абсолютного значения емкости – главное точно измерить изменение емкости. Именно с этой задачей отлично справляется метод CVD.
Рассмотрим последовательность действий при измерении емкости с помощью метода CVD.
QHOLD = VHOLD CHOLD
QSENSOR = VSENSOR CSENSOR {4}
CTOTAL = CHOLD + CSENSOR {5}
VSAMPLE = (VHOLD CHOLD + VSENSOR CSENSOR) / (CHOLD + CSENSOR) {6}