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

Шаговый двигатель (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 можно использовать при подключении шагового двигателя к 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-х, 5-ти, 6-ти или 8-ми проводов.
КАК ПОДКЛЮЧИТЬ ШАГОВЫЙ ДВИГАТЕЛЬ С 4 ВЫВОДАМИ
Если в вашем распоряжении имеется шаговый двигатель, подключаемый при помощи только четырех проводов, это означает, что в нем две обмотки, это биполярный мотор и вы сможете использовать его только с биполярным драйвером. Обратите внимание на то, что каждая из фазных обмоток содержит пару проводов — для идентификации каждого провода используйте тестер (мультиметр).
Найдите замкнутые между собой провода(которые прозваниваются) и подключите их к шаговому двигателю. Лучше сразу свяжите их вместе, чтобы не повторять операцию постоянно
КАК ПОДКЛЮЧИТЬ УНИПОЛЯРНЫЙ ШАГОВЫЙ ДВИГАТЕЛЬ С 6 ВЫВОДАМИ
Также, как и шаговый двигатель с четырехконтактным соединением, униполярный двигатель с 6 проводами имеет пару проводов для каждой обмотки. Однако, он также имеет центральный вывод для каждой обмотки, что дает возможность подключать его как в качестве биполярного шагового двигателя, так и в качестве однополярного.

Для того, чтобы подключить шаговый двигатель с 6 выводами, с помощью тестера разделите все провода на три группы, замкнутые между собой, а затем найдите центральные выводы, измеряя сопротивление между проводами. Если вы хотите подключить ваш электродвигатель к униполярному драйверу, используйте все шесть проводов.
Подключение к биполярному драйверу(коих подавляющее большинство) потребует от вас использования только одного конца провода с одним выводом и одного центрального вывода для подключения к каждой обмотке.
Схема подключения шагового электродвигателя с 5-ю выводами очень похожа на схему подключения с 6-ю контактами. Главное ее отличие состоит в том, что центральные выводы замкнуты между собой внутри, соединяясь в один провод. Это обеспечивает работу электродвигателя только по однополярной схеме.

Кроме того, определить обмотки можно только методом проб и ошибок; лучше всего попытаться найти центральный вывод, так как его сопротивление составляет половину от сопротивления других проводов.
КАК ПОДКЛЮЧИТЬ ШАГОВЫЙ ДВИГАТЕЛЬ С 8 ВЫВОДАМИ
Наконец, существуют шаговые электродвигатели, подключаемые при помощи 8-ми проводов. Для того, чтобы понять, как подключить шаговый двигатель с 8 выводами, мы должны вернуться к инструкциям выше.Их схема подключения во многом схожа со схемой, предполагающей использование 6-ти проводов. Разница между ними состоит в том, что две фазы разделены на две отдельных обмотки. Имея указанную схему, вы сможете подключить шаговый двигатель по однополярной схеме, а также иметь три различные комбинации для биполярного подключения.
- Последовательно соединив обмотки(увеличится индуктивное и активное сопротивление, а также момент, упадет максимальная скорость)
- Параллельно (из-за меньшей индуктивности будет меньше момент и выше скорость)
- Соединив обмотки параллельно, можно использовать униполярное подключение, как для 6-выводного шагового мотора
Управление шаговым двигателем и схема включения для Ардуино


Вопросы и ответы
Автор fast12v0_oarduin На чтение 21 мин Просмотров 2.1к. Опубликовано 10.11.2021
Управление шаговым двигателем на Ардуино
Рассмотрите возможность управления шаговым двигателем с помощью стандартной библиотеки stepper.h и более удобной и популярной библиотеки aclstepper.h, в которой реализовано множество дополнительных команд и функций. Схема подключения двигателя остается без изменений. Чуть дальше мы перечислили возможные команды, которые можно использовать в программе с этими библиотеками.
Пояснения к коду:
- вместо портов 8,9,10,11 можно использовать любой цифровой порт;
- библиотека Stepper.h имеет несколько функций, поэтому она подходит только для тестирования шагового двигателя и проверки подключения драйвера.
Пояснения к коду:
- библиотеку AccelStepper.h можно использовать при подключении шагового двигателя к Motor Shield L293D вместе с библиотекой AFMotor.h;
- в программе можно установить не только максимальную скорость, но и ускорение и замедление вала шагового двигателя.
Описание команд библиотеки AccelStepper.h
Схема сборки на Fritzing
Для использования в образовательных проектах рекомендую Arduino Uno. Представляю схему подключения в двух вариантах: принципиальная схема и наглядная схема.


Описание библиотеки для работы
Пакет Arduino IDE содержит стандартную библиотеку Stepper.h. Он позволяет вам создать объект, а затем манипулировать им, используя 2 функции:
- Инструкция Stepper (шаги, pin1, pin2, pin3, pin4) предписывает объект, где шаг — это количество шагов для 1 полного оборота на 360º, pin1 — pin4 — контакты для подключения драйвера. Чтобы создать объект motorN, вам необходимо указать Stepper motorN (steps, pin1-4) с желаемыми числовыми значениями вместо символов в скобках.
- Скорость двигателя указывается как void setSpeed (long rpm), где rpm — это об / мин, например motorN.setSpeed (64).
- Поверните вал на указанное количество шагов: void step (int steps), например, motorN.step (16).
Библиотека Stepper.h позволяет запрограммировать доску для тестирования или обучения. Библиотека AccelStepper.h содержит гораздо больше функций: она гибко контролирует скорость, работает с различными моделями двигателей, позволяет подключать несколько машин к цепи и содержит функции, показанные в таблице 2.
Заявления и аргументы
| AccelStepper stepperQ (1, pinStep, pinDirection); | Объявите шаговый двигатель под названием stepperQ. |
| AccelStepper stepperQ (2, pin1, pin2); | Описание двухполюсной машины с приводом от Н-образного моста. |
| AccelStepper stepperV (4, pin1-4); | Конфигурация униполярного шагового двигателя, управляемого 4 транзисторными ключами. |
| stepperQ.setMaxSpeed (stepsPerSecond); | Поскольку скорость по умолчанию низкая, вы должны написать свою собственную, пошагово. |
| stepperQ.setAcceleration (stepsPerSecondSquared); | Ускорение, шаги / с². |
| stepperQ.moveTo (targetPosition); | Перемещение вала в новое абсолютное положение под управлением функции run(). |
| stepperQ.runSpeed(); | Обновление — нужно делать периодически, чтобы вал вращался. |

ULN2003 – Шаговый мотор 5В с драйвером

Обзор основных моделей шаговых двигателей для ардуино
Nema 17 — это биполярный шаговый двигатель, наиболее часто используемый в 3D-принтерах и станках с ЧПУ. Серия двигателя 170хHSхххА универсальна.

Основные характеристики двигателя:
- Угловой шаг составляет 1,8 °, то есть на 1 оборот приходится 200 шагов;
- Двигатель двухфазный;
- Рабочие температуры от -20С до 85С;
- Номинальный ток 1,7 А;
- Удерживающий момент 2,8 кг x см;
- Оснащен фланцем 42 мм для легкой и качественной установки;
- Высокий крутящий момент — 5,5 кг х см.
28BYJ-48 — униполярный шаговый двигатель. Используется в небольших проектах роботов, сервоприводов, радиоуправляемых устройств.
- Номинальное напряжение питания — 5В;
- мотор четырехфазный, 5 проводов;
- Количество проходов: 64;
- Угол шага 5,625°;
- Скорость вращения: 15 оборотов в секунду
- Крутящий момент 450 г / см;
- Сопротивление постоянному току 50 Ом ± 7% (25 ℃).
Шаговый двигатель – принцип работы
Шаговый двигатель — это двигатель, который перемещает свой вал в соответствии с шагами и направлением, указанными в программе микроконтроллера. Такие устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и других электронных устройствах. Большим преимуществом шаговых двигателей перед двигателями постоянного вращения является то, что они обеспечивают точное угловое позиционирование ротора. Кроме того, шаговые двигатели имеют возможность быстро запускаться, останавливаться, реверсировать.
Шаговый двигатель вращает ротор на заданный угол с соответствующим управляющим сигналом. Благодаря этому есть возможность проверить положение узлов механизмов и перейти в указанное место. Мотор работает следующим образом: в центральном валу расположен ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое действует на магниты и заставляет вал вращаться. Такие параметры, как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.
Основные типы шаговых двигателей:
- Двигатели с регулируемыми магнитами (используются редко);
- Двигатели с постоянными магнитами;
- Гибридные двигатели (сложнее в производстве, дороже, но наиболее распространенный тип шаговых двигателей).
Что такое мост H-bridge?
H-мост — это схема, состоящая из 4 переключателей, способных безопасно управлять двигателем постоянного тока или шаговым двигателем. Эти переключатели могут быть реле или (чаще) транзисторами. Транзистор — это твердотельный переключатель, который можно закрыть, послав небольшой ток (сигнал) на один из его контактов.
В отличие от одиночного транзистора, который позволяет управлять скоростью двигателя, H-мосты также позволяют управлять направлением вращения двигателя. Он делает это, открывая разные переключатели (транзисторы), так что ток течет в разных направлениях и, таким образом, меняет полярность на двигателе.
Важно! Выключатели 1 и 2 или 3 и 4 никогда не должны быть замкнуты вместе. Это вызовет короткое замыкание и может повредить устройство.
H-Bridges могут помочь вам предотвратить сжигание вашего Arduino двигателями, которые вы используете. Двигатели представляют собой индукторы, что означает, что они накапливают электрическую энергию в магнитных полях. Когда к двигателям больше не подается ток, магнитная энергия возвращается в электрическую и может повредить компоненты. H-Bridge помогает лучше изолировать ваш Arduino. Нет необходимости подключать мотор напрямую к Arduino.
Хотя H-мосты можно легко изготовить самостоятельно, многие люди предпочитают приобретать H-мосты (например, микросхему L293NE / SN754410) для удобства. Это чип, который мы будем использовать в этом уроке. Физические контактные телефоны и их назначение указаны ниже:
- Контакт 1 (1, 2EN) → Двигатель 1 Вкл. / Выкл. (ВЫСОКИЙ / НИЗКИЙ)
- Контакт 2 (1A) → Двигатель 1, логический выход 1
- Контакт 3 (1Y) → Клемма 1 электродвигателя 1
- Контакт 4 -> Земля
- Контакт 5 -> Земля
- Контакт 6 (2Y) → Клемма 2 двигателя 1
- Контакт 7 (2A) → Двигатель 1, логический выход 2
- Контакт 8 (VCC2) → Электропитание двигателей
- Контакт 9 → Двигатель 2 Вкл. / Выкл. (ВЫСОКИЙ / НИЗКИЙ)
- Контакт 10 → Двигатель 2, логический выход 1
- Контакт 11 → Клемма 1 электродвигателя 2
- Штифт 12 -> Земля
- Штифт 13 -> Земля
- Контакт 14 → Клемма 2 электродвигателя 2
- Контакт 15 → Двигатель 2, логический выход 2
- Контакт 16 (VCC1) → Питание для Н-моста (5 В)
Список деталей
Детали, необходимые для проекта шагового двигателя Arduino:
- Шаговый двигатель (этот мотор был взят от старого принтера)
- Ардуино
- Изолированный медный провод
- Кусачки / стрипперы
- Регулятор тока
- транзистор
- драйвер двигателя H-Bridge 1A
- моторный щит
- сварщик
- сварка
- инструменты
- безопасные очки
Как подключить шаговый двигатель к Ардуино
Для этого урока нам понадобятся:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- драйвер шагового двигателя ULN2003;
- шаговый двигатель 28BYJ-48;
- папа-мама темы».
Шаговый двигатель управляется через Arduino путем подачи импульсов на обмотки двигателя в определенной последовательности. Для облегчения управления шаговым двигателем созданы специальные библиотеки stepper.h и Accelstepper.h, но вращать вал двигателя можно и без стандартных библиотек. Подключите шаговый двигатель к микроконтроллеру, как показано на схеме выше, и загрузите следующий эскиз.
Пояснения к коду:
- вместо портов 8,9,10,11 можно использовать любой цифровой порт;
- время задержки в миллисекундах int dl = 5; можно изменить, чем короче задержка в программе, тем быстрее будет вращаться вал двигателя;
- алгоритм программы показан на следующем рисунке.
Где купить шаговый двигатель
Самые простые варианты двигателей на AliExpress:
| Nema17 42BYGH 1.7A (17HS4401-S) Шаговый двигатель для 3D-принтера | Набор из 5 шаговых двигателей ULN2003 28BYJ-48 с платами драйверов Arduino![]() |
Шаговый двигатель с модулем драйвера шагового двигателя 5 В 28BYJ-48 + ULN2003![]() |
Еще один вариант шагового двигателя для 4-фазного двигателя постоянного тока Arduino 28BYJ-48 5V + тестовая плата ULN2003![]() |
Набор из трех шаговых двигателей Nema17 42BYGH 1.7A (17HS4401) для 3D-принтера![]() |
AliExpress.com Продукт — Запчасти для 3D-принтеров StepStick A4988 DRV8825 Драйвер шагового двигателя с радиатором Carrier Reprap RAMPS 1.4 1.5 1.6 MKS GEN V1.4 board![]() |
Драйвер шагового двигателя Ардуино
Шаговый двигатель — это бесщеточный синхронный двигатель, как и все двигатели, он преобразует электрическую энергию в механическую. В отличие от двигателя постоянного тока, в котором вал вращается, вал шаговых двигателей совершает дискретные движения, то есть вращается не постоянно, а ступенчато. Каждая ступенька вала (ротора) является частью полного оборота.
Вращение вала двигателя осуществляется с помощью сигнала, управляющего магнитным полем катушек в статоре драйвера. Сигнал генерируется драйвером шагового двигателя. Магнитное поле, создаваемое прохождением электрического тока в обмотках статора, заставляет вращаться вал, на котором установлены магниты. Количество шагов задается в программе с помощью библиотеки Arduino IDE.
Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 показана на следующем рисунке. Основные характеристики двигателя 28BYJ-48: питание 5 или 12 вольт, 4-фазный двигатель, угол шага 5,625 °. Порты драйвера IN1 — IN4 подключаются к любому цифровому выводу на плате Arduino Mega или Nano. Светодиоды на модуле используются для индикации активации катушек двигателя.

Описание библиотеки AccelStepper
Перейдем к интересной части нашей статьи. Это описание двух библиотек для работы с движками myStepper и AccelStepper. Больше внимания уделю библиотеке AccelStepper, так как в ней больше функций, а именно:
- вы можете контролировать скорость,
- поддержка различных шагов
- поддержка одновременной работы двигателей
Определение конфигурации моторов
AccelStepper mystepper (1, pinStep, pinDirection);
Для управления шаговым двигателем.
AccelStepper mystepper (2, pinA, pinB);
Биполярный шаговый двигатель с Н-мостом.
AccelStepper mystepper (4, pinA1, pinA2, pinB1, pinB2);
Униполярный двигатель, управляемый четырьмя транзисторами.
Максимальная частота вращения двигателя. Скорость явно невысокая. Сначала двигатель разгоняется до этой скорости, затем снижает ее
Ускорение шагового двигателя в шагах в секунду.
Управление положением
Переместитесь в абсолютно указанную позицию. Само движение инициируется функцией run ().
Переместитесь в относительно конкретное место. Само движение инициируется функцией run (). Расстояние может быть больше или меньше нуля.
Возвращает текущую абсолютную позицию.
Верните расстояние до указанного места. Его можно использовать, чтобы проверить, достиг ли двигатель заданной конечной точки.
Начни водить. Чтобы продолжить движение двигателя, вызовите функцию еще раз.
Начните движение и дождитесь, пока двигатель достигнет указанной точки. Функция не возвращается, пока не остановится.
Управление скоростью
Установите скорость в шагах в секунду. Сам процесс запускается функцией runSpeed ().
Начни водить. Чтобы продолжить движение двигателя, вызовите функцию еще раз.
Как видите, функции управления в принципе несложные, достаточно посидеть на несколько вечеров.
Объяснение программы для платы Arduino
Прежде чем приступить к написанию программы для платы Arduino, давайте попробуем разобраться, что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-х шаговой последовательности, то есть нам нужно будет пройти 4 шага, чтобы завершить полный оборот двигателя.
| Номер шага | Силовые контакты | Катушки с питанием |
| Шаг 1 | 8 и 9 | А и Б |
| Шаг 2 | 9 и 10 | Да и делать |
| Шаг 3 | 10 и 11 | C и D |
| Шаг 4 | 11 и 8 | Богиня |
На драйвере мотора есть 4 светодиода, по свечению которых можно судить, на какую катушку подается питание в данный момент. Более подробно все эти процессы можно посмотреть на видео в конце статьи.
Мы напишем программу, в которой мы будем вводить количество шагов, необходимых для двигателя, в последовательный монитор платы Arduino. Полный текст программы приведен в конце статьи, но здесь мы рассмотрим наиболее важные ее фрагменты.
Как мы подсчитали ранее, общее количество шагов на один полный оборот нашего шагового двигателя составляет 32, мы запишем это в следующей строке кода:
Затем нам нужно указать плате Arduino, через какой из ее контактов мы будем управлять шаговым двигателем (то есть к каким контактам подключен драйвер двигателя).
Примечание. Последовательность номеров выводов, показанная в приведенной выше команде (8,10,9,11), специально предназначена для питания катушек шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, вам необходимо изменить их порядок для данной команды.
Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для установки скорости вращения шагового двигателя мы можем использовать команду формы:
Для двигателя 28-BYJ48 скорость вращения может быть установлена от 0 до 200.
Число шагов, которые должен сделать двигатель, определяется переменной «val». Поскольку у нас 32 шага (на один оборот) и передаточное число 64, мы должны сделать 2048 (32 * 64 = 2048) «шагов» в этой команде, чтобы сделать один полный оборот двигателя.
В нашей программе мы будем считывать значение на аналоговом выводе A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если он увеличен, то мы сделаем 5 шагов с мотором по часовой стрелке, а если он уменьшится, то 5 шагов с мотором против часовой стрелки.

Опыт изучения Arduino. Подключение шагового двигателя. Часть программная и наладочная. — DRIVE2

В последней части своего рассказа о подключении шагового двигателя к ардуино я остановился на том, что собрал на макетной плате стабилизатор напряжения 5В, установил плату управления (КП) и пошагово подготовил выводы мотора. Настройка самой платы заключается в установке тока двигателя и выборе значения микрошага.
Начнем с тока двигателя. ПУ нужно только запитать от логической части, например. 5 В. Плюс подается на вывод VDD (может быть обозначен как VCC, VLOG), минус — на GND. Я до сих пор не обслуживаю СД и ее еду. Сам процесс настройки сводится к установке Vref.
Формула Vref для A4988 зависит от номинала резисторов считывания тока. Это два черных прямоугольника на плате драйвера. Обычно подписывается R050 или R100.
Самый простой способ измерить Vref — на подвижном выводе подстроечного резистора. Минус мультиметра (в режиме измерения постоянного напряжения он подключается к выводу GND, а плюс цепляется за кончик отвертки, которым я вращаю подстроечный резистор. Ток мотора не знал и ковырял его вверх эмпирически.
Побалуйте себя током. Теперь микрошаг.
Выходы MS (микрошаг) За микрошаг отвечают MS1, MS2, MS3 Теперь несколько слов о том, что такое микрошаг. В таблице видно, что это дробное число. Допустим, шаговый двигатель делает полный оборот за 200 шагов.
При выборе 1/4 микрошага полный оборот будет выполнен за 800 шагов, а при 1/16 микрошага — за 3200 шагов. Что нужно? Полный шаг означает больший крутящий момент, меньшую точность и больше шума.
Чем меньше шаг, тем выше точность позиционирования, плавнее ход (особенно на низких скоростях) и значительно ниже рабочий шум. Однако это приведет к снижению крутящего момента на коленчатом валу.
Забегая вперед скажу, что играл с разными значениями, но остановился на 1/16, соединение пинов MS1, MS2, MS3 с пином VDD.PU настроено — можно подключать мотор и его блок питания.
Напомню, что одна из моих обмоток — это сине-зеленый провод, другая — бело-оранжевая.
Схематично подключение шагового двигателя к блоку управления мне выглядит так:
После подачи питающего напряжения на плату шаговый двигатель начал произвольно двигаться. Это происходит из-за индукции на выводах STEP (шаг) и DIR (направление): эти выводы отвечают за управление вращением шагового двигателя. Если вы подключите вывод DIR к выводу VDD, шаговый двигатель будет двигаться в одном направлении, а если с GND, то в другом.
Когда напряжение на выводе STEP повышается с низкого до высокого, SM делает 1 микрошаг. Те, которые заставляют двигатель вращаться, к этому выводу должны быть приложены прямоугольные импульсы с низким уровнем около нуля и высоким уровнем около 5 В, так называемые уровни TTL. В качестве генератора таких импульсов у меня будет плата ардуино.
Я загрузил скетч из примеров под названием Blink. В оригинале он формирует импульсы с частотой 1/2 Гц на выводе 13 платы (в моем случае Arduino Nano) (1 с высокий уровень, затем 1 с низкий уровень).
С такой частотой шаговый двигатель совершит один оборот (с шагом 1/16 микрошага) за 6400 с! Не хотелось так долго ждать))) и начал увеличивать частоту мотора. Мне удалось добиться стабильной работы на частотах до 10 кГц. Для меня длительность импульса и пауза составляют 50 мкс каждая.
Операторы задержки в скетче пришлось заменить на delayMicroseconds, потому что задержка может работать только с временами 1 мс. В результате скетч стал выглядеть так:
Тогда я решил доработать скетч, чтобы мотор периодически менял направление вращения. Модифицированный скетч выглядит так:
Подключение Ардуино.
Тест показал, что схема полностью работоспособна. Двигатель не перегревается и не пропускает ступенек. Цель была достигнута.
Для тех, кто усвоил весь материал, работают видеоустройства.
Это мое первое видео, предназначенное для публичного просмотра. И первая запись в блоге, сделанная мной.
Напишите в комментариях, есть ли смысл снимать видео или достаточно ограничиться статичными изображениями?
Шаговые двигатели и моторы Ардуино 28BYJ-48 с драйвером ULN2003
В этой статье мы поговорим о шаговых двигателях в проектах Arduino на примере очень популярной модели 28BYJ-48. Шаговые двигатели, как и сервоприводы, являются важным элементом автоматизированных систем и робототехники. Их можно найти во многих устройствах поблизости, от привода компакт-дисков до 3D-принтера или манипулятора. В этой статье вы найдете описание того, как работают шаговые двигатели, пример подключения к Arduino с использованием драйверов на основе ULN2003 и примеры скетчей с использованием стандартной библиотеки Stepper.
Шлейф проводов «Папа — Мама» (20см, 40шт.)

Самые популярные материалы в блоге
За все время
- BMS — обзор контроллеров защиты аккумуляторных батарей
- Установка ESP32 в Arduino IDE (Руководство для Windows)
- Адресная светодиодная лента Arduino и WS2812B
- Веб-сервер потокового видео ESP32-CAM (работает с Home Assistant)
- Светодиодный индикатор TM1637 и Arduino — схема подключения
Перейдем к практике
Теория всегда запутанная и непонятная, чтобы понять что и как брать и делать. Поэтому перейдем к практической стороне дела.
Итак, из набора, о котором шла речь ранее, у меня есть:
- Arduino UNO;
- Модуль ULN2003;
- Шаговый двигатель 28BYJ-48 5V DC;
- Связка свитеров, щиток и источник питания для него.
Модуль ULN2003 — предназначен для управления униполярным шаговым двигателем. Схематично это 7-канальный транзисторный комплекс Дарлингтона и, в принципе, им можно управлять чем угодно. Технические характеристики приведены ниже:
- Номинальный ток коллектора ключа — 0,5 А;
- Максимальное выходное напряжение до 50В;
- Защитные диоды на выходах;
- Вход адаптирован к разным типам логики;
- Возможность использования для релейного управления.
Модуль, помимо самой микросхемы ULN2003, имеет светодиоды для индикации выходного напряжения, колодку подключения и перемычку для отключения питания.
Двигатель 28BYJ-48 5V DC подключается штатным разъемом к белому блоку на плате. В нем 5 проводов: общий красный и 4 от обмоток.
- 32 шага на оборот ротора;
- Интегрированная коробка передач с передаточным отношением 63,68395: 1, благодаря которой вал совершает 1 оборот за 2048 шагов в режиме полного шага и 4096 шагов в режиме полушага;
- Скорость вращения: номинальная 15 об / мин, максимальная 25 об / мин;
- Напряжение питания 5 В;
- Ток одной обмотки 160 мА;
- Полный ток: в 4-фазном режиме 320 мА, при быстром вращении 200 мА.
- Передаточное число: 1 / 63,68395
- Угол наклона ротора (без редуктора): при 4-ступенчатой последовательности управляющих сигналов 11,25 ° (32 ступени на оборот); в 8 шагов — 5,625 ° (64 шага на оборот)
- Крутящий момент не ниже: 34,3 мНм (120 Гц);
- Тормозной момент: 600-1200 гсм;
- Тяга: 300 г / м 2;
- Вес: 33 гр.
Итак, давайте рассмотрим более простые примеры управления двигателем без использования библиотек. Как известно, на обмотки необходимо подавать импульсы определенной последовательности.
Итак, попробуем выдать такие сигналы от ардуино. Для этого я подключаю модуль ULN2003 по следующей схеме (вывод arduino — контакт модуля)
Двигатель начнет вращаться, скорость вращения фиксируется переменной dl. Я только ввел его, чтобы не вводить вручную задержку на каждом шаге. Ниже я приложу видео и в нем для наглядности я показал как вращение с задержкой между шагами равной 2 мс (за 1 мс мотор только пищит и не вращается…), и с задержкой полсекунды, что позволяет четко видеть, в какой последовательности отправляются сигналы на обмотки, что позволяет убедиться, что напряжение приложено к двум обмоткам одновременно, согласно приведенной выше таблице. С задержкой в 2 мс светодиоды загораются как будто все вместе.
Перейдем к полушаговому управлению. В следующей таблице показана процедура подачи сигналов на обмотки рассматриваемого двигателя для ее реализации.
Но на практике такой подход к управлению шаговым двигателем не используется. Для этого есть библиотеки, в Arduino IDE встроен «Степпер». Возьмем готовый пример «Stepper_oneRevolution» из библиотеки и изменим его для нашего движка, я цитирую код ниже и описываю основные возможности в комментариях:
Первое, что бросается в глаза, это то, что код занимает намного меньше времени, количество шагов для полного оборота ротора задается первым аргументом функции Stepper, с его помощью выводов, к которым подключен двигатель и объявляется количество шагов в полном повороте дерева, его синтаксис следующий:
Имя шагового двигателя (количество шагов за полный оборот, вывод 1, вывод 2, вывод 3, вывод 4).
Что ж, когда нам нужно повернуть сам мотор, мы обращаемся к мотору, имя которого мы написали в Stepper с префиксом «.step», у нас есть myStepper.step. В видеоролик я для наглядности вставил фрагмент, в котором двигатель крутится на пол-оборота по часовой стрелке, а на полный — против. Это в самом конце. Я изменил код для этого следующим образом:
В дверном мониторе микроконтроллер «сообщает» нам, в каком направлении вращается двигатель.
И напоследок предлагаю посмотреть видео, демонстрирующее, как работают все примеры кода в этой статье
Ниже представлена схема подключения нашего проекта шагового двигателя Arduino.
Для шагового двигателя Arduino 4 контакта H-моста должны быть подключены к 4 контактам двигателя. Затем 4 логических контакта подключаются к Arduino (8, 9, 10 и 11). Как показано на схеме выше, для питания двигателей можно подключить внешний источник питания. Чип может работать с внешним питанием от 4,5 В до 36 В (мы выбрали батарею 9 В).
Присоединяем провода
Большинство шаговых двигателей имеют четыре провода, поэтому вам нужно разрезать четыре медных провода (обратите внимание, что цвет не связан ни с чем конкретным (обычно существует правило, что черный — это земля, но не сейчас). Разные цвета использовались только для этого. Эти контакты будут использоваться для проверки того, какая катушка в данный момент активна в двигателе. Для этого проекта Arduino шаговый двигатель был взят от старого принтера, поэтому пайка проводов была там. Самый простой вариант для этого проекта можно установить безопасное соединение (припой, штекер, зажим).
Эскиз/скетч Arduino
В Arduino уже есть встроенная библиотека для шаговых двигателей. Просто зайдите в меню:
Файл -> Примеры -> Stepper -> stepper_oneRevolution
Файл → Примеры → Stepper → stepper_oneRevolution
Затем вам нужно изменить переменную stepsPerRevolution в соответствии с вашим конкретным движком. После просмотра номеров деталей двигателя в Интернете, наш конкретный двигатель был рассчитан с 48 шагами для прохождения одного круга.
На самом деле библиотека Stepper переключает сигналы HIGH и LOW для каждой катушки, как показано на анимации выше.
Arduino Uno (DIP версия)

L298N – драйвер шагового двигателя

Процесс подключения
Сборка схемы несложная, поэтому доступна любителю. Требуются базовые знания в области электротехники, умение работать с ПК на уровне пользователя и тщательное составление чертежей. Макетная плата позволит вам обойтись без паяльника, пайки и канифоли.

Что понадобится
Для сборки схемы понадобятся следующие компоненты:
- Шаговый двигатель коллектора.
- Плата Arduino. Для новичков подойдет модель UNO.
- Блюдо для хлеба.
- Диоды, транзисторы, резисторы, потенциометр.
- Перемычки и провода.
- «Motor Shield» — дополнительная плата расширения для управления двигателем постоянного тока, а также регулятор скорости.
- Вместо Motor Shield можно использовать драйверы L298N, ULN2003 или L293D.
- Источник постоянного тока.
- USB-кабель для подключения к компьютеру и загрузки эскизов.
На рынке представлены готовые комплекты (в том числе 2-5).
Пошаговая инструкция
Драйвер и плата «Arduino» могут выйти из строя при неправильном питании, поэтому сначала необходимо подключить отрицательный провод. Выполнять действия нужно в такой последовательности:
- Подготовьте эскиз для проверки двигателя.
- Поместите щит управления двигателем или драйвер на верхнюю часть платы Arduino UNO.
- Проверьте и при необходимости установите перемычки на плате расширения следующим образом: H1 подключается к контакту 4, E1 — к контакту 5, E2 — к контакту 6 и H2 — к контакту 7. Контакты 5 и 6 должны поддерживать ШИМ (широтно-импульсную модуляцию).
- Подготовьте устройство для подачи постоянного тока на экран.
- Подайте постоянный ток на контакты «+» и «-» платы расширения.
- Подключите питание двигателя к контактам PWR на плате расширения.
- Подключите «Ардуино» с помощью USB-кабеля к ПК и загрузите скетч.

Эскизы можно писать с помощью библиотеки Stepper.h или AccelStepper.h. Плата Arduino UNO подходит для работы с ШИМ. В этом случае в блоке цикла используются команды analogWrite и analogRead.
Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека.
Сегодня в уроке подключим драйвер шагового двигателя A4988 (DRV8825) к Arduino. Рассмотрим самый простой скетч (код,) который позволит вращать шаговым двигателем по часовой и против часовой стрелке.
Что такое шаговый двигатель? Описание драйвера шагового двигателя A4988 и описание драйвера шагового двигателя DRV8825, а также много другой полезной информации по ЧПУ станкам и 3D принтерам, вы сможете найти на моем втором сайте ЧПУ технологии (CNC-tex.ru).

Схема подключения драйвера шагового двигателя A4988 (DRV8825).
Для тех, кому лень сходить на мой второй сайт по ЧПУ станкам, выкладываю схемы подключения драйверов A4988 (DRV8825) к Arduino.
Драйвер шагового двигателя A4988 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя DRV8825 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Внимание! Для корректной работы шагового двигателя для драйвера необходимо настроить ток. Как рассчитать ток для драйвера A4988 читайте тут, для драйвера DRV8825 читайте тут. Также при необходимости установите радиатор охлаждения драйвера.
Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.
Для облегчения подключения драйверов к Arduino существуют специальные модули, которые помогут без лишних усилий и пайки подключить драйвер A4988 или DRV8825. Подробнее о модулях для подключения драйвера A4988 и DRV8825 читайте тут. Подробно останавливаться на типах модулей и особенностях подключения не буду.

Внимание! При установке драйвера на модуль будьте осторожны.Драйвер может сгореть, если не правильно установить его на модуль.

С подключением определились, пора перейти к коду, который позволит управлять шаговым двигателем.
Код для Arduino и A4988 (DRV8825),который позволяет вращать шаговым двигателем без библиотеки.
Следующий код даст представление о том, как управлять скоростью и направлением вращения биполярного шагового двигателя с помощью драйвера шагового двигателя A4988. Данный скетч может служить основой для более интересных экспериментов и проектов на Arduino.
const int dirPin = 2; const int stepPin = 3; const int stepsPerRevolution = 200; void setup() < pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); >void loop() < digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки for(int x = 0; x >stepsPerRevolution; x++) < digitalWrite(stepPin, HIGH); delayMicroseconds(2000); digitalWrite(stepPin, LOW); delayMicroseconds(2000); >delay(1000); digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки for(int x = 0; x < stepsPerRevolution; x++) < digitalWrite(stepPin, HIGH); delayMicroseconds(1000); digitalWrite(stepPin, LOW); delayMicroseconds(1000); >delay(1000); >
Пояснение к коду:
Скетч начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR драйвера A4988. Здесь также определяем stepsPerRevolution – количество шагов на оборот. Установите данное значение в соответствии со спецификациями шагового двигателя 200 (поскольку NEMA 17 делает 200 шагов за оборот).
const int dirPin = 2; const int stepPin = 3; const int stepsPerRevolution = 200;
В разделе настройки кода setup(), все контакты управления двигателем объявлены как цифровой выход ( OUTPUT ).
pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);
В основном цикле loop() будем медленно вращать двигатель по часовой стрелке, а затем быстро вращать его против часовой стрелки, с интервалом в секунду.
Управление направлением вращения.
Для управления направлением вращения двигателя мы устанавливаем контакт DIR на высокий уровень HIGH, или низкий LOW. При значении HIGH — вращает двигатель по часовой стрелке, а LOW — против часовой стрелки.
digitalWrite(dirPin, HIGH);
Управление скоростью шагового двигателя.
Скорость двигателя определяется частотой импульсов, которые мы посылаем на вывод STEP . Чем чаше импульсы, тем быстрее работает двигатель. Импульсы — это не что иное, как подтягивание выхода к высокому уровню HIGH , некоторое ожидание, затем подтягивание его к низкому уровню LOW и снова ожидание. Изменяя задержку между двумя импульсами, вы изменяете частоту импульсов и следовательно, скорость вращения двигателя.
for(int x = 0; x
Код для Arduino управления драйвером A4988 (DRV8825)с использованием библиотеки AccelStepper.
Управление шаговым двигателем без библиотеки идеально подходит для простых проектов на Arduino с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, вам понадобится библиотека. Итак, для нашего следующего примера будем использовать библиотеку шаговых двигателей под названием AccelStepper library.
AccelStepper library поддерживает.
Ускорение и замедление. Несколько одновременных шаговых двигателей с независимыми одновременными шагами на каждом шаговом двигателе. Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.
Установка библиотеки AccelStepper.
Чтобы установить библиотеку, перейдите в «Скетч» -> «Подключить библиотеку» -> «Управление» библиотеками. Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте свой поиск, набрав «Accelstepper». Щелкните первую запись и выберите «Установка».

Код Arduino с использованием библиотеки AccelStepper.
Вот простой пример, который ускоряет шаговый двигатель в одном направлении, а затем замедляется до полной остановки. Как только двигатель делает один оборот, меняет направление вращения. Данный цикл повторяется снова и снова.
// Подключаем библиотеку AccelStepper #include // Устанавливаем выводы const int dirPin = 2; const int stepPin = 3; int i = 0; // Определение тип интерфейса двигателя #define motorInterfaceType 1 // Создаем экземпляр AccelStepper myStepper(motorInterfaceType, stepPin, dirPin); void setup() < // Устанавливаем максимальную скорость, коэффициент ускорения, // начальную скорость и целевую позицию myStepper.setMaxSpeed(1000); myStepper.setAcceleration(50); myStepper.setSpeed(200); myStepper.moveTo(100); >void loop() < // Изменение направления вращения, когда двигатель достигнет заданного положения if (myStepper.distanceToGo() == 0) < myStepper.moveTo(-myStepper.currentPosition()); >// Передвинуть на 1 шаг myStepper.run(); >
Пояснение к коду:
Подключаем библиотеку AccelStepper.
#include
Дальше определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Мы также устанавливаем motorInterfaceType на 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).
const int dirPin = 2; const int stepPin = 3; int i = 0; // Определение тип интерфейса двигателя #define motorInterfaceType 1
Затем мы создаем экземпляр библиотеки под названием myStepper .
// Создаем экземпляр AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
В функции настройки мы сначала устанавливаем максимальную скорость двигателя равной тысяче. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя. Дальше устанавливаем обычную скорость 200 и количество шагов, которое мы собираемся переместить, например, 200 (поскольку NEMA 17 делает 200 шагов за оборот).
void setup()
В основном цикле loop() используем оператор if , чтобы проверить, как далеко двигателю нужно проехать (путем чтения свойства distanceToGo ), пока он не достигнет целевой позиции (установленной moveTo ). Как только distanceToGo достигнет нуля, поменяем направление вращения двигателя в противоположном направлении, изменив значение moveTo на отрицательное по отношению к его текущему значению. Теперь вы заметите, что в конце цикла мы вызвали функцию run () . Это самая важная функция, потому что шаговый двигатель не будет работать, пока эта функция не будет выполнена.
void loop()
Это небольшой пример использования библиотеки AccelStepper. В следующем уроке подробнее рассмотрим данную библиотеку и сделаем пару классных примеров использования шаговых двигателей в Arduino проектах.

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
Понравился Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!




