СОДЕРЖАНИЕ ►
Шаговый двигатель (stepper motor) предназначен для точного позиционирования или перемещения объекта на заданное количество шагов вала. Плата Arduino может управлять шаговым двигателем с помощью драйвера и библиотеки stepper.h или accelstepper.h. Рассмотрим принцип работы и схему подключения шагового двигателя к Arduino Uno / Nano, а также разберем скетч для управления шаговым мотором.

Принцип работы шагового двигателя
В зависимости от конструкции, сегодня применяются три вида шаговых двигателей: с постоянным магнитом, с переменным магнитным сопротивлением и гибридные двигатели. У двигателей с постоянным магнитом число шагов на один оборот вала доходит до 48, то есть один шаг соответствует повороту вала на 7,5°. Гибридные двигатели обеспечивают не меньше 400 шагов на один оборот (угол шага 0,9°).

Подсчитав количество сделанных шагов, можно определить точный угол поворота ротора. Таким образом, шаговый двигатель является сегодня идеальным приводом в 3D принтерах, станках с ЧПУ и в другом промышленном оборудовании. Это лишь краткий обзор устройства и принципа работы stepper motor, нас больше интересует, как осуществляется управление шаговым двигателем с помощью Ардуино.
Драйвер шагового двигателя Ардуино
Шаговый двигатель — это бесколлекторный синхронный двигатель, как и все двигатели, он преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока в которых происходит вращение вала, вал шаговых двигателей совершает дискретные перемещения, то есть вращается не постоянно, а шагами. Каждый шаг вала (ротора) представляет собой часть полного оборота.

Вращение вала двигателя осуществляется с помощью сигнала, который управляет магнитным полем катушек в статоре драйвера. Сигнал генерирует драйвер шагового двигателя. Магнитное поле, возникающее при прохождении электрического тока в обмотках статора, заставляет вращаться вал, на котором установлены магниты. Количество шагов задаются в программе с помощью библиотеки Arduino IDE.
Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 изображена на рисунке ниже. Основные характеристики мотора 28BYJ-48: питание от 5 или 12 Вольт, 4-х фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любым цифровым выводам платы Arduino Mega или Nano. Светодиоды на модуле служат для индикации включения катушек двигателя.
Как подключить шаговый двигатель к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- драйвер шагового двигателя ULN2003;
- шаговый двигатель 28BYJ-48;
- провода «папа-мама».

Управление шаговым двигателем через Ардуино производится путем подачи импульсов на обмотки мотора в определенной последовательности. Для облегчения управления шаговым мотором созданы специальные библиотеки stepper.h и accelstepper.h, но можно вращать вал мотора без стандартных библиотек. Подключите шаговый мотор к микроконтроллеру, как на схеме выше и загрузите следующий скетч.
Скетч для управления шаговым двигателем
// порты для подключения модуля ULN2003 к Arduino #define in1 8 #define in2 9 #define in3 10 #define in4 11 int dl = 5; // время задержки между импульсами void setup() { pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(dl); digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(dl); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(dl); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(dl); }
Пояснения к коду:
- вместо портов 8,9,10,11 можно использовать любые цифровые порты;
- время задержки в миллисекундах
int dl = 5;можно изменять, чем меньше задержка в программе, тем быстрее будет вращаться вал мотора; - алгоритм работы программы, представлен на следующей картинке.
Управление шаговым двигателем на Ардуино

Рассмотрим управление шаговым мотором при помощи стандартной библиотеки stepper.h и с помощью более удобной и популярной библиотеки accelstepper.h, где реализовано намного больше дополнительных команд и функций. Схема подключения мотора при этом остается неизменной. Чуть дальше мы перечислили возможные команды, которые можно использовать в программе с этими библиотеками.
Скетч для шагового двигателя на Ардуино (Stepper.h)
#include <Stepper.h> // библиотека для шагового двигателя // количество шагов на 1 оборот, измените значение для вашего мотора const int stepsPerRevolution = 200; // устанавливаем порты для подключения драйвера Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { myStepper.setSpeed(60); // устанавливаем скорость 60 об/мин } void loop() { // поворачиваем ротор по часовой стрелке myStepper.step(stepsPerRevolution); delay(500); // поворачиваем ротор против часовой стрелки myStepper.step(-stepsPerRevolution); delay(500); }
Пояснения к коду:
- вместо портов 8,9,10,11 можно использовать любые цифровые порты;
- библиотека Stepper.h имеет маленький функционал, поэтому подходит только для тестирования шагового двигателя и проверки подключения драйвера.
Скетч для шагового мотора с библиотекой AccelStepper.h
#include <AccelStepper.h> // библиотека для шагового двигателя
Пояснения к коду:
- библиотеку AccelStepper.h можно использовать при подключении шагового двигателя к Motor Shield L293D совместно с библиотекой AFMotor.h;
- в программе можно задавать не только максимальную скорость, но и ускорение и замедление вала шагового двигателя.
Описание команд библиотеки AccelStepper.h
AccelStepper mystepper(DRIVER, step, direction);// Шаговый двигатель, управляемый платой
AccelStepper mystepper(FULL2WIRE, pinA, pinB);// Шаговый двигатель, управляемый Н-мостом
AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2);// Униполярный двигатель
mystepper.setMaxSpeed(stepsPerSecond);// Установка скорости оборотов в минуту
mystepper.setSpeed(stepsPerSecond);// Установка скорости в шагах за секунду
mystepper.setAcceleration(stepsPerSecondSquared);// Установка ускорения
mystepper.currentPosition(); // Возвращает текущее положение в шагах
mystepper.setCurrentPosition (long position); Обнуляет текущую позицию до нуля
mystepper.targetPosition(); // Конечное положение в шагах
mystepper.distanceToGo(); // Вернуть расстояние до указанного положения
mystepper.moveTo(long absolute); // Переместиться в абсолютно указанное положение
mystepper.move(long relative); // Переместиться в относительно указанное положение
mystepper.run(); // Начать движение с ускорением, функцию следует вызывать повторно
mystepper.runToPosition(); // Начать движение до указанной точки
mystepper.runToNewPosition(); // Начать движение с ускорением до заданной позиции
mystepper.stop(); // Максимально быстрая остановка (без замедления)
mystepper.runSpeed(); // Начать движение с заданной скоростью без плавного ускорения
mystepper.runSpeedToPosition(); // Начать движение без плавного ускорения, до позиции
mystepper.disableOutputs(); // Деактивирует зарезервированные пины и устанавивает их в режим LOW. Снимает напряжение с обмоток двигателя, экономя энергию
mystepper.enableOutputs(); // Активирует зарезервированные пины и устанавивает их в режим OUTPUT. Вызывается автоматически при запуске двигателя










mystepper.setMaxSpeed(stepsPerSecond); // Установка скорости оборотов в минуту
Черным по белому написано — stepsPerSecond — а написано «оборотов в минуту».
сколько таких шаговых моторов можно подключить к плате? Мне нужно минимум 6 шаговых мотора подключить к плате. Углы поворота 90 и 180. Не подскажите плату и подходящие моторы.
Если использовать модуль ULN2003, то для него потребуется задействовать 4 пина Ардуино. Соответственно для 6 шаговых двигателей потребуется 24 пина — поэтому нужна будет плата Arduino Mega
вам нужно 6 пинов и 6 моторов и более сложный код плата и моторы подойдут любые
в ардуино уно 13 портов подели на четыре
крутит только по часовой стрелке, против часовой стрелки не работает код.
Попробуйте поменять местами IN2 — IN3 на драйвере ULN2003
поменять местами IN2 — IN3 на драйвере ULN2003
работает теперь как надо.
сильно нагревается мотор что делать?
Это нормально, но желательно поставить обороты меньше
как подключить шаговый мотор к кнобке
хочу создать что то типо лифта
Очень сильно греется драйвер ULN2003, что делать?
Здравствуйте! Как к этой схеме добавить вакуумный насос? Молю, помогите!!!!
Сколько кг тянет мотор на валу? Помогите!
как сделать поворот мотора в разные стороны? хочу сделать что бы при нажатии на одну кнопку он крутился по часовой стрелке а на другую — против часовой стрелки
Та же проблема. Нашел два варианта . Скетчи разные. Один не компилируется. Ругается на AccelStepper s28BYJ-48(8, IN1, IN3, IN2, IN4); Не могу победить. Другой только в видео мелко. Занимаюсь . Ты победил? Напиши STBOBROVCKV60@GMAIL.COM
Скетч Виктора Кравченко решил проблему. Спасибо ему.
Что за скетч такой? Кравченко? где его найти?