Шаговый двигатель 28BYJ-48 с драйвером ULN2003 и Arduino

Шаговый двигатель 28BYJ-48 с драйвером ULN2003 и Arduino

Характеристики популярного шагового мотора 28BYJ-48, режимы работы, подключение через ULN2003 и управление библиотекой AccelStepper.

Что это за двигатель

Шаговый двигатель превращает электрические импульсы в поворот вала на определённый угол; наименьший такой угол называют шагом. Подобные моторы стоят в системах точного позиционирования: станках с ЧПУ, 3D-принтерах, обычных принтерах, манипуляторах. В любительской робототехнике широко распространён недорогой 28BYJ-48, который обычно идёт в комплекте с платой драйвера на микросхеме ULN2003.

Шаговый двигатель 28BYJ-48 с драйвером ULN2003
Напряжение питания5 В или 12 В
Число фаз4
Коэффициент редукции1/63,68395
Количество шагов ротора64
Номинальная скорость15 об/мин
Крутящий момент450 г·см
Размеры (диаметр, высота)25 х 18 мм
Вес40 г
Принципиальная схема шагового двигателя 28BYJ-48

Полный шаг и полушаг

Двигателем управляют в одном из двух режимов. В полношаговом на один шаг приходится последовательность из 4 ступеней импульсов, в полушаговом из 8.

Диаграмма импульсов полношагового режима
Диаграмма импульсов полушагового режима

Драйвер и подключение

ULN2003 представляет собой усилитель из семи пар транзисторов Дарлингтона. Входы IN1–IN7 предназначены для микроконтроллера, выводы GND и VCC для питания мотора. В рассматриваемых примерах задействованы четыре входа: IN1–IN4 соединены с выводами Arduino 8, 9, 10 и 11.

Выбор библиотеки

В Arduino IDE есть встроенная библиотека Stepper, но она умеет только полношаговую коммутацию. Пример на её основе (4076 шагов на оборот, вращение на один оборот по часовой стрелке и обратно с паузой в секунду) с этим мотором работает неправильно: вал движется лишь в одну сторону.

Проблему решает альтернативная библиотека AccelStepper. Она поддерживает ускорение и замедление, а также работу с несколькими двигателями. Объект создаётся с порядком выводов IN1, IN3, IN2, IN4 и режимом 8. В тестовом скетче задаются максимальная скорость 900, ускорение 100, скорость 200 и цель 2000 шагов; когда distanceToGo() возвращает ноль, направление меняется на противоположное. Двигатель при этом вращается плавно в обе стороны.

Пример: управление тремя кнопками

Для проекта понадобятся Arduino Uno, двигатель с драйвером, три кнопки и три резистора по 10 кОм. Кнопки подключены к выводам 5, 6 и 7. Назначение такое: кнопка 3 запускает вращение по часовой стрелке, кнопка 1 против часовой, кнопка 2 останавливает мотор.

Скетч в цикле опрашивает кнопки через функцию подавления дребезга. По нажатию устанавливается скорость 500 или -500 и поднимается флаг движения, либо вызывается stop() и флаг сбрасывается. Пока флаг активен, выполняется runSpeed(). Название выбранного режима выводится в последовательный порт на скорости 9600.

К исходному варианту функции антидребезга есть замечание: оператор return c стоит внутри условия if, из-за чего при кнопках без фиксации возможны ложные срабатывания. Корректнее вынести возврат значения за пределы условия.

Если двигатель не вращается

  • Проверить правильность соединения драйвера с платой Arduino.
  • Убедиться, что внешнего питания достаточно для двигателя.

← Все статьи