Драйвер A4988 и Arduino: подключение NEMA 17, настройка тока, микрошаг и скетч
A4988 — драйвер биполярного шагового двигателя размером с почтовую марку, тот самый, что стоит в 3D-принтерах. Arduino отдаёт ему всего два сигнала: STEP — сделай шаг, DIR — в какую сторону. Всё остальное — токи в обмотках, микрошаг, защита — драйвер делает сам.
Две вещи, без которых он не заработает или сгорит: настроить ток подстроечником под свой мотор и поставить конденсатор по питанию моторов. Обе описаны ниже, и обе делают до первого включения.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| STEP | Импульс — шаг. Минимальная длительность 1 мкс, на практике 2–5. |
| DIR | Направление вращения. |
| EN | Разрешение, активный ноль. Не подключён — драйвер работает. Единица выключает обмотки, мотор перестаёт держать. |
| MS1, MS2, MS3 | Микрошаг: все не подключены — полный шаг; все на 5 В — 1/16 шага. Есть встроенная подтяжка к земле. |
| RST, SLP | Сброс и сон, оба активный ноль. Соединяют между собой перемычкой — иначе драйвер спит. |
| VDD, GND | Питание логики 3–5,5 В от Arduino. |
| VMOT, GND | Питание моторов 8–35 В. Конденсатор 100 мкФ вплотную к этим выводам обязателен. |
| 1A, 1B, 2A, 2B | Две обмотки мотора. Пара 1A-1B — одна обмотка, 2A-2B — другая. |
Характеристики
- Напряжение моторов
- 8–35 В
- Ток на обмотку
- до 1 А без радиатора, до 2 А с обдувом
- Микрошаг
- 1, 1/2, 1/4, 1/8, 1/16
- Логика
- 3–5,5 В
- Защита
- от перегрева, КЗ, перегрузки по току
- Размер
- 20 × 15 мм
Настройка тока
Подстроечник на плате задаёт предельный ток обмотки. Мультиметром меряют напряжение между корпусом подстроечника и землёй: Vref. Для типичной платы с резисторами 0,1 Ом ток равен Vref, делённому на 0,8. Мотору на 1,2 А нужен Vref около 0,96 В; ставят чуть меньше, 0,8–0,9 В.
Меряют без мотора, но с питанием на VMOT и VDD. Ток выше номинала — мотор и драйвер греются; ниже — мотор пропускает шаги под нагрузкой. Обмотки подключают и отключают только при снятом питании: дёрнуть разъём под напряжением — верный способ убить драйвер.
Библиотека
не нужна для простого вращения— Импульсы можно давать digitalWrite. Для разгона, торможения и точного позиционирования — AccelStepper из менеджера библиотек.
Готовый скетч
// A4988: 200 шагов вперёд, пауза, 200 назад
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int STEPS_PER_REV = 200; // NEMA 17 с шагом 1,8°
void step(int count, bool forward, int microsDelay) {
digitalWrite(DIR_PIN, forward ? HIGH : LOW);
for (int i = 0; i < count; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(microsDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(microsDelay);
}
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
}
void loop() {
step(STEPS_PER_REV, true, 1500); // оборот по часовой
delay(1000);
step(STEPS_PER_REV, false, 1500); // оборот обратно
delay(1000);
}Скетч собирается arduino-cli под Arduino UNO
Пауза 1500 мкс — около 330 шагов в секунду. Стартовать сразу с малой паузы мотор не сможет: для быстрых движений нужен разгон, его делает AccelStepper.
Частые ошибки
Мотор гудит и дёргается, но не крутится
Одна из обмоток подключена не парой. Прозвоните: между двумя выводами одной обмотки сопротивление в единицы ом, между обмотками — обрыв. Пара на 1A-1B, другая на 2A-2B.
Не крутится вовсе, драйвер молчит
RST и SLP не соединены. Без перемычки между ними драйвер спит. Это самая частая причина на новой плате.
Пропускает шаги под нагрузкой
Ток настроен ниже номинала или скорость взята без разгона. Поднимите Vref и добавьте плавный старт.
Драйвер сгорел при подключении
Разъём мотора дёрнули под питанием или на VMOT нет конденсатора. Всплеск от обмотки убивает микросхему мгновенно. 100 мкФ на VMOT и никаких горячих переподключений.
Сильно греется мотор в покое
Так и должно быть: держащий ток идёт постоянно. Если греется до боли — ток завышен. Если мотор не должен держать положение, отключайте драйвер через EN.
Что понадобится
- Драйвер A4988 (или DRV8825)
- Шаговый двигатель NEMA 17
- Блок питания 12 В, 2 А
- Электролитический конденсатор 100 мкФ 25 В
- Arduino UNO
- Провода «папа-мама»