Главная → Моторы и приводы

Драйверы шаговых двигателей A4988 и DRV8825: настройка тока подстроечником

21 сентября 2026 · Моторы и приводы

Контроллер не может питать шаговый двигатель напрямую: обмотке нужны амперы, а пин Arduino отдаёт 40 мА. Между ними ставят драйвер, и две самые ходовые микросхемы в модульном исполнении — A4988 от Allegro MicroSystems и DRV8825 от Texas Instruments. Носители Pololu и их клоны совместимы нога-в-ногу: код один и тот же, но пределы по напряжению и току разные, а настройка тока подстроечником — главный источник сгоревших плат. Разбираем оба по даташитам производителей.

Зачем драйверу подстроечник

Типичный мотор с током 1 А и сопротивлением обмотки 5 Ом допускает питание всего 5 В — подашь 12 В напрямую, обмотка сгорит. Драйвер работает иначе: это импульсный стабилизатор тока, он быстро переключает ключи и удерживает ток обмотки на заданном уровне. Поэтому питание может в разы превышать паспортное напряжение обмотки: ток нарастает быстрее, растут скорость и момент. Уровень выставляют подстроечником — он задаёт опорное напряжение Vref, из которого микросхема считает лимит тока.

Формулы у микросхем разные, потому что на платах стоят разные токоизмерительные резисторы:

Характеристики по даташитам

Параметр A4988 DRV8825
Производитель Allegro MicroSystems Texas Instruments
Питание мотора VMOT 8–35 В 8,2–45 В
Пиковый ток на обмотку ±2 А 2,5 А (24 В, 25 °C, радиатор)
Без радиатора (носитель Pololu) ~1 А на обмотку ~1,5 А на обмотку
Микрошаг до 1/16 до 1/32
Защита от перегрузки (OCP) порог от 2,1 А порог 3 А, антидребезг 3 мкс
Тепловое отключение 165 °C 160 °C
Защита от пониженного питания по VDD: 2,7–2,9 В по VM: 8,2 В
Минимальный импульс STEP 1 мкс 1,9 мкс
Пауза после выхода из Sleep 1 мс 1,7 мс (tWAKE)
Ток покоя в Sleep до 10 мкА 10–20 мкА
Логическое питание нужен VDD 3–5,5 В внешнее не нужно
Индикация аварии нет вывод nFAULT

Числа — из даташитов Allegro и TI SLVSA73F и страниц Pololu по носителям. На старых платах A4988 зелёные резисторы 0,050 Ом: Vref для 1 А — 400 мВ.

Настраиваем ток подстроечником

  1. Считаем Vref под паспортный ток мотора. Мотор на 1 А: A4988 — 540 мВ, DRV8825 — 500 мВ; на 1,5 А — 790 мВ и 750 мВ.
  2. Собираем схему без мотора, подаём VMOT и логику (у A4988 это VDD, у DRV8825 логика питается сама).
  3. Мультиметр в режиме милливольт: чёрный щуп на GND, красный — на via Vref, обведённый на нижней стороне платы.
  4. Крутим подстроечник до расчётного напряжения; после прогрева платы повтори замер — температура уводит показания.
  5. Выключаем питание и только теперь подключаем мотор.

Контроль без вольтметра: в полношаговом режиме без импульсов на STEP ток обмотки равен ~70% лимита у A4988 и 71% у DRV8825. Амперметр ставится в разрыв обмотки: драйвер с обмоткой работают как понижающий преобразователь, и ток блока питания заметно ниже тока катушки.

Подключение к Arduino Uno

Пин драйвера Куда подключить Примечание
VMOT плюс БП 12 В электролит 47–100 мкФ вплотную к плате
GND (рядом с VMOT) минус БП и GND Uno общий минус обязателен
VDD 5 В Uno только A4988; у DRV8825 не подключается
RST и SLP соединить друг с другом у DRV8825 — на 5 В
MS1, MS2, MS3 5 В A4988 — 1/16; DRV8825 — 1/32
STEP D3 импульсы шагов
DIR D2 направление
1A/1B/2A/2B обмотки мотора пары обмоток звонятся между собой
const int STEP_PIN = 3;
const int DIR_PIN  = 2;

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);        // направление вращения
}

void loop() {
  for (long i = 0; i < 3200; i++) {   // 3200 импульсов = оборот при 1/16 (200×16)
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(50);            // импульс: A4988 от 1 мкс, DRV8825 от 1,9 мкс
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(50);
  }
  delay(1000);
  digitalWrite(DIR_PIN, LOW);         // обратно
  for (long i = 0; i < 3200; i++) {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(50);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(50);
  }
  delay(1000);
}

С той же программой работает и DRV8825, но при MS1=MS2=MS3=1 это режим 1/32: мотор на 1,8° пройдёт за 3200 импульсов пол-оборота. Микрошаг включают, только если лимит тока реально достигается, иначе мотор пропускает микрошаги.

Подключение к ESP32

Оба драйвера читают 3,3-вольтовую логику ESP32 без согласования: у A4988 для этого VDD подключают к 3,3 В, у DRV8825 отдельной логики нет вообще. Схема та же, сигналы — GPIO 12 и 14.

#define STEP_PIN 12
#define DIR_PIN  14

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}

void loop() {
  for (long i = 0; i < 3200; i++) {   // оборот при 1/16 на A4988
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(30);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(30);
  }
  delay(2000);
}

Питание мотора отдельное: обмоточный ток через плату ESP32 тянуть нельзя.

Частые ошибки

  1. Подключать и отключать мотор под питанием. Pololu предупреждает прямо: коммутация обмоток под напряжением убивает драйвер. Переподключай только при снятом VMOT.
  2. Нет электролита у VMOT. Керамика на плате плюс длинные провода питания дают выбросы, превышающие предел микросхемы даже при питании 12 В. Минимум 47 мкФ — вплотную к плате.
  3. Vref «на глаз». Лимит выше паспортного тока — обмотки перегреваются и теряют момент; ниже — мотор пропускает шаги. Замер в полношаговом режиме покажет лишь 70% уставки.
  4. Меряют ток на блоке питания. Ток обмотки не равен току БП: амперметр — в разрыв обмотки, или настраивай через Vref.
  5. Драйвер «молчит». Висящий в воздухе RST у A4988 и низкий SLEEP у DRV8825 (подтяжка 1 МОм к земле) останавливают работу: соедини RST и SLP и подай HIGH.
  6. Ждут 1/32 от A4988. Выше 1/16 он не умеет. А одно и то же подключение MS-пинов даёт 1/16 на A4988 и 1/32 на DRV8825: при переносе кода оборот «длиннее» вдвое.

Оба драйвера требуют биполярный мотор с четырьмя выводами; остальные моторы и драйверы собраны в рубрике «Моторы и приводы». Если нужен не шаг, а мощность — коллекторные моторы ведёт L298N.

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Питание

Модуль часов реального времени DS3231: обзор и подключение

Зачем плате Arduino часы У Arduino и ESP32 есть таймеры, но нет часов: millis() честно считает миллисекунды с момента включения, а какой…

Читать обзор →
Контроллеры

Обзор: Arduino Uno, Nano и Pro Mini — чем отличаются и что взять под задачу

Три платы — один чип Uno, Nano и Pro Mini построены на одном ATmega328P: 32 КБ флеша, 2 КБ ОЗУ, 1 КБ…

Читать обзор →
Датчики

Тензодатчик и HX711: делаем электронные весы

Почему датчику не обойтись без усилителя Электронные весы — это пара: тензодатчик, превращающий деформацию металла в изменение сопротивления, и АЦП-усилитель, потому что…

Читать обзор →