роботы робототехника микроконтроллеры

ESP32: УПРАВЛЯЕМ СКОРОСТЬЮ МОТОРА С ПОМОЩЬЮ ШИМ (PWM)

Монтажная схема для опытов с ШИМ (PWM) для двигателя

Что нам понадобится?

  • плата ESP32 DEVKIT V1
  • драйвер двигателей L293D
  • мотор FA-130 3-6 В (с редуктором или без него)
  • две макетные платы
  • отсек для четырех батареек AA
  • соединительные проводники
  • кабель micro USB для подключения ESP32 к компьютеру

Регулировка тока с помощью ШИМ (PWM)

Широтно-импульсная модуляция (ШИМ, англ. Pulse-Width Modulation (PWM)) — это способ управления мощностью электрического тока с помощью его пульсирующего включения и выключения. Практически любым электрическим устройством, имеющим определённую инерцию, можно управлять с помощью широтно-импульсной модуляции (ШИМ).

Если изменять время включения и длину паузы между включениями, то можно регулировать скорость вращения мотора или яркость свечения светодиода. Таким образом, имея в распоряжении лишь два значения напряжения (высокий уровень и низкий уровень), можно получить любое промежуточное значение напряжения. Подробнее о ШИМ можно прочитать в статье "ШИМ и PWM – что это такое?"

Частота и скважность ШИМ (PWM)

Насколько часто будет происходить пульсирующее включение и выключение, определяется частотой ШИМ (англ. frequency), которая в свою очередь определяет период импульса, то есть сколько времени будет занимать одно включение вместе с выключением.

Еще одним важным параметром является время включения (ширина импульса) в одном периоде ШИМ. Отношение периода импульса к ширине импульса называют скважностью, а обратную величину – коэффициентом заполнения или рабочим циклом (англ. duty cycle).

На рисунке приведены примеры напряжений для заполнения 100% (скважность 1), 75% (скважность 4/3), 50% (скважность 2) и 25% (скважность 4).



Графики ШИМ (PWM)


ESP32 позволяет работать с диапазоном частот для ШИМ (PWM) от 1 Гц до 40 МГц. Для разных устройств частота следования импульсов ШИМ должна быть различной. Для светодиодов частота ШИМ может лежать в диапазоне 100-500 Гц, хотя мерцание перестает быть заметным уже на частоте 60 Гц.

Для моторов частота должна быть намного меньше, иначе мы получим падение мощности. В таблице ниже приведены примерные соотношения коэффициента заполнения (duty cycle) и частоты ШИМ для мотора FA-130 с редуктором 1:48.


duty cycle (%)frequency (Hz)
2515
3020
4520-30
5020-40
7520-50
10020-50

Схема подключения мотора

Для управления мотором с помощью ESP32 будем использовать, например, выводы платы микроконтроллера D32 (GPIO32) и D33 (GPIO33). На вход ENABLE2 микросхемы драйвера моторов L293D подадим ШИМ сигнал, например, с вывода D27 (GPIO27).

Входы ENABLE1 и ENABLE2 служат для включения H-мостов драйвера и используются для управления скоростью вращения электромоторов с помощью широтно-модулированного сигнала (ШИМ).

Схема подключения очень похожа на схему из примера "ESP32: Управление мотором" и представлена на рисунке ниже.


Принципиальная схема подключения мотора для опытов с ШИМ (PWM)


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

Программа для управления скоростью мотора с помощью ШИМ (PWM)

Для работы с ШИМ нам понадобится класс PWM из модуля machine. Объект PWM создается на основе объекта Pin. Поэтому сначала создадим объект Pin для вывода GPIO27 (режим Pin.OUT указывать не нужно).

Для установки частоты и коэффициента заполнения используем методы freq(frequency) и duty(duti_cycle). Значение frequency и duti_cycle должны быть целочисленными. Величина duti_cycle может лежать в пределах от 0 до 1023. Если задавать скорость мотора (speed) в процентах, то duti_cycle можно легко вычислить по формуле speed * 1023 / 100. Для скорости 50% значение duti_cycle будет 511.

Для отключения выхода ШИМ используется метод deinit(). Деинициализируем ШИМ в обработчике исключения KeyboardInterrupt. Там же остановим мотор.

Объект PWM можно создавать и с помощью конструктора, например так:

motor_pwm = PWM(Pin(27), freq=30, duty=512)

Для установки duti cycle можно также использовать методы:

duty_u16 — устанавливает рабочий цикл с 16-битной точностью в диапазоне 0–65535,

duty_ns — задает ширину импульса в наносекундах.

Программа на языке MicroPython может выглядеть следующим образом:

# из модуля machine импортируем классы Pin и PWM
from machine import Pin, PWM
# из модуля time импортируем функцию задержки sleep
from time import sleep

# функция для управления мотором
def motor(a, b):
    motor_pin1.value(a)
    motor_pin2.value(b)

# создаем объекты Pin для мотора
motor_pin1 = Pin(32, Pin.OUT)
motor_pin2 = Pin(33, Pin.OUT)
# создаем объекты Pin для ШИМ
motor_pin3 = Pin(27)

# создаем объекты ШИМ
motor_pwm = PWM(motor_pin3)

# зададим скорость мотора 50%
speed = 50
# вычисляем величину коэффициента заполнения для ШИМ
duty = int(speed * 1023 / 100)

# устанавливаем частоту для ШИМ
motor_pwm.freq(30)
# устанавливаем величину коэффициента заполнения для ШИМ
motor_pwm.duty(duty)

# организуем блок try для основного кода
try:
    # организуем бесконечный цикл
    while True:
        # включаем мотор
        # передаем в функцию motor 0 и 1
        motor(0, 1)
        # ждем 2 секунды
        sleep(2)
        # делаем реверс мотора
        # передаем в функцию motor 1 и 0
        motor(1, 0)
        # ждем 2 секунды
        sleep(2)
        # останавливаем мотор
        motor(0, 0)
        # ждем 1 секунду
        sleep(1)

# задаем обработку исключения для блока try, которое
# возникает при завершении программы пользователем
except KeyboardInterrupt:    
    # останавливаем мотор
    motor_pin1.value(0)
    motor_pin2.value(0)
    # деинициализируем объект ШИМ
    motor_pwm.deinit()

Запустим Iguana IDE – среду программирования для MicroPython. Скопируем в нее текст программы. Подключимся к микроконтроллеру с помощью USB-кабеля или по Wi-Fi и запустим программу. Вал мотора начнет вращаться со скоростью 50%, меняя направление вращения каждые 2 секунды и останавливаясь на 1 секунду.

Поэкспериментируем со значением переменной speed, наблюдая за скоростью вращения мотора.

Подробнее о загрузке и запуске программ можно прочитать в статьях "Первый проект на микроконтроллере ESP32" и "Программируем микроконтроллер ESP32 по Wi-Fi".

Удачный Вам экспериментов!



myROBOT.ru Хотите узнать больше об использовании и программировании микроконтроллеров? Попробуйте посмотреть другие статьи в разделе "Шаг за шагом" для создания полезных и забавных проектов!
Как сделать робота
ПОПУЛЯРНЫЕ СТАТЬИ
Драйвер двигателей L293D
Драйвер двигателей L293D
Для управления двигателями мини робота необходимо устройство, которое бы преобразовывало управляющие сигналы малой мощности в токи, достаточные для управления моторами. Такое устройство называют драйвером двигателей.
Как сделать простейшего робота
Как сделать простейшего робота
О том, как сделать робота в домашних условиях, используя лишь микросхему драйвера моторов и пару фотоэлементов. В зависимости от способа соединения моторов, микросхемы и фотоэлементов робот будет двигаться на свет или, наоборот, прятаться в темноту, следовать по линии или бежать за вашей рукой.
Первые проекты на микроконтроллере ESP32
Первые проекты на микроконтроллере ESP32
В качестве первых проектов на ESP32 рассмотрим примеры мигания светодиодами и напишем программу "бегущие огни". Это классика при изучении микроконтроллеров.
Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как самому сделать робота, используя драйвер управления двигателями L293D и микроконтроллер ATmega8. Схема робота и примеры простейших программ для управления моторами.
НОВЫЕ СТАТЬИ
Можно ли сделать BEAM-робота на Raspberry Pi?
Можно ли сделать BEAM-робота на Raspberry Pi?
Ответ Марка Тилдена с уникальной фотографией одной из новых работ маэстро.
Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Самоучитель, интерактивный учебник, наглядные задачи и примеры программ.
Роботы на одной микросхеме своими руками
Роботы на одной микросхеме своими руками
Подборками статей myROBOT.ru. Практика создания роботов: схемы и советы по изготовлению. Чтобы сделать роботов, нет необходимости даже писать программы. Все роботы начнут работать сразу же, как только Вы подключите к ним питание.
ПОПУЛЯРНОЕ НА САЙТЕ
Драйвер программатора USBASP для Windows 7, 8, 10
Драйвер программатора USBASP для Windows 7, 8, 10
Универсальный драйвер программатора USBasp v 2.0 USB ISP без необходимости принудительного отключения сертификата драйвера или использования Zadig, достаточно скачать драйвер USBasp и запустить файл InstallDriver.exe.
Учимся программировать.<BR>Среда программирования на ЛОГО
Учимся программировать.
Среда программирования на ЛОГО
GAME LOGO — бесплатная среда программирования для увлекательного путешествия в мир программирования и информатики. Программирование на русском языке, удобный и красивый интерфейс, продуманный синтаксис.




Copyright © myrobot.ru, 2005-2023


Яндекс.Метрика   Рейтинг@Mail.ru