Александр Сыров alexandr.syrov@eltech.spb.ru
Даян Хафизов
Семейство микроконтроллеров ATSAMC21 - CortexM0+ с CANFD, сигма-дельта АЦП и 5 В питанием от Microchip
В этой статье более подробно разберем микроконтроллер SAMC21 на базе ядра Cortex-M0+, а также рассмотрим пример проекта измерения освещенности и температуры, созданный с помощью фреймворка Harmony.
В 2016 году микроконтроллеры семейства SAMC2x были выпущены в массовое производство. Основные характеристики семейства микроконтроллеров SAMC21 приведены ниже:
Ядро ARM Cortex-M0+ с частотой до 48 МГц
● Аппаратный делитель и вычислитель квадратного корня, MPU (Memory Protection Unit)
Напряжение питания 2,7-5,5 В
● Рабочий температурный диапазон -40 ... +105°
● Объем Flash-памяти до 256 Кбайт
● Объем RAM до 32 Кбайт
● Двойной 12-разрядный АЦП с частотой до 1Msps
16-разрядный сигма-дельта АЦП (SDADC)
● 10-разрядный ЦАП 350ksps, аналоговый компаратор
Контроллер емкостного сенсорного ввода (PTC), до 256 каналов управления
● 32-разрядные часы реального времени с режимом календаря
● Система событий (12 каналов) с режимом SleepWalking
● Контроллер DMA (12 каналов)
● Интерфейсы CAN-FD, LIN (master/slave), USART/UART, SPI, I2C до 3,4Мгц, PMBus, RS485, IrDA
● 3 таймера/счетчика для управления двигателями и приводами
● до 84 GPIO

От других микроконтроллеров на базе Cortex-M0+ SAMC21 отличает диапазон напряжений от 2,7 до 5,5 вольт и наличие аппаратного делителя и вычислителя квадратного корня. Микроконтроллеры SAMD на базе того же ядра Cortex-M0+ работают по напряжению от 1,62 до 3,6 вольт. Семейство микроконтроллеров SAMC2x повыводно совместимо с микроконтроллерами семейства SAMD. Однако, SAMC21 имеет некоторые отличия в периферии: добавлены два контроллера CAN-FD, а также, помимо АЦП прямого преобразования (flash ADC), есть и сигма-дельта АЦП.
Наличие широкой периферии и ядра Cortex-M0+ позволяет использовать микроконтроллеры и SAMC21 в различных отраслях. Например, сенсорные панели, системы сбора и обработки данных, системы охранных сигнализаций, "умная" теплица, измерительная техника, системы контроля, автомобильная техника, системы управления моторами и двигателями и проч. Микроконтроллеры SAMC21 могут заменить 8-ми битные микроконтроллеры там, где не хватает производительности или памяти для программ и хранения данных.
В отличие от АЦП других видов, в сигма-дельта АЦП отсчеты берутся не в точках дискретизации, а на интервале измерений (т.е. берется среднее значение преобразуемого сигнала на интервале). Дискретизация сигнала происходит на частоте, значительно превышающую удвоенную верхнюю частоту спектра полезного сигнала. Это позволяет значительно снизить шумы квантования в полосе полезного сигнала.
Сигма-дельта АЦП состоит из дельта-сигма модулятора и децимирующего фильтра. Измерение сигнала происходит следующим образом. Разница между входом и 1-битным ЦАП подается на интегратор. Выход интегратора сравнивается с опорным напряжением, а результат этого сравнения устанавливает следующее значение 1-битного ЦАП (рис. 1). Использование 1-битного ЦАП упрощает схему и работу всего АЦП, поскольку все сводится лишь к простому переключение на Vref или -Vref. Т.е. нет необходимости использовать многобитный ЦАП, который построен на цепочке резисторов каждый со своим допуском и размером, что влияет на размер бита и точность. 1-битный ЦАП в сигма-дельта модуляторе гарантирует, что каждый бит имеет одинаковый размер.
Рис. 1 Логическая схема сигма-дельта АЦП в SAMC21
Выходной сигнал сигма-дельта модулятора представляет собой поток битов, а отношение единиц и нулей в этом потоке основано на значении аналогового входа. Для получения многобитового результата, поток битов проходит через децимирующий фильтр (рис. 2). Выходные данные фильтра прореживаются, что приводит к меньшему количеству выборок с большим количеством битов. Прореживание (децимация) контролируется коэффициентом передискретизации (OSR), который в модуле SDADC SAM C21 имеет степень 2 между 32 и 1024. Результат предоставляется в 24-битном регистре, что позволяет корректировать усиление и смещение без переполнения.
Рис. 2 Децимирующий фильтр в сигма-дельта АЦП


Характеристики сигма-дельта АЦП микроконтроллера SAMC21:
● Разрядность 16 бит
● Количество отсчетов до 1,5 MSPS (OSR) в режиме передискретизации
● Три аналоговых дифференциальных входа
● Диапазон конверсии от +VREF до -VREF
● Прерывание по событию
● Аппаратная корректировка усиления, смещения и сдвига

Как правило, сигма-дельта АЦП применяются в разнообразных системах сбора данных, в измерительном оборудовании (измерение давления, температуры, веса и т.п.), управлении батареями и т.д. Рассмотрим пример измерения освещенности и температуры.
Для ознакомления и быстрого начала разработок Microchip предлагает отладочную плату ATSAMC21N-XPRO (рис. 3). Она содержит микроконтроллер ATSAMC21N18A (в корпусе TQFP с 100-выводами и Flash-памятью объемом 256Кбайт), отладчик/программатор. На плате доступны интерфейсы LIN и CAN, сенсорная кнопка и сигма-дельта АЦП с возможностью выбора опорного напряжения. Преимуществом этой отладки является то, что она поддерживает шилды для Arduino UNO.
Также нам понадобится плата расширения IO1 Xplained Pro (рис. 4), на которой есть разъем для SD-карты, датчик освещенности, датчик температуры и другое.
Подключаем IO1 Xplained Pro на разъем EXT1 на ATSAMC21N-XPRO.
Рис. 3 Внешний вид отладочной платы ATSAMC21-XPRO
Рис. 4 Внешний вид платы расширения IO1 Xplained Pro
Для написания кода будем использовать MPLAB X IDE и фреймворк Harmony. MPLAB X IDE - это среда разработки, содержащая широкий спектр инструментов для разработки, конфигурации, визуализации, отладки программного кода и проч.
MPLAB Harmony - это фреймворк, обеспечивающий совместимость библиотек встроенного программного обеспечения для разработки приложений на всех 32-разрядных микроконтроллерах и микропроцессорах компании Microchip. Он включает в себя:
- реализацию ядра, поддерживающего архитектуры ядер MIPS и Cortex
- простой в использовании графический интерфейс пользователя MPLAB Harmony Configurator (MHC) для выбора, настройки и генерации начального кода, периферийных библиотек (PLIBs) и промежуточного программного обеспечения (стеки USB, TCP/IP, графики и т. д.)
- возможность переносимость код с помощью согласованных API-интерфейсов, которые можно использовать для разных семейств микроконтроллеров
- драйверы и системные службы
- уровень абстракции периферийных библиотек (Hardware Abstraction Level)
- более 1000 готовых примеров приложений

Также в Harmony реализована полная интеграция со сторонними решениями, такими как FreeRTOS и Micrium, и возможность импорта проектов, созданных в IAR Embedded Workbench.
MPLAB Harmony Configurator (MHC) устанавливается в виде плагина. В меню Tools выбираем Plugins. В появившемся окне со списком плагинов выбираем MPLAB® Harmony Configurator 3 и нажимаем Install (рис. 5). После установки перезагружаем MPLAB.

Рис. 5 Установка плагина Harmony Configurator 3 в MPLAB X IDE
Создаем новый проект. Выбираем 32-bit MPLAB Harmony 3 Project (рис. 6).
Рис. 6 Создание проекта в MPLAB X IDE
Указываем папку, куда установили фреймворк Harmony (рис. 7).
Рис. 7 Выбор фреймворка Harmony в MPLAB X IDE
Указываем имя проекта и папку для сохранения (рис. 8).
Рис. 8 Настройки проекта
Выбираем микроконтроллер и жмем Finish (рис. 9).
Рис. 9 Выбор микроконтроллера для проекта
Получили пустой проект SAMC21_ADC_LIGHT (рис. 10).
Рис. 10 Созданный проект в окне навигации MPLAB
Итак, пример будет следующим (рис. 11): с периодичностью, которая будет задаваться RTC и меняться по нажатию кнопки SW0, с датчика освещенности будем брать сигнал на сигма-дельта АЦП, с датчика температуры данные будем брать по I2C. Эти данные сохраняются в буфер и преобразуются в измеряемые величины (градусы Цельсия и люксы соответственно). Передаем по UART-у на компьютер и мигаем светодиодом.
Рис. 11 Структура примера


Теперь запускаем конфигуратор Tools -> Embedded -> MPLAB Harmony 3 Configurator. Здесь мы указываем как Harmony будет подключаться к проекту. Выбираем к самому проекту, а не к переменной MPLABX (рис. 12).

Рис. 12 Выбор привязки Harmony к созданному проекту
После этого запускается сам конфигуратор (рис. 13). Здесь доступно 4 окна: область активных компонентов (панель проекта), область проекта (серого цвета), окно конфигурации периферии и снизу расположена информационная панель.
Рис. 13 Окно конфигуратора MPLAB Harmony Configurator
Добавляем настраиваем RTC (рис 14). Просто перетаскиваем его из области активных компонентов в область проекта. Для настройки в окне Configuration Options разрешаем прерывания (ставим галку напротив Enable Interrupts). Прерывания будем вызывать по сравнению (Compare 0 Interrupt Enable). По умолчанию поставим 500мс (Compare Volume). И обнуляем по совпадению (Clear on compare Match).
Рис. 14 Настройка RTC
Настраиваем UART (рис. 15). Настроим SERCOM4 в качестве UART. В окне Configuration Options запретим прерывания (уберем галку Enable Interrupts), т.к. будем передавать через DMA. Запретим получение данных (Receive enable). Чтобы не было конфликтов с другими выводами в качестве Receive Pinout выберем PAD[3], а в качестве Transmit Pinout выберем PAD[2].
Рис. 15 Настройка UART
Для датчика температуры настроим SERCOM5 в качестве I2C (рис. 16). В окне Configuration Options просто выбираем I2C Master.
Рис. 16 Настройки I2C
Настроим DMA (рис. 17). Открываем Tools -> DMA Configuration. Добавляем канал для передачи: DMAC Channel 0 - SERCOM4_Transmit, а не Software Trigger. Т.к. пересылаем данные из периферии в память, то в поле Trigger Action указываем One beat transfer per DMA Request. Источник данных (Source Address Mode) выбираем Increment Address After Every Transfer, т.к. пересылаем данные. Адрес доставки (Destination Address Mode) фиксированный, т.к. пишем всегда в регистр UART-а. И размер посылки 8 бит.
Рис. 17 Настройка DMA
Настроим внешние прерывания по кнопке SW0 (рис. 18). Выбираем EIC (External Interrupt Configuration). В окне Configuration Options выбираем 3-ий канал (Enable EIC Channel 3). Разрешаем прерывание (Enable Interrupt). Срабатывание по нарастающему фронту (Rising edge detection) и устанавливаем фильтр дребезга контактов (Enable Debounce).
Рис. 18 Настройка прерывания по кнопке
Настраиваем сигма-дельта АЦП (рис. 19). Устанавливаем коэффициент передискретизации 1024 (Over Sampling Ratio). В качестве опорного напряжения будем использовать питание 3,3 вольта VDDANA. Включать АЦП будем по запуску функции (Software Trigger). В качестве входа выберем AIN1, т.к. на него приходит сигнал с датчика освещенности.
Рис. 19 Настройка сигма-дельта АЦП
Остается сконфигурировать выводы на микроконтроллере (рис. 20). PB10 - выход на UART. Датчик освещенности подключен к дифференциальному входу сигма-дельта АЦП(+) SAMC21 (пин PB09). Датчик освещенности является однополярным, поэтому второй вход сигма-дельта АЦП надо заземлить, задав ему низкий уровень. Т.к. на отладке PB08 соединен с PB13, то PB13 настраиваем как GPIO и присваиваем ему значение Low. PB16 и PB17 - линии I2C. PB19 - кнопка SW0 (установим галку Pull Up для активации подтягивающего резистора на внутренней схеме). PC05 - светодиод выставим в значение High (дадим ему имя LED, чтобы использовать готовые функции для работы со светодиодом).
Рис. 20 Настройки выводов микроконтроллера SAMC21
Сохраняем данную конфигурацию и генерируем код. Теперь у нас есть полный комплект файлов (заголовков, прерываний и проч.) и библиотек для дальнейшей работы с проектом (рис. 21). Сам main-файл пустой.
Рис. 21 Сгенерированный проект SAMC21_ADC
Далее пишем само приложение в main-е по алгоритму, описанному выше. Пример кода можно запросить по электронной почте
Далее компилируем и собираем проект и прошиваем в отладку. Запускаем TeraTerm и получаем данные о температуре и уровне освещенности (рис. 22).

Рис. 22 Результаты измерений температуры и освещенности
В заключении отметим, что микроконтроллеры семейства SAMC21 это отличное решение для промышленных и автомобильных применений. Наличие АЦП, сигма-дельта АЦП и широкого спектра интерфейсов позволяет использовать эти микроконтроллеры в измерительной технике. Наличие интерфейсов LIN (с поддержкой Master-а) и CAN-FD позволяет использовать их как в автомобильной сфере, так и в устройствах промышленной автоматизации и технологиях "умного дома". Программные средства (MPLAB и Harmony) позволяют ускорить процесс разработки софта, упрощают поддержку конечного устройства в будущем, а также упрощают процесс переноса кода на другие микроконтроллеры от компании Microchip.


Список используемой литературы:

  1. Atmel-42365H-SAM-C21 Datasheet
  2. SAMC21N Xplained Pro User Guide (DS70005318A)
  3. I/O1 Xplained Pro User Guide
  4. SAM C20/C21 Family Datasheet (DS60001479D)
  5. AT10294: Using the Sigma-Delta Analog-to-Digital Converter on SAMC MCU (SDADC)
  6. AT12199: SAM C21 Sigma-Delta Analog-to-Digital Converter (SDADC) Driver
  7. How to Setup MPLAB Harmony v3 Software Development Framework (DS90003232B)
  8. How to Use the MPLAB Harmony v3 Debug System Service (DS90003246A)
  9. How to Build an Application by Adding a New PLIB, Driver, or Middleware to an Existing MPLAB Harmony v3 Project (DS90003253A)