Многоканальное управление сенсорными кнопками

Решения Microchip Teсhnology для реализации сенсорного управления на емкостных датчиках

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

Строятся такие кнопки, как правило на емкостных сенсорах (рис. 1), принцип действия которых основан на изменении емкости при касании поверхности над токопроводящим покрытием [1].


Рис. 1. Устройство емкостного сенсора

Компания Microchip Technology Inc. предлагает ряд решений для реализации сенсорных элементов управления (кнопки, слайдеры, тачпады) на базе следующих периферийных модулей [2]:

  • один компаратор и таймер;
  • сдвоенный компаратор с RS-триггероми 2 таймера;
  • блок емкостных датчиков(CSM – capacitive sensing module);
  • блок измерения времени заряда(CTMU – charge time measurement unit).

Решение на базе микроконтроллера с одним компаратором и таймером

Если стоит задача внедрения в устройство одной сенсорной кнопки, то Microchip предлагает реализовать ее на одном компараторе с таймером на простейших микроконтроллерах Microchip со встроенным компаратором, например, на 6-выводных PIC10F204/6 (рис. 2) [3]. На интегрированном в микроконтроллер компараторе и внешней RC-цепочке построен генератор. Частота генератора определяется постоянной времени RC-цепочки, образованной резистором и суммарной емкостью сенсора, которая, в свою очередь, определяется емкостью сенсорной кнопки Ср (рис. 1) и емкостью Cf, вносимой при касании сенсора. Касание кнопки можно рассматривать какподключение параллельно еще одной емкости Cf (рис. 2), что ведет к изменению частоты генератора.


Рис. 2. Организация емкостного датчика на базе одного компаратора и таймера

Именно это изменение фиксируется микроконтроллером. Выход компаратора используется в качестве счетного входа таймера Timer 0, приращение таймера производится по перепаду из 0 в 1 на выходе компаратора. Зная емкость Cp и сопротивление резистора, можно вычислить ожидаемое значение таймера TMR0 за фиксированное время. Время измерения выбирается из соображений, чтобы прошло достаточно много циклов для обеспечения требуемой точности, но не произошло переполнение TMR0, из этих же соображений удобно установить делитель частоты TMR0в максимальное значение 1:256. Касание кнопки приводит к снижению частоты генерации и, соответственно, частоты переключения компаратора. Таким образом, считывая по циклу значение TMR0 через заданное фиксированное время и сравнивая его с ранее вычисленным, можно сделать выводо касании кнопки.

Компания Microchip предлагает схему реализации сенсорной кнопки и пример исходного кода модуля на базе дешевых 6-выводных микроконтроллеров PIC10F204/6 с подробным описанием принципа работы [3].

Решение на базе микроконтроллера со сдвоенным компаратором с RS-триггером и двумя таймерами

Для организации до четырех сенсорных кнопок Microchip предлагает решение на сдвоенном компараторе с двумя таймерами, которое реализуется на 8-битных микроконтроллерах семейств PIC16F887/690/616 (рис. 3) [4].


Рис. 3. Организация емкостного датчика на базе сдвоенного компаратора и двух таймеров

В данном примере Timer 0 задает частоту детектирования касания кнопки, а Timer 1 используется для обнаружения касания, аналогично Timer 0 в первом примере. Следует отметить, что PIC-микроконтроллеры имеют мультиплексор на входе сдвоенных компараторов, что позволяет обрабатывать большее количество кнопок. Полную схему для реализации сенсорных кнопок на базе PIC16F887/690/616 с примером исходного кода и подробным описанием принципа работы можно скопировать с сайта www.microchip.com/mtouch [4].

Решение на базе микроконтроллера с блоком емкостных датчиков (CSM)

Ввиду быстро растущего интереса разработчиков к сенсорному управлению, Microchip выпустила микроконтроллеры PIC16F со специальным модулем для создания емкостных датчиков – блоком CSM (рис. 4) [5].


Рис. 4. Организация емкостных датчиков на базе модуля CSM

Что дает применение блока емкостных датчиков (CSM):

  • возможность построения интегрированной схемы детектирования касания сенсорных кнопок, не требующей внешних элементов;
  • интегрированный мультиплексор для подключения до 16 емкостных сенсоров;
  • работу в режиме Sleep для снижения энергопотребления.

Детектирование касания при помощи блока емкостных датчиков CSM сходно с предыдущими методами, но не требует внешних элементов кроме самой кнопки. В качестве счетчика тактов, вырабатываемой генератором частоты, используется Timer 1. В качестве источника запуска и останова счетчика Timer 1 может использоваться Timer 0, Timer 2 или сторожевой таймер WDT. Алгоритм вычисления частоты и детектирования касания кнопки тот же. Возможность использования WDT позволяет определять наличие касания в режиме Sleep. При этом генератор CSM переводится в энергосберегающий режим, а при обнаружении касания кнопки микроконтроллер выходит из режима Sleep и обрабатывает событие нажатия в нормальном режиме. Преимуществом данного метода в сравнении с предыдущими является возможность работы сенсорных кнопок в режиме энергосбережения Sleep, а также отсутствие внешних элементов.

Читайте также:
Схема подключения фотореле

Решение на базе микроконтроллера с блоком измерения времени заряда (CTMU)

В новых 16-битных микроконтроллерах семейств PIC24FJ256GA110 (контроллер общего назначения – 4 UART, 3 SPI, 3 I2C) и PIC24FJ256GB106 (контроллер с USB OTG) добавлен блок измерения времени заряда (CTMU – Charge Time Measurement Unit) (рис. 5) [6].


Рис. 5. Организация емкостных сенсоров на базе модуля CTMU

Анализ состояния емкостного сенсора в CTMU принципиально отличается от ранее описанных методов, так как производится измерение не частоты, а напряжения, до которого зарядилась емкость за фиксированное время (рис. 6).


Рис. 6. Отличие работы CTMU от других методов: а) измерение частоты, б) измерение напряжения

Принцип действия заключается в следующем: разряженная до 0 В суммарная емкость схемы сенсора начинает заряжаться источником тока и заряжается в течение фиксированного времени; далее при помощи АЦП измеряется уровень напряжения, до которого зарядилась емкость CАЦП (рис. 7).


Рис. 7. Временные диаграммы работы модуля CTMU

CTMU отличается значительно большей функциональностью, детектирование сенсорных кнопок – лишь одно из ее возможных применений. Как вариант – микроконтроллер с CTMU может быть использован для управления емкостной тач-панелью дисплея. В совокупности с бесплатной графической QVGA-библиотекой Microchip это позволяет быстро разработать и внедрить в проектируемое устройство наглядный пользовательский интерфейс. Другие применения CTMU:

  • измерение абсолютного и относительногоизменения заряда, причем относительное не требует калибровки (для детектирования касания сенсорной кнопки);
  • измерение временных промежутков (динамический рефлектометр, измерение длины кабеля);
  • высокоскоростной ШИМ;
  • ЦАП;
  • измерение температуры при помощи одного диода.

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

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

Для ознакомления и быстрого освоения работы с емкостными сенсорами на базе микроконтроллеров PIC16 со встроенными компараторами компания Microchip предлагает стартовый набор PICDEM Touch Sense 1 Development Kit (рис. 8) [7].


Рис. 8. Стартовый набор PICDEM Touch Sense 1 Development Kit

  • демонстрационная плата с полной поддержкой сенсорного управления mTouch;
  • графический пользовательский интерфейс для экспериментальных разработок;
  • управление типа “кнопка” и типа “слайдер”.

Для ознакомления и быстрого освоения работы с клавиатурами на основе модуля CTMU Microchip предлагает стартовый набор MPLAB Starter Kit for PIC24F (рис. 9) [8].


Рис. 9. Стартовый набор MPLAB Starter Kit for PIC24F

Его основные особенности:

  • интерактивное меню, выведенное на дисплей при помощи параллельного порта PMP;
  • управление емкостными сенсорами, реализованное при помощи CTMU;
  • отображение времени и даты с использованием модуля часов реального времени RTCC;
  • использование ШИМ и программного переназначения выводов (PPS) для управления RGB светодиодами;
  • встроенный USB host;
  • отображение данных в реальном времени в режиме multitasking (мультизадачность) – АЦП и PMP;
  • захват данных в реальном времени (multitasking – USB).

Компания Microchip Technology Inc. предоставляет ряд готовых схемотехнических решений, алгоритмов и примеров программ для конкретных микроконтроллеров – от базового семейства PIC10 до высокопроизводительных 16-битных PIC24 (таблица) для реализации всевозможных сенсорных кнопок, клавиатур, джойстиков, слайдеров и т. д.

Таблица. Сферы применения микроконтроллеров Microchip для емкостных датчиков

Метод реализации Микроконтроллер Кол-во каналов для кнопок* Особенности МК Применение
1. один компаратор и таймер PIC10F204/6 1 Простейшие 6-выводные МК, 4 I/O, 4 MHz (1 MIPS), EEPROM 256 bytes, RAM 16/24 bytes, Flash 0.25/0.5 KWords, Timer 1x8bit 1-2 сенсорных кнопки
PIC12F с компаратором 1 8 pins, 6 I/O, до20 MHz (5MIPS), 256 bytes EEPROM, 128 bytes RAM, 2 KWords Flash, Timers 2x8bit, 1x16bit, 1 ECCP
Любой PIC с компаратором 1 шт./комп. Имеются представители во всех семействах.
2. cдвоенный компаратор с RS-триггером и 2 таймера PIC16F631/ 677/ 685/ 687/ 689/ 690 4 20 pins, 18 I/O, до 20 MHz (5MIPS), 256 bytes EEPROM, 256 SRAM, 4 KWords Flash, Timers 2x8bit, 1x16bit, 10x12bit ADC, 1 ECCP, 1 EUSART, 1 SSP Клавиатура, 4-10 клавиш
PIC16F882/ 883/ 884/ 886/ 887 4 28/40/44 pins, 24/35 I/O, до 20 MHz (5 MIPS), 256 bytes EEPROM, 368 bytes SRAM, 8 KWords Flash, Timers 2x8bit, 1x16bit, 14x10bit ADC, 1 ECCP, 1 EUSART, 1 MSSP
PIC16F610/ 616/ 16HV610/ 616 4 14 pins, 11 I/O, до 20 MHz (5 MIPS), 128 bytes SRAM, 2 KWords Flash, Timers 2x8bit, 1x16bit, 8x10bit ADC
PIC18F13K50/ 14K50 3 20 pins, 15 I/O, до 48 MHz (12 MIPS), 256 bytes EEPROM, 768 bytes SRAM, 8 KWords Flash, Timers 1x8bit, 3x16bit, 11x10bit ADC, 1 ECCP, 1 EUSART, 1 MSSP, USB
3. Блок емкостных датчиков(CSM) PIC16F722/ 3/ 4/ 6/ 7 До 16 28/40/44 pins, 25/36 I/O, 8/16xCSM, до 20 MHz (5 MIPS), 368 bytes SRAM, 8 KWords Flash, Timers 2x8bit , 1x16bit, 14x8bit ADC, 1 AEUSART, 2 CCP, 1 MSSP Клавиатура, более 15 клавиш
4. Блок измерения времени заряда (CTMU) PIC24FJ128/ 192/ 256GA106/ 08/10 До 16 64/80/100 pins, 53/69/85 I/O, 31/42/46 PPS pins, до 32 MHz (16 MIPS), 16 Kbytes SRAM, 256 Kbytes Flash, Timers 5x16bit, 9 CCP, 4 UART(+IrDA), 3 SPI/I2C, 16x10bit ADC/CTMU, 3 Comparators, 1 PMP/PSP Клавиатура, более 15 клавиш, в устройствах с высокой производительностью, графическим пользовательским интерфейсом, голосовым оповещением, USB и т.д.
PIC24FJ64/128/192/ 256GB106/08/10 До 16 64/80/100 pins, 52/68/84 I/O, 29/40/44 PPS pins, до 32 MHz (16 MIPS), 16 Kbytes SRAM, 256 Kbytes Flash, Timers 5x16bit, 9 CCP, 4 UART(+IrDA), 3 SPI/I2C, 16x10bit ADC/CTMU, 3 Comparators, 1 PMP/PSP, USB OTG
Читайте также:
Схема термостата

(*) – непосредственно количество каналов для подключения сенсорных кнопок.

Количество кнопок может быть увеличено за счет внешнего мультиплексора и разделения обработки каждой из них по времени, то есть снижения частоты сканирования. Также для увеличения количества кнопок при том же количестве каналов Microchip предлагает решения, основанные на учете воздействия двух сенсоров одновременно (рис. 10) [9].


Рис. 10. Влияние касания на состояние соседнего емкостного сенсора

К примеру, на рис. 11а на четырех емкостных датчиках (один цвет – один датчик) организовано 10 кнопок. На рис. 11б приведен метод для создания клавиатуры с количеством кнопок AхB, с использованием (A+B) каналов.


Рис. 11. Методы увеличения количества кнопок на канал

Следует обратить внимание, что при использовании каждого из сенсоров для нескольких кнопок накладываются следующие ограничения:

  • детектирование касания кнопки – только после сканирования состояния всех датчиков;
  • требуется более высокая скорость сканирования;
  • невозможно распознать касание нескольких кнопок одновременно.

Классическая реализация слайдера на емкостных сенсорах в зависимости от требуемой чувствительности требует достаточно много каналов для подключения датчиков. Компания Microchip Technology Inc. предлагает решение с использованием двух каналов (рис. 12), что позволяет выиграть как по количеству каналов, так и в чувствительности.


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

Для оптимального выбора критерия нажатия кнопки Microchip предоставляет программу mTouch Dainostic Tool (рис. 13) [10].


Рис. 13. Программное обеспечение от mTouch Dainostic Tool

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

На пике развития и повсеместного внедрения систем с сенсорным управлением Microchip Technology Inc. активно завоевывает этот рынок, предлагая целый ряд специализированных решений, охватывая огромный сектор прикладных задач от простейших кнопок до сенсорных дисплеев.

Статья была опубликована в журнале Компоненты и Технологии №9 2008 год

Еще раз о емкостных сенсорах.

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

Вообще говоря, существует много емкостных методик определения касания. Самый древний подход — определение касания по наводкам от силовой сети, которые всегда присутствуют на теле человека (если он, конечно, не находится в чистом поле). Во вторую группу можно выделить QTouch’еобразные (основанные на перекачивании в накопительный конденсатор заряда с сенсора и последующем измерении его величины) подходы, отличающиеся алгоритмами обработки, формой датчиков, подходом к фильтрации помех, etc. Посмотреть на реализацию такой системы на коленке, а также почитать подробное описание идеи работы такой системы на русском можно тут. В этой же статье нас будет интересовать третий подход, менее продвинутый, но гораздо более простой относительно второго и надежный относительно первого — непосредственное измерение емкости пластины сенсора. В принципе, и об этом уже писал Elm-Chan. Но попробуем повторить то же самое по-русски и не глядя в чужие исходники.

Читайте также:
Инфракрасный барьер своими руками

Для опыта я буду использовать свою макетку с установленной ATmega48, так что пример будет под AVR.

Итак, идея состоит в том, что любой объект имеет емкость, а современные микроконтроллеры работают на такой скорости, которая позволяет измерить емкость даже отдельного кусочка фольги размером 1х1 см. — примерно такого размера обычно выбирается сенсор в этом методе, очевидно, по размеру пальца, ибо подобный подход пригоден прежде всего для реализации отдельных сенсорных кнопок. Когда к такой кнопке прикасается человек, ее емкость существенно возрастает, что и регистрирует контроллер, принимая решение о нажатии. Итак, включим все следующим образом:

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

1. Настроить ножку на выход;
2. Подать на нее логический ноль, чтобы гарантированно разрядить сенсор перед замером;
3. Настроить ножку на вход;
4. Посчитать, за сколько тактов напряжение на ней достигнет единицы.

Все вышесказанное я воплотил в такой код:

SNS_DDR, SNS_PORT и подобные — имена, заданные дефайнами. В функцию передается битовая маска вывода, который нужно опросить, что делает ее универсальной для опроса нескольких кнопок.

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

1. Опрашиваем сенсор;
2. Если значение выше порога касания — регистрируем касание и запоминаем это.
3. Если значение ниже порога свободного сенсора — регистрируем пустой сенсор и запоминаем это.
4. Выдаем запомненное значение.

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

Вышеприведенные участки кода — фрагменты проекта, который я по-быстрому набросал в AVR Studio + WinAVR и который приложен в аттаче.

Введение

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

Принцип работы сенсорной кнопки

По сути, сенсорная кнопка – это сенсор, то есть какая-то проводящая поверхность, и контроллер, измеряющий его емкость (способность накапливать электрический заряд). При неизменных условиях внешней среды емкость сенсора не меняется. Но когда к нему подносится палец, его емкость увеличивается. По этому изменению контроллер “делает вывод”, что пользователь нажал на кнопку.
Емкость измеряется путем подсчета времени, которое требуется для ее заряда до определенного уровня напряжения. Это время зависит как от значения емкости, так и от величины зарядного тока, которая задается какой-то внешней цепью. В простейшем случае эту роль может выполнять резистор, подключенный одним концом к источнику питания, а другим к сенсору.

где Cs – емкость сенсора, Cf – емкости вносимые прикосновением пальца.

Читайте также:
Регулятор температуры для низковольтного паяльника

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

Конфигурация сенсорной кнопки

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

Схема

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

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

Чтобы добавить его в свой проект, нужно переписать заголовочный и сишный файл драйвера (sensor.c и sensor.h) в папку проекта, добавить сишный файл sensor.c к проекту внутри среды разработки и включить заголовочный файл драйвера sensor.h (с помощью директивы include) в свой файл, где будут использоваться функции драйвера.

Разберем как им пользоваться. Для хранения настроек сенсора используется структура данных sensor_t. В настройки сенсорной кнопки входит адрес порта, номер вывода в порте, пороговое значение и текущее состояние. Чтобы добавить к проекту сенсорную кнопку, нужно для начала создать переменную типа sensor_t.

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

Опрос одной сенсорной кнопки выполняет функция SENS_Poll(. ), которой нужно передать адрес переменной типа sensor_t. Эта функция возвращает состояние сенсорной кнопки. Для всех возможных состояний сенсорной кнопки объявлен специальный тип данных sensor_state_t. Но функция опроса возвращает только два состояния SENS_PRESSED и SENS_NOT_PRESSED. Остальные состояния сделаны на будущее.

Функция SENS_Poll(. ) выполняет один цикл разряда- заряда сенсора.

Для достоверного определения состояния сенсора, эту функцию лучше вызывать несколько раз. Так же как делается при опросе механических кнопок. Работу функции нежелательно прерывать прерываниями, иначе подсчет времени заряда будет некорректным. Частоту вызова функции опроса можно сделать такой же, как при работе с механическими кнопками. Функция не оптимальная, из-за того, что доступ к порту осуществляется через указатель. Но это позволяет упростить процедуру настройки сенсора, используя только адрес регистра PORTX, а адреса регистров DDRX и PINX вычисляются из него.
И последняя функция драйвера – это SENS_GetState(. ). Она просто возвращает текущее значение сенсорной кнопки.

Код самого тестового проекта очень простой. Инициализация выхода для светодиода, инициализация сенсорной кнопки и бесконечный опрос кнопки в цикле while(1). Никаких прерываний не используется. Частота работы микроконтроллера 9.6 МГц.

Емкостный сенсор на микроконтроллерах AVR и задержка итерациями. Примеры на Attiny13

Приветствую, любитель микроконтроллеров!

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

Читайте также:
Автономное освещение на солнечных батареях своими руками

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

Алгоритм работы следующий:
1. Переводим ногу МК в режим выхода.
2. Подаем низкий уровень, чтобы разрядить емкость кнопки.
3. Переводим ногу МК в режим входа и ждем когда емкость кнопки зарядится через резистор 1 МОм и на входе появится верхний уровень. Ожидание производится в цикле, в котором инкрементируется счетчик.
4. Сенсор зарядился — по значению счетчика можно судить о состоянии сенсора.

Обратите внимание, что подсчет итераций идет в атомарном блоке. Это значит, что в это время не будут срабатывать прерывания и не собьют нам время заряда сенсора.

Теперь для использования нашего алгоритма нам необходимо определить порог срабатывания кнопки. Для этого при инициализации мы выполняем калибровку. И берем в качестве порогового — значение на четверть большее, чем возвращается при свободном сенсоре.

Я проверял, на пустом сенсоре функция у меня возвращает стабильно 15. А когда кладешь на сенсор палец — около 30. Значит порог у нас будет где-то 15 + 15/4 = 18.

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

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

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

Задержка итерациями основного цикла
Иногда в основном цикле требуется периодически производить какие-то действия с большой задержкой. Скажем 2 секунды. Однако, просто “спать” при этом нельзя, потому что можно проворонить, скажем, нажатие на сенсорную кнопку или другое событие. В этом случае есть простой выход. Берем счетчик, выставляем его в некоторое значение и каждую итерацию основного цикла декрементируем. Как только счетчик стал равен нулю — наша задержка истекла и пришло время для нашего действия. В основном цикле можно добавить минимальную задержку, которая не сделает появление ожидаемого события критическим.

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

Результат
Дабы разбавить сухой текст, я хочу показать результат сегодняшнего урока наглядно. Т.к. я делаю лампу настроения, то я использовал RGB-светодиод. В основном цикле будем менять 7 цветов радуги + розовый по кругу. А при нажатии на сенсорную кнопку будем просто моргать белым цветом. Микроконтроллер будет работать на частоте 9.6 МГц, для этого достаточно от фьюзов по умолчанию убрать делитель на 8 (сделать CKDIV8 = 1). Фьюз байты удобно рассчитывать вот этим калькулятором.

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

Схема для модуляции в протеусе получилась немного отличающейся от реальной картины: пришлось реализовать емкостный сенсор на двух конденсаторах и переключателе. Питание 5В для МК на схеме отсутствует, но оно необходимо!

Смотрим результат на видео

Исходный код, схему, модель в протеусе можете скачать в архиве.

В преддверии Нового года, желаю вам довести все ваши проекты до конца!

Разработка сенсорного Z-Wave выключателя на аккумуляторе со светящимися кнопками

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

С самого начала была цель сделать 4-х кнопочный выключатель на аккумуляторе размера 80х80 мм максимально тонким, сенсорные кнопки должны быть большие и при касании светиться целиком, а не только небольшой кружочек, как у всех. В итоге получился стильный тонкий выключатель, способный управлять любыми устройствами умного дома.

Читайте также:
Регулятор скорости двигателя переменного тока

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

  • Функционал
  • Дизайн корпуса
  • Разработка печатной платы
  • Изучение рассеивателей света
  • Подбор материалов рассеивателя
  • Использование

Видео работы сенсорного выключателя в конце.

Функционал

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

  • Включать/выключать свет
  • Регулировать яркость освещения

4 кнопки управляют 2-мя группами освещения. Верхние кнопки при удержании плавно увеличивают яркость, при коротком нажатии включают свет. Нижние кнопки при удержании плавно уменьшают яркость, при коротком нажатии выключают свет.

Сделать, чтобы каждая кнопка работала в режиме переключения, нажал — вкл, нажал — выкл. Это позволит управлять 4-мя группами освещения.

Дизайн корпуса

Мне понравилась идея с 4-мя большими сенсорными кнопками компании Basalte, и я решил развить её в своем направлении.


Рис. 1 — KNX выключатель Basalte

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


Рис. 2 — Корпус сенсорного выключателя

Все детали корпуса разработаны в Blender и распечатаны на 3D принтере белым ABS пластиком.


Рис. 3 — Разработка корпуса сенсорного выключателя в Blender

Разработка печатной платы

Печатная плата разработана в Proteus. Это вторая версия, в ней используется одна сенсорная микросхема TTP224 на 4 канала. В первой версии использовалось 4 шт. одноканальных TTP223, разницы в работе никакой, но при использовании TTP224 меньше компонентов паять.


Рис. 4 — Разработка печатной платы сенсорного выключателя в Proteus

Главными компонентами на плате являются:

  1. Z-Wave радио чип
  2. Аккумулятор Robiton 800мАч
  3. 3.3V Step-Up/Step-Down Voltage Regulator S7V8F3
  4. Микросхема заряда аккумулятора TP4056
  5. Схема переключения питания с аккумулятора на USB
  6. Кнопка калибровки
  7. Микросхема сенсорных кнопок TTP224

Z-Wave чип работает в диапазоне 2.7В — 3.6В, аккумулятор выдает до 4.7В, поэтому я использовал повышающе-понижающий преобразователь 3.3В Pololu S7V8F3. Для заряда аккумулятора использовал дешевую и многим известную микросхему TP4056, ток заряда настроил на половину емкости аккумулятора 400мА. При подключении зарядки, питание устройства переключается на USB и аккумулятор спокойно заряжается, схема переключения питания реализована на одном транзисторе и диоде. Кнопка при нажатии сбрасывает питание регулятора и вся схема перезагружается, это нужно для калибровки TTP224. На лицевой части платы находятся 4 площадки сенсорных кнопок размером 40х40 мм и 4 светодиода. Производство заказано в Seeedstudio, качеством и ценой очень доволен.


Рис. 5 — Плата сенсорного выключателя

Самым главным компонентом в сенсорном выключателе является контроллер сенсорной кнопки. Я провел тестирование 3-х контроллеров и у каждого оказались, как плюсы, так и минусы. Результаты тестирования 3-х контроллеров сенсорных кнопок:

Плюсы: Дешевый, на текстолите с одной стороны могут быть площадки сенсоров, на обратной стороне другие компоненты, но при этом сильно снижается чувствительность. Настройка выходного сигнала: высокий/низкий уровень, настройка режима кнопки: переключение/включение. 4 канала.

Минусы: Если с обратной стороны сенсорной площадки находятся дорожки, то плохо работает сквозь оргстекло более 3 мм и еще хуже если на стекло наклеена пленка, не реагирует на небольшое касание, только нажатие всей подушечкой пальца, даже с настроенной максимальной чувствительностью (Cs = 1pF, диапазон 0-50pF, чем меньше, тем чувствительнее).


Рис. 6 — TTP224 на готовой плате

Плюсы: Реагирует на небольшое касания сквозь 3 мм (и больше) оргстекло, если настроить чувствительность на среднем уровне (Cs = 22nF, диапазон 2-50nF, чем больше, тем чувствительнее). Автоматически подстраивается под толщину стекла.

Минусы: Под сенсорной площадкой не должно быть никаких дорожек, ни питания, ни земли, иначе снижается чувствительность. Выход только высокий уровень. 1 канал только.


Рис. 7 — Тестовая плата AT42QT1011

Плюсы: Реагирует на небольшое касания сквозь 3 мм (и больше) оргстекло. Защита от помех с помощью земли вокруг и под площадкой сенсоров, автоматически подстраивается под толщину стекла. 5 каналов.

Минусы: Долго реагирует на нажатие и долго понимает, что палец отпустили, порядка 0.5 секунд. Если удерживать палец на площадке сенсора, то через 9 секунд выключается светодиод, происходит калибровка. Сенсорную площадку требуется закрывать землей со всех сторон, в том числе и под площадкой, иначе срабатывает в любой точке касания текстолита.

Читайте также:
Многоканальное дистанционное управление по ИК каналу


Рис. 8 — MTCH105 на макетной плате

Выбрал TTP224 (4 канала), потому что на одном текстолите с одной стороны можно разместить все компоненты, а на другой стороне — площадки сенсоров. Пожертвовал чувствительностью, через 3 мм оргстекло срабатывает если коснуться целиком подушечкой пальца, хотя это можно трактовать, как защита от случайного касания :). Если под площадкой сенсора нет дорожек, то реагирует сквозь 4 мм оргстекло при малейшем касании.

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

Изучение рассеивателей света

Стояла задача — равномерно засветить площадку размером 40х40мм, которой касается палец. Из-за ограничений размера корпуса, получилось впихнуть только по одному светодиоду для каждой площадки.

Я изучил устройство нескольких сенсорных выключателей: Livolo, Vitrum, HTTM touch button. В каждом использовался свой подход к равномерному рассеиванию света.

Итальянский Z-Wave выключатель с дорогим декоративным стеклом. Отражатель-рассеиватель реализован следующим образом: на прозрачном оргстекле нарисован обод светоотражающей краской, сбоку подсвеченный одним светодиодом. Со стороны светодиода краски меньше нанесено, тем самым достигается равномерное свечение по всему ободу. Сверху устанавливается декоративное стекло.


Рис. 9 — Рисунок светоотражающего обода на оргстекле

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


Рис. 10 — Сенсорная часть выключателя Livolo

HTTM — HelTec Touch Model

Готовый сенсорный модуль с Noname микросхемой. Отражатель-рассеиватель состоит из 3-х частей: текстолит с луженой площадкой, оргстекло для торцевой подсветки с множеством микроямок, белая мутная пленка.


Рис. 10 — Разобранный сенсорный модуль HTTM

Подбор материалов рассеивателя

Рассеиватель из матового оргстекла

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


Рис. 11 — Матированное оргстекло

Рассеиватель из оргстекла для торцевой подсветки (LGP) и молочного оргстекла
Использовал 2 разных оргстекла толщиной по 2 мм, бутерброд из двух элементов получился 4 мм. Нижнее оргстекло для торцевой подсветки, благодаря нанесенным белым точкам, равномерно рассеивает свет по всей поверхности. Верхнее молочное оргстекло дает мягкое свечение и красивый вид, при этом яркость заметно ниже и увеличивается вес выключателя.


Рис. 12 — Оргстекло для торцевой подсветки и опаловое оргстекло

Панель лайтбокса от компании Ledison
Российская компания Ledison предоставила на тест панель от лайтбокса состоящую из 3-х компонентов: светоотражающая подложка, специальное светорассеивающее 3 мм оргстекло (на вид прозрачное, но внутри видна зернистая структура), прозрачная защитная пленка. Верхнюю пленку я заменил на матовую Oracal 8500 и получилось хорошее рассеивание. Но при работе с выключателем пленка выглядит не солидно, может поцарапаться и её трудно приклеить без пузырьков.


Рис. 13 — Бутерброд для лайтбокса от Ledison

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


Рис. 14 — Корпус, плата и рассеиватель

Использование

Первые тестовые версии выключателей я изготовил 2 года назад и имею уже опыт их использования, один установлен около санузла на высоте 120 см и удобен для детей, второй располагается около кровати и управляет ночником, люстрой и LED подсветкой. Т.к. все кнопки разделены перекрестием их легко нащупать в темноте и нажать нужную. Световой фидбэк точно говорит какая кнопка нажата. По сравнению с кнопочными выключателями минусов не обнаружил.


Рис. 15 — Сенсорный выключатель на аккумуляторе в деле

Заметил приятный побочный эффект, выключатель около кровати можно использовать для подсветки тумбы, если нажать на нижние кнопки.

На данный момент в Z-Wave чипе используется прошивка от 4-x кнопочного брелока Z-Wave.Me Key Fob, удобно, что она уже есть готовая и хорошо работающая, неудобно, что не все функции есть, которые хочется. Единственным нерешенным вопросом осталась засветка уголков в центре, нужно закрывать фольгированной пленкой, но пока думаю куда лучше лепить фольгу, на корпус внутри или на оргстекло.

Читайте также:
Терморегулятор для теплиц

Далее в планах перейти на свободно программируемый Z-Uno Module для реализации всех программных хотелок.

Умный сенсорный выключатель Girer Wi-Fi без нулевой линии: автоматизация Smart Home

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

Умный сенсорный выключатель Girer — УЗНАТЬ ЦЕНУ

Прямоугольная версия выключателя Girer — УЗНАТЬ ЦЕНУ

Содержание
  • Внешний вид
  • Внутренности
  • Монтаж
  • ПО
  • Видеообзор
  • Вывод
Внешний вид

Поставляется выключатель в простой картонной коробке. На задней части должны быть отметки о цвете, протоколе работы и количестве кнопочек на передней панели.

Внутри находится сам выключатель, инструкция по эксплуатации и конденсатор.

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

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

Сам выключатель бывает как с одной, так и с тремя сенсорными клавишами, а также, черного или белого цвета. Передняя панель пластиковая, чем-то напоминает акрил. Сенсорные кнопки обладают подсветкой, когда свет горит кнопка подсвечивается красным светом, когда свет выключен – синим светом.

Дополнительный плюс в том, что нет необходимости менять подрозетник на квадратный, как в случае работы с выключателями от Xiaomi. На задней части колодка с винтами, для подключения проводки.

Если рядом с выключателем установлены другие, или группа розеток, то перед покупкой проверьте «встанет» ли этот выключатель. Так как размеры корпуса у него немного больше, чем у стандартных. 86 миллиметров. Толщина составляет 9,5 миллиметров, глубина в подрозетнике 25,5 миллиметров.

Внутренности

Аккуратно отщелкиваем верхнюю часть выключатели и откладываем ее в сторону. Все равно для монтажа ее пришлось бы снимать.

Далее аккуратно вытаскиваем внутренности нашего выключателя.

Выкручиваем 3 винта и достаем «силовой модуль» реле и контактной группой.

На каждый канал установлено релеGOLDEN GH-1A-12L с током 10А.Не знаю, почему писали про 500W в инструкции, реле позволяет коммутировать до 2,2 кВт.

Обратная сторона платы.

Мозги устройства опознать сложно, так как вся информация на чипах тщательно затерта.

Монтаж

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

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

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

Подключаем фазу на L, провод от ближнего светильника, там, где установлен конденсатор, на L1, остатки на L2 и L3, соответственно.

Закрепляем выключатель в подрозетники идущими в комплекте винтами, я, правда, закрепил их выкрученными из прошлого выключателя. Экономия должна быть экономной =)

Проверяем работу, предварительно включив автомат.

По умолчанию выключатель сразу переход в режим сопряжения. Но если этого не произошло, зажимаем на 5-7 секунд любую сенсорную кнопку, пока она не начнет моргать.
Открываем приложение Smart Life или Tuya Smart, нажимаем плюсик для добавления нового устройства. В открывшемся окне выбираем любой девайс с поддержкой Wifi. Указываем свою WiFi сеть и пароль к ней. Спустя 30-40 секунд произойдет добавление нового устройство в экосистему умного дома. Сразу рекомендую переименовать девайс.

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

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

Читайте также:
Плата для аниматроники

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

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

Кроме этого, можно создать группу устройств, как светильников, так и реле и прочих девайсов, и управлять ими одновременно. После создания появится отдельное, виртуальное устройство для управления. Быстро включать или выключать светильники или группу светильников можно прямо из меню приложения Smart Life.

В умных сценариях можно заставить включаться/выключаться наши светильники не только по сработке любого из датчиков, но и, например, при наступлении темноты, или спустя несколько минут, включать освещение. Данные про восход/заход солнца программа берет относительно нашего местоположения.

Получается вот такой пример автоматизации.

В роутере определяются как на базе чипа esp8266.

Видеообзор

Вывод

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

Использование Microchip PICkit 2 Debug Express для создания емкостного сенсорного переключателя на основе технологии mTouch™.

Автор: Marcel Flipse

Введение.

Комплект Microchip PICkit™ 2 Debug Express это комплект из программатора-отладчика PICkit™ 2 и демонстрационной платы. Комплект содержит все необходимое для разработки небольших проектов с нуля. В данной статье описывается разработка емкостного сенсорного переключателя, построенного всего лишь нескольких пассивных компонентах. Переключатель реализован с использованием технологии mTouch™. Компания Microchip предлагает ряд решений построения сенсорных датчиков, пригодных для разных применений, начиная от реализации одной сенсорной кнопки на 6-и выводном микроконтроллере PIC10F, до применения специализированной периферии контроллеров среднего семейства PIC16 и 16-и разрядных PIC24FJ. Предлагаемый пример реализован на контроллере PIC16F887, установленном на плате PICkit™ 2 Debug Express.

Принцип работы технологии mTouch.

Разработанная компанией Microchip технология определения прикосновения mTouch™ основывается на измерении изменения емкости. Многие компании интегрируют в свои приборы емкостное управление для обеспечения эстетичного и профессионального вид их продукции. На рисунке 1 проиллюстрированы основные принципы работы емкостного датчика. Если пользователь подносит палец к емкостному датчику, то он вносит в схему дополнительную емкость. Это изменение емкости детектируется PIC® микроконтроллером с помощью встроенной периферии и программы. Обзор различных вариантов применения технологии mTouch™ был опубликован в журнале «Компоненты и Технологии» №9 за 2008 год (http://gamma.spb.ru/articles.php?i=84). Микроконтроллер PIC16F887, помимо прочего, содержит компаратор и RS-триггер. Технология измерения емкости mTouch™ использует емкость сенсора как частотозадающий элемент генератора. Микроконтроллер измеряет частоту генератора, и любое смещение частоты, при прикосновении пользователя, обнаруживается и проверяется программным обеспечением. На рис.1 показана схема генератора для реализации емкостного сенсора.

Рис.1. Принцип действия емкостного сенсора.

RC генератор реализован на двух компараторах и RS триггере, которые управляют зарядом/разрядом емкости сенсора. Конденсатор будет заряжаться и разряжаться со скоростью, определяемой постоянной времени RC-цепочки. Амплитуда генерации ограничивается установленными верхним и нижним порогами компараторов. Верхний порог задается внутренним делителем, а нижний внешним делителем напряжения. Дополнительный конденсатор в цепи делителя подавляет высокочастотные шумы источника питания и стабилизирует напряжение питания нижнего порога. Емкость сенсора будет заряжаться и разряжаться до напряжений, ограниченных порогами. Когда напряжение на емкости сенсора ниже нижнего порога, выход компаратора C2OUT находится в состоянии логической «1» и система заряжает емкость. При заряде напряжение на емкости сенсора растет и при достижении верхнего порога выход компаратора меняет свое состояние на лог. «0», что в свою очередь, приведет к началу разряда конденсатора. При достижении нижнего порога, компаратор 2 сработает вновь и емкость начнет заряжаться снова. Когда напряжение на емкости сенсора находится между порогами, то система помнит последнее состояние (заряд или разряд). Повторяющийся процесс заряда и разряда изображен на рисунке 2.

Рисунок 2. Диаграмма напряжения на емкости сенсора.

Построение схемы.

На основе отладочной платы из комплекта PICkit™ 2 Debug Express можно собрать емкостной датчик за считанные минуты. Автор использовал два SMD резистора и конденсатор для создания делителя напряжения. Компоненты могут быть припаяны к контактным площадкам на макетном поле (см. рис.3.). Кусок провода соединяет среднюю точку делителя с выводом RA2 PIC-контроллера.

Читайте также:
Регулятор мощности паяльника своими руками – варианты схем

Рисунок 3. Делитель напряжения.

Форма емкостной кнопки не очень важна. Размер кнопки определяется проектируемым прибором. Чем больше площадь контактной площадки, тем больше чувствительность датчика. В данном примере используется небольшая монета, но пригодна любая проводящая поверхность (см. рис.4). Резистор (используется 150КОм) определяет частоту переключения генератора. Подойдет любая частота в диапазоне от 100КГц до 400КГц. Точное значение частоты не важно, но более высокая частота даст большую точность измерения.

Рисунок 4. Сенсорная площадка.

Последний шаг это подключение выходной частоты генератора к таймеру «Timer 1», для того, чтобы программа микроконтроллера могла измерять частоту генератора. Так же необходимо соединить вывод RA5/C2OUT к выводу RC0/T1CKI микроконтроллера. Последнее что необходимо, это соединить модуль компаратора с сенсором и резистором. Уберите перемычку R3 с платы Debug Express (отключает потенциометр от вывода RA0).

Программа для микроконтроллера.

Теперь, когда схема собрана, остается сделать последний шаг – написать программу. Программа написана на ассемблере и может быть откомпилирована с использованием бесплатной среды разработки MPLAB IDE. Сначала нужно инициализировать компараторы. Необходимые регистры инициализируются в соответствующей подпрограмме (init). Когда генератор запущен, должна измеряться его частота для детектирования изменения частоты при касании сенсора. Каждое изменение состояния выхода компаратора C2OUT с «0» в «1» будет увеличивать значение таймера «Timer 1» на единицу. Число переключений таймера накапливается за фиксированный временной интервал, для формирования окна накопления используется таймер «Timer 0». В начале измерения таймер обнуляется и начинает считать до 255, после чего происходит его переполнение и выставляется флаг запроса прерывания (вызывается подпрограмма прерывания). В прерывании фиксируется значение «Timer 1» (регистр TMR1) и сравнивается с предыдущим значением. Если новое значение «Timer 1» существенно меньше предыдущего, т.е. увеличилась емкость сенсора, то детектируется факт касания сенсора. Программа зажигает светодиоды, подключенные к порту PORTD. Новое значение «Timer 1» усредняется с бегущим средним значением, которое используется как база для сравнения с измеренным значением в текущем периоде. В конце подпрограммы обработки прерывания, когда все процедуры измерения закончили свою работу, оба таймера («Timer 0» и «Timer 1») обнуляются.

Дополнительная информация

Более подробно технология mTouch описана на сайте компании Microchip: www.microchip.com/mtouch и включает примеры схем, заметки по применению, руководства, web-семинары и презентации, описания отладочных плат, бесплатные библиотеки и ПО для диагностики демонстрационных плат, а так же перечень рекомендованных продуктов. На русском языке о решениях для построения сенсорных клавиатур и датчиков Microchip вы можете ознакомиться в статьях, расположенных на сайте www.gamma.spb.ru

Доступны несколько отладочных комплекта с различными вариантами реализации технологии mTouch™. Вместе с демонстрационными комплектами PICDEM™ Touch Sense поставляется бесплатное программное обеспечение mTouch Diagnostic tool, которое предоставляет графический интерфейс для анализа и настройки сенсорных решений в реальном времени.

Демонстрационный комплект «PICDEM Touch Sense 1 Development Kit» (номер для заказа DM164125)

Этот комплект демонстрирует технологию mTouch, реализующую клавиатуру и слайдер с использованием 8-и разрядных микроконтроллеров PIC16F с компараторами и RS триггером. В комплекте так же поставляется анализатор последовательных протоколов PICkit Serial Analyzer.

Демонстрационный комплект «PICDEM Touch Sense 2 Development Kit» (номер для заказа DM164128)

Этот комплект демонстрирует технологию mTouch на базе 16-и разряжных микроконтроллеров PIC24F с интегрированным модулем Измерения Времени Заряда (Charge Time Measurements Unit – CTMU).

Демонстрационный комплект «Capacitive Touch Evaluation Kit» (номер для заказа DM183026)

Демонстрационный комплект «Capacitive Touch Evaluation Kit» позволяет оценить реализацию сенсорных кнопок, клавиатур, слайдеров на специализированных модулях CSM и CTMU, интегрированных в микроконтроллеры PIC16F и PIC24FJ.

Демонстрационный комплект «PIC24F Starter Kit» (номер для заказа DM240011)

Этот комплект включает демонстрационную плату, среду разработки MPLAB® , студенческую версию Си компилятора MPLAB C30 C и все что необходимо для начала разработки приложений с емкостными сенсорными элементами. Недорогая плата из этого комплекта содержит интегрированный внутрисхемный отладчик и программатор, разъемы для использования функций USB-host и USB-device контроллера PIC24FJ, трехцветный светодиод, сенсорные площадки и OLED графический дисплей. Пример программного обеспечения для PIC24F реализует графическое управление элементами схемы через меню, поддерживаются функции работы с USB-Flash накопителями для записи лога данных.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: