Подключение шагового двигателя к Arduino
Биполярный шаговый двигатель
Шаговый двигатель к Arduino подключают через драйвер: вывод платы тянет единицы-десятки миллиампер, а обмотке нужны сотни. Для 28BYJ-48 берут плату с ULN2003, для NEMA 17 — A4988 или DRV8825.
Схема подключения шагового двигателя к Arduino
| Шаговый двигатель | Arduino Uno |
|---|---|
| A+ | D8 |
| A- | D9 |
| B+ | D10 |
| B- | D11 |
Схема из примера «Arduino Uno: шаговый двигатель без библиотеки».
Выводы Шаговый двигатель
| Вывод | Назначение |
|---|---|
| A+ | обмотка A, начало |
| A- | обмотка A, конец |
| B+ | обмотка B, начало |
| B- | обмотка B, конец |
Код для Arduino
// Шаговый двигатель: четыре фазы, полный шаг.
//
// Выводы платы не умеют питать обмотки. В симуляторе фазы идут
// на плату напрямую ради наглядности; в железе между ними стоит драйвер
// (ULN2003 для 28BYJ-48, L298N, A4988).
//
// Две обмотки под током одновременно дают больший момент, чем одна.
const int PINS[4] = {8, 9, 10, 11};
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);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Четыре фазы на цифровые выводы (в примере D8–D11) и последовательность из массива:
digitalWrite()по строке за шаг. - В комплекте Arduino есть библиотека
Stepper, но для понимания достаточно массива иdelay().
В железе
В симуляторе обмотки подключены к выводам напрямую — так видна последовательность шагов. В железе так нельзя: обмотке нужны сотни миллиампер, вывод даёт двадцать. Ставят драйвер: A4988 или DRV8825 (контроллер даёт STEP и DIR) для NEMA17, ULN2003 для маленького 28BYJ-48.
Частые ошибки при подключении к Arduino
- Обмотки двигателя прямо на выводы Arduino: порт перегревается, двигатель не вращается.
- Питание двигателя от 5V платы Uno при работе от USB: при старте двигателя плата перезагружается. Питайте двигатель отдельно, земля общая.
- Обмотки прямо на выводы контроллера — вывод выгорает, двигатель не крутится.
- Перепутаны пары обмоток — двигатель дрожит на месте. Пару находят мультиметром: между выводами одной обмотки — несколько ом.
- Скорость сразу большая — двигатель гудит и не трогается. Нужен разгон (AccelStepper).
- Ток драйвера не выставлен — двигатель и драйвер перегреваются. Подстроечный резистор на A4988 задаёт ток под паспорт двигателя.
Ещё по теме
Другие детали для Arduino
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595КнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D