Емкостное сенсорное зондирование с помощью микроконтроллера efm8

Емкостное сенсорное зондирование с помощью микроконтроллера efm8
Емкостное сенсорное зондирование с помощью микроконтроллера efm8
Anonim

Емкостное сенсорное сенсорное устройство с микроконтроллером EFM8

В этом проекте рассматривается технология емкостного сенсорного сенсорного анализа с использованием оценочной платы для микроконтроллера EFM8 Sleepy Bee.

Связанная информация

  • Управление ЖК-дисплеем через SPI: введение в разработку проекта с помощью микроконтроллера EFM8
  • Монитор окружающего освещения: отображение измерений на ЖК-дисплее
  • Введение в емкостное сенсорное зондирование
  • Схемы и методы для обеспечения емкостного сенсорного зондирования

Требуемое оборудование / программное обеспечение

  • SLSTK2010A Набор для начинающих сонных пчел
  • Студия Simplicity

Совет Dev

В дополнение к микроконтроллеру с интегрированным емкостным модулем оценочная плата SLSTK2010A имеет структуру печатной платы, которая может функционировать в качестве емкостного сенсорного интерфейса. Вы можете увидеть его в нижней правой части доски:

Image
Image

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

Image
Image
Image
Image

Графическая любезность Марка Хьюза

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

Изменение емкости

Мы начнем с использования одного из демонстрационных проектов, доступных в Simplicity Studio:

Image
Image

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

Давайте используем эту программу, чтобы узнать, что именно происходит с сигналом cap-sense. Если вы не знакомы с емкостной сенсорной технологией, неплохо прочитать две статьи, посвященные кепке, перечисленные выше в разделе «Связанная информация». Если вы не знаете много о емкостном восприятии, и вы не в настроении для технической статьи, вот в чем суть: раздел печатной платы разработан так, чтобы сформировать (обычно кончик пальца). Когда ваш палец входит в контакт с этим конденсатором PCB, общая емкость увеличивается. Конденсатор PCB встроен в какую-то схему, которая может обнаружить это изменение емкости, анализируя изменения в характеристиках синхронизации приложенного сигнала.

Я не читал каждое слово в разделе cap-sense справочника Sleepy Bee, но мне кажется, что нет четкой информации о конкретном методе обнаружения изменений емкости, используемом аппаратным обеспечением EFM8. Итак, давайте исследуем один из штырей для подсказки и посмотрим, что происходит. Я исследовал P0.2, и LCD любезно сказал мне, какая часть кругового слайдера соответствует сигналу P0.2 (подробнее об этом позже).

Область раскрывает периодическую форму волны:

Image
Image

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

Image
Image

Следующий захват области показывает, как выглядит волна, когда я плотно нажимаю на датчик P0.2.

Image
Image

Это может быть не слишком очевидным в однокадровых захватах, но когда я смотрю на живой дисплей, я ясно вижу, что контакт с пальцем вызывает уменьшение пикового напряжения и изменение разрядной части формы волны. Изменение характеристики разряда - это то, что вы ожидаете с увеличенной емкостью: уменьшение напряжения немного более постепенное, и, следовательно, требуется немного больше времени, чтобы напряжение вернулось к 0 В.

Я не видел значительного изменения частоты, возникающей в результате контакта с пальцем, поэтому я могу только предположить, что «емкостная способность к цифровому преобразователю» Sleepy Bee (как показано на блок-схеме ниже) определяет изменения емкости, основанные на изменениях в разрядной части формы рампы, возможно, в сочетании с изменениями амплитуды.

Image
Image

Блок-схема модуля емкостного ощущения, взятого из справочного руководства Sleepy Bee, стр. 154

Эффект наблюдателя

Хотелось бы узнать немного больше о измерениях чувствительности к EFM8, но исследование с помощью осциллографа - не лучший способ сделать это. Причина должна быть очевидна из маленького белого восьмиугольника, который появился, как только мы исследовали сигнал с крышкой - в этом случае осциллограф и входная схема функционируют как довольно объемная и дорогая замена для кончика пальца. Мы не можем видеть состояние волны по умолчанию, потому что, применяя зонд, мы добавляем относительно большой объем емкости к датчику.

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

Монитор емкости в реальном времени

План здесь состоит в том, чтобы включить базовые функции управления крышкой на EFM8, а затем отобразить измерения емкости на ЖК-дисплее. Это позволит нам увидеть точные изменения измеренной емкости, возникающие в ответ на любой тип взаимодействия между датчиком и пальцем.

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

Одним из важных отличий, о котором я расскажу, является интерфейс SPI. В предыдущих проектах я использовал прошивку с прерыванием для SPI-связи между EFM8 и ЖК-модулем, но в этом проекте я использую более простую опросную реализацию (помните принцип KISS).

Вот распиновка:

Image
Image

CS0: Контроллер Cap-Sense

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

Одна из особенностей, которая мне очень нравится, - это интегрированная функция накопления и среднего значения. Измерения емкостного смысла могут быть шумными, поэтому удобно, что аппаратное средство EFM8 может автоматически накапливать и усреднять до 64 выборок.

Когда вы включаете «Емкостная чувствительная библиотека» в аппаратном конфигураторе, вы заметите, что среда IDE автоматически добавляет две функции, связанные с смысловым смыслом, в вашу основную () процедуру. Я не знаю, что они делают, и, честно говоря, у меня было ограниченное терпение для кода библиотеки в стиле автопилота, который только меня не интересует, что происходит в моем микроконтроллере. Поэтому я удалил эти вызовы функций и вручную настроил модуль CS0. (Чтобы быть справедливым, я, безусловно, ценю аппаратные средства настройки, которые значительно уменьшают сложный и подверженный ошибкам процесс настройки и очистки всех правильных бит в многочисленных специальных регистрах функций.)

Вот основная функция ():


int main(void) { //call hardware initialization routine enter_DefaultMode_from_RESET(); //give the EFM8 control over the LCD module EFM_DISP_ENABLE = HIGH; //initialize chip select to LOW (inactive) SPI_CS = LOW; //clear the LCD screen LCD_Clear_All(); SFRPAGE = CAPSENSE_PAGE; //enable the cap-sense module CS0CN0_CSEN = TRUE; //select 16-bit conversions CS0MD2 &= ~(BIT7|BIT6); CS0MD2 |= (BIT7|BIT6); //make sure that the end-of-measurement interrupt flag is cleared CS0CN0_CSINT = CLEARED; while(1) { //initiate a capacitance measurement CS0CN0_CSBUSY = TRUE; while(!CS0CN0_CSINT); CS0CN0_CSINT = CLEARED; //print the measured value on the LCD Update_LCD(CS0D); Delay_10ms(10); } }

Я хочу, чтобы скопировать значение 64, но мне не нужно вручную выполнять этот шаг настройки, потому что параметр накопления переносится из параметра I, выбранного в аппаратном конфигураторе. Кроме того, начальное измерение по умолчанию записывает от 1 до CSBUSY (бит 4 в регистре CS0CN0), поэтому мне не нужно было настраивать его либо потому, что CSBUSY - это то, как я хочу инициировать измерения. Я установил коэффициент усиления в 4 раза (по умолчанию 8x), потому что с коэффициентом усиления в 8x казалось, что я достигал или приближался к максимальному измеренному значению, когда я очень сильно нажал на датчик; усиление, как и настройка накопления, может быть выбрано через аппаратный конфигуратор.

Как видно из инструкции Update_LCD (CS0D), число, отображаемое на экране, является только необработанным значением в регистре данных модуля cap-sense. Это не измеренная емкость в пикофарах или любом другом блоке, и, кроме того, абсолютная емкость не имеет значения. Технология емкостной чувствительности основана на изменениях емкости.

Прошивка в действии

Вы можете скачать код здесь:

Файлы источника и проекта

Вот одна небольшая деталь, которая может сэкономить вам определенную проблему: когда я впервые тестировал интерфейс LCD, я заметил, что на первый взгляд случайные сбои дисплея. В конце концов я понял, что отладчик вмешивается в связь SPI, потому что проблема возникла только тогда, когда я запускал программу как часть сеанса отладки. Когда я закрыл соединение между Simplicity Studio и микроконтроллером, и пусть программа EFM8 работает независимо, все было в порядке.

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

Вывод

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

Попробуйте этот проект сами! Получить спецификацию.