Поворачивается точными шагами — 200 на оборот у типичного NEMA17. Для 3D-принтеров, ЧПУ и поворотных механизмов.
Как работает
У биполярного шагового двигателя две обмотки — A и B. Подавая ток на них по очереди и в нужном направлении, вал поворачивают на один шаг: типично 1,8°, то есть 200 шагов на оборот. Скорость задаёт частота шагов, направление — порядок.
Библиотеки: Stepper (встроенная, простая) и AccelStepper — с разгоном и торможением, без которых двигатель на больших скоростях пропускает шаги.
const int PINS[4] = {14, 27, 26, 25};
// Полношаговая последовательность: две обмотки под током одновременно.
const int SEQ[4][4] = {
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
};
void step(int phase) {
for (int i = 0; i < 4; i++) digitalWrite(PINS[i], SEQ[phase][i]);
}
void setup() {
for (int i = 0; i < 4; i++) pinMode(PINS[i], OUTPUT);
}
void loop() {
for (int i = 0; i < 200; i++) { step(i % 4); delay(5); } // оборот вперёд
delay(500);
for (int i = 200; i > 0; i--) { step(i % 4); delay(5); } // и назад
delay(500);
}
В железе
В симуляторе обмотки подключены к выводам напрямую — так видна последовательность шагов. В железе так нельзя: обмотке нужны сотни миллиампер, вывод даёт двадцать. Ставят драйвер: A4988 или DRV8825 (контроллер даёт STEP и DIR) для NEMA17, ULN2003 для маленького 28BYJ-48.
Частые ошибки
Обмотки прямо на выводы контроллера — вывод выгорает, двигатель не крутится.
Перепутаны пары обмоток — двигатель дрожит на месте. Пару находят мультиметром: между выводами одной обмотки — несколько ом.
Скорость сразу большая — двигатель гудит и не трогается. Нужен разгон (AccelStepper).
Ток драйвера не выставлен — двигатель и драйвер перегреваются. Подстроечный резистор на A4988 задаёт ток под паспорт двигателя.