Подключение шагового двигателя к Ардуино

СОДЕРЖАНИЕ ►
Шаговый двигатель (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. Вызывается автоматически при запуске двигателя
Подборка на тему: Подключение шагового двигателя к Ардуино
4 комментариев для “Подключение шагового двигателя к Ардуино”
Добавить комментарий
Записи похожие на: Arduino. Шаговый двигатель 28byj-48 (stepper motor)
- Иннополис провел конкурс РОСТ-ISEF 2019
- Как подключить герконовый датчик к Ардуино
- ИК приемник + Ардуино. Подключение
- Итоги участия в финале Балтийского научно-инженерного конкурса
Проекты похожие на: Arduino. Шаговый двигатель 28byj-48 (stepper motor)
mystepper.setMaxSpeed(stepsPerSecond); // Установка скорости оборотов в минуту
Черным по белому написано — stepsPerSecond — а написано «оборотов в минуту».
сколько таких шаговых моторов можно подключить к плате? Мне нужно минимум 6 шаговых мотора подключить к плате. Углы поворота 90 и 180. Не подскажите плату и подходящие моторы.
Если использовать модуль ULN2003, то для него потребуется задействовать 4 пина Ардуино. Соответственно для 6 шаговых двигателей потребуется 24 пина — поэтому нужна будет плата Arduino Mega
крутит только по часовой стрелке, против часовой стрелки не работает код.