Симулятор шагового двигателя 28BYJ-48: проверка скетча без мотора
28BYJ-48 — самый дешёвый шаговик в обучении: 200-300 рублей за моторчик с платой ULN2003. Дешевизна оборачивается специфической геометрией: редуктор 1/64, полный оборот ротора это 4096 шагов в полушаговом режиме, и скетч из интернета под Nema17 с 200 шагами на оборот крутит этот мотор на 0,09°/шаг. На живом моторе это видно за минуту — ротор ползёт, а не крутится. В браузере стрелку на карточке шаговика видно так же, но момент и пропуски шагов покажет только железо.
Компонент «Шаговый 28BYJ-48 + ULN2003» ставится кликом из палитры «Макетка» в симуляторе: четыре пина In1-In4, скетч со Stepper.h исполняется по-настоящему, стрелка повторяет обороты. Лендинг — разбор API, фаз, полушага/полного шага, рабочего скетча и честной границы модели. Ниже — проба фаз, таблица режимов и то, что остаётся за железом.
С чего начать: что у мотора внутри
28BYJ-48 — униполярный шаговик с редуктором: пять проводов (общий плюс + четыре фазы In1-In4), внутри планетарная передача 1/64, на выходном валу 4096 шагов в полушаге или 2048 в полном. Плата ULN2003 — четыре транзисторных ключа, на пины ардуины подаёте 4 бита фазы. Библиотека Stepper.h крутит в полном шаге, своя функция — в полушаге, и разница в два раза по числу шагов на оборот.
- Пять проводов: красный (+5V общий) + In1-In4 (оранжевый, жёлтый, розовый, синий по даташиту) — на D8-D11.
- Плата ULN2003: четыре ключа с открытым коллектором, ток до 500 мА на канал — ровно под этот мотор.
- Редукция 1/64: ротор внутри делает 64 оборота на один оборот выходного вала; шаг ротора 5,625° = 64 шага на оборот.
- Полный шаг: 64 × 64 = 4096 шагов на оборот вала; полушаг — вдвое больше импульсов, но угол вдвое мельче.
- Скетч из интернета под 200 шагов: на этом моторе даст 20 оборотов вала, а не один — сверяйте шаги.
Скетч-проба: вращение через Stepper.h
#include <Stepper.h> const int SHAGOV_NA_OBOROT = 4096; // полушаг: 64 * 64Stepper motor(SHAGOV_NA_OBOROT, 8, 9, 10, 11); void setup() { motor.setSpeed(15); // 15 оборотов в минуту Serial.begin(9600); Serial.println("Start");} void loop() { motor.step(4096); // один оборот по часовой Serial.println("CW"); delay(500); motor.step(-4096); // один оборот против часовой Serial.println("CCW"); delay(500);}Скетч вставьте в основной симулятор и добавьте из палитры «Макетка» компонент «Шаговый 28BYJ-48 + ULN2003» — он ставится кликом на четыре пина D8-D11. Рантайм исполняет Stepper.h по-настоящему: стрелка на карточке повторяет обороты, монитор порта печатает «CW/CCW». В браузере проверяете фазы и направление, момент и ток — на живом моторе. Полный разбор библиотеки, фаз и редуктора ведёт урок про 28BYJ-48 — там же схема пяти проводов и таблица фаз. А подключение к Arduino по шагам — с честной арифметикой шагов на оборот, таблицей фаз полушага и граблями питания — разобрано в соседнем обзоре 28BYJ-48 и ULN2003.
Полушаг против полного: таблица фаз
| Шаг | In1 (D8) | In2 (D9) | In3 (D10) | In4 (D11) |
|---|---|---|---|---|
| 1 (полный) | 1 | 0 | 1 | 0 |
| 2 (полный) | 0 | 1 | 1 | 0 |
| 3 (полный) | 0 | 1 | 0 | 1 |
| 4 (полный) | 1 | 0 | 0 | 1 |
| 1 (полушаг) | 1 | 0 | 0 | 0 |
| 2 (полушаг) | 1 | 0 | 1 | 0 |
| 3 (полушаг) | 0 | 0 | 1 | 0 |
Полный шаг — две катушки активны одновременно: больше момент, грубее разрешение. Полушаг — между полными фазами вставлены «одиночные» катушки: момент падает на 30%, но шаг вдвое мельче, и вращение плавнее. Свою таблицу фаз можно прогнать в симуляторе через digitalWrite в Serial — увидите 4-битный код, который управляет ULN2003. Полная таблица и нюансы смещения фазы — в уроке про фазы и принцип работы шаговика.
Честная граница: модель против живого мотора
| Проверка | Симулятор | Только железо |
|---|---|---|
| Логика фаз и направление | стрелка повторяет обороты | видно на валу |
| Stepper.h: setSpeed, step | исполняется, стрелка крутится | крутит вал с редуктором |
| Свой полушаг через digitalWrite | логически работает | крутит вдвое плавнее |
| Ток 250 мА на фазу и нагрев | нет: модель без физики | да — ULN2003 греется при долгой работе |
| Пропуск шагов при перегрузке | нет: модель идеальная | да — момент 7 Н·см, вал встаёт |
| Шаг 5,625° и редукция 1/64 | через 4096 в коде | то же — формула 64 × 64 = 4096 |
Браузер исполняет скетч со Stepper.h по-настоящему: конструктор, setSpeed и step меняют позицию, стрелка карточки повторяет обороты. Чего модель не показывает — ток фаз (~250 мА), нагрев ULN2003 и пропуски шагов под нагрузкой: это физика железа. Поэтому в основном симуляторе вы проверяете фазы и направление, а момент, ток и пропуски — на живом моторе с ULN2003. Соседний интерактивный стенд — карточка шаговика с ручной прокруткой без кода; полный разбор 28BYJ-48 против Nema17 — в уроке про выбор между моторами.
Грабли 28BYJ-48
- Число шагов 200 вместо 4096: скетч под Nema17 крутит этот мотор на 20 оборотов, а не на один — меняйте SHAGOV_NA_OBOROT на 4096 (полушаг) или 2048 (полный).
- Питание от 5V ардуины: ток до 250 мА на фазу — USB-порт вытягивает, но при долгой работе стабилизатор на плате перегревается. Ставьте отдельный 5V-блок.
- Пины не на D8-D11: в примерах Stepper.h часто 8,9,10,11 — для удобства. Любые четыре цифровых, но сверяйте с проводами ULN2003.
- Перепутанные In1-In4: вал вибрирует, но не крутится. Сверяйте порядок проводов по цветам: оранжевый-In1, жёлтый-In2, розовый-In3, синий-In4.
- Пропуск шагов под нагрузкой: момент 7 Н·см — маленький. При нагрузке 10 Н·см вал встаёт, а скетч «крутит» в Serial — нужен Nema17.