Драйверы шаговых двигателей A4988 и DRV8825: настройка тока подстроечником
Контроллер не может питать шаговый двигатель напрямую: обмотке нужны амперы, а пин Arduino отдаёт 40 мА. Между ними ставят драйвер, и две самые ходовые микросхемы в модульном исполнении — A4988 от Allegro MicroSystems и DRV8825 от Texas Instruments. Носители Pololu и их клоны совместимы нога-в-ногу: код один и тот же, но пределы по напряжению и току разные, а настройка тока подстроечником — главный источник сгоревших плат. Разбираем оба по даташитам производителей.
Зачем драйверу подстроечник
Типичный мотор с током 1 А и сопротивлением обмотки 5 Ом допускает питание всего 5 В — подашь 12 В напрямую, обмотка сгорит. Драйвер работает иначе: это импульсный стабилизатор тока, он быстро переключает ключи и удерживает ток обмотки на заданном уровне. Поэтому питание может в разы превышать паспортное напряжение обмотки: ток нарастает быстрее, растут скорость и момент. Уровень выставляют подстроечником — он задаёт опорное напряжение Vref, из которого микросхема считает лимит тока.
Формулы у микросхем разные, потому что на платах стоят разные токоизмерительные резисторы:
- A4988: I = Vref / (8 × Rsense). На носителях Pololu с 2017 года стоят резисторы 0,068 Ом: I ≈ Vref × 1,84, для 1 А нужен Vref 540 мВ.
- DRV8825: I = Vref / (5 × Rsense). На носителях стоят 0,100 Ом, значит I = Vref × 2: для 1 А — Vref 0,5 В.
Характеристики по даташитам
| Параметр | 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 мВ.
Настраиваем ток подстроечником
- Считаем Vref под паспортный ток мотора. Мотор на 1 А: A4988 — 540 мВ, DRV8825 — 500 мВ; на 1,5 А — 790 мВ и 750 мВ.
- Собираем схему без мотора, подаём VMOT и логику (у A4988 это VDD, у DRV8825 логика питается сама).
- Мультиметр в режиме милливольт: чёрный щуп на GND, красный — на via Vref, обведённый на нижней стороне платы.
- Крутим подстроечник до расчётного напряжения; после прогрева платы повтори замер — температура уводит показания.
- Выключаем питание и только теперь подключаем мотор.
Контроль без вольтметра: в полношаговом режиме без импульсов на 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 тянуть нельзя.
Частые ошибки
- Подключать и отключать мотор под питанием. Pololu предупреждает прямо: коммутация обмоток под напряжением убивает драйвер. Переподключай только при снятом VMOT.
- Нет электролита у VMOT. Керамика на плате плюс длинные провода питания дают выбросы, превышающие предел микросхемы даже при питании 12 В. Минимум 47 мкФ — вплотную к плате.
- Vref «на глаз». Лимит выше паспортного тока — обмотки перегреваются и теряют момент; ниже — мотор пропускает шаги. Замер в полношаговом режиме покажет лишь 70% уставки.
- Меряют ток на блоке питания. Ток обмотки не равен току БП: амперметр — в разрыв обмотки, или настраивай через Vref.
- Драйвер «молчит». Висящий в воздухе RST у A4988 и низкий SLEEP у DRV8825 (подтяжка 1 МОм к земле) останавливают работу: соедини RST и SLP и подай HIGH.
- Ждут 1/32 от A4988. Выше 1/16 он не умеет. А одно и то же подключение MS-пинов даёт 1/16 на A4988 и 1/32 на DRV8825: при переносе кода оборот «длиннее» вдвое.
Оба драйвера требуют биполярный мотор с четырьмя выводами; остальные моторы и драйверы собраны в рубрике «Моторы и приводы». Если нужен не шаг, а мощность — коллекторные моторы ведёт L298N.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.