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

Характеристики

  • Номинальное напряжение: 5 В
  • Угол шага 5,625 ° / 64
  • Передаточное отношение редуктора: 1/64
  • Частота 100 Гц / Сопротивление постоянному току 50Ω ± 7% (25 ℃)
  • Крутящий момент > 34.3mN.m (120 Гц)
  • Момент трения 600-1200 gf.cm
  • Класс изоляции 600VAC/1mA/1s
  • Шум <35dB (120 Гц, без нагрузки, 10 см)
  • Размеры платы драйвера: 38mm X 30mm
  • Максимальный допустимый ток драйвера на 1 канал: 500mA
Шаговый двигатель 28BYJ-48-5V

Шаговые двигатели применяют в механических системах точного позиционирования

Четырех фазный шаговый двигатель 28BYJ-48 — это бесколлекторный двигатель, вращение вала осуществляется шагами (дискретное перемещение).
На роторе (валу), расположен магнит, а вокруг него расположены катушки, если поочередно подавать ток на эти катушки, создается магнитное поле, которое отталкивает или притягивает магнитный вал, тем самым заставляя двигатель вращаться.
Такая конструкция позволяет с большой точностью управлять валом, относительно катушек.

Применение

  • ЧПУ станках
  • 3-D принтерах
  • принтерах
  • роботах-манипуляторах

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

Угол Шага и Редуктор

Минимально возможный угол перемещения шагового двигателя, называется шагом.
Редуктор, с передаточным числом 1:64 (точнее 1:63,68395). Это означает, что двигатель за один оборот осуществляет 4076 шагов.

Преимущества

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

Конструкция Двигателя

Двигатель содержит две обмотки, каждая имеет отвод от середины. Получается четыре фазы, поэтому его называют — шаговый четырёх фазный двигатель.
Отводы обмоток соединены вместе, к ним подключен красный провод и служат для питания двигателя, так-как каждая обмотка подключена к питанию, такие двигатели называют униполярными.

Шаговый двигатель 28BYJ-48-5V

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

Шаговый двигатель 28BYJ-48-5V

Полношаговый Режим

  • 4 ступени импульсов на один шаг
  • 32 шага за один оборот ротора
  • Встроенный редуктор с передаточным числом 64 (точнее 63,68395)
  • Получается около 2048 шагов
  • Угол шага 11,25 градуса

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

Шаговый двигатель 28BYJ-48-5V Шаговый двигатель 28BYJ-48-5V

Полушаговый Режим

  • 8 ступеней импульсов на 1 шаг
  • 64 шага за один оборот ротора
  • Встроенный редуктор с передаточным числом 64 (точнее 63,68395)
  • Получается около 4096 шагов (точнее 4075.7728395)
  • Угол шага 5,62 градуса

В таком режиме за один оборот ротора, двигатель делает в два раза больше шагов, тем самым увеличивая точность позиционирования.
Однако, в таком режиме двигатель каждый второй шаг имеет сниженный крутящий момент, о чём не стоит забывать!

Шаговый двигатель 28BYJ-48-5V Шаговый двигатель 28BYJ-48-5V

Драйвер ULN2003 A

Цифровой вывод микроконтроллера выдает ток до ~40 мА, а одна обмотка 28BYJ-48 в пике потребляет ~320 мА, то есть, если подключить двигатель напрямую, микроконтроллер сгорит.
Для защиты был разработан модуль шагового двигателя ULN2003, в котором используется микросхема ULN2003A (состоящая из 7 ключей), которая позволяет управлять нагрузкой до 500 мА (один ключ).
Данный модуль может работать с 5 Вольтовым и 12 Вольтовым двигателем 28BYJ-48.

Шаговый двигатель 28BYJ-48-5V

Схема ULN2003A

Шаговый двигатель 28BYJ-48-5V

Подключение к Arduino

Шаговый двигатель 28BYJ-48-5V

Библиотеки для Управления

Для управления шаговыми двигателями часто используют 4 библиотеки.

  • Stepper — стандартная библиотека, уже входит в Arduino IDE. Осуществляет только полношаговый режим коммутации.
  • CustomStepper
  • Stepper_28BYJ
  • AccelStepper

Файлы для скачивания внизу на этой странице.

Мы остановимся на AccelStepper, так как она более удобна для работы и обладает большими возможностями.

Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48 (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.

Особенности AccelStepper

  • Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
  • Поддержка ускорения и замедления
  • Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
  • Функции API не используют функцию delay и не прерывают работу
  • Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
  • Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
  • Поддержка низких скоростей
  • Расширяемый API
  • Поддержка подклассов

Функции Библиотеки

Для регулировки оборотов необходимо использовать линейный потенциометр на 10 кОм, подключается движком к А0, другие два вывода к +5 и GND.

Шаговый двигатель, управляемый платой
AccelStepper mystepper(DRIVER, step, direction);

Шаговый двигатель, управляемый Н-мостом
AccelStepper mystepper(FULL2WIRE, pinA, pinB);

Униполярный двигатель, управляемый транзисторами.
AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2);

Установка максимальной скорости (оборотов в минуту). Скорость по умолчанию очень низкая, так что её требуется переопределить. При движении шаговый двигатель будет ускоряться до этой максимальной скорости и замедляться при подходе к концу движения.
mystepper.setMaxSpeed(stepsPerSecond);

Установка ускорения, в шагах в секунду за секунду.
mystepper.setAcceleration(stepsPerSecondSquared);

Установить скорость (в шагах за секунду). Само движение запускается функцией runSpeed().
mystepper.setSpeed(stepsPerSecond);

Возвращает текущее абсолютное положение (в шагах)
mystepper.currentPosition();

Установить счетчик как текущую позицию. Полезно как задание нулевой координаты. Обнуляет текущую скорость до нуля.
mystepper.setCurrentPosition(long position);

Конечное положение в шагах
mystepper.targetPosition();

Вернуть расстояние до указанного положения. Может использоваться для проверки: достиг ли двигатель указанной конечной точки.
mystepper.distanceToGo();

Переместиться в абсолютно указанное положение. Само движение запускается функцией run().
mystepper.moveTo(long absolute);

Переместиться в относительно указанное положение. Само движение запускается функцией run(). Значение distance может быть больше или меньше нуля.
mystepper.move(long relative);

Начать движение с ускорением. Один шаг. Для продолжения движения следует вызывать функцию повторно как можно чаще — в loop() или иной функции.
mystepper.run();

Начать движение и подождать когда двигатель достигнет указанной точки. БЛОКИРУЮЩАЯ ФУНКЦИЯ — функция не прерывается, пока двигатель не остановится!
mystepper.runToPosition();

Начать движение с ускорением, до заданной позиции. БЛОКИРУЮЩАЯ ФУНКЦИЯ
mystepper.runToNewPosition();

Максимально быстрая остановка (без замедления), используя текущие параметры скорости и ускорения. Также задает новое конечное положение.
mystepper.stop();

Начать движение с текущей заданной скоростью (без плавного ускорения). Для продолжения движения двигателя следует вызывать функцию повторно как можно чаще.
mystepper.runSpeed();

Начать движение с текущей заданной скоростью (без плавного ускорения), до заданной позиции. БЛОКИРУЮЩАЯ ФУНКЦИЯ
mystepper.runSpeedToPosition();

Возвращает true, если ШД в режиме вращения.
mystepper.isRunning();

Деактивировать занятые пины и установить их в LOW. Снимает напряжение с обмоток двигателя, экономя энергию (вал при это может проворачиваться под внешними нагрузками)
mystepper.disableOutputs();

Активировать зарезервированные пины и устанавливает их в режим OUTPUT. Вызывается автоматически при запуске движения.
mystepper.enableOutputs();

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

Что такое шаговый двигатель 28BYJ-48?

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

Для чего нужен драйвер ULN2003?

ULN2003 — это модуль с микросхемой ULN2003A, состоящей из 7 ключей, который позволяет управлять шаговым двигателем с током до 500 мА на канал. Он защищает микроконтроллер от перегрузки, так как двигатель потребляет гораздо больше тока, чем способен выдать вывод Arduino.

В чем разница между полношаговым и полушаговым режимами?

В полношаговом режиме двигатель совершает меньше шагов за один оборот (например, около 2048 шагов), что даёт больший крутящий момент. В полушаговом режиме число шагов удваивается (около 4076 шагов за оборот), что повышает точность позиционирования, но каждый второй шаг имеет меньший крутящий момент.

Как подключить шаговый двигатель 28BYJ-48 к Arduino?

Подключение осуществляется через драйвер ULN2003. Выводы драйвера IN1–IN4 подключаются к цифровым пинам Arduino, питание VCC к 5 В, GND к земле. После этого можно управлять двигателем с помощью библиотек Arduino, таких как Stepper или AccelStepper.

Какие библиотеки использовать для управления двигателем?

Чаще всего используют 4 библиотеки: Stepper, CustomStepper, Stepper_28BYJ и AccelStepper. Рекомендуется AccelStepper, так как она поддерживает ускорение, замедление, работу с несколькими двигателями одновременно и не блокирует выполнение кода.

Какие особенности есть у библиотеки AccelStepper?

AccelStepper поддерживает объектно-ориентированный интерфейс для 2, 3 и 4-выводных шаговых двигателей, управление ускорением и скоростью, независимую работу нескольких двигателей, функции без блокировки кода, поддержку разных типов контроллеров и низких скоростей.

Можно ли управлять двигателем через потенциометр?

Да, скорость двигателя можно регулировать с помощью линейного потенциометра (например, 10 кОм), подключённого к аналоговому пину Arduino. Позицию потенциометра считывают через analogRead, а затем управляют скоростью движения шагового двигателя.