Шаговый двигатель 28BYJ-48 и Arduino: подключение через ULN2003, библиотека Stepper, скетч
28BYJ-48 с драйвером ULN2003 — самый дешёвый способ получить точный поворот: мотор с редуктором и плата с транзисторной сборкой продаются комплектом дешевле чашки кофе. Четыре сигнальных провода, питание 5 В, библиотека из коробки.
Момента у него мало и скорость низкая — примерно пятнадцать оборотов в минуту. Хватает на стрелку прибора, жалюзи, поворотный столик, кормушку. Для оси станка или робота-манипулятора нужен NEMA 17 с драйвером A4988.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| IN1–IN4 | Входы обмоток, любые четыре цифровых вывода. |
| + и − | Питание мотора 5 В. У версии мотора на 12 В — 12 В. |
| IN5–IN7 | Свободные каналы ULN2003, к мотору не разведены. |
| Разъём мотора | Пятиконтактный с ключом, вставляется одним способом. |
Характеристики
- Тип
- униполярный, 5 фаз выводов, редуктор 1:64
- Шагов на оборот вала
- 2048 в полношаговом режиме, 4096 в полушаговом
- Момент
- около 34 мН·м
- Скорость
- до 15 об/мин
- Питание
- 5 В, 240 мА
- Драйвер
- ULN2003, семь ключей Дарлингтона
Откуда 2048 шагов
У самого мотора 32 шага на оборот ротора, но между ротором и валом стоит редуктор примерно 1:64. Итого около 2048 шагов на оборот вала в полношаговом режиме — библиотека Stepper работает именно в нём. В полушаговом, который умеет AccelStepper, шагов вдвое больше и ход плавнее.
«Примерно» — потому что передаточное число редуктора не круглое: 63,68395. За сто оборотов набегает погрешность в половину оборота. Для стрелки неважно, для точного позиционирования — учитывать.
Библиотека
Stepper (встроенная)— Уже в Arduino IDE, ставить не надо. Для разгона и неблокирующей работы — AccelStepper с типом FULL4WIRE или HALF4WIRE.
Готовый скетч
#include <Stepper.h>
const int STEPS_PER_REV = 2048;
// Порядок выводов именно такой: IN1, IN3, IN2, IN4
Stepper motor(STEPS_PER_REV, 8, 10, 9, 11);
void setup() {
motor.setSpeed(12); // об/мин, больше 15 мотор не потянет
}
void loop() {
motor.step(STEPS_PER_REV); // оборот по часовой
delay(500);
motor.step(-STEPS_PER_REV / 2); // пол-оборота обратно
delay(500);
}Скетч собирается arduino-cli под Arduino UNO
Функция step блокирует плату на всё время движения: оборот на 12 об/мин — это пять секунд, в которые loop стоит.
Частые ошибки
Мотор дрожит на месте
Перепутан порядок выводов. В конструкторе Stepper пары идут накрест: 8, 10, 9, 11. Если подключили по порядку — исправьте в коде, не перепаивайте.
Крутится, но слабо и пропускает
Скорость выше 15 об/мин или питание с USB просело. Снизьте setSpeed и дайте отдельные 5 В.
Греется
Обмотки под током и в покое. Это норма для шагового, но если мотор ничего не держит — отключайте все четыре вывода после движения, digitalWrite LOW.
Плата перезагружается при старте
Ток мотора через стабилизатор UNO. Отдельное питание на + драйвера с общей землёй.
Не доезжает до точки после сотни оборотов
Редуктор 63,68, а не 64. Считайте шаги как 2037,9 на оборот или корректируйте по датчику положения.
Что понадобится
- Комплект 28BYJ-48 с платой ULN2003
- Arduino UNO
- Провода «мама-мама» или «папа-мама»
- Блок питания 5 В для длительной работы