Емкостной сенсор

Просмотров: 2741


Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере.

Конструкция емкостных сенсоров имеет вид:ch-0060-svreg-03

Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит от емкости подключенной к управляющему входу.

Блок схема

Catcatcat_ES_01

В контроллерах последних разработок имеется модуль Timer1 Gate Control Logic который может полностью автоматизировать функции измерения частоты или длительности импульса. Таймером TMR0 задается время измерения. Модуль контроля управляет измерением. Таймер TMR1 используется для измерения частоты.

Принцип работы емкостного сенсора с использование управляемого генератора. Генератор через аналоговый коммутатор подключается к сенсору. В зависимости от пита микроконтроллера доступно разное количество выводов. В зависимости от физических размеров сенсора и окружающего пространства, на выходе будет получена соответствующая частота. Частоту можно регулировать в зависимости от тока который можно задавать в регистре CPSCON0 битами CPSRNG<1:0> в нашем контроллере можно задать ток 01-0,1/10-1,2/11-18 мкА.

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

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

Catcatcat_ES_02

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

При прикосновению к сенсору – емкость сенсора увеличивается, при этом частота уменьшается и мы будем иметь следующий вид:

Catcatcat_ES_03

Для определения нажатия сенсора необходимо ввести еще два параметра это ПОРОГ и ГИСТЕРЕЗИС. ПОРОГ предназначен для задания уровня при понижении частоту ниже которого мы будем считать, что сенсор “сработал”: Catcatcat_ES_04 Но просто задать порог недостаточно для уверенного срабатывания сенсора. Необходимо дополнительно ввести гистерезис, что даст возможность ввести режим триггера и формировать на выходе стабильные уровни при касании. Catcatcat_ES_05   Надеюсь приведенные рисунки поясняют принцип работы емкостного сенсора.


Для начала как настроить микроконтроллер для работы с емкостными сенсорами.

  1. Для начала выводы к которым должны подключаться сенсора необходимо сделать аналоговыми, например для микроконтроллера PIC16F1826 это необходимо выполнить так (см. схему)
    // настройка портов
        ANSELA = 0b00001111; 	// для сенсоров настроить как аналоговые входы
        PORTA = 0;			//
        LATA = 0b00000000;          // отключить выход
        TRISA = 0b00001111; 	// для сенсоров настроить как аналоговые входы
  2. Настроить таймер T0 для формирования интервалов измерений
        OPTION_REG	= 0b10000111;
    //		    |||||+++- PS<2:0>: - 1 : 64
    //		    ||||+---- PSA: предделитель подключен к модулю Timer0
    //		    |||+----- TMR0SE: счет по фронту 0->1
    //		    ||+------ TMR0CS: синхронизация от (FOSC/4)
    //		    |+------- INTEDG: 0 прерывание по входу RB0/INT по заднему фронту
    //		    +-------- WPUEN: все подтягивающие резисторы отключены
  3. Настроить таймер T1 для измерение частоты
    // настройка TIMER1
    //TMR1CS<1:0> T1CKPS<1:0> T1OSCEN T1SYNC — TMR1ON
        T1CON = 0b11000101;
    //	      |||||| +- TMR1ON | TIMER1 включен
    //	      |||||+--- T1SYNC | не синхронизировать входную частоту
    //	      ||||+---- T1OSCEN | генератор отключен
    //	      ||++----- T1CKPS | предделитель 1:1
    //	      ++------- TMR1CS | таймер подключен к CAPOSC
    
    //R/W-0/u 	R/W-0/u R/W-0/u R/W-0/u R/W/HC-0/u 	R-x/x 	R/W-0/u R/W-0/u
    // настройка логического элемента таймера TIMER1
    //TMR1GE T1GPOL T1GTM T1GSPM T1GGO/DONE T1GVAL T1GSS<1:0>
        T1GCON = 0b11110001;
    //	       ||||||++- T1GSS | выбор входа управления (управляется переполнением от таймера Т0)
    //	       |||||+--- T1GVAL | индикатор выхода логического элемента
    //	       ||||+---- T1GGO/DONE | бит состояния и управления моноимпульсного формирователя (1-активация ожидания им перепада)
    //	       |||+----- T1GSPM | режим синхронизации (одним импульсом отключен)
    //	       ||+------ T1GTM | триггер переключателя включен, управляется входным сигналом переключается по каждому положит перепаду
    //	       |+------- T1GPOL | Бит полярности. Модуль активируется высоким уровнем "1"
    //	       +-------- TMR1GE | Логический модуль включен
  4. Настроить генератор сенсоров
    // настройка Capacitive Sensing
    //CPSON CPSRM(1) — — CPSRNG<1:0> CPSOUT T0XCS
        CPSCON0 = 0b11001100;
    //	        |||||||+- T0XCS | вход таймера Т0 не подключен к генератору модуля
    //	        ||||||+-- CPSOUT | индикатор направления тока
    //	        ||||++--- CPSRNG<1:0> | генератор включен, ток макс (01-0,1/10-1,2/11-18 мкА)
    //	        |+++-----  | не используется
    //	        +-------- CPSON | Capacitive sensing module включен
    
    // выбор сенсора
    //— — — CPSCH<4:0>
        CPSCON1=0;	//подключен к 0 входу.
    //входы описываются как CPSCH0, CPSCH1, CPSCH2, CPSCH3
  5. Для работы сенсора мы должны определить базовое значение  sen – это та частота которую генерирует сенсор когда нет прикосновение. Как это сделать? Естественно мы не будем её измерять, так как она может измениться от состояния внешней среды, это значение должно постоянно корректироваться во время работы сенсора. Для этого мы будем измерять текшую частоту сенсора и вычислять среднее значение. Для того, чтобы не путаться и не “растрачивать” сенсор, в момент прикосновения подстройка частоты будет блокироваться на необходимое нам время. Я установил 30 секунд. Для чего это необходимо? Я считаю, что для управления устройством, длительность проникновение не должна превышать 30 секунд (чаще достаточно долей секунды). Если состояние сенсора “включено” будет не более 30 секунд, то он будет работать как обычно, но если прикосновение будет выше 30 секунд, то это будет расценено как изменение внешних условий и автоматически уровень “выключено” перестроиться под создавшиеся условия. Для такого режима работы у нас не будет “болеть голова”  если необходимо будет использовать сенсоры с разными характеристиками. Сама программа автоматически правильно настроить его работу. Основанной функцией есть программа вычисление среднего значения. Она работает следующим образом. Имеются старое и новое значение параметра. При получении нового значения из старого вычитается процент от его величины и изменяется старое значение. Из нового значения извлекается такой же процент и прибавляется к старому значению.

    //======================================================================================
    // subroutine: среднее число
    // входные данные		staroe - старое значение переменой, 
    //				novoe - новое измеряемое значение
    // старое значение уменьшается на коэффициент INTEG
    // а затем увеличивается на величину нового/INTEG
    unsigned int averageg (unsigned int staroe, unsigned int novoe)
    {
        staroe=staroe-staroe/INTEG;
        staroe=staroe+novoe/INTEG;
        return staroe;
    }//
  6. Все остальное просто дело логики. Вкратце измеряем частоты формируемые каждым сенсором, записываем их в массив. Обрабатываем и получаем уровни состояния отключено (более подробно смотри программу).
  7. Следующие два параметра это ПОРОГ и ГИСТЕРЕЗИС они естественно подбираются из практики, но никогда не вызывают проблем. Порог это величина изменения частоты ниже которого порога сенсор расценивает, что осуществилось прикосновение. Гистерезис это та величина которая необходима для стабильности переключения. Главная особенность ГИСТЕРЕЗИС  < ПОРОГ. На практике в два, четыре раза меньше. Порог это чувствительность сенсора чем меньше порог тем выше его чувствительность, можно так настроить, что сенсор будет срабатывать не от прикосновения, а от приближения руки. Гистерезис это параметр устраняющий неопределенность, если при прикосновении сенсор ведет себя нестабильность, то его надо увеличить. Вот И вся примостить. В примере для тестирования для режима “объемного контроля” выбрана величина Порог – 30, гистерезис 5. Смотрите демонстрационное видео, размеры сенсоров выбраны большими специально для демонстрации возможности программы подстроиться от даже такой вариант. Режим работы для бесконтактного управления, очень удобен когда нет необходимости к чему-то прикасаться.
  8. Демонстрация режима без прикосновения.
  9. Перевести в режим прикосновения можно двумя способами: это уменьшить рабочий ток генератора или увеличить порог. Все эти параметры необходимо подбирать отдельно для конкретной конструкции. Ниже вариант видео для значения порога 200. т.е. диапазон чувствительности очень вели у может удовлетворить любые запросы. По толщине пластика можно не “заморачиваться”, сенсоры могут работать через довольно большие толщины, тестировались до 20 мм, все нормально работало. В видео акрил толщиной 3 мм.
  10. Режим на прикосновение.
  11. ОБРАТИТЕ ВНИМАНИЕ программе надо несколько секунд после включения для настройки сенсоров.
  12. Мы уже описали два два режима работы сенсора, без прикосновения и с прикосновением, эти режимы отличаться только настройкой чувствительности. Но возможно в программах потребуется режим когда будет необходимо получить не только состояние “вкл/выкл”, но и данные от расстояния до сенсора.  Этот вариант, так же возможен при реализации такого рода сенсоров.
  13. Для демонстрации приведем проект сенсор который может определять направление ускорения с каким мы прикасаемся к нему. При помощи такого сенсора можно формировать команды в зависимости от того как вы к нему прикасаетесь.
  14. Видео контроль скорости приближения.

Все эксперименты проводились на следующей схеме:


Схема для изучения es_catcatcat_01

Удачного творчества! проект легко перенести на другой тип контроллера.


Проект MPLABX v2.00, компилятор MPLAB® XC8 Compiler v1.30 [wpdm_file id=270 template=”link-template-calltoaction3.php”]Проект фокус с измерения  контроль скорости приближения [wpdm_file id=271 template=”link-template-calltoaction3.php”]


Это может быть интересно


  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    Просмотров: 901 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …
  • Сумеречное релеСумеречное реле
    Просмотров: 1275 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    Просмотров: 1311 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
  • Самый простой диммер для светодиодного освещенияСамый простой диммер для светодиодного освещения
    Просмотров: 2775 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
  • NeoPixel LED and PIC24NeoPixel LED and PIC24
    Просмотров: 419 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
  • LED драйвер TM1639LED драйвер TM1639
    Просмотров: 1929 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
  • VU Meter Tower ARTVU Meter Tower ART
    Просмотров: 1452 Стерео индикатор уровня аудио сигнала. Компактность и удобство проектирования устройств на светодиодах WS2812B, а также легкость реализации алгоритма родило идею созданию своей конструкции. В этом проекте я предоставлю …
  • Проект с использованием MCC часть 12-1Проект с использованием MCC часть 12-1
    Просмотров: 773 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
  • MPLAB® Harmony – или как это просто! Часть 1.MPLAB® Harmony – или как это просто! Часть 1.
    Просмотров: 3273 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
  • APA102 – светодиоды со встроенным драйвером и SPI интерфейсомAPA102 – светодиоды со встроенным драйвером и SPI интерфейсом
    Просмотров: 3096 APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих …



Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.