Компонент · Драйвер
Драйвер шагового двигателя A4988
Недорогая плата регулирует ток обмотки шагового двигателя. Как задать предел мультиметром, избежать ловушки с резистором измерения тока и выбрать TMC.
Что это такое
Плата A4988 размером с почтовую марку располагается между микроконтроллером и биполярным шаговым двигателем. На него подаются два сигнала — импульс и направление, — а он выполняет всё остальное: подаёт напряжение на обмотки в правильной последовательности и, что особенно важно, регулирует поступающий в них ток.
Вторая задача важнее первой, и именно её пропускают. Обмотка шагового двигателя — катушка с малым сопротивлением, обычно от 2 до 4 ом. При подключении 24 V к 2.8 Ω по закону Ома получится 8.6 A, что уничтожит двигатель 1.7 A за секунды. A4988 предотвращает это, десятки тысяч раз в секунду включая и выключая питание и удерживая средний ток на заданном значении.
Таким образом, у платы есть только одна регулировка: подстроечный резистор, задающий предел тока. Правильная настройка делает драйвер невидимым; неправильная приводит либо к слабому двигателю, теряющему шаги, либо к перегреву.
Расположение выводов
| Вывод | Направление | Назначение |
|---|---|---|
| VMOT | Вход питания | Питание двигателей 8–35 V. Рядом нужен конденсатор 100 µF. |
| GND (сторона двигателей) | Питание | Обратный путь большого тока |
| VDD | Вход питания | Логическое питание 3–5.5 V, несколько mA |
| GND (логическая сторона) | Питание | Должен иметь общую землю с питанием двигателей |
| 1A, 1B | Выход | Одна обмотка двигателя |
| 2A, 2B | Выход | Другая обмотка двигателя |
| STEP | Вход | Один нарастающий фронт = один микрошаг |
| DIR | Вход | Высокий или низкий уровень задаёт направление |
| ENABLE | Вход | Активный низкий уровень. Соедините с землёй для подачи напряжения на обмотки. |
| RESET | Вход | Должен иметь высокий уровень. Соедините перемычкой с SLEEP. |
| SLEEP | Вход | Для работы драйвера должен иметь высокий уровень |
| MS1, MS2, MS3 | Вход | Разрешение микрошагов; внутренняя подтяжка вниз |
Большинство сообщений «ничего не работает» вызваны двумя выводами: оставленным в плавающем состоянии или высоким уровнем на ENABLE (поскольку активный низкий уровень требует подтяжки вниз) и оставленным в плавающем состоянии RESET (ему нужен высокий уровень, поэтому каждое руководство по подключению предлагает соединить RESET с SLEEP).
Подключение к Arduino
Arduino 5V ──── VDD
Arduino GND ──── GND (logic) ──┬── GND (motor)
└── PSU −
PSU + (12–24 V) ──── VMOT ──┬── 100 µF electrolytic ──┘
Pin 3 ──── STEP RESET ──┬── SLEEP
Pin 4 ──── DIR
Pin 5 ──── ENABLE MS1, MS2, MS3 ──── 5 V (1/16 stepping)
Motor coil A ──── 1A, 1B
Motor coil B ──── 2A, 2B
Обязательные условия:
- Электролитический конденсатор 100 µF между VMOT и GND, физически рядом с платой. Это самая частая причина гибели платы при включении.
- Общая земля между Arduino и источником двигателей. Без неё сигнал STEP не имеет опорного напряжения, и драйвер видит шум.
- Никогда не отключайте двигатель при включённом питании. Прерывание тока в под напряжением обмотке создаёт выброс, которому некуда деваться.
- Сопоставление обмоток важно; полярность внутри пары не важна. Если двигатель гудит без вращения, пары определены неверно. Если он вращается не туда, поменяйте два провода одной пары.
Задание предела тока — расчёт
Vref = I_phase × R_sense × 8
Измеряйте Vref между металлическим винтом подстроечного резистора и выводом земли при включённом VMOT и отключённом двигателе. Нацеливайтесь на 70–85% номинального тока двигателя: последняя пятая часть даёт очень мало момента, но много нагрева.
| Целевой ток | R_sense = 0.1 Ω (R100) |
R_sense = 0.05 Ω (R050) |
|---|---|---|
| 0.6 A | 0.48 V | 0.24 V |
| 1.0 A | 0.80 V | 0.40 V |
| 1.2 A | 0.96 V | 0.48 V |
| 1.5 A | 1.20 V | 0.60 V |
| 1.7 A | 1.36 V | 0.68 V |
Перед расчётом прочитайте обозначение двух чёрных SMD-резисторов у нижнего края. Установка 1.2 V на плате R050 потребует 3 A через двигатель с номиналом 1.7 A.
Используйте керамическую отвёртку. Металлическая, замыкающая подстроечный резистор на другую точку под напряжением, — обычный способ уничтожить драйвер.
Физически вы задаёте пиковый момент, который может создать двигатель, — T_peak в синусоидальном законе, определяющем всё поведение шагового двигателя. Слишком низкое значение увеличивает отставание ротора при той же нагрузке и ускоряет срыв; слишком высокое создаёт ненужный нагрев.
Микрошаги
| MS1 | MS2 | MS3 | Разрешение | Шагов/об |
|---|---|---|---|---|
| low | low | low | Полный шаг | 200 |
| high | low | low | Половина | 400 |
| low | high | low | Четверть | 800 |
| high | high | low | Восьмая | 1600 |
| high | high | high | Шестнадцатая | 3200 |
Обычный выбор — все три высоких уровня. Причина стоит проговорить: микрошаги не повышают точность машины под нагрузкой — ошибка от нагрузки не зависит от дробности деления шага. Они устраняют звон ротора на каждом шаге, что отличает кричащую машину от гудящей и поверхность с заметными ступенями от ровной.
Цена — частота импульсов. При делении 1/16 на оси 80 steps/mm для скорости 100 mm/s требуется 8 000 импульсов в секунду. Arduino Uno при программной генерации шагов теряет производительность примерно после 10 000–15 000 в секунду, что создаёт реальный предел для оси с шаговым винтом при 400 steps/mm.
Ток, нагрев и энергетический баланс
Собственное рассеивание A4988 невелико; проблема заключается в плотности тепловыделения, а не в общей мощности. Примерно 0.5 W на фазу при токе 1 A в корпусе почти без меди для отвода тепла. Практические пределы:
| Охлаждение | Безопасный непрерывный ток |
|---|---|
| Голый кристалл, неподвижный воздух | ~1.0 A |
| Наклеенный радиатор | ~1.2 A |
| Радиатор и движущийся воздух | ~1.5 A |
| Выше этого | Используйте DRV8825 или TMC2209 |
Тепловая защита не сообщает о себе. Драйвер останавливается, двигатель замирает посреди перемещения, драйвер остывает и запускается снова, и наблюдается ось, «случайно» теряющая часть положения. Если отказ чаще возникает в конце долгой работы или в тёплой комнате, считайте причину термической, пока не доказано иное.
Со стороны питания помните, что преобразователь работает как понижающий преобразователь: ток от источника 24 V значительно ниже тока фазы, поэтому рассчитывайте по мощности, а не складывайте токи фаз. Каждый двигатель с пределом 1.2 A и обмотками 2.8 Ω рассеивает около 8 W всякий раз, когда находится под напряжением, в том числе стоя на месте. См. энергетический баланс робота.
Минимальный рабочий код
const int STEP_PIN = 3, DIR_PIN = 4, EN_PIN = 5;
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // active low — energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
for (int i = 0; i < 3200; i++) { // one revolution at 1/16
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay is the speed
}
delay(1000);
}
Для проверки на стенде код хорош, для машины — неверен: частота шагов сразу достигает максимальной, и выше частоты захвата двигателя возникает гул без движения. Для любой машины, которая должна прийти в заданную точку, используйте AccelStepper или собственный профиль движения. Точное влияние команды без разгона на ротор можно увидеть в симуляторе шагового двигателя.
Какой ток действительно задавать
Номинальный ток на табличке двигателя предполагает условия охлаждения испытательного стенда: крепление к большой алюминиевой плите, неподвижный воздух и 25 °C. Ваша машина — печатный кронштейн в тёплой комнате.
Рабочее правило с обоснованием, а не только числом:
| Ситуация | Задайте предел | Почему |
|---|---|---|
| Большой запас момента, важна тишина | 60–70% от номинала | Момент падает линейно, нагрев — в квадрате |
| Обычная машина | 70–85% от номинала | Обычный ответ |
| Действительно ограничен момент | 90–100% от номинала | Только с радиатором и воздушным потоком |
| Выше номинала | Никогда | Вы покупаете не момент, а нагрев |
Причина экономии на нижнем конце содержится во втором столбце. Момент пропорционален току, а нагрев — току в квадрате. Снижение с 1.7 A до 1.2 A сокращает момент на 29% и устраняет половину нагрева:
1.7 A: P = 2 × 1.7² × 2.8 = 16.2 W per motor
1.2 A: P = 2 × 1.2² × 2.8 = 8.1 W per motor
Если расчёт выбора показывает использование 12% доступного момента, отказ от 29% ничего не менял.
Снятие напряжения и вывод, который игнорируют большинство конструкций
ENABLE существует потому, что шаговый двигатель потребляет полный номинальный ток даже при полной неподвижности. Это отличает его от всех остальных двигателей, с которыми сталкивается новичок, и имеет следующие последствия:
// Two energised NEMA 17s at 1.2 A dissipate ~16 W doing nothing at all.
digitalWrite(EN_PIN, HIGH); // active low, so HIGH = coils off
Когда применять:
- Между заданиями на осях X и Y. Графопостроителю или лазерному порталу незачем удерживать позицию в простое, а 16 W нагрева печатной рамы за час уже существенны.
- Никогда на оси Z, удерживающей массу, если механизм не самоблокирующийся. Шаговый винт T8 не допускает обратного вращения, поэтому снятие напряжения безопасно. Ременная ось Z опустится, как только ток будет отключён.
- Никогда посреди перемещения. Ротор продолжит вращаться, а поле остановится, и вы потеряете положение без возможности узнать, насколько. Сначала остановитесь, затем отключайте.
Неожиданная особенность: после снятия напряжения ротор останавливается в ближайшем устойчивом положении — магнитном положении покоя при нулевом токе, — возможно на целый шаг от места удержания. На ременной оси с 80 steps/mm это перемещение 0.2 mm без уведомления, поэтому либо повторяйте поиск исходного положения после каждого отключения, либо примите, что отключение в простое и точность менее десятой доли миллиметра несовместимы.
SLEEP действует глубже: он отключает также внутренний регулятор и снижает потребление с миллиампер до микроампер, но требует около 1 ms для пробуждения и сбрасывает внутреннее положение шага драйвера в исходный микрошаг. Именно последняя деталь — ловушка: выход из SLEEP может сдвинуть двигатель на целый шаг. Для почти любой хобби-машины нужен ENABLE, а SLEEP следует перемычкой поднять вверх и забыть.
Диагностика
| Симптом | Причина | Исправление |
|---|---|---|
| Вообще ничего не происходит | Высокий уровень ENABLE или плавающий RESET | Соединить ENABLE с землёй; соединить RESET с SLEEP перемычкой |
| Двигатель вибрирует, но не вращается | Пары обмоток перепутаны | Определить пары мультиметром в режиме сопротивления |
| Плата погибла при включении | Нет объёмного конденсатора на VMOT | Электролитический 100 µF рядом с выводами |
| Останавливается посреди движения, позже возобновляет | Тепловая защита | Снизить Vref; добавить радиатор и воздушный поток |
| Слабый, пропускает шаги при небольшой нагрузке | Слишком низкий Vref | Переизмерить; проверить обозначение сопротивления |
| Двигатель сильно перегревается | Слишком высокий Vref | Пересчитать — использовано правильное R_sense? |
| Пропускает шаги только на высокой скорости | Слишком низкое напряжение питания | Повысить VMOT; ток не поможет |
| Пропускает шаги только при ускорении | Слишком крутой разгон | Снизить ускорение или повысить Vref |
| Громко на каждом шаге | Полный шаг — выводы MS плавающие | Соединить MS1–MS3 с высоким уровнем |
| Работает на стенде, но не в раме | Концевой выключатель или провод STEP собирает шум | Прокладывать сигнальные провода в стороне от кабелей двигателей |
A4988 или альтернативы?
| Драйвер | Ток | Микрошаг | Шум | Когда выбирать |
|---|---|---|---|---|
| A4988 | 1 A / 1.5 A с охлаждением | 1/16 | Слышимый | Дешёвый, повсеместный, с хорошей документацией |
| DRV8825 | 1.5 A / 2.2 A с охлаждением | 1/32 | Слышимый | Нужен больший ток или более мелкий шаг |
| TMC2208 | ~1.2 A | 1/256 | Почти бесшумный | Важен шум |
| TMC2209 | ~1.7 A | 1/256 | Почти бесшумный | Важен шум и поиск исходного положения без датчиков |
| L298N | 2 A | — | — | Двигатели постоянного тока. Без регулирования тока. |
| TB6612FNG | 1.2 A | — | — | Двигатели постоянного тока, эффективно |
Строки L298N и TB6612FNG приведены потому, что оба технических описания упоминают шаговые двигатели и оба формально могут повернуть такой двигатель. Ни один не регулирует ток, поэтому получится лишь часть момента и много паразитного нагрева. Это драйверы двигателей постоянного тока; используйте их для приводных колёс.
Драйверы TMC стоят дополнительных денег, как только машина находится в помещении, где её слышно. Та же работа, более гладкая форма тока, а принтер с ними создаёт шум вентилятора вместо шума двигателя.
Где применяется
Этот драйвер питает обе оси конструкции графопостроителя, а его правильная настройка — контрольная точка дорожной карты точного движения. Полное руководство по подключению и настройке Vref подробно описывает процедуру.
Исследуйте граф
Используется в этих сборках
Проекты, учебные пути и симуляторы, в которых используется Драйвер шагового двигателя A4988.
Сравнение
Альтернативы
Вопросы
Драйвер шагового двигателя A4988: частые вопросы
Как рассчитать Vref для A4988?
Vref равен желаемому току фазы, умноженному на сопротивление резистора измерения тока и на восемь. Для целевого тока 1.2 A на плате с резисторами 0.1 ом получается 1.2 × 0.1 × 8 = 0.96 V; его измеряют между подвижным контактом подстроечного резистора и землёй при питании VMOT и отключённом двигателе. Важнее всего сопротивление резистора измерения тока: платы выпускаются с обозначением 0.1 ом как R100 или 0.05 ом как R050, и неверный выбор даёт ровно вдвое больший ток двигателя.
Почему мой A4988 сильно нагревается и отключается?
Почти всегда предел тока задан слишком высоко. Голый A4988 выдерживает примерно 1 A непрерывно; с радиатором и обдувом около 1.5 A. При превышении срабатывает тепловая защита: двигатель останавливается посреди движения, затем драйвер запускается после охлаждения, что выглядит как случайная потеря шагов. Переизмерьте Vref с учётом реально установленного сопротивления, установите радиатор и направьте на него вентилятор. Если действительно нужно больше 1.5 A, A4988 — неверная деталь.
Чем A4988 отличается от DRV8825?
DRV8825 выдерживает больший ток (около 1.5 A без охлаждения и 2.2 A с ним), обеспечивает деление 1/32 вместо 1/16 и допускает более высокое напряжение двигателя 45 V. Он совместим по выводам и вставляется в то же гнездо, но формула Vref другая: Vref равен току, умноженному на 0.5, а подстроечный резистор вращается в противоположную сторону. Замена без повторного чтения формулы — распространённый способ сжечь двигатель.
Действительно ли конденсатор на VMOT обязателен?
Да. Электролитический конденсатор 100 µF между VMOT и землёй, физически расположенный рядом с платой, обязателен, а не рекомендуется. Преобразователь потребляет ток резкими всплесками, и без рядом расположённой объёмной ёмкости индуктивность проводов источника превращает их в выбросы напряжения, превышающие предел микросхемы 35 V. Платы, умирающие сразу после включения, обычно погибают именно по этой причине.
Что будет, если оставить MS1, MS2 и MS3 неподключёнными?
У них есть внутренние подтяжки вниз, поэтому плавающее состояние выбирает полный шаг: 200 шагов на оборот и слышимый звон двигателя на каждом шаге. Соедините все три с высоким уровнем для шага 1/16, который используют большинство конструкций. Это не повышает точность под нагрузкой, но устраняет звон, делая машину тише и улучшая качество поверхности. Цена — в шестнадцать раз больше импульсов на миллиметр, которые должен формировать микроконтроллер.
Может ли A4988 управлять двигателем постоянного тока или сервоприводом?
Нет. Это биполярный драйвер шагового двигателя: он ожидает две обмотки и управляет ими определённой последовательностью тока. Двигателю постоянного тока (DC) нужен H-мост вроде L298N или TB6612FNG; хобби-сервоприводу достаточно сигнала PWM 50 Hz и драйвер вообще не нужен. Интерфейс STEP и DIR микросхемы A4988 не имеет смысла ни для одного из них.
Дополнительные материалы