Лабораторная работа №13. Работа с LED PWM контроллером
13.2.1 Описание платы прототипирования CORE ESP32
Для выполнения макетных экспериментов используется плата CORE ESP32, разработанная на основе Espressif Systems ESP32-C3. Основная плата поддерживает UART, GPIO, SPI, I2C, ADC, PWM и другие интерфейсы, которые можно выбрать и настраивать в соответствии с решаемой задачей. Описание внешних контактов платы приведено на рис. 13.4.
Питание платы CORE-ESP32-C3 можно обеспечить следующими способами:
- источник питания интерфейса USB Type-C, этот способ используется по умолчанию и предпочтителен во время отладки;
- блок питания с контактами 5 В и GND;
- блок питания с контактами 3V3 и GND.
На плате CORE ESP32 установлены:
- 2 светодиода, контакты для подключения к ним показаны в таблице 13.2.
- две кнопки: кнопка BOOT может реализовать функцию загрузки BOOT, кнопка RST может реализовать функцию сброса, контакты для подключения к кнопкам показаны в таблице 13.3.
Cветодиод | GPIO | Описание |
---|---|---|
D4 | IO12 | Активный высокий уровень |
D5 | IO13 | Активный высокий уровень |
Кнопка | Функция контакта | Описание |
---|---|---|
BOOT /GPIO9 | При нажатии кнопки микроконтроллер переходит в режим загрузки | Активный низкий уровень |
RST | При нажатии кнопки происходит сброс микроконтроллера | Активный низкий уровень |
При работе с платой необходимо учитывать следующие особенности:
- BOOT (IO09) Нельзя допустить подачу на контакт IO09 нуля до включения питания, микроконтроллер перейдет в режим загрузки.
- Для проектирования используйте вывод IO08, а прямое внешнее подключение не рекомендуется, поскольку при загрузке и записи на выводе IO08 низкий уровень, а последовательный порт нельзя использовать для загрузки.
- При написании собственного программного обеспечения следует обратить внимание на режим флэш-памяти. Существуют следующие режимы:
- DIO - хост SPI использует технологию "быстрого чтения двойного ввода-вывода". Два контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: требуется вдвое меньше тактов по сравнению со стандартным SPI.
- DOUT - хост SPI использует "быстрое чтение с двумя выходами". Два контакта SPI используются для чтения данных флэш-памяти. Немного медленнее, чем DIO, поскольку адрес записывается через один вывод данных MOSI (Master Out Slave In).
- QIO - хост SPI использует технологию "Quad I/O Fast Read". Четыре контакта SPI используются для записи части адреса флэш-памяти и для чтения данных флэш-памяти: этим фазам требуется четверть тактового цикла по сравнению со стандартным SPI.
- QOUT - хост SPI использует функцию быстрого чтения с четырьмя выходами. Четыре контакта SPI используются для считывания данных флэш-памяти. Немного медленнее, чем QIO, поскольку адрес записывается через один вывод данных MOSI.
- При настройке флэш-памяти QIO сигналы SPI SPIHD (IO12) и SPIWP (IO13) мультиплексируются. Чтобы увеличить количество доступных GPIO, плата разработки выбирает режим DIO с использованием 2-проводного SPI и в этом случае контакты IO12 и IO13 не подключены к флэш-памяти.
- Сигнал VDD внешней флэш-памяти SPI подключен к системе питания 3,3 В. Во время использования не требуется настраивать другие источники питания. Применяется общий 2-проводной режим связи SPI.
- По умолчанию контакт VDD флэш-памяти SPI подключен к GPIO11, и для его использования в качестве GPIO необходимо выполнить его перенастройку.
13.2.2 Подготовка среды проектирования
Для проектирования под выбранный микроконтроллер необходимо иметь следующие инструменты:
- инструментарий для компиляции кода для ESP32;
- инструменты сборки проектов (CMake и Ninja) для создания полноценного приложения для ESP32;
- среду проектирования ESP-IDF, которая содержит API (библиотеки программного обеспечения и исходный код) для ESP32 и сценарии для работы с набором инструментов разработки.
В качестве сред разработки можно использовать среду на основе Eclipse или VSCode (Visual Studio Code) с соответствующими расширениями. В текущей работе будет использован VSCode, для подготовки среды необходимо выполнить его установку, воспользовавшись ссылкой. После установки VSCode необходимо активизировать расширение ESP-IDF для работы с микроконтроллером. По указанной ссылке находится подробная инструкция по установке расширения Espressif IDF.
После завершения установки рекомендуется открыть шаблон проекта командой Open Folder. В левой части окна VS Code (рис. 13.5) размещена панель управления, содержащая следующие основные элементы:
- Проводник, позволяющий переходить между файлами проекта.
- Поиск, реализующий поиск конкретных слов внутри документа.
- Система управления версиями, предназначенная для взаимодействия с Git, просмотра изменений в коде и разных его версий.
- Запуск кода, обеспечивающий запуск и проверку кода.
- Расширения, показывающий список расширений, которые можно дополнительно установить в VS Code.
В строке, расположенной внизу окна необходимо выполнить следующие настройки:
- Указать COM порт, к которому подключается плата. Определение номера порта происходит автоматически после подключения платы к компьютеру, которое осуществляется через USB порт. После активизации команды выбора COM порта появится выпадающий список, в котором будут показаны активные устройства с последовательным подключением.
- Указать микросхему, в которую осуществляется загрузка проекта, выбрав в выпадающем списке ESP32C3. Также указать способ загрузки, как показано на рис. 13.6.
- Выполнить сборку и загрузку проекта и запустить монитор для наблюдения результатов работы. Эти операции можно запускать соответствующими командами, закрепленными в строке за отдельными пиктограммами, а можно запустить весь процесс одной пиктограммой, интегрирующей три команды вместе.
После загрузки проекта в плату в окне монитора можно отслеживать статус процессов сборки и загрузки, а также контролировать процесс работы программы.
13.2.3 GPIO
На рис. 13.7 показана общая схема работы IO MUX и матрицы GPIO.
Матрица GPIO обеспечивает переключение между входными/выходными сигналами периферийных устройств и контактами. 42 входных сигнала периферийных устройств могут быть подключены к любым выводам GPIO, также, как и любой из 78 периферийных выходных сигналов могут быть скоммутированы на любой контакт GPIO. Поддерживается синхронизация сигналов периферийных входов на основе тактовой шины APB.
IO MUX конфигурируется через регистр IO_MUX_GPIOn_REG для каждого вывода GPIO. Контакт может быть настроен на функцию, маршрутизируемую матрицей GPIO, или подключен, минуя матрицу GPIO. Обход матрицы актуален для улучшения частоты работы высокоскоростных цифровых сигналов (SPI, JTAG, UART), поскольку в этом случае IO MUX используется для прямого подключения выводов к периферийным устройствам.
Электрический интерфейс между логикой микросхемы и выводом GPIO показан на рис. 13.8. Схема управляется с помощью сигналов разрешения входа (IE), разрешение выхода (OE), WPU и WPD подключения подтягивающих резисторов (pull-up и pull-down). Bonding pad - точка, используемая для физического подключения от корпуса микросхемы к выводу GPIO.
13.2.4 Ввод данных в периферийные устройства через GPIO матрицу
Для считывания данных с контакта GPIO X в периферийный сигнал Y, необходимо выполнить следующие действия:
- Настроить регистр GPIO_FUNCY_IN_SEL_CFG_REG, соответствующий периферийному сигналу Y в матрице GPIO:
- установить GPIO_SIGY_IN_SEL, чтобы разрешить ввод периферийного сигнала через матрицу GPIO;
- установить GPIO_FUNCX_IN_SEL на нужный вывод GPIO.
Некоторые периферийные сигналы не имеют действительного бита GPIO_SIGy_IN_SEL, а именно, эти периферийные устройства могут только получать входные сигналы через матрицу GPIO.
- Дополнительно можно включить фильтр для входных сигналов, установив регистр IO_MUX_GPIOX_FILTER_EN. Фильтровать можно только сигналы длительностью более двух тактов.
- Синхронизировать вход GPIO, установив GPIO_PINX_REG, соответствующий выводу GPIO X, следующим образом:
- установить GPIO_PINX_SYNC1_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или по спадающему фронту;
- установить GPIO_PINX_SYNC2_BYPASS, чтобы разрешить входной сигнал, синхронизированный по нарастающему или спадающему фронту во втором такте.
- Настроить регистр IO MUX для включения входного сигнала внешнего контакта. Для этого установить IO_MUX_GPIOX_REG соответствующий выводу GPIO X, следующим образом:
- установить IO_MUX_GPIOX_FUN_IE для разрешения входа;
- установить или снять IO_MUX_GPIOX_FUN_WPU и IO_MUX_GPIOX_FUN_WPD, чтобы включить или отключить подтягивающие и отводящие резисторы.
Пример: подключение контакта I2S_MCLK_in, индекс сигнала 12 к GPIO7 (MTDO), будет выглядеть следующим образом:
- установить значение GPIO_SIG12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG, чтобы разрешить ввод периферийного сигнала через матрицу GPIO.
- установить значение GPIO_FUNC12_IN_SEL в регистре GPIO_FUNC12_IN_SEL_CFG_REG равным 7.
- установить IO_MUX_GPIO7_FUN_IE в регистре IO_MUX_GPIO7_REG, чтобы разрешить ввод пинов.