Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython.
Приветствую вас на очередном уроке по программированию ESP32 на MicroPython. Сегодня мы разберём код, который можно применить на практике. Будем вращать двигатель постоянного тока в одну сторону до срабатывания кнопки. После чего включим реверс вращения двигателя и вращать он будет до тех пор, пока не сработает вторая копка. Вместо кнопок можно использовать конечные выключатели и данный пример использовать для цикличного выполнения перемещения.
А начнём разбираться с данным примером с изменения примера из прошлого урока, где мы включали и выключали светодиод при нажатии на кнопку.
Для начала давайте немного уменьшим код, а именно избавимся от постоянного написания «machine» в коде.
Для этого поменяем код подключения модуля с
import machine
на
from machine import Pin
То есть получим функцию Pin из модуля machine. И сейчас в коде будет достаточно написать «Pin» вместо «machine.Pin».
Прерывания на микроконтроллере ESP32 с помощью языка MycroPython.
Для использования внешнего прерывания в MycroPython используется следующая функция.
button.irq(trigger=Pin.IRQ_FALLING, handler=my_button) – настраивает обработчик прерываний, который будет вызван при появлении сигнала запуска. Если контакт работает в режиме Pin.IN, то источником сигнала запуска будет служить внешнее значение контакта. Если контакт работает в режиме Pin.OUT, то источником сигнала запуска будет служить выходной буфер контакта. Но если контакт будет работать в режиме Pin.OPEN_DRAIN, то источником сигнала запуска будет служить выходной буфер (для «0») и внешнее значение контакта (для «1»).
trigger – определяет условие, при котором должно срабатывать прерывание:
Pin.IRQ_FALLING – прерывание на заднем фронте.
Pin.IRQ_RISING – прерывание на переднем фронте.
handler – функция, которую необходимо вызвать при возникновении прерывания, в моём случае это функция my_button. Функция handler должна принимать лишь один аргумент, которым должен быть экземпляр класса Pin.
В качестве примера напишем код включения встроенного светодиода при нажатии на кнопку «boot» по аналогии с примером из прошлого урока, но уже с использованием прерывания.
При вызове функции my_button меняем логическое стояние контакта, к которому подключен светодиод. Тем самым включаем и выключаем его.
При нажатии на кнопку, в консоли видим информацию о номере пина, к которому подключена кнопка.
Если поменять trigger=Pin.IRQ_RISING и проверить, то увидим, что информация появляется, когда мы отпускам кнопку. Вот в чём различие данных условий срабатывания прерывания.
Также можно использовать данные условия одновременно.
trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING
Тем самым при нажатии кнопки светодиод будет включаться, а при отпускании выключаться. Принцип работы аналогичен примеру из прошлого урока, но уже с помощью прерывания.
Управление двигателем постоянного тока с помощью ESP32 и MycroPython.
Давайте применим на практике полученные значения. Для этого подключим к ESP32 драйвер L298n и двигатель. Я буду использовать мотор редуктор от машинки, которую собирал и программировал на MycroPython вот в этом проекте.
Схема подключения ESP32, драйвера L298n и двигателя постоянного тока.
В коде определим контакты подключения кнопок. Чтобы не использовать подтягивающие резисторы, воспользуемся подтягивающими резисторами платы ESP32. Для этого инициализируем пины с использованием Pin.PULL_UP.
Инициализируем два пина для работы с драйверами.
Создадим две глобальные переменные:
press - будет хранить флаг стояния кнопки.
n_pin – номер контакта кнопки (pin).
Функция my_button будет поднимать флаг нажатия кнопки и сохранять в переменной n_pin номер пина нажатой кнопки. Для того чтобы получить номер пина в виде числа, нужно взять из строки символы после четвёртого и без последнего символа строки и преобразовать в целочисленное значение.
Создадим прерывание для каждой кнопки с вызовом функции my_button.
В бесконечном цикле будем выполнять следующие действия.
Сперва мы проверяем переменную press. Если кнопка была нажата, тогда выводим в монитор номер контакта нажатой кнопки и отпускаем флаг press.
Далее проверяем, какая кнопка была нажата. Если левая кнопка, то начинаем вращать двигатель вправо и выводим в монитор надпись о направлении вращения. Если сработала правая кнопка, то меняем направление вращения и выводим в монитор надпись «Влево».
В противном случае ничего не делаем.Как видно из примера, при нажатии на кнопку в мониторе время от времени отображается несколько строчек с одним пином кнопки. Это связанно с дребезгом контактов. В данном проекте это никак не повлияет на работу, а в других проектах это может стать серьёзной проблемой. Поэтому в одном из следующих уроков разберём, как можно устранить дребезг кнопки.
В следующем уроке начнём изучать работу с ШИМ.
Понравился Урок 5. Управление двигателем постоянного тока ESP32 и MicroPython? Не забудь поделиться с друзьями в соц. сетях.
Комментарии