Управление шаговым двигателем с Ардуины
Для реализации проекта нам необходимо установить библиотеки:
Сборка:
Питание для драйвера рекомендуется использовать от внешнего источника, в нашем случае мы брали питание от ардуины.
Так же на драйвере есть 4 управляющих пина, который нужно подключить соответственно к 8 Pin ,9 Pin,10 Pin,11 Pin Ардуины.
Скетч:
#include // изменить количество шагов для вашего мотора #define STEPS 4078 Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); void setup() < // установим скорость вращения 3 об/мин stepper.setSpeed(13); >void loop() < stepper.step(4000); // Делаем 4000 шагов в одну строну stepper.step(-4000);// Делаем 4000 шагов в другую строну >
Подключение шагового двигателя к Arduino Uno
Шаговые двигатели с каждым годом находят все большее применение в мире электроники. Начиная от обычной камеры наблюдения до сложных станков с ЧПУ и роботов шаговые двигатели используются в качестве исполнительных механизмов, поскольку они обеспечивают точное управление. В этом проекте мы рассмотрим один из наиболее распространенных шаговых двигателей 28BYJ-48 и его подключение к плате Arduino с помощью модуля ULN2003.

Общие принципы работы шаговых двигателей
Внешний вид шагового двигателя 28BYJ-48 представлен на следующем рисунке:

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.
Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.
Так почему же этот двигатель называется 28BYJ-48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.
Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).
Расчет шагов на оборот для шагового двигателя
Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать.
В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).
Справедлива следующая формула:
Количество шагов за оборот = 360 / угол шага.
В нашем случае 360/11.25 = 32 шага за оборот.
Зачем нужен драйвер мотора для управления шаговым двигателем
Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.
Работа схемы
Схема подключения шагового двигателя к плате Arduino представлена на следующем рисунке.

Мы использовали шаговый двигатель 28BYJ-48 и драйвер мотора ULN2003. Для подачи питания на 4 катушки шагового двигателя мы будем использовать контакты платы Arduino 8, 9, 10 и 11. Драйвер мотора запитывается от контакта 5V платы Arduino.
Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам и хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.
Разработка программы для платы Arduino
Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.
| Номер шага | Контакты, на которое подается питание | Катушки, на которое подается питание |
| Шаг 1 | 8 и 9 | A и B |
| Шаг 2 | 9 и 10 | B и C |
| Шаг 3 | 10 и 11 | C и D |
| Шаг 4 | 11 и 8 | D и A |
На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.
Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.
Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:
#define STEPS 32
Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).
Stepper stepper (STEPS, 8, 10, 9, 11);
Примечание : последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.
Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:
Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.
Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:
Количество шагов, которое должен сделать двигатель, определяется переменной “ val ”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.
Значение переменной “val” в нашей программе мы будем вводить из окна монитора последовательной связи.
Работа проекта
Когда вы сделаете все необходимые соединения в аппаратной части нашего проекта у вас должна получиться примерно следующая конструкция:

Теперь загрузите код программы в плату Arduino UNO и откройте окно монитора последовательной связи (serial monitor). Как мы уже указывали, мы должны сделать 2048 шагов для совершения одного полного оборота, то есть если мы в окне монитора последовательной связи введем 2048, то вал шагового двигателя совершит один полный оборот по часовой стрелке, а сам двигатель в это время сделает 2048 шагов. Для вращения против часовой стрелки просто вводите нужное число шагов со знаком “–“. То есть если вы введете -1024, то вал мотора совершит пол-оборота против часовой стрелки. Чтобы протестировать работу проекта вы можете вводить любые числа.
Исходный код программы
Код программы достаточно простой. Я надеюсь после успешной реализации данного проекта вы сможете управлять любыми шаговыми двигателями с помощью платы Arduino.
#include // заголовочный файл библиотеки для работы с шаговыми двигателями
// измените необходимое число шагов в зависимости от модели вашего шагового двигателя
#define STEPS 32
// создайте класс для шагового двигателя и запишите для него правильную последовательность контактов
Stepper stepper(STEPS, 8, 10, 9, 11);
int val = 0;
void setup() <
Serial.begin(9600);
stepper.setSpeed(200);
>
void loop() <
if (Serial.available()>0)
<
val = Serial.parseInt();
stepper.step(val);
Serial.println(val); //for debugging
>
>
Управление шаговым двигателем с помощью Arduino и потенциометра
Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.

В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.
Общие принципы работы шаговых двигателей
Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.
Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.
Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.
Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).
Расчет шагов на оборот для шагового двигателя
Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать.
В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).
Справедлива следующая формула:
Количество шагов за оборот = 360 / угол шага.
В нашем случае 360/11.25 = 32 шага за оборот.
Зачем нужен драйвер мотора для управления шаговым двигателем
Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.
Работа схемы
Схема устройства представлена на следующем рисунке.

Чтобы подавать питание на соответствующие катушки шагового двигателя мы будем использовать цифровые контакты 8, 9, 10 и 11 платы Arduino, к которым подключены соответствующие контакты драйвера двигателей ULN2003. Потенциометр, с помощью которого мы будем управлять вращением шагового двигателя, подключен к аналоговому контакту A0 платы Arduino.
Драйвер мотора запитывается от контакта 5V платы Arduino. Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.
Объяснение программы для платы Arduino
Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.
| Номер шага | Контакты, на которое подается питание | Катушки, на которое подается питание |
| Шаг 1 | 8 и 9 | A и B |
| Шаг 2 | 9 и 10 | B и C |
| Шаг 3 | 10 и 11 | C и D |
| Шаг 4 | 11 и 8 | D и A |
На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.
Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.
Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:
#define STEPS 32
Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).
Stepper stepper (STEPS, 8, 10, 9, 11);
Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.
Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:
Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.
Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:
Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.
Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:
А один шаг против часовой стрелки:
В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.
potVal = map(analogRead(A0),0,1024,0,500);
if (potVal>Pval)
stepper.step(5);
if (potVal
Pval = potVal;
Работа проекта
Когда вы сделаете все необходимые соединения в схеме данного проекта у вас должна получиться примерно следующая конструкция:

После этого загрузите программу в плату Arduino и откройте окно монитора последовательной связи (serial monitor). После этого вы можете вращать ручку потенциометра и наблюдать как в соответствии с ее поворотами шаговый двигатель будет вращаться по часовой и против часовой стрелки.
Исходный код программы
Код программы достаточно простой, я надеюсь у вас не вызовет никаких затруднений реализация данного проекта.
Управление шаговым двигателем и схема включения для Ардуино

Рассмотрите возможность управления шаговым двигателем с помощью стандартной библиотеки 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 ℃).
Шаговый двигатель – принцип работы
Шаговый двигатель — это двигатель, который перемещает свой вал в соответствии с шагами и направлением, указанными в программе микроконтроллера. Такие устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и других электронных устройствах. Большим преимуществом шаговых двигателей перед двигателями постоянного вращения является то, что они обеспечивают точное угловое позиционирование ротора. Кроме того, шаговые двигатели имеют возможность быстро запускаться, останавливаться, реверсировать.
Шаговый двигатель вращает ротор на заданный угол с соответствующим управляющим сигналом. Благодаря этому есть возможность проверить положение узлов механизмов и перейти в указанное место. Мотор работает следующим образом: в центральном валу расположен ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое действует на магниты и заставляет вал вращаться. Такие параметры, как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.
Основные типы шаговых двигателей:
- Двигатели с регулируемыми магнитами (используются редко);
- Двигатели с постоянными магнитами;
- Гибридные двигатели (сложнее в производстве, дороже, но наиболее распространенный тип шаговых двигателей).
Шаг 5: Что такое мост 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 В)
Шаг 2: Список деталей
Детали, необходимые для проекта шагового двигателя 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. В видеоролик я для наглядности вставил фрагмент, в котором двигатель крутится на пол-оборота по часовой стрелке, а на полный — против. Это в самом конце. Я изменил код для этого следующим образом:
В дверном мониторе микроконтроллер «сообщает» нам, в каком направлении вращается двигатель.
И напоследок предлагаю посмотреть видео, демонстрирующее, как работают все примеры кода в этой статье
Шаг 6: Схема соединения
Ниже представлена схема подключения нашего проекта шагового двигателя Arduino.
Для шагового двигателя Arduino 4 контакта H-моста должны быть подключены к 4 контактам двигателя. Затем 4 логических контакта подключаются к Arduino (8, 9, 10 и 11). Как показано на схеме выше, для питания двигателей можно подключить внешний источник питания. Чип может работать с внешним питанием от 4,5 В до 36 В (мы выбрали батарею 9 В).
Шаг 3: Присоединяем провода
Большинство шаговых двигателей имеют четыре провода, поэтому вам нужно разрезать четыре медных провода (обратите внимание, что цвет не связан ни с чем конкретным (обычно существует правило, что черный — это земля, но не сейчас). Разные цвета использовались только для этого. Эти контакты будут использоваться для проверки того, какая катушка в данный момент активна в двигателе. Для этого проекта Arduino шаговый двигатель был взят от старого принтера, поэтому пайка проводов была там. Самый простой вариант для этого проекта можно установить безопасное соединение (припой, штекер, зажим).
Шаг 4: Эскиз/скетч 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.





