Подъёмный стол моего гравёра простоял включённым всю ночь: накануне я поднял его под лазер на двадцать миллиметров, выключил компьютер и ушёл. Утром от платы ULN2003 пахло горячим пластиком, корпус моторчика не давал ладони покоя, а стол всё это время просто стоял на высоте. Ни одного шага за восемь часов — и почти два ватта тепла непрерывно. Это главная странность шагового двигателя, о которую спотыкаются все, кто пришёл от моторчиков постоянного тока: ему не нужно двигаться, чтобы жрать ток. Он греется ровно тогда, когда ничего не делает.
Почему так. Шаговик не умеет «держать слабее»: обмотка запитана на всё напряжение, и ток в ней задаёт закон Ома, а не нагрузка на валу. У моторчика постоянного тока в простое ток падает почти до нуля — крыльчатку никто не тормозит. У серво без внешней силы тоже наступает покой. А у шагового двигателя стоячий вал — это режим работы, а не пауза: две фазы под напряжением, ротор зажат магнитным полем, ток идёт по кругу, и тепло рассеивается в корпус размером с напёрсток. Сам мотор я разбирал по винтикам в первом уроке раздела, здесь — только его темперамент.
Сколько ток в простое и куда уходит тепло
Считаем на 28BYJ-48 в версии на 5 вольт. Сопротивление обмотки — около 50 Ом, значит одна фаза тянет примерно 100 мА. В удержании включены две фазы, итого около 200 мА непрерывно — примерно ватт тепла в корпусе диаметром 28 миллиметров. Мультиметр в разрыве питания это подтвердит; если прибор показывает 300-400 мА, проверьте, не трёхвольтовый ли мотор вы посадили на пятёрку. Плата ULN2003 добавляет свою долю: ключи-дарлингтоны роняют на себе примерно по вольту, четыре канала по 100 мА — ещё 0,4 ватта на чипе. Поэтому плата греется почти наравне с мотором, и это тоже норма, а не дефект партии.
Корпус 60-70 °C после часа работы — не авария, а штатный режим: изоляция обмоток рассчитана заметно выше. Не случайно в паспортных таблицах серьёзных производителей рабочий ток занижен примерно до 70% от тока удержания — именно ради температуры, а не ради скромности. Палец при этом плохой термометр: 65 °C ощущаются как «вот-вот загорится», а для меди с лаком обмотки это прохладный вторник. Ориентируйтесь на мультиметр и нос, не на ощущения.
Что действительно убивает мотор — время на пределе плюс глухой отвод тепла. Моторчик, замотанный в термоусадку и спрятанный в закрытый корпус, греется сильнее того же мотора на открытом столе при том же токе. Мой ночной инцидент кончился ничем: обмотки выжили, драйвер тоже. Но с тех пор все мои скетчи обесточивают катушки сами, без напоминаний — и дальше я покажу, как это устроено.
Обесточить: три стратегии и где они ломаются
Стратегия первая — оставить как есть. Оправдана, когда вал обязан держать позицию и сам её не удержит: вертикальная ось на ремне, фокусёр телескопа под весом окуляра, заслонка с пружиной. Стратегия вторая — сторож простоя: если за отведённый интервал не приходило ни одной команды, все четыре входа ULN2003 уходят в LOW, ключи закрываются, ток падает до нуля, вал начинает крутиться от руки. Стратегия третья — механическая: винтовая пара с малым ходом держит груз сама, и обесточивание становится бесплатным — об этом целиком третий урок ниже.
В Stepper.h кнопки «отпусти» нет: библиотека держит последнюю фазу под током после каждого шага, так задумано. Обесточивание делается руками — digitalWrite в LOW на все четыре пина, для ULN2003 LOW на входе значит закрытый ключ. В AccelStepper есть готовый disableOutputs(). Физику нагрева и цифры по току покоя я разбирал в уроке про нагрев и ток покоя, а экономию и все подводные камни снятия напряжения — в уроке про отключение катушек; здесь же — про решение «когда», а не «как». Тонкость, о которую я сам спотыкался: после обесточивания счётчик шагов в скетче живёт дальше, но физический вал можно провернуть — позиция в программе и позиция в мире расходятся. На шторке неважно, на вертикальном столе это падающий груз.
// Сторож простоя: ход по кнопке, обесточивание через 30 секунд тишины// 28BYJ-48 через ULN2003: IN1-D8, IN3-D9, IN2-D10, IN4-D11#include <Stepper.h> const int SHAGOV_OBOROT = 2048;Stepper stepper(SHAGOV_OBOROT, 8, 10, 9, 11); const int KNOPKA = 2;const int LED_TOK = 12; // горит, пока обмотки под напряжениемconst unsigned long TAJMAUT = 30000UL; unsigned long tTishi = 0;bool podTokom = false; void spit() { digitalWrite(8, LOW); // все четыре ключа ULN2003 закрыть digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(LED_TOK, LOW); podTokom = false; Serial.println("Spim: obmotki bez toka, val kruitsya palcem");} void setup() { pinMode(KNOPKA, INPUT_PULLUP); pinMode(LED_TOK, OUTPUT); stepper.setSpeed(12); Serial.begin(9600);} void loop() { if (digitalRead(KNOPKA) == LOW) { digitalWrite(LED_TOK, HIGH); // шаг снова запитает фазы podTokom = true; stepper.step(512); // четверть оборота Serial.println("Hod 512 shagov, derzhu"); tTishi = millis(); delay(300); } if (podTokom && millis() - tTishi > TAJMAUT) { spit(); }}Когда удержание действительно нужно
Список у меня короткий. Вертикальная ось без самоторможения — при снятии тока груз опустится, и никакой скетч его не поймает. Ось под пружиной или противовесом — та же история. Камера на фокусёре: сместился полмиллиметра — кадр плывёт всю съёмку, и никакая программа это не заметит. Всё остальное — слайдеры, поворотные столы (мой — из урока про поворотный стол для фото), шторки, сортировщики — живёт без тока: либо трение механики, либо самотормозящий винт, либо открытая позиция никому не мешает до следующей команды.
Полезный побочный эффект удержания — жёсткость. Под током ротор стоит намертво: можно выбрать люфт, прижать шестерню, подтянуть крепёж, не боясь, что каретка уедет от случайного толчка. Обесточенная ось — это ось со свободным ходом, и во время юстировки я часто сознательно оставляю ток включённым именно ради этого: манипулировать безопаснее, когда всё зафиксировано. А после настройки — сторож в дело: полминуты тишины, и скетч отпускает катушки сам.
И спорное мнение, чтобы вы не копировали его вслепую: я не оставляю удержание на ночь даже на вертикальных осях. Если механика винтовая и самотормозит, сон с током — это нагрев на ровном месте. Если у вас ремень — это другое дело: ремень не держит ничего, и тогда либо ток, либо механический фиксатор. Считайте цену ночи честно: 200 мА на 5 В — ватт мощности круглые сутки, за месяц таких ночей набегает киловатт-час с мотора и лишний износ драйвера.
| Стратегия | Когда применять | Чем платите |
|---|---|---|
| Держать током всегда | Вертикальная ось на ремне, фокусёр под весом окуляра | Ватт тепла и 200 мА круглые сутки, корпус за 60 °C |
| Сторож простоя на millis | Паузы между командами: слайдер, стол, дозатор | Вал крутится от руки — позицию придётся восстанавливать |
| Самотормозящий винт | Подъёмники на TR8×2 и мелких ходах резьбы | Медленный ход и КПД пары около 30-40% |
| Механический фиксатор | Транспортировка и обслуживание станка | Ручное действие, про которое все забывают |
Итоговая сетка помещается в три вопроса. Держит ли механика груз сама? Тогда обесточивайте сразу — сторож простоя окупается с первого дня. Держит ли скетч задачу в паузе — камера ждёт кадр, стол ждёт гравировку? Тогда таймер на millis, 30-60 секунд тишины — и спать; заготовку такого планировщика я показывал в уроке про millis вместо delay. Нужен жёсткий захват позиции под нагрузкой? Держите током и закладывайте нагрев в конструкцию: вентилируемый корпус, ток в районе 70-80% от паспортного и никакой термоусадки на драйвере. А проверка после любого сна одна: вал крутится пальцем — катушки молчат, и позицию восстанавливаем ходом к нулевой точке.
Про питание — одна строка, которую я усвоил на своём ночном инциденте. Удержание — не пиковая нагрузка, а постоянная: блок питания на 5 В и 1 А закрывает и мотор, и Uno, и плату ULN2003 с запасом. USB-порты и дешёвые повербанки на 500 мА просаживаются — мотор теряет момент, и вы ловите срывы, которых на стационарном блоке нет. Сторож простоя здесь работает и как энергоменеджер: спящий скетч снижает средний ток в разы, и запас питания снова становится запасом, а не надеждой. И помните про 65 °C: тёплый корпус — штатный режим, а не сигнал к панике; сигнал — запах и срывы шагов.
- 1. Сколько примерно тока потребляет 28BYJ-48 на 5 В в удержании, когда обе фазы под напряжением?
- 2. Корпус мотора после часа работы — 65 °C. Что это значит?
- 3. Как Stepper.h обесточивает катушки между шагами?
- 4. После сторожа простоя вал провернули рукой. Что теперь знает скетч о позиции?
- 5. Какая ось обязана держать ток в паузе?
- Удержание — ток без движения: две фазы по ~100 мА, около 200 мА и ватт тепла в 28BYJ-48 на 5 В
- Корпус 60-70 °C — штатный режим; в паспортах рабочий ток берут 70% от тока удержания ради температуры
- Stepper.h катушки не отпускает: digitalWrite LOW на все четыре пина или disableOutputs() в AccelStepper
- После обесточивания вал крутится от руки — счётчик шагов и реальная позиция расходятся
- Ток обязателен только там, где механика не держит сама: ремень, пружина, вес окуляра на фокусёре
Частые вопросы по теме урока
- Сколько примерно тока потребляет 28BYJ-48 на 5 В в удержании, когда обе фазы под напряжением?
- Две фазы по 100 мА при сопротивлении обмотки около 50 Ом. Стоячий вал — режим работы шаговика, а не пауза: ток не зависит от движения. Около 200 мА
- Корпус мотора после часа работы — 65 °C. Что это значит?
- 60-70 °C на корпусе — норма для шаговика; в паспортах рабочий ток занижают до 70% от тока удержания именно ради температуры. Штатный режим: изоляция рассчитана заметно выше
- Как Stepper.h обесточивает катушки между шагами?
- Библиотека держит последнюю фазу запитанной. Обесточивание — digitalWrite в LOW на все четыре пина или disableOutputs() в AccelStepper. Через detach(), как у серво
- После сторожа простоя вал провернули рукой. Что теперь знает скетч о позиции?
- Счётчик в памяти продолжает считать, физический вал уехал. Позицию восстанавливают ходом к концевику или нулевой точке. Ничего: счётчик шагов и реальный вал разошлись
- Какая ось обязана держать ток в паузе?
- Ремень не самотормозит: сняли ток — груз поехал. Слайдер и шторка на винте держатся резьбой, столу пауза безразлична. Вертикальная ось на ремне с грузом