- PVSM.RU - https://www.pvsm.ru -
Предыдущие статьи [1 [1]] и [2 [2]] были посвящены таким частям (ПНЯ) Периферии Независимой от Ядра микроконтроллеров (МК) Microchip как конфигурируемым логическим ячейкам и портам ввода/вывода с новой полезной функцией ограничения тока.
Сейчас рассмотрим Аналого-Цифровой Преобразователь (АЦП) и в особенности новый АЦП с поствычислителем. Как вы наверное уже привыкли новые особенности периферии могут помочь в реализации специфических функций и упростить код под PIC микроконтроллеры.
В отличие от предыдущих частей, в этой будет чуть больше теории и чуть меньше примеров.
АЦП с полной уверенностью можно назвать Периферией Независимой от Ядра, так как АЦП имеет вариант тактирования от встроенного RC-генератора и может выполнять преобразование в режиме сохранения энергии Sleep. Но этим независимость не ограничивается. Многие семейства PIC16F1xxx имеют АЦП с возможностью старта по событиям, а совсем новые семейства PIC16F188xx получили еще и поствычислитель.
Рассмотрим возможности АЦП на примере МК семейства PIC16F18855/75
АЦП контроллеров этого семейства имеет:
АЦП с поствычислителем состоит из нескольких блоков (рис.1):
Рис. 1. Структура АЦП с вычислителем в семействе PIC16F18855.
Прошли те времена, когда для запуска измерения АЦП нужно было «вручную» установить бит. Теперь АЦП может запускаться ещё по следующим событиям:
Устройство выборки/хранения (УВХ) получило дополнительные возможности, в основном связанные с упрощением определения емкости подключенной ко входу АЦП. В первую очередь это помогает в создании интерфейсов с емкостными (сенсорными) кнопками.
Microchip предлагает определять емкость сенсора с помощью емкостного делителя напряжения (Capacitive Voltage Divider, CVD).
Суть метода сводится к следующему. На первом шаге (см.рис. 2) вход сенсора подключается к «земле» (его емкость разряжается), а канал АЦП к напряжению питания, емкость УВХ заряжается.
Затем вход сенсора подключается к УВХ АЦП, происходит перераспределения заряда между емкостью сенсора и емкостью УВХ. Затем производится измерение напряжения на емкости УВХ.
управление входом при CVD | форма сигналов CVD |
---|---|
Рис. 2. Диаграммы поясняющие измерение емкости с помощью емкостного делителя напряжения.
При касании сенсора будет изменяться его емкость, а значит мы будем фиксировать разные установившиеся значения напряжения на емкости УВХ.
Для уменьшения влияния наведенных помех на сенсор и/или оператора, применяется дифференциальный CVD, состоящий из двух последовательных измерений с помощью CVD, но на второй стадии инвертируем заряды на сенсоре и УВХ (сенсор заряжаем до напряжения питания, а емкость УВХ разряжаем, см. рис.3).
Рис.3. Диаграмма сигналов при дифференциальном CVD.
Подробно про емкостные сенсоры, метод дифференциального CVD и управление защитным проводником можно почитать по ссылке [3] [2].
Новый АЦП с поствычислителем для поддержки и автоматизации CVD имеет следующие функции:
Таким образом, АЦП в автоматическом режиме может выполнить дифференциальный CVD и предоставить нам готовый результат.
Поствычислитель осуществляет несколько функций.
Модуль АЦП может работать в одном из пяти режимов:
Базовый режим. В этом режиме АЦП может производить одно или два измерения, после каждого может выставляться флаг прерывания.
Накопление. По каждому измерению результат суммируется с аккумулятором и инкрементируется счетчик измерений.
Усреднение. По каждому измерению результат суммируется с аккумулятором и инкрементируется счетчик измерений. По достижению заданного числа повторений результат делится и попадает в модуль сравнения, а следующее измерение сбросит счетчик в 1 и значение аккумулятора замениться на результат первого измерения.
Усреднение очередью. По запуску АЦП происходит очистка аккумулятора и счетчика измерений и производится серия измерений заданное число раз, после чего результат делится и поступает в модуль сравнения.
Фильтр Нижних частот. Каждое измеренное значение проходит через ФНЧ. По завершению заданного числа измерений результат попадает в модуль сравнения.
По завершению каждого вычисления результат фиксируется до окончания следующего измерения. Так же вычисляется разница между:
Если вычислять разницу не нужно, то можно выбрать вычисление разницы между константой равной нулю.
Результат вычисления ошибки сравнивается с верхним и нижним порогом. Дополнительно может формироваться прерывание если:
Данный пример показывает конфигурацию АЦП в плагине Mplab Code Configurator (MCC) для выполнения следующих действий:
Рис. 4. Настройки АЦП с вычислителем.
Рис. 5. Считывание «сырых» и фильтрованных данных с АЦП.
За основу этого примера взята реализация «быстрое создание емкостного сенсора [4]» из microchip.wikidot.com [5] [5].
Выбрана следующая конфигурация:
Рис. 6. Настройки АЦП для CVD.
Рис.7. Реакция на касание сенсорной кнопки при одиночном CVD.
Настройка порога нам может дать прерывание не по каждому измерению/серии измерений с фильтрацией, а по касанию «кнопки».
В данном примере используется следующая конфигурация периферии:
Рис. 8. Настройки АЦП для варианта дифференциального CVD.
Рис. 9, Диаграмма на входе сенсора с дифференциальным CVD
Рис.10. Реакция на касание сенсорной кнопки при дифференциальном CVD
Из сравнения CVD (рис.7) и дифференциального CVD (рис.10) видно, что второй отличается более «чистым» сигналом с большей амплитудой.
Вся описанная последовательность действий выполняется полностью автоматически и независимо от ядра – в это время МК может выполнять какие-то другие действия или находиться в режиме микропотребления Sleep. По прерыванию остается считать усредненное значение результата измерений.
Мы рассмотрели еще одну часть Периферии Независимой от Ядра — АЦП с вычислителем в микроконтроллерах Microchip. Некоторые возможности, например запуск по триггеру, или CVD присутствуют во многих семействах PIC16F1xxx, но новая “фича” – ADCC (АЦП с вычислителем), появилась в семействе PIC16F188xx (PIC16F18855 и др.).
Периферия независимая от ядра интересна сама по себе, но наибольшую пользу может принести возможность синтеза функциональных блоков, т.е. совместное использование нескольких периферийных модулей для решения конкретных задач. В этом случае тактовая частота, быстродействие и разрядность ядра уходят на второй план – аппаратная часть выполняет специализированные функции, а ядро занимается программной поддержкой изделия.
P.S.
Вопрос к читателям. Стоит ли выкладывать исходники к примерам под какую-то конкретную (дешевую) демо-плату или из описаний и так все понятно и примеры кода не нужны?
Литература:
Автор: ariz0na
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/184959
Ссылки в тексте:
[1] 1: https://geektimes.ru/post/278718
[2] 2: https://geektimes.ru/post/279374/
[3] по ссылке: http://pickit2.ru/doku.php/all_articles:mtouch#емкостнойделительнапряжения
[4] быстрое создание емкостного сенсора: http://microchip.wikidot.com/xpress:build-a-quick-capacitive-sensor-with-conductive-ink
[5] microchip.wikidot.com: http://microchip.wikidot.com/
[6] Конфигурируемые Логические Ячейки в PIC контроллерах: https://geektimes.ru/post/278718/
[7] Технология mTouch(tm). Создание емкостных клавиатур, сенсоров и экранов.: http://pickit2.ru/doku.php/all_articles:mtouch
[8] Источник: https://geektimes.ru/post/280224/
Нажмите здесь для печати.