Подключение к ESP32 двигателя постоянного тока с помощью ESP-IDF


В данной статье мы рассмотрим подключение к ESP32 двигателя постоянного тока и научимся управлять им с помощью драйвера двигателя L289N и библиотеки драйверов двигателя ESP-IDF MCPWM. Мы кратко рассмотрим принцип работы драйвера двигателя L298N, его характеристики, распиновку, взаимодействие с платой ESP32, а затем сосредоточимся на программировании нашей платы в VS Code с использованием расширения ESP-IDF. Мы создадим и скомпилируем проект ESP-IDF, в котором сможем управлять скоростью и направлением вращения двигателя постоянного тока. Модуль MCPWM ESP32 будет в основном использоваться для управления двигателем с помощью драйвера двигателя L289N.

Подключение к ESP32 двигателя постоянного тока с помощью ESP-IDF

Также по данной тематике вы можете посмотреть на нашем сайте статью про работу с контактами и двигателями в ESP32-S3 с помощью ESP-IDF - возможно, в ней некоторые моменты объяснены более доступным языком.

Модуль управления двигателем L298N

Модуль управления двигателем L298N — это недорогой и простой в использовании модуль, широко применяемый в робототехнике или областях, где необходимо управлять двигателями постоянного тока/шаговыми двигателями. Это двухканальный H-мостовой драйвер двигателя, который позволяет легко управлять двумя двигателями, скорость и направление вращения которых можно регулировать. На рисунке ниже показан модуль управления двигателем L298N.

Модуль управления двигателем L298N

Как видно на рисунке, драйвер двигателя состоит из нескольких компонентов, включая микросхему драйвера двигателя L298N, стабилизатор напряжения 78M05, перемычку включения 5 В, светодиод питания, радиатор, резисторы и конденсаторы и т. д. Все это образует интегральную схему. Также обратите внимание, что микросхема драйвера двигателя L298N окружена большим радиатором. Для включения стабилизатора 5 В 78M05 используется перемычка. Драйвер двигателя обеспечивает питание через выводы +12 В и +5 В. Если напряжение питания ниже 12 В, модуль питается через стабилизатор напряжения. В этом случае вывод 5 В действует как выход для питания микроконтроллера. Если напряжение питания выше 12 В, убедитесь, что перемычка повреждена, и подавайте питание 5 В через отдельный вывод.

Примечание: не подавайте питание одновременно на вход питания двигателя и на вход питания 5 В, если перемычка установлена.

Распиновка модуля драйвера двигателя L298N показана на следующем рисунке.

Распиновка модуля драйвера двигателя L298N

VCC это вывод питания двигателя. Напряжение питания составляет от 6 до 12 В.
GND общий провод (земля)
5V Это вывод питания +5 В для микросхемы L298N. Он используется, когда перемычка разрешения 5 В не подключена. При подключении перемычки он работает как выходной вывод.
ENA Этот вывод управляет скоростью двигателя А посредством ШИМ-сигнала.
IN1 & IN2 Это входные контакты для двигателя А. Они управляют направлением вращения двигателя А.
IN3 & IN4 Это входные контакты для двигателя B. Они управляют направлением вращения двигателя B.
ENB Этот вывод управляет скоростью двигателя B посредством ШИМ-сигнала.
OUT1 & OUT2 OUT1: Положительный вывод для двигателя A.
OUT2: Отрицательный вывод для двигателя A.

Это выходные контакты для двигателя A. Двигатель A с напряжением от 5 до 35 В будет подключен через эти два вывода.

OUT3 & OUT4 OUT3: Положительный вывод для двигателя B.
OUT4: Отрицательный вывод для двигателя B.

Это выходные контакты для двигателя B.

В принципе, распиновка стандартная для большинства подобных драйверов двигателей.

Технические характеристики

Технические характеристики модуля управления двигателем L298N указаны в таблице ниже.

Модель драйвера L298N
Чип драйвера Двойной H-мост L298N
Максимальная мощность 25 Вт
Максимальное напряжение питания двигателя 46 В
Максимальный ток питания двигателя 2А
Напряжение драйвера 5-35 В
Ток драйвера 2А
Размер 43х43х26 мм

Далее непосредственно рассмотрим уже его использование в данном проекте.

Управление двигателем постоянного тока с помощью ESP32 и ESP-IDF

Мы создадим проект в VS Code с расширением ESP-IDF. Код будет управлять скоростью и направлением вращения двигателя постоянного тока с помощью модуля MCPWM, который представляет собой модуль широтно-импульсной модуляции управления двигателем. Мы будем использовать пример скетча, предоставленный расширением ESP-IDF в разделе периферийных устройств для MCPWM, под названием mcpwm_brushed_dc_control.

Создание примера проекта

Откройте VS Code и перейдите в меню View > Command Palette («Вид» > «Палитра команд»). Введите в строке поиска ESP-IDF: New Project и нажмите Enter.

Укажите название проекта и каталог. Мы назвали наш проект «DC_MOTOR_CONTROL». Для платы ESP-IDF мы выбрали опцию custom board («пользовательская плата»). В качестве целевой платформы ESP-IDF мы выбрали модуль ESP32. Нажмите кнопку ‘Choose Template’ («Выбрать шаблон»), чтобы продолжить.

Создание примера проекта для управления двигателем постоянного тока

В разделе «Расширение» выберите опцию ESP-IDF:

Выбор опции ESP-IDF в разделе Extension («Расширение»)

Перейдите в раздел Peripherals > mcpwm > mcpwm_brushed_dc_control. Затем нажмите ‘Create project using template mcpwm_brushed_dc_control’ («Создать проект, используя шаблон mcpwm_brushed_dc_control»).

Создание проекта с использованием шаблона mcpwm_brushed_dc_control

Вы получите уведомление о создании проекта. Чтобы открыть проект в новом окне, нажмите «Да».

Это откроет проект, который мы создали на вкладке «Проводник». Внутри папки проекта находится несколько папок. Это справедливо для каждого проекта, который вы будете создавать с помощью ESP-IDF Explorer.

Теперь перейдите к файлу main.c. В папке main находится исходный код, поэтому файл main.c будет расположен именно там. Перейдите в папку main > main.c и откройте его.

Код ESP32 для управления коллекторным двигателем постоянного тока с помощью ESP-IDF

Мы модифицировали код, предоставленный в качестве примера управления коллекторным двигателем постоянного тока MCPWM от ESP-IDF. В нашем случае двигатель постоянного тока сначала движется вперед в течение 5 секунд, затем движется назад в течение 5 секунд, а затем останавливается на 2 секунды, пока не будет нажата кнопка. Количество нажатий кнопки регулирует скорость двигателя, при этом каждый раз, когда кнопка нажимается, коэффициент заполнения увеличивается на 10. Это приводит к постоянному увеличению скорости двигателя при каждом нажатии кнопки, в противном случае двигатель останавливается.

Как работает код?

Плата разработки ESP32 состоит из двух блоков MCPWM, управляющих различными двигателями. Она использует генератор ШИМ, состоящий из нескольких субмодулей, для обработки различных сценариев, таких как управление двигателем, цифровое преобразование энергии, цифро-аналоговый преобразователь мощности и т. д.

Приведённая ниже схема взята из официального руководства по программированию модуля MCPWM от компании Espressif. На ней показаны подмодули, составляющие модуль MCPWM.

Структурная схема модуля MCPWM

Как видно на приведенной выше схеме, модуль MCPWM состоит из нескольких подмодулей, таких как:

  • MCPWM таймер;
  • Компаратор MCPWM;
  • Генератор MCPWM;
  • Синхронизация MCPWM;
  • и др.

Каждый подмодуль имеет собственное распределение ресурсов. Давайте рассмотрим код, чтобы понять, как работает управление двигателем постоянного тока через драйвер двигателя.

Как обычно, начнём с включения необходимых библиотек для проекта. Это включает библиотеки FreeRTOS для генерации задержек и создания задач, драйвер GPIO для настройки контакта GPIO кнопки и библиотеки MCPWM для управления двигателем постоянного тока.

Настройте контакты GPIO ESP32, которые будут подключены к входам IN1 и IN2 модуля драйвера двигателя L298N. В данном случае GPIO15 назначен входом 1, а GPIO16 — входом 2 для драйвера двигателя.

В данном случае эти два выходных сигнала будут использоваться для перемещения двигателя постоянного тока вперед или назад.

Мы подключим кнопку к выводу GPIO33. Для этого мы определим переменную с именем 'PUSH_BUTTON_PIN_SPEED', которая будет хранить значение вывода GPIO 33. Она будет использоваться позже в коде для считывания цифрового входного сигнала, который будет управлять скоростью двигателя постоянного тока.

Далее мы определяем несколько переменных для отслеживания состояний и подсчета нажатий кнопок.

Начнём с функции mcpwm_example_gpio_initialize(), которая будет использоваться для инициализации выводов GPIO MCPWM. Это делается путём вызова функции mspwm_gpio_init() внутри этой функции. Эта функция инициализирует два вывода GPIO как выходные сигналы выбранного устройства. Она принимает три параметра. Первый параметр — это номер MCPWM, который устанавливает значение MCPWM-устройства равным 0 или 1. Второй параметр — это сигнал MCPWM IO, который устанавливает сигнал MCPWM. Третий параметр — это номер GPIO, который будет сконфигурирован для MCPWM. Обратите внимание, что эту функцию необходимо вызывать отдельно для каждого из выводов GPIO.

Функция brushed_motor_forward() отвечает за вращение двигателя постоянного тока в прямом направлении в соответствии с заданным значением коэффициента заполнения. Внутри этой функции мы сначала устанавливаем сигнал MCPWM PWM0B в низкое состояние с помощью функции mcpwm_set_signal_low(). Эта функция принимает три параметра: блок MCPWM, номер таймера и оператор. Затем мы устанавливаем коэффициент заполнения каждого оператора PWM0A с помощью функции mcpwm_set_duty(). Эта функция принимает четыре параметра: блок MCPWM, номер таймера MCPWM, значение генератора и значение коэффициента заполнения. Наконец, мы устанавливаем тип заполнения PWM0A как активный высокий или активный низкий.

Аналогично, функция brushed_motor_backward() отвечает за движение двигателя постоянного тока в обратном направлении в соответствии с заданным значением коэффициента заполнения. Внутри этой функции мы сначала устанавливаем сигнал MCPWM PWM0A в низкое состояние с помощью функции mcpwm_set_signal_low(). Затем мы устанавливаем коэффициент заполнения каждого оператора PWM0B с помощью функции mcpwm_set_duty(). Наконец, мы устанавливаем тип заполнения PWM0B как активный высокий или активный низкий.

Примечание: сигнал PWM0A перемещает двигатель постоянного тока в прямом направлении, а сигнал PWM0B — в обратном направлении.

Функция brushed_motor_stop() отвечает за остановку двигателя постоянного тока путем установки обоих выходных сигналов в низкое состояние.

Внутри функции mcpwm_example_brushed_motor_control() сначала инициализируются выводы GPIO MCPWM путем вызова функции mcpwm_example_gpio_initialize().

После этого устанавливаются начальные параметры конфигурации MCPWM. Это включает частоту таймера, коэффициенты заполнения обоих выходных сигналов, режим счетчика и режим заполнения в структуре mcpwm_config_t. Функция mcpwm_init() вызывается для инициализации всех этих параметров MCPWM путем указания блока MCPWM, номера таймера и структуры конфигурации mcpwm_config_t в качестве параметров.

После этого мы вызываем три функции, которые определили ранее, для перемещения двигателя вперед, назад и последующей остановки. Двигатель постоянного тока будет двигаться вперед с коэффициентом заполнения 20 в течение 5 секунд. По истечении 5 секунд двигатель будет двигаться назад в течение 5 секунд с коэффициентом заполнения 5 секунд. Затем двигатель остановится.

Затем мы зададим направление вывода кнопки в качестве входного сигнала, используя функцию gpio_set_direction(). Эта функция принимает два аргумента. Первый аргумент — это вывод GPIO, а второй — режим (вход или выход), в котором мы хотим установить вывод. Используя непрерывный цикл while, мы будем проверять состояние вывода кнопки. При каждом нажатии кнопки коэффициент заполнения будет увеличиваться на 10. Мы будем вызывать функцию brushed_motor_forward() для перемещения двигателя постоянного тока в прямом направлении с увеличением коэффициента заполнения при каждом нажатии кнопки. Когда кнопка будет отпущена, двигатель остановится.

Внутри функции app_main() мы вызовем функцию xTaskCreate() для создания задачи управления коллекторным двигателем в примере mcpwm, которая будет задавать скорость и направление вращения двигателя постоянного тока.

Настройка оборудования

Теперь давайте соберем нашу схему, подключив плату разработки ESP32 к драйверу двигателя L298N, который будет управлять двигателем постоянного тока, и кнопке.

Необходимое оборудование

  1. Плата ESP32.
  2. Модуль управления двигателем L289N.
  3. Внешний источник питания 3-12 В.
  4. Двигатель постоянного тока.
  5. Нажмите кнопку.
  6. Подтягивающий резистор 10 кОм.
  7. Соединительные провода.
  8. Макетная плата.

Соберите схему, как показано на рисунке ниже.

Схема подключения двигателя постоянного тока и драйвера L298N к ESP32

Используются редукторные двигатели постоянного тока TT, для работы которых требуется напряжение 3-12 В постоянного тока, тогда как рекомендуемое рабочее напряжение составляет 3-6 В постоянного тока. Поэтому для питания двигателей постоянного тока мы будем использовать 4 батарейки типа AA (4 × 1,5 В = 6 В). Для управления этим двигателем будут использоваться выходные контакты двигателя A. Кроме того, перемычка 5 В Enable не будет удалена и будет питать драйвер двигателя L298N.

В ESP32 ШИМ поддерживается только через все выходные контакты GPIO. Поэтому выберите контакт GPIO для подключения к контакту разрешения драйвера двигателя L298N. В нашем коде выходные сигналы подключены к GPIO15 и GPIO16, поэтому мы подключаем IN1 и IN2 к этим контактам соответственно.

На кнопке расположены четыре контакта. ESP32 подает питание на один контакт напряжением 3,3 вольта, а второй контакт соединен через GPIO33 и подтягивающий резистор 10 кОм. Общая земля подключена к противоположному концу резистора.

Все устройства будут иметь общее заземление.

Компиляция скетча

Для прошивки микросхемы введите следующую команду в последовательном терминале. Не забудьте заменить COM-порт на тот, через который подключена ваша плата.

После успешной прошивки кода на терминале ESP-IDF можно увидеть различные сообщения, указывающие на инициализацию MCPWM GPIO и настройку начальных параметров.

Тестирование работы проекта с помощью терминала ESP-IDF

Двигатель постоянного тока начинает вращаться после успешной настройки всех параметров. Вы также можете регулировать скорость вращения двигателя с помощью кнопки.

(Проголосуй первым!)
Загрузка...
3 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *