Первый мой стенд с A4988 кормился от адаптера роутера: 12 вольт и честные 500 миллиампер в паспорте. На столе, без нагрузки, мотор даже ехал. На разгоне адаптер проседал, пять вольт логики проваливались следом, и плата перезагружалась прямо посреди хода — счётчик включений в EEPROM за вечер натикал двадцать шесть. Это была моя первая встреча с тем, что блок питания для шаговика — не «чтобы вилка подходила», а расчётная деталь с собственной арифметикой.
Арифметика трёхэтажная: фазный ток мотора, сумма осей и запас на бросок пуска. Внизу — конденсатор на входе драйвера, без которого живой драйвер выбивается за один щелчок обрыва. Наверху — выбор между 12 и 24 вольтами, который решает не «яркость», а скорость разгона. Ниже — счёт, скетч-детектор просадки и таблица, где я свожу оба напряжения.
Сколько ампер просит ось: считаем бюджет
Фазный ток берётся с шильдика: у NEMA 17 по паспорту от 0,4 до 1,7 А, ходовые рабочие лошадки — 1,2-1,7. Чоппер держит ток винтом: Vref и формула ток = 1,25 × Vref — первая цифра бюджета. В пиках ось берёт из шины близко к фазному току, поэтому сумму считаю честно: две оси по 1,2 А — это 2,4 А. Дальше запас: стартовый бросок и индуктивные выбросы умножают сумму на 1,4-1,5, и на столе уже стоит блок 12 В / 3,5 А, а не адаптер от роутера.
Почему не USB и не «крона»: у USB-порта пол-ампера — меньше одной оси втрое, а у щелочной кроны девять вольт на этикетке и десятки миллиампер на деле, с внутренним сопротивлением, которое садится за минуты. Чопперу, кстати, нужен ещё и запас по напряжению: он рубит ток, и шина обязана быть выше того, что просят обмотки. Вход и обвязка разобраны в уроке про подключение A4988; здесь — про то, чем её кормить.
#include <EEPROM.h> const int PIN_STEP = 4;const int PIN_DIR = 5;const int ADDR_BOOT = 0; // ячейка: сколько раз просыпались bool run = false;unsigned long lastStep = 0; void setup() { pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); digitalWrite(PIN_DIR, HIGH); Serial.begin(9600); int boots = EEPROM.read(ADDR_BOOT) + 1; // проснулись ещё раз EEPROM.update(ADDR_BOOT, boots); Serial.print("включение N"); Serial.println(boots); if (boots > 1) { Serial.println("плата перезагружалась сама: ищи просадку"); } Serial.println("g - погнать, s - стоп");} void loop() { if (Serial.available() > 0) { char c = Serial.read(); if (c == 'g') { run = true; Serial.println("едем"); } if (c == 's') { run = false; Serial.println("стоп"); } } if (run && micros() - lastStep >= 1500) { lastStep = micros(); digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); }}Логика детектора: просадка в пике не успевает за мультиметром, зато видна плате — перезагрузка посреди хода и растущий номер включения при неподвижной руке. EEPROM.update пишет ячейку только при изменении, счётчик ползёт лишь от реальных перезагрузок, сотню тысяч циклов вы его не выжжете. Лечится конденсатором: электролит 100-470 мкФ между VMOT и землёй вплотную к клеммам (у меня стоит 100), и ставится он раньше моторного провода — обрыв обмотки под током рождает выброс в десятки и сотни вольт, который выбивает драйвер без конденсатора. Физику фильтра мы разбирали в уроке про фильтр питания.
Теперь напряжение. Индуктивность обмоток сопротивляется росту тока: чем выше шина, тем быстрее ток набирается на каждом фронте STEP — и тем дольше мотор держит момент на подъёме частоты. Практически: на 12 В моя каретка выходила на максимум и срывалась на старте под грузом, на 24 В тот же разгон проходит без срыва. Потолки драйверов: A4988 — 8-35 В, DRV8825 тянет до 45; на шине 24 В электролит берите 50-вольтовый. Ток от напряжения не зависит — его держит винт, — зато нагрев связан с током покоя: про это отдельно.
| Параметр | 12 вольт | 24 вольта |
|---|---|---|
| Диапазон драйвера | A4988: 8-35 В | A4988, DRV8825: 8,2-45 В |
| Разгон | момент срывается раньше на подъёме частоты | ток набирается быстрее: тот же разгон без срыва |
| Типовой блок на две оси по 1,2 А | 12 В / 3,5 А | 24 В / 3,5 А — расчёт по току тот же |
| Электролит на входе | 35 В и выше | 50 В: запас к шине обязателен |
- 1. Две оси по 1,2 А на фазу. Какой минимум по току берём из блока питания 12 В?
- 2. Драйвер жил год и умер за секунду при перетыкании моторного провода. Что его убрало?
- 3. Почему на 24 В каретка разгоняется быстрее без срыва?
- Бюджет: сумма фазных токов осей × 1,4-1,5; две оси по 1,2 А — блок от 3,5 А
- USB (0,5 А) и крона (десятки мА) не кормят даже одну ось NEMA 17
- Электролит 100-470 мкФ вплотную к VMOT и раньше моторного провода: обрыв под током выбивает драйвер
- 24 В ускоряет набор тока в обмотке: тот же разгон проходит без срыва; конденсатор на шине 24 В — 50-вольтовый
Частые вопросы по теме урока
- Две оси по 1,2 А на фазу. Какой минимум по току берём из блока питания 12 В?
- Сумма фазных 2,4 А умножается на 1,4-1,5 на броски пуска — 3,4-3,6 А. USB и крона тут не игроки: у первого 0,5 А, у второй десятки миллиампер. Около 3,5 А: сумма фазных с запасом 1,4-1,5
- Драйвер жил год и умер за секунду при перетыкании моторного провода. Что его убрало?
- Индуктивность обмотки при обрыве под током поднимает напряжение до пробоя. Электролит 100-470 мкФ у клемм VMOT глотает выброс — ставится раньше моторного провода. Выброс обмотки: обрыв под током без электролита на шине даёт десятки вольт
- Почему на 24 В каретка разгоняется быстрее без срыва?
- Величину тока держит винт, а скорость его набора — напряжение шины: выше шина, быстрее ток на фронте STEP, дольше живёт момент на подъёме частоты. Ток быстрее набирается в обмотке против индуктивности на фронте шага