Адаптер драйвера шагового двигателя (Trema-модуль v2.0)
Trema-модуль Адаптер драйвера шагового двигателя входит в линейку Trema-модулей, что позволяет подключить его к Arduino через Trema Shield по одному 3-проводному и двум 1-проводным шлейфам (идёт в комплекте) без пайки, без дополнительных проводов и переходников, его можно подключать к цифровому выводу Arduino.
Адаптер драйвера шагового двигателя подключается к 3 любым цифровым выводам Arduino.
| Выводы адаптера | Значение | Выводы Arduino |
|---|---|---|
| E (Enable) | Разрешение чипу начать работу. Инверсный вывод (0 — разрешить, 1 — запретить); | Любой цифровой вывод |
| G (GND) | Земля | GND |
| V (VCC) | Питание логики | 3V3/5V |
| S (STEP) | Подача импульсного сигнала шаговому двигателю для поворота (1 импульс — 1 шаг) | Любой цифровой вывод |
| D (DIR) | Указание направления вращения шагового двигателя (0 или 1) | Любой цифровой вывод |
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ — 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO

Способ — 2 : Используя Trema Set Shield
Модуль можно подключить к любому из цифровых входов Trema Set Shield.

Способ — 3 : Используя проводной шлейф и Shield
Используя 5-проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Подключение шагового двигателя к адаптеру:
После установки драйвера мотора в адаптер подключите питание ШД и сам ШД согласно следующей схеме:

Настройка размера шага двигателя:

На плате имеется блок перемычек для регулировки размера шага двигателя.
Для каждого драйвера таблица шагов будет своя, в зависимости от модели драйвера.
Ниже приведены таблицы настройки размера шага для драйверов DRV8825 и A4988.
Драйвер A4988:
| Размер шага | MS-3 | MS-2 | MS-1 |
|---|---|---|---|
| Полный шаг | 0 | 0 | 0 |
| 1/2 шага | 0 | 0 | 1 |
| 1/4 шага | 0 | 1 | 0 |
| 1/8 шага | 0 | 1 | 1 |
| 1/16 шага | 1 | 1 | 1 |
Драйвер DRV8825:
| Размер шага | MS-3 | MS-2 | MS-1 |
|---|---|---|---|
| Полный шаг | 0 | 0 | 0 |
| 1/2 шага | 0 | 0 | 1 |
| 1/4 шага | 0 | 1 | 0 |
| 1/8 шага | 0 | 1 | 1 |
| 1/16 шага | 1 | 0 | 0 |
| 1/32 шага | 1 | 0 | 1 |
| 1/32 шага | 1 | 1 | 0 |
| 1/32 шага | 1 | 1 | 1 |
Питание:
Адаптер драйвера шагового двигателя имеет колодку для подключения внешнего питания (для шагового двигателя) согласно указанной полярности, а так же выводы G и V для питания логики, которые подключаются соответственно к выводам GND и 5V Arduino.
Примеры:
Управление вращением шагового двигателя с помощью потенциометра.
Для управления шаговым двигателем (ШД) понадобится драйвер мотора. В данном случае используется драйвер мотора A4988.
Устанавливаем его в адаптер, а после этого подключаем адаптер и потенциометр к Arduino.
Адаптер драйвера шагового двигателя:
- E — цифровой вывод 7;
- G — GND;
- V — 5V;
- S — цифровой вывод 6;
- D — цифровой вывод 10;
Потенциометр:
const int8_t Step = 6; // импульсы вращения двигателя const int8_t Dir = 10; // направление вращения двигателя const int8_t Enable = 7; // разрешение работы чипу драйвера ШД const int8_t Potenc = A0; // потенциометр int16_t move_delay; // временная задержка между шагами мотора int16_t val_potenc; // Переменная для хранения значения потенциометра void setup() < pinMode (Potenc, INPUT); // Настраиваем вывод Potenc на работу в режиме входа pinMode(Step, OUTPUT); // Настраиваем вывод Step на работу в режиме выхода pinMode(Dir, OUTPUT); // Настраиваем вывод Dir на работу в режиме выхода pinMode(Enable, OUTPUT); // Настраиваем вывод Enable на работу в режиме выхода digitalWrite(Enable, LOW); // Устанавливаем состояние на выходе равным 0 (LOW) >void loop() < val_potenc = analogRead(Potenc); // считываем значение потенциометра в переменную val_potenc if (val_potenc < 470 ) < // Если значение меньше заданного, то val_potenc = 470 - val_potenc; // определяем значение val_potenc digitalWrite(Dir, LOW); // Устанавливаем направление вращения (против часовой стрелки) >else if (val_potenc > 554) < // Если значение больше заданного, то val_potenc = val_potenc - 554; // определяем значение val_potenc digitalWrite(Dir, HIGH); // Устанавливаем направление вращения (по часовой стрелке) >else < val_potenc = 0; // Если значение не удовлетворяет ни одному условию, то обнуляем значение переменной val_potenc >if (val_potenc) < // Если значение val_potenc отлично от 0, то move_delay = map(val_potenc, 1, 470, 5000, 500); // переносим диапазон полученных значений с потенциометра в диапазон значений временной задержки между шагами двигателя digitalWrite(Step, HIGH); delayMicroseconds(move_delay); // Подаём сигнал на вывод Step в течении времени move_delay; digitalWrite(Step, LOW); delayMicroseconds(move_delay); // Снимаем сигнал с вывода Step и ждём время move_delay; >>
После загрузки скетча и подключения питания к двигателю, обратите внимание на потенциометр. При плавном повороте ручки потенциометра вправо двигатель будет плавно набирать скорость и вращаться по-часовой стрелке, а при плавном повороте ручки влево двигатель будет плавно набирать скорость и вращаться против часовой стрелки.
Управление вращением 2 шаговых двигателей с помощью джойстика.
Для управления шаговым двигателем (ШД) понадобится драйвер мотора. В данном случае используется драйвер мотора A4988.
Устанавливаем его в адаптер, а после этого подключаем адаптер и джойстик к Arduino:
Адаптер драйвера шагового двигателя:
- E — цифровой вывод 7;
- G — GND;
- V — 5V;
- S — цифровой вывод 6;
- D — цифровой вывод 10;
Джойстик:
- X — A2;
- K — не подключен;
- V — 5V;
- G — GND;
- Y — A1;
const int8_t Step1 = 6; // импульсы вращения двигателя оси У const int8_t Step2 = 11; // импульсы вращения двигателя оси Х const int8_t Dir1 = 10; // направление вращения двигателя оси У const int8_t Dir2 = 13; // направление вращения двигателя оси Х const int8_t Enable1 = 7; // разрешение работы чипу драйвера ШД оси У const int8_t Enable2 = 12; // разрешение работы чипу драйвера ШД оси Х const int8_t Potenc1 = A1; // потенциометр оси У const int8_t Potenc2 = A2; // потенциометр оси Х int16_t move_delay1; // временная задержка между шагами мотора оси У int16_t move_delay2; // временная задержка между шагами мотора оси Х int16_t val_potenc1; // Переменная для хранения значения потенциометра оси У int16_t val_potenc2; // Переменная для хранения значения потенциометра оси Х void setup() < pinMode (Potenc1, INPUT); // Настраиваем вывод Potenc1 на работу в режиме входа pinMode (Potenc2, INPUT); // Настраиваем вывод Potenc2 на работу в режиме входа pinMode(Step1, OUTPUT); // Настраиваем вывод Step1 на работу в режиме выхода pinMode(Step2, OUTPUT); // Настраиваем вывод Step2 на работу в режиме выхода pinMode(Dir1, OUTPUT); // Настраиваем вывод Dir1 на работу в режиме выхода pinMode(Dir2, OUTPUT); // Настраиваем вывод Dir2 на работу в режиме выхода pinMode(Enable1, OUTPUT); // Настраиваем вывод Enable1 на работу в режиме выхода pinMode(Enable2, OUTPUT); // Настраиваем вывод Enable2 на работу в режиме выхода digitalWrite(Enable1, LOW); // Устанавливаем состояние на выходе Enable1 равным 0 (LOW) digitalWrite(Enable2, LOW); // Устанавливаем состояние на выходе Enable2 равным 0 (LOW) >void loop() < val_potenc1 = analogRead(Potenc1); // считываем значение потенциометра оси У в переменную val_potenc1 if (val_potenc1 < 470 ) < // Если значение меньше заданного, то val_potenc1 = 470 - val_potenc1; // инвертируем значение val_potenc1, чтобы оно принимало значения от 0 до 469 digitalWrite(Dir1, LOW); // Устанавливаем направление вращения (против часовой стрелки) >else // if (val_potenc1 > 554) < // Если значение больше заданного, то val_potenc1 = val_potenc1 - 554; // инвертируем значение val_potenc1, чтобы оно принимало значения от 0 до 469 digitalWrite(Dir1, HIGH); // Устанавливаем направление вращения (по часовой стрелке) >else < // Если значение не удовлетворяет ни одному условию, то val_potenc1 = 0; // обнуляем значение переменной val_potenc1 >val_potenc2 = analogRead(Potenc2); // считываем значение потенциометра оси Х в переменную val_potenc2 if (val_potenc2 < 470 ) < // Если значение меньше заданного, то val_potenc2 = 470 - val_potenc2; // инвертируем значение val_potenc2, чтобы оно принимало значения от 0 до 469 digitalWrite(Dir2, LOW); // Устанавливаем направление вращения (против часовой стрелки) >else // if (val_potenc2 > 554) < // Если значение больше заданного, то val_potenc2 = val_potenc2 - 554; // инвертируем значение val_potenc2, чтобы оно принимало значения от 0 до 469 digitalWrite(Dir2, HIGH); // Устанавливаем направление вращения (по часовой стрелке) >else < // Если значение не удовлетворяет ни одному условию, то val_potenc2 = 0; // обнуляем значение переменной val_potenc2 >if (val_potenc1) < // Если значение val_potenc1 отлично от 0, то move_delay1 = map(val_potenc1, 1, 470, 5000, 500); // переносим диапазон полученных значений с потенциометра оси У в диапазон значений временной задержки между шагами двигателя digitalWrite(Step1, HIGH); delayMicroseconds(move_delay1); // Подаём сигнал на вывод Step1 в течении времени move_delay1; digitalWrite(Step1, LOW); delayMicroseconds(move_delay1); // Снимаем сигнал с вывода Step1 и ждём время move_delay1; >if (val_potenc2) < // Если значение val_potenc2 отлично от 0, то move_delay2 = map(val_potenc2, 1, 470, 5000, 1000); // переносим диапазон полученных значений с потенциометра оси Х в диапазон значений временной задержки между шагами двигателя digitalWrite(Step2, HIGH); delayMicroseconds(move_delay2); // Подаём сигнал на вывод Step2 в течении времени move_delay2; digitalWrite(Step2, LOW); delayMicroseconds(move_delay2); // Снимаем сигнал с вывода Step2 и ждём время move_delay2; >>
После загрузки скетча и подключения питания к двигателю, обратите внимание на джойстик. При повороте ручки джойстика вправо/вверх двигатели оси Х/У будет плавно набирать скорость и вращаться по-часовой стрелке, а при плавном повороте ручки влево/вниз двигатели будут плавно набирать скорость и вращаться против часовой стрелки.
Применение:
- Станки резки/гравировки/3D-печати;
Ссылки:
- Адаптер драйвера шагового двигателя;
- Драйвер шагового двигателя DRV8825;
- Драйвер шагового двигателя A4988;
Адаптер драйвера шагового двигателя 28BYJ-48 (Trema-модуль): руководство по использованию

Используйте адаптер драйвера шагового двигателя 28BYJ-48 для подключения шаговика 28BYJ-48 к контроллерам Arduino или Piranha без дополнительного колхоза из проводов. Наш модуль является соединяющим звеном при коммуникации шаговиков линейки 28BYJ-48 со штатными драйверами A4988 / DRV8825 и контроллерами форм-фактора Arduino или Piranha.
Теперь собрать робота, ЧПУ станок или 3Д-принтер можно без танца с бубном и клубком из проводов.
Общие сведения
Без внешней помощи контроллер вроде Arduino или Piranha не сможет провернуть шаговый двигатель 28BYJ-48 даже на градус. Для придачи сил управляющей плате нужен соответствующий драйвер моторов, например A4988 или DRV8825. А для того что бы собрать весь пазл из электроники в эстетичный девайс, вам просто необходим адаптер для шагового двигателя 28BYJ-48.

Адаптер драйвера шагового двигателя 28BYJ-48 — это плата из линейки Trema-модулей, которая позволяет подключить популярный в DIY-мире шаговик 28BYJ-48 к штатным драйверам моторов форм-фактора A4988, DRV8825 и других. А затем полученный сет можно подключить к контролерам в экосистеме Trema, например к Arduino Uno в связке с Trema Shield или к Piranha Set ESP32.

Подключение и настройка
Адаптер драйвера шагового двигателя 28BYJ-48 — это соединительное звено между мотором, драйвером и контроллером. Для старта выполните следующие действия:
- Подключите адаптер к контроллеру.
- Подсоедините шаговый мотор.
- Скоммутируйте питание.
- Установите плату драйвер.
Перед сборкой, убедитесь что джампер стоит в положении ОБЩ ПИТ ВЫКЛ . Зачем нужен джампер, расскажем позже.

Подключение контроллера
Как подключить адаптер к контроллеру смотрите в примерах работы.
Подключение мотора
Адаптер ШД 28BYJ-48 поддерживает две модели мотора:
- 28BYJ-48 5V с рабочим напряжением 5 вольт.
- 28BYJ-48 12V с рабочим напряжением 12 вольт.
Для подключения мотора 28BYJ-48 на плате расположен разъём JST XH-5, для коммуникации воткните ответную часть выходного шлейфа двигателя в разъём на плате.

Подключение питания
На плате расположено два контура питания: цифровой контур и силовой контур
Цифровой контур
Цифровой контур служит для питания цифровой логики драйвера управления. Цифровое питание берется с управляющей платы и поступает на драйвер через пин VCC от Trema-контактов.
Силовой контур
Силовой контур служит для питания обмоток мотора от силовой части драйвера. Для подключения силового питания используйте клеммник под винт Vmot . Диапазон входного напряжение должен соответствовать рабочему напряжению шагового двигателя, т.е. сколько приложили на силовой клеммник, столько и поступит на обмотки мотора.
Если тока нет хотя бы в одном контуре — драйвер работать не будет и соответственно мотор не сделает ни шага. На плате предусмотрена возможность обойтись единственным источником питания для всей сборки в зависимости от положения джампера ОБЩ ПИТ . Подробности про читайте в разделе про джампер общего питания.
При использовании мотора 28BYJ-48 5V понадобится источник питания на 5 вольт. Т.к. силовое напряжение будет приложено 5 вольт, то с этим мотором есть возможность объединения контуров питания. Простыми словами допустимо раздельное питание каждого контура и объединённое питания контуров.

При использовании мотора 28BYJ-48 12V понадобится источник питания на 12 вольт. Т.к. силовое напряжение будет приложено 12 вольт, то с этим мотором нет возможности объединения контуров питания. Простыми словами допустимо только раздельное питание каждого контура.

Подключение драйвера
Адаптер ШД 28BYJ-48 поддерживает драйвера:
- Драйвер шагового двигателя A4988
- Драйвер шагового двигателя DRV8825
Для подключения драйвера на плате предусмотрена пара контактных колодок PBS-8L, для коммуникации установите драйвер сверху на адаптер.

Пример работы с Arduino
Рассмотрим пример работы адаптера драйвера шагового двигателя 28BYJ-48 с Arduino. Для этого выполните следующие шаги:
- Подключите цифровую часть.
- Подключите силовую часть.
- Выполните программную настройку.
Подключение цифровой части
Что понадобится
- 1× Адаптер драйвера шагового двигателя 28BYJ-48 (Trema-модуль)
- 1× Arduino Uno
- 1× Кабель USB (A — B)
- 1× Соединительные провода «папа-мама»
Рекомендуем также обратить внимание на дополнительные платы расширения:
- Trema Shield поможет подключить модуль к Arduino с помощью шлейфов из комплекта.
- Trema Set Shield поможет подключить модуль к Arduino без проводов вовсе.
Схема устройства

Схема устройства с Trema Shield

Схема устройства с Trema Set Shield

Подключение силовой части
В силовую часть входит: подключение мотора, драйвера и питания. Всё это мы рассмотрели в пункте подключение и настройка.
Программная настройка
Тест драйв
Железо подключено, среда настроена, пора запускать мотор. Прошейте контроллер Arduino скетчем указанным ниже.
Исходный код
// GPIO пины, к которым подключен // адаптер драйвера шагового двигателя // Enable: программное включение // и отключение питания от двигателя constexpr uint8_t EN_PIN = 7; // Direction: управление направлением // вращение шагового мотора constexpr uint8_t DIR_PIN = 10; // Step: шаг двигателя constexpr uint8_t STEP_PIN = 6; // Выдержка для регулировки скорости вращения // Диапазон значений от 800 до бесконечности int delayTime = 1000; void setup() < // Настраиваем пины мотора на выход pinMode(EN_PIN, OUTPUT); pinMode(DIR_PIN, OUTPUT); pinMode(STEP_PIN, OUTPUT); // Подаём питания на обмотки двигателя digitalWrite(EN_PIN, LOW); >void loop() < // Задаём направления мотора по часовой стрелке digitalWrite(DIR_PIN, HIGH); // Делаем 5000 шагов в заданном направлении for (int i = 0; i < 5000; ++i) < digitalWrite(STEP_PIN, HIGH); delayMicroseconds(delayTime); digitalWrite(STEP_PIN, LOW); delayMicroseconds(delayTime); >// Задаём направления мотора против часовой стрелке digitalWrite(DIR_PIN, LOW); // Делаем 5000 шагов в заданном направлении for (int i = 0; i < 5000; ++i) < digitalWrite(STEP_PIN, HIGH); delayMicroseconds(delayTime); digitalWrite(STEP_PIN, LOW); delayMicroseconds(delayTime); >>
Результат работы
После прошивки устройства, вал мотора сделает 5000 шагов в одну сторону, затем 5000 шагов в другую сторону и так по кругу.
Пример работы с Piranha Set ESP32
Рассмотрим пример работы адаптера драйвера шагового двигателя 28BYJ-48 с Piranha Set ESP32. Для этого выполните следующие шаги:
- Подключите цифровую часть.
- Подключите силовую часть.
- Выполните программную настройку.
Подключение цифровой части
Что понадобится
- 1× Адаптер драйвера шагового двигателя 28BYJ-48 (Trema-модуль)
- 1× Piranha Set ESP32
- 1× Кабель Micro USB
Схема устройства

Подключение силовой части
В силовую часть входит: подключение мотора, драйвера и питания. Всё это мы рассмотрели в пункте подключение и настройка.
Программная настройка
Тест драйв
Железо подключено, среда настроена, пора запускать мотор. Прошейте контроллер Arduino скетчем указанным ниже.
Исходный код
// GPIO пины, к которым подключен // адаптер драйвера шагового двигателя // Enable: программное включение // и отключение питания от двигателя constexpr uint8_t EN_PIN = 7; // Direction: управление направлением // вращение шагового мотора constexpr uint8_t DIR_PIN = 10; // Step: шаг двигателя constexpr uint8_t STEP_PIN = 6; // Выдержка для регулировки скорости вращения // Диапазон значений от 800 до бесконечности int delayTime = 1000; void setup() < // Настраиваем пины мотора на выход pinMode(EN_PIN, OUTPUT); pinMode(DIR_PIN, OUTPUT); pinMode(STEP_PIN, OUTPUT); // Подаём питания на обмотки двигателя digitalWrite(EN_PIN, LOW); >void loop() < // Задаём направления мотора по часовой стрелке digitalWrite(DIR_PIN, HIGH); // Делаем 5000 шагов в заданном направлении for (int i = 0; i < 5000; ++i) < digitalWrite(STEP_PIN, HIGH); delayMicroseconds(delayTime); digitalWrite(STEP_PIN, LOW); delayMicroseconds(delayTime); >// Задаём направления мотора против часовой стрелке digitalWrite(DIR_PIN, LOW); // Делаем 5000 шагов в заданном направлении for (int i = 0; i < 5000; ++i) < digitalWrite(STEP_PIN, HIGH); delayMicroseconds(delayTime); digitalWrite(STEP_PIN, LOW); delayMicroseconds(delayTime); >>
Результат работы
После прошивки устройства, вал мотора сделает 5000 шагов в одну сторону, затем 5000 шагов в другую сторону и так по кругу.
Элементы платы

Разъём мотора
Для подключения мотора на плате расположен разъём JST XH-5, для коммуникации воткните ответную часть выходного шлейфа двигателя в разъём на плате. Адаптер ШД 28BYJ-48 поддерживает две модели мотора:
- 28BYJ-48 5V с рабочим напряжением 5 вольт.
- 28BYJ-48 12V с рабочим напряжением 12 вольт.
Колодки драйвера
Для подключения драйвера на плате предусмотрена пара контактных колодок PBS-8L, для коммуникации установите драйвер сверху на адаптер. Адаптер ШД 28BYJ-48 поддерживает драйвера:
- Драйвер шагового двигателя A4988
- Драйвер шагового двигателя DRV8825
Клеммник силового питания
Для подключения силового питания предусмотрен клеммник под винт Vmot .
| Контакт | Функция | Подключение |
|---|---|---|
| + | Плюсовой контакт силового питания мотора. | Подключите к плюсовому контакту внешнего источника питания. |
| − | Минусовой контакт силового питания. | Подключите к минусовому контакту внешнего источника питания. |
Диапазон входного напряжение должен соответствовать рабочему напряжению шагового двигателя, т.е. сколько приложили на силовой клеммник, столько и поступит на обмотки мотора.
Trema-контакты
Для подключения адаптера к контроллерам на плате предусмотрены пять Trema-контактов.
| Контакт | Имя | Функция | Подключение |
|---|---|---|---|
| E | Enable | Enable — программное включение и отключение питания от двигателя. При «высоком уровне» мотор удерживает текущее положение вала. При «низком уровне» питание от обмоток отключается и мотор вращается в свободном положении. | Подключите к пину ввода-вывода микроконтроллера. |
| G | GND | Земля | Подключите к земле микроконтроллера. |
| V | VCC | Питание | Подключите к питанию микроконтроллера. |
| S | Step | Step — шаг двигателя. При каждом переходе на пине с «низкого уровня» на «высокий», мотор делает шаг. | Подключите к пину ввода-вывода микроконтроллера. |
| D | Direction | Управление направлением вращение шагового мотора. При «низком уровне» двигатель вращается в одну сторону, а при «высоком» — в обратную. | Подключите к пину ввода-вывода микроконтроллера. |
Джампер общего питания
На плате расположено два контура питания: цифровой контур и силовой контур
Цифровой контур
Цифровой контур служит для питания цифровой логики драйвера управления. Цифровое питание берется с управляющей платы и поступает на драйвер через пин VCC от Trema-контактов.
Силовой контур
Силовой контур служит для питания обмоток мотора от силовой части драйвера. Для подключения силового питания используйте клеммник под винт Vmot . Диапазон входного напряжение должен соответствовать рабочему напряжению шагового двигателя, т.е. сколько приложили на силовой клеммник, столько и поступит на обмотки мотора.
- При использовании мотора 28BYJ-48 5V подключайте источник питания на 5 вольт. С этим мотором есть возможностью объединения контуров питания.
- При использовании мотора 28BYJ-48 12V подключайте источник питания на 12 вольт. С этим мотором нет возможности объединения контуров питания.
Если тока нет хотя бы в одном контуре — драйвер работать не будет и соответственно мотор не сделает ни шага. На плате предусмотрена возможность обойтись единственным источником питания для всей сборки в зависимости от положения джампера ОБЩ ПИТ .
ОБЩ ПИТ ВЫКЛ : питание с винтового клеммника Vmot электрически не связано с контактом VCC основного контроллера. В итоге режим раздельного питания подходит для обоих моторов: 28BYJ-48 5V и 28BYJ-48 12V.

ОБЩ ПИТ ВКЛ : питание с винтового клеммника Vmot электрически связано с контактом VCC основного контроллера. В этот режиме не подключайте к клеммнику источник питания более 5 вольт, иначе можете спалить управляющую плату. В итоге режим общего питания подходит только при использовании мотора 28BYJ-48 5V.

Габаритный чертёж

Характеристики
- Адаптер драйвера шагового двигателя 28BYJ-48 (Trema-модуль)
- Поддерживаемые драйвера: A4988, DRV8825
- Поддерживаемые моторы: 28BYJ-48 5V, 28BYJ-48 12V
- Напряжение логических уровней: 3,3–5 В
- Напряжение питания двигателя: 5 или 12 В
- Размеры платы: 30×30 мм
Ресурсы
- Адаптер драйвера шагового двигателя 28BYJ-48 (Trema-модуль)
- Поддерживаемые драйвера: A4988, DRV8825
- Поддерживаемые моторы: 28BYJ-48 5V, 28BYJ-48 12V
Сигналы управления драйвера ШД: PUL/DIR, STEP/DIR, CW/CCW. Управление шаговыми драйверами DM860H, DM556, TB6600. с Arduino.
ГЛАВНАЯ / КАтегории / Сигналы управления драйвера ШД: PUL/DIR, STEP/DIR, CW/CCW. Управление шаговыми драйверами DM860H, DM556, TB6600. с Arduino.
Общие сведения:
Шаговый двигатель это бесколлекторный двигатель, ротор которого вращается не плавно, а шагами (дискретно). Один оборот ротора (360°) состоит из определённого количества шагов. Количество полных шагов в одном обороте указывается в технической документации двигателя.
Например, ротор шагового двигателя 17HS1352-P4130, за один полный шаг, поворачивается на 1,8°. Значит для поворота ротора на 360° двигатель должен совершить 200 полных шагов.
Для совершения одного полного шага на обмотки двигателя поступает серия сигналов от драйвера (как в полношаговом «1», так и в микрошаговых режимах «2», «4», «8», «16»).

С принципом работы шаговых двигателей можно ознакомиться в разделе Wiki — ШД.
Микрошаг:
Большинство драйверов позволяют разделить полный шаг двигателя на несколько микрошагов. Выбор микрошага устанавливается согласно таблице в инструкции к драйверу. В таблице указывается количество микрошагов на полный шаг «Microstep» (1/2/4/8/16/32/. ) и/или количество тактов на полный оборот вала «Pulse/rev» (200/400/800/1600/3200/6400/. ).
Если для целого поворота ротора двигателя в режиме 1 микрошаг на полный шаг требуется 200 тактов, то в режиме 4 микрошага на полный шаг, потребуется уже 800 тактов.
Чем больше микрошагов в полном шаге, тем точнее и плавнее поворачивается ротор шагового двигателя, но для поддержания той же скорости, требуется увеличивать частоту следования тактовых импульсов.
Ограничение тока фазы:
Большинство драйверов позволяют ограничить ток фазы (ток протекающий через обмотки двигателя). Выбор тока фазы осуществляется согласно таблице в инструкции к драйверу. В таблице указывается действующий ток «Current» и/или пиковый ток «PK Current». Чем выше ток, тем выше отдаваемый момент (сила двигателя).
Слишком большой ток приведёт к перегреву двигателя и может вызвать его поломку, а слишком маленький может привести к пропуску шагов, или нестабильному вращению ротора.
У некоторых драйверов ограничение тока осуществляется поворотом потенциометра.
Ток удержания:
Ток удержания это постоянный ток проходящий через обмотки двигателя, удерживающий вал в неподвижном состоянии. Некоторые драйверы позволяют снизить ток удержания.
Снижение тока удержания приводит к снижению нагрева двигателя при его удержании.
Силовые выводы драйвера:
Силовые выводы используются для подачи напряжения питания шагового двигателя и подключения его обмоток.
- Входы «VCC», «GND» / «+V», «GND» / «AC+», «AC-» — предназначены для получения напряжения питания шагового двигателя.
- Выводы «A+» и «A-» — предназначены для подключения первой обмотки шагового двигателя.
- Выводы «B+» и «B-» — предназначены для подключения второй обмотки шагового двигателя.
Подключение обмоток двигателя к драйверу зависит от количества выводов у двигателя.

Драйверы DM860H, DM556, TB6600 позволяют работать только с биполярными двигателями. Двигатели с 4 выводами подключаются по схеме А. Двигатели с 6 выводами подключаются по схеме Б или В. Двигатели с 8 выводами подключаются по схеме Г или Д.
Запрещается подключать или отключать обмотки двигателя на включенном драйвере!
Сигналы управления STEP/DIR (PUL/DIR):

- Вход драйвера «STEP» (он же «PULSE») — предназначен для получения тактовых импульсов. За один импульс ротор двигателя поворачивается на один микрошаг. Вход может работать по фронту или спаду импульса. Чем выше частота импульсов, тем выше скорость вращения ротора.
- Вход драйвера «DIR» — предназначен для выбора направления вращения двигателя («0» — в одну сторону, «1» — в другую сторону). Смена состояния вывода «DIR» должна осуществляться при отсутствии импульсов на выводе «STEP».
- Вход драйвера «ENABLE» — разрешает работу двигателя. У большинства драйверов данный вход является инверсным, работа двигателя разрешена при отсутствии напряжения на входе. Некоторые драйверы позволяют вообще не подключать этот вход. Если работа двигателя запрещена, то его обмотки электрически отключаются и вал двигателя не удерживается.
- Двигатель отключён если на входе «ENABLE» есть напряжение.
Сигналы на входах «STEP» и «DIR» игнорируются драйвером. Вал двигателя освобождён. - Вал поворачивается на один микрошаг с каждым импульсом на входе «STEP», при условии что на входе «ENABLE» нет напряжения.
Направление поворота вала зависит от состояния на входе «DIR». - Вал двигателя удерживается в неподвижном состоянии если на входе «ENABLE» нет напряжения и на вход «STEP» не подаются импульсы.
- t1: После снятия напряжения со входа «ENABLE» должно пройти не менее 5мкс до изменения уровня на входе «STEP» или «DIR».
- t2: После изменения состояния на входе «DIR» должно пройти не менее 5мкс до подачи импульса на вход «STEP».
- t3, t4: Длительность импульса или паузы на входе «STEP» не должна быть меньше 2,5мкс.
- t5: Автоматическое снижение тока удержания происходит через 1-2 сек после подачи последнего импульса на вход «STEP». Время зависит от типа драйвера.
Сигналы управления CW/CCW:
(Данные сигналы не поддерживаются драйверами DM860H, DM556, TB6600)

- Вход драйвера «CW» — предназначен для получения тактовых импульсов. За один импульс ротор двигателя поворачивается на один микрошаг. Вход может работать по фронту или спаду импульса. Чем выше частота импульсов, тем выше скорость вращения ротора.
- Вход драйвера «CCW» — выполняет те же действия что и вход «CW», но ротор двигателя поворачивается в другую сторону.
- Вход драйвера «ENABLE» — разрешает работу двигателя. У большинства драйверов данный вход является инверсным, работа двигателя разрешена при отсутствии напряжения на входе. Некоторые драйверы позволяют вообще не подключать этот вход. Если работа двигателя запрещена, то его обмотки электрически отключаются и вал двигателя не удерживается.
- Двигатель отключён если на входе «ENABLE» есть напряжение.
Сигналы на входах «CW» и «CCW» игнорируются драйвером. Вал двигателя освобождён. - Вал поворачивается на один микрошаг с каждым импульсом на входе «CW» или «CCW», при условии что на входе «ENABLE» нет напряжения.
Направление поворота вала зависит от того, на какой вход поступают импульсы. - Вал двигателя удерживается в неподвижном состоянии если на входе «ENABLE» нет напряжения и на входы «CW» и «CCW» не подаются импульсы.
- t1: После снятия напряжения со входа «ENABLE» должно пройти не менее 5мкс до подачи импульса на вход «CW» или «CCW».
- t2: После последнего импульса на одном входе должно пройти не менее 5мкс до подачи импульса на дрогой вход.
- t3, t4: Длительность импульса или паузы не должна быть меньше 2,5мкс.
- t5: Автоматическое снижение тока удержания происходит через 1-2 сек после подачи последнего импульса. Время зависит от типа драйвера.
Подключение управляющих выводов драйвера:
Для подключения управляющих выводов можно использовать одну их следующих схем:

Допускается подключать драйвер к контроллеру без использования сигнала ENABLE, тогда выводы ENA+ и ENA- остаются свободными (не подключёнными).
- При уровне логической «1» = 5В, все сопротивления R исключаются из схемы.
- При уровне логической «1» = 12В, все сопротивления R равны 1кОм.
- При уровне логической «1» = 24В, все сопротивления R равны 2кОм.
Подключение драйвера к Arduino:
Так как логические уровни Arduino UNO равны 5В, то при подключении управляющих выводов к драйверу, ограничивающие сопротивления R не нужны.
Для подключения драйвера к Arduino воспользуемся схемой где выводы PUL-, DIR-, ENA- подключены к GND контроллера (правая схема на картинке выше).
Если подключить драйвер к Arduino без использования сигнала ENABLE, оставив выводы ENA+ и ENA- не подключёнными, то приведённый ниже скетч не сможет освобождать вал. Вал двигателя будет удерживаться всё время, пока он не вращается.

Выводы драйвера ENA+, DIR+ и PUL+ можно подключить к любым выводам Arduino, их номера указываются в начале скетча. В примере это выводы 2, 3 и 4 соответственно.
Если для подключения драйвера воспользоваться схемой где выводы PUL+, DIR+, ENA+ подключены к 5V контроллера (левая схема на картинке выше), то в скетче нужно изменить логические уровни устанавливаемые функциями digitalWrite().
Управление двигателем при помощи Arduino:
Для работы скетча установите микрошаг 1/4, что соответствует 800 тактов на 1 оборот. Микрошаг устанавливается DIP-переключателями драйвера согласно таблице на его корпусе.
Скетч постоянно повторяет 4 действия:
- Поворот вала на 2 полных оборота в одну сторону.
- Остановка двигателя на 5 секунд с удержанием вала.
- Поворот вала на 2 полных оборота в другую сторону.
- Остановка двигателя на 5 секунд с освобождением вала.
const uint8_t pin_ENA = 2; // Вывод Arduino подключённый к входу драйвера ENA+. const uint8_t pin_DIR = 3; // Вывод Arduino подключённый к входу драйвера DIR+. const uint8_t pin_PUL = 4; // Вывод Arduino подключённый к входу драйвера PUL+. // Вывод GND Arduino соединён с входами драйвера ENA-, DIR-, PUL-. uint32_t f = 1000; // Определяем частоту следования микрошагов от 1 до 200'000 Гц. // Чем выше частота, тем выше скорость вращения вала. void setup() < // pinMode( pin_ENA, OUTPUT ); // Конфигурируем вывод Arduino как выход. pinMode( pin_DIR, OUTPUT ); // Конфигурируем вывод Arduino как выход. pinMode( pin_PUL, OUTPUT ); // Конфигурируем вывод Arduino как выход. >// // uint32_t t = 1000000/f/2; // Определяем длительность импульсов t3 и пауз t4 в мкс. // void loop() < // // Готовимся к движению вала: // digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя. delayMicroseconds(5); // Выполняем задержку t1 (см. график STEP/DIR). digitalWrite( pin_DIR, 0 ); // Выбираем направление вращения. delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR). // Поворачиваем вал на 2 оборота: // for(int i=0; i// // Останавливаем вал удерживая его: // Двигатель не вращается, если на вывод PUL не поступают импульсы. delay(5000); // Ждём 5 секунд. В это время двигатель остановлен, его вал удерживается. // Меняем направление движения вала: // digitalWrite( pin_DIR, 1 ); // Меняем логический уровень вывода DIR с 0 на 1. delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR). // Поворачиваем вал на 2 оборота: // for(int i=0; i // // Останавливаем вал без удержания: // digitalWrite( pin_ENA, 1 ); // Запрещаем работу двигателя, отключаем токи в обмотках. delay(5000); // Ждём 5 секунд. В это время двигатель отключен, его вал свободен. > //
- Движение вала на 2 оборота в одну сторону:
Перед началом движения вала мы разрешаем работу двигателя (установив 0 на выводе ENA) и выбираем направление движения (установив 0 или 1 на вывод DIR), далее выполняем движение подачей импульсов на вывод PUL в теле цикла for. Каждый импульс поворачивает ротор на угол одного микрошага. Микрошаг установлен DIP-переключателями в положение 800 тактов на полный оборот. Код цикла выполняется 1600 раз, значит вал повернётся на 2 оборота. - Остановка вала с удержанием:
Двигатель не вращается, если на вывод PUL не поступают импульсы. Значит обычная задержка на 5000 мс приведёт к остановке двигателя на 5 секунд. Так как работа двигателя была разрешена (на выводе ENA ранее был установлен 0), то через обмотки двигателя будет протекать ток удержания вала. - Движение вала на 2 оборота в другую сторону:
Направление движения вала определяется логическим уровнем на выводе DIR. Ранее на нём был установлен 0, значит теперь нужно установить 1. Далее подачей импульсов на вывод PUL мы заставляем вращаться вал, но теперь в другую сторону. - Остановка вала без удержания:
В предыдущий раз мы останавливали двигатель прекращая подавать импульсы на вывод PUL, но не запрещали работу двигателя, в результате через его обмотки протекал ток удержания вала. Теперь мы запретим работу двигателя установив на выводе ENA уровень логической 1, что приведёт к исчезновению токов в обмотках двигателя. Теперь в течении 5 секунд, двигатель будет не только остановлен, но и его вал можно свободно вращать руками.
Управление шаговым двигателем по прерываниям от 2 таймера Arduino:
const uint8_t pin_ENA = 2; // Вывод Arduino подключённый к входу драйвера ENA+. const uint8_t pin_DIR = 3; // Вывод Arduino подключённый к входу драйвера DIR+. const uint8_t pin_PUL = 4; // Вывод Arduino подключённый к входу драйвера PUL+. // Вывод GND Arduino соединён с входами драйвера ENA-, DIR-, PUL-. volatile uint32_t step=0; // Переменная хранит количество микрошагов, которые требуется совершить. // void setup() < // pinMode( pin_ENA, OUTPUT ); // Конфигурируем вывод Arduino как выход. pinMode( pin_DIR, OUTPUT ); // Конфигурируем вывод Arduino как выход. pinMode( pin_PUL, OUTPUT ); // Конфигурируем вывод Arduino как выход. funcSetTimer2( 1000 ); // Запускаем 2 таймер указав частоту следования микрошагов от 1 до 200'000 Гц. >// Чем выше частота, тем выше скорость вращения вала. // void loop() < // // Готовимся к движению вала: // digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя. delayMicroseconds(5); // Выполняем задержку t1 (см. график STEP/DIR). digitalWrite( pin_DIR, 0 ); // Выбираем направление вращения. delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR). // Поворачиваем вал на 2 оборота: // step=1600; // Указываем количество микрошагов, которые требуется совершить. while(step)// Ждём обнуления переменной. // Останавливаем вал удерживая его: // Двигатель не вращается, если на вывод PUL не поступают импульсы. delay(5000); // Ждём 5 секунд. В это время двигатель остановлен, его вал удерживается. // Меняем направление движения вала: // digitalWrite( pin_DIR, 1 ); // Меняем логический уровень вывода DIR с 0 на 1. delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR). // Поворачиваем вал на 2 оборота: // step=1600; // Указываем количество микрошагов, которые требуется совершить. while(step) // Ждём обнуления переменной. // Останавливаем вал без удержания: // digitalWrite( pin_ENA, 1 ); // Запрещаем работу двигателя, отключаем токи в обмотках. delay(5000); // Ждём 5 секунд. В это время двигатель отключен, его вал свободен. > // // // ОБРАБОТКА ПРЕРЫВАНИЙ 2 ТАЙМЕРА: // ISR(TIMER2_COMPA_vect) < // Функция вызывается по совпадению регистров TCNT2 и OCR2A. if( step )< // Если требуется выполнять микрошаги, то . bool p = digitalRead(pin_PUL); // Определяем текущее состояние на выводе PUL. digitalWrite(pin_PUL, !p); // Меняем состояние на выводе PUL. if( p )< step--; >// Уменьшаем количество требуемых микрошагов. > // > // // // ФУНКЦИЯ НАСТРОЙКИ 2 ТАЙМЕРА: // void funcSetTimer2(uint32_t f)< // Параметр: «f» - частота тактирования ШД от 1 до 200'000 Гц. if(f>200000) // Определяем значение предделителя: uint16_t i; uint8_t j; f*=2; if(f>(F_CPU/255/ 1))else if(f>(F_CPU/255/ 8))else if(f>(F_CPU/255/ 32))else if(f>(F_CPU/255/ 64))else if(f>(F_CPU/255/128))else if(f>(F_CPU/255/256))else // Устанавливаем регистры 2 таймера: TCCR2A = 0<
Как только переменной step присваивается число отличное от 0, то на драйвер начинают поступать импульсы. Значение step убывает с каждым поданным импульсом, пока не достигнет 0, что приведёт к остановке вала двигателя. Частота подачи импульсов в Гц указывается функцией funcSetTimer2().
В данном скетче мы ждём завершение вращения вала проверяя значение step в цикле while, вместо этого можно выполнять другие действия, например, опрашивать концевики, датчики, измерять пройденное расстояние и т.д.
Код работает на Arduino UNO, Pro Mini, Nano, Mega.
Ссылки
- Шаговые двигатели.
- Драйвер шагового двигателя, TB6600 (4.0А).
- Драйвер шагового двигателя DM556 (5.6A).
- Драйвер шагового двигателя DM860H (7.2A).
- Wiki — Шаговые двигатели.
Управление шаговым двигателем NEMA 17 с помощью Arduino и драйвера DRV8825
Шаговые двигатели – это разновидность двигателей постоянного тока, в которых перемещение ротора происходит небольшими дискретными шагами. В настоящее время шаговые двигатели находят очень широкое применение – начиная от камер наблюдения и заканчивая сложными роботами и механизмами.

Рассматриваемый в данной статье шаговый двигатель NEMA 17 имеет шаг величиной 1.8°, что означает что он совершает 200 шагов за один оборот 360°. Изменяя подаваемое на шаговый двигатель напряжение мы легко можем управлять скоростью его вращения. Шаговый двигатель может функционировать в различных режимах: полного шага, половины шага, 1/4 шага. Чтобы лучше понять материал данной статьи целесообразно посмотреть статью об управлении шаговым двигателем 28-BYJ48 с помощью Arduino и потенциометра. Однако шаговый двигатель 28-BYJ48 имеет значительно меньший крутящий момент, чем более мощные двигатели такие как, например, NEMA 14, NEMA17.
В данной статье мы рассмотрим управление шаговым двигателем NEMA 17 с помощью платы Arduino и драйвера двигателя DRV8825. Для управления вращением шагового двигателя мы будем использовать потенциометр. Также на нашем сайте вы можете посмотреть статью об управлении шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Шаговый двигатель NEMA 17 (купить на AliExpress).
- DRV8825 Stepper Driver Module (модуль драйвера шагового двигателя) (купить на AliExpress).
- Конденсатор 47 мкФ (купить на AliExpress).
- Потенциометр (купить на AliExpress).
Шаговый двигатель NEMA17
Принцип действия шагового двигателя Nema17 аналогичен работе других шаговых двигателей. Более подробно о принципах работы шаговых двигателей можно прочитать в статье про подключение шагового двигателя к микроконтроллеру AVR.

Шаговый двигатель NEMA 17 имеет плиту размером 1.7 x 1.7 дюйма и он имеет больший крутящий момент по сравнению с другими аналогичными шаговыми двигателями меньшего размера, например, NEMA 14. Данный двигатель имеет 6 подводящих проводов и работает от напряжения 12 В. Он может работать и от напряжения меньшей величины, однако при этом соответствующим образом будет уменьшаться и его крутящий момент.
При каждом шаге ось двигателя NEMA17 поворачивается на угол, равный 1.8 градуса. Схема расположения подводящих проводов двигателя NEMA17 представлена на следующем рисунке.

Как вы можете видеть из представленного рисунка, шаговый двигатель NEMA17 имеет униполярное расположение 6 проводов. Эти провода подсоединены к двум раздельным обмоткам. Черный, желтый и зеленый провода подключены к первой обмотке, а красный, белый, и синий провода – к другой обмотке. В обычном режиме центральные провода обмоток (черный и белый) оставляют неподключенными.
Число шагов за оборот для двигателя NEMA17
Число шагов за полный оборот (Steps per Revolution) для каждого определенного шагового двигателя рассчитывается с помощью угла, на который поворачивается шаговый двигатель за один шаг (step angle). Для двигателя NEMA17 этот шаг равен 1.8 градуса, соответственно, получаем:
Steps per Revolution = 360/ step angle
360/1.8 = 200 Steps Per Revolution
Технические характеристики двигателя Nema 17
- рабочее напряжение: 12V DC (12 В постоянного тока);
- угол за один шаг (Step Angle): 1.8 градуса;
- 200 шагов за один полный оборот;
- число фаз: 4;
- длина двигателя: 1.54 дюйма;
- диапазон рабочих температур: от -10 до 40 °C;
- удерживающий крутящий момент: 22.2 oz-in.
Также на нашем сайте вы можете посмотреть все проекты, в которых были использованы шаговые двигатели.
DRV8825 – модуль драйвера шагового двигателя Nema 17
Модуль драйвера шагового двигателя управляет работой шагового двигателя, подавая на него различные фазы питания в необходимые моменты времени.
DRV8825 представляет собой модуль драйвера двигателя, похожий на модуль A4988. Он используется для управления биполярными (двухполюсными) шаговыми двигателями. Модуль DRV8825 имеет встроенный транслятор (преобразователь), что позволяет ему управлять и скоростью, и направлением вращения шаговых двигателей таких как NEMA 17 с использованием только двух контактов — STEP и DIR. Контакт STEP используется для управления шагами, а контакт DIR – для управления направлением вращения.

Драйвер двигателя DRV8825 может управлять работой шагового двигателя в 6 различных режимах: полного шага, половины шага, четверти шага, 1/8 шага, 1/16 шага и 1/32 шага. Вы можете изменить разрешающую способность шага используя контакты для управления микро шагами (M0, M1 и M2). Устанавливая соответствующие логические уровни на этих контактах мы можем устанавливать одно из шести разрешений шага. Таблица значений данных контактов для установки различных разрешений шага выглядит следующим образом:

Технические характеристики модуль драйвера шагового двигателя DRV8825:
- максимальное рабочее напряжение: 45 V;
- минимальное рабочее напряжение: 8.2 V;
- максимальный ток на одну фазу: 2.5 A;
- размеры печатной платы модуля: 15 mm x 20 mm.
- шесть разрешений шага: полный шаг, ½ шага, ¼ шага, 1/8 шага, 1/16 шага и 1/32 шага;
- регулируемый с помощью потенциометра выходной ток;
- режим автоматического обнаружения уменьшения тока;
- схема автоматического отключения при перегреве;
- блокировка при пониженном напряжении;
- автоматическое отключение при превышении уровня тока.
Различия между драйверами двигателя DRV8825 и A4988
Оба этих драйвера двигателя предназначены для управления шаговым двигателем Nema 17, имеют похожую распиновку и области применения, но они отличаются в количестве микрошагов, рабочем напряжении и т.д. Ниже приведены следующие ключевые отличия этих модулей драйвера двигателя:
- модуль DRV8825 поддерживает 6 режимов шага, а модуль A4988 – только 5. Большее число этих режимов означает более равномерное и тихое функционирование шагового двигателя;
- минимальная длительность шага для DRV8825 составляет 1.9 мкс, а для A4988 – 1 мкс;
- без дополнительного охлаждения DRV8825 обеспечивает немного больший ток чем A4988;
- местоположение потенциометра, регулирующего лимит тока, в обоих модулях различно;
- DRV8825 может быть использован при более высоком напряжении питания;
- на контакте спящего режима (SLEEP pin) в DRV8825 по умолчанию не установлен режим с подтягивающим резистором как это сделано в A4988;
- вместо контакта напряжения питания DRV8825 имеет выходной контакт.
Схема проекта
Схема управления шаговым двигателем NEMA 17 с помощью Arduino и драйвера DRV8825 представлена на следующем рисунке.

Как видно из представленной схемы, шаговый двигатель запитывается от напряжения 12V, а модуль DRV8825 запитывается от платы Arduino. Контакты RST и SLEEP модуля подключены к контакту 5V платы Arduino чтобы модуль драйвера был готов к работе/доступен (enabled). Потенциометр подключен к контакту A0 платы Arduino – он используется для управления направлением вращения двигателя. Если вы будете поворачивать потенциометр по часовой стрелке, то и шаговый двигатель будет вращаться по часовой стрелке, а если вы будете поворачивать потенциометр против часовой стрелки, то и шаговый двигатель будет вращаться против часовой стрелки. Конденсатор 47 мкФ используется для защиты платы от выбросов напряжения. Контакты M0, M1 и M2 модуля драйвера двигателя оставлены в свободном состоянии, что означает что драйвер двигателя будет функционировать в режиме полного шага.
Внешний вид собранной конструкции проекта показан на следующем рисунке.

Таблица соединений платы Arduino, шагового двигателя Nema 17 и модуля драйвера двигателя DRV8825 выглядит следующим образом.
| Контакт DRV8825 | Соединение |
| VMOT | +ve Of Battery |
| GND | -ve of Battery |
| RST | 5V of Arduino |
| SLP | 5V of Arduino |
| GND | GND of Arduino |
| STP | Pin 3 of Arduino |
| DIR | Pin 2 of Arduino |
| B2, B1, A1, A2 | шаговый двигатель |
Соблюдайте полярность подключаемого источника питания.
Ограничение тока
Перед использованием двигателя установите с помощью мультиметра предел ограничения тока для модуля DRV8825 равный 350mA. Для этого необходимо измерить ток между двумя точками GND и потенциометром и отрегулировать его до нужного значения.

Объяснение программы для Arduino
Полный код программы и видео с демонстрацией работы схемы приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода.
Первым делом скачайте библиотеку для управления шаговым двигателем по следующей ссылке и добавьте ее в Arduino IDE. После этого подключите заголовочный файл этой библиотеки в программе и укажите число шагов для шагового двигателя NEMA 17 – оно равно 200.