Роборуку из четырёх SG90 я собрал за вечер, а на следующий день она поразила меня своей изобретательностью: при каждом захвате детали плата уходила в перезагрузку, серво теряли углы, и рука судорожно дёргалась, как будто ей снились кошмары. Считать ток я тогда не умел и питал всё от USB. Арифметика была убийственная: четыре серво × 650 мА стопорного = 2,6 А, а порт отдает 500. Второй урок я усвоил через месяц: купил блок 12 В и подключил SG90 напрямую — серво дёрнулась, пахнуло горелой изоляцией, и бракованным стало одно из самых дешёвых желез в наборе.
Этот урок — о том, как делать правильно: выбрать источник по току, а не по наитию, развести питание мотора и платы и не наступить на два классических грабли: отсутствующую общую землю и конфликт двух источников на одном пине. Схема здесь проще, чем кажется: три провода серво остаются при своих цветах, меняется только место, откуда приходят красный и коричневый.
Считаем ток: правило двойного запаса
Порядок расчёта всегда один. Берём стопорный ток каждой серво — не рабочий, а худший случай, когда вал заклинен: для SG90 это 650–700 мА, для MG996R — до 2,5 А. Складываем. Умножаем на полтора-два — запас на холодный пуск и на то, что даташит врёт в пользу маркетинга. Для четырёх SG90: 4 × 0,7 = 2,8 А, с запасом — источник от 4–5 А. USB с его половиной ампера в этом турнире не участвует даже на старте: уже одна SG90 с приличной нагрузкой съедает его лимит целиком. Если лень считать каждый раз, держите в голове мою границу: суммарный стопорный больше 500 мА — внешнее питание ставлю сразу, без этапа «а вдруг прокатит».
Теперь выбор источника — и здесь у каждого варианта своя ниша. Четыре батарейки AA дают как раз 6 В, на которые SG90 смотрит с любовью, но щелочные просаживаются под пиками, поэтому для серво лучше NiMH-аккумуляторы. Зарядка от телефона на 5 В 2 А — дёшево и сердито для стационарного проекта. Понижающий DC-DC вроде LM2596 вытягивает до 3 А и кормится от любого блока 7–35 В, но его выход надо выставить вольтметром до подключения серво. Для крупных MG996R и руки из шести серво — UBEC на 5–6 В и 3–5 А, он из радиомодельного мира и создан ровно для этого. А вот 12 В напрямую на маленькую серво — это тот самый запах горелой изоляции, с которого начинается урок за деньги. Токовые паспорта обеих серво мы уже разбирали в уроке про подключение SG90 — здесь они превращаются в смету.
| Источник | Реальный ток | Плюсы | Минусы |
|---|---|---|---|
| 4 × AA (NiMH) | 4,8–6 В, до 1–2 А пиками | чистое питание, мобильно, серво любит 6 В | садятся; щелочные просаживаются на пиках |
| Зарядка 5 В 2 А | 5 В, 2 А честно | дёшево, есть в каждом доме | стационарно, нужен USB-переходник |
| DC-DC LM2596 | до 3 А при хорошем охлаждении | кормится от 12 В, настраиваемый выход | выход надо выставить вольтметром ДО серво |
| UBEC 5–6 В | 3–5 А | стандарт для радиомоделей, надёжен | стоит дороже, надо заказывать |
| Пин 5V от USB | около 500 мА на всё | ничего докупать не надо | ровно одна SG90 с лёгким флажком и всё |
Схема: плюс серво от источника, земля общая
Разводка занимает минуту. Красные провода всех серво идут на плюс внешнего источника, коричневые — на его минус. Оранжевые сигнальные остаются на пинах Arduino, как и были. И одна обязательная перемычка, без которой схема не работает: минус источника соединяется с GND Arduino. Почему это не опция: импульс с пина — это напряжение относительно земли, а земля у Arduino и у серво теперь разные. Без общего провода потенциал земли серво плавает, приёмник видит кашу вместо импульсов и серво молчит или трясётся. Мы разбирали этот же принцип на общих проводах в уроке про GND и типовые ошибки — здесь та же физика, только ставки выше, потому что токи моторные.
Второй момент, о котором гайды молчат: моторный ток не должен течь через плату. Если минус серво втыкать в макетную шину, по которой питается Arduino, стопорные амперы проедут по тонкой дорожке и поднимут на ней лишние десятки милливольт — АЦП плывёт, UART врёт, начинаются плавающие глюки, которые не ловятся. Правильная топология — звезда: минус источника — центр, от него один толстый провод на серво и один тонкий на GND Arduino. Полезно прикинуть падение по закону Ома: 2 А на перемычке в 0,3 Ом — это 0,6 В разницы потенциалов вдоль одного провода, и пусть этот провод будет силовым, а не сигнальным.
Сборка по шагам выглядит так: источник на стол, к нему — силовые провода серво (припаять или обжать, макетные ламели на два ампера — лотерея, как мы говорили в уроке про устройство макетки), затем одна перемычка земля-в-землю с Arduino, и последними — сигнальные провода на пины. После сборки я всегда гоняю тест без нагрузки: серво качается на холостом ходу минуту, и только потом получает механизм. Сильно экономит нервы, если где-то переклинило плюсовой контакт — увидите на холостом ходу, а не когда серво уже бьётся об упор со стопорным током.
// Тумблер: LOW — питание серво от USB (тракт 1,2 Ом),// HIGH — от внешнего БП 5 В (тракт 0,1 Ом)#include <Servo.h> Servo sv; void setup() { pinMode(2, INPUT_PULLUP); sv.attach(9); Serial.begin(9600);} void loop() { int src = digitalRead(2); int r10 = 1; // внешний: 0,1 Ом if (src == LOW) { r10 = 12; } // USB: 1,2 Ом for (int ang = 0; ang <= 180; ang += 15) { sv.write(ang); int ma = 220; if (ang >= 165) { ma = 700; } // упор int vMv = 5000 - ma * r10 / 10; // мВ на шине серво Serial.print("i="); Serial.print(ma); Serial.print(" v="); Serial.println(vMv); delay(150); } delay(500);}Две ошибки, которые жгут платы
Ошибка первая: соединить выход DC-DC с пином 5V Arduino, пока плата питается от USB. Теперь два источника стоят друг против друга на одной шине: у них чуть разные напряжения, и оба честно пытаются его выправить — через шину идёт уравнивающий ток, греются стабилизаторы, плата живёт от недели до месяца, в зависимости от лотереи. Правило жёсткое: у Arduino свой источник (USB, разъём питания или отдельный стабилизатор), у серво свой, и единственная точка, где они встречаются, — общий провод. Если очень хочется питать всё от одного блока 12 В: серво — через DC-DC на 5–6 В, плату — через её VIN или второй DC-DC на 7–12 В, земли соединить в одной точке.
Ошибка вторая — экономия на сечении. Питание серво через макетные шины и тонкие перемычки работает ровно до первого серьёзного пика: контактные ламели макетки рассчитаны на ампер с горкой, дальше они греются и подгорают. Для руки из четырёх серво я паяю силовые линии проводом 0,5–0,75 мм², а макетку оставляю только сигнальным проводам. Землю серво и земли плат соединяю в одной точке у клеммы БП — топология звезды из предыдущего раздела. И последний штрих гигиены: общий провод тянется отдельным проводом, а не «через корпус механизма», потому что винт, вкрученный в крашеный металл, — это не контакт, а анекдот.
И парочка привычек напоследок. Первая: после сборки верните серво плавное движение — миллис-версия из урока про плавное движение не блокирует loop(), и рука сможет реагировать на датчики даже посреди поворота. Вторая: макетные шины оставьте сигнальным проводам, а силовые цепи серво — пайке или клеммникам, о чём мы говорили в уроке про шины питания макетки. Третья: подпишите источник — маркером прямо на корпусе DC-DC его выставленное напряжение, потому что через месяц вы точно не вспомните, 5 там вольт или 6, а мультиметр уже уехал в ящик.
- Расчёт источника: сумма стопорных токов × запас 1,5–2; четыре SG90 — от 4 А, USB не участвует
- Выбор: NiMH 4×AA или зарядка 5 В 2 А для малых схем, DC-DC LM2596 до 3 А, UBEC для MG996R
- Схема: плюс источника на красные, минус на коричневые, минус источника ↔ GND Arduino — без общей земли серво не слышит пин
- Моторный ток не через плату: топология звезда, минус источника — центр
- Никогда не соединять выход DC-DC с пином 5V при питании от USB — два источника конфликтуют
- Электролит 470–1000 мкФ у серво в обязательном порядке; DC-DC настраивать до подключения мотора
- 1. Четыре SG90, стопорный ток каждой до 700 мА. Какой ток закладывать в источник?
- 2. Зачем минус внешнего источника соединять с GND Arduino?
- 3. Можно ли выход DC-DC на 5 В посадить на пин 5V Arduino при подключённом USB?
- 4. В проекте MG996R со стопорным током до 2,5 А. Что взять?
- 5. В модели урока тумблер переключил питание на внешний БП (0,1 Ом). Что стало с v= при токе 700 мА?
Частые вопросы по теме урока
- Четыре SG90, стопорный ток каждой до 700 мА. Какой ток закладывать в источник?
- 4 × 0,7 = 2,8 А худшего случая, с запасом 1,5–2 — источник от 4 А. USB с его 500 мА не вывезет даже одну нагруженную серво. Около 4–5 А: сумма стопорных × запас
- Зачем минус внешнего источника соединять с GND Arduino?
- Сигнал — это напряжение относительно земли. Разные земли = плавающий потенциал, приёмник серво видит кашу вместо импульсов. Импульсам с пина нужен общий уровень отсчёта — без общей земли серво их не слышит
- Можно ли выход DC-DC на 5 В посадить на пин 5V Arduino при подключённом USB?
- USB и DC-DC держат чуть разные напряжения и пытаются выправить друг друга. У платы свой источник, у серво свой, встреча — только на общем проводе. Нет: два источника на одной шине конфликтуют и греют стабилизаторы
- В проекте MG996R со стопорным током до 2,5 А. Что взять?
- Крупной серво нужен источник с реальным током 3–5 А: UBEC или DC-DC от блока 12 В. AA и пин 5V в этом весе — декорация. UBEC или DC-DC с запасом по току
- В модели урока тумблер переключил питание на внешний БП (0,1 Ом). Что стало с v= при токе 700 мА?
- Потеря на тракте: 0,7 А × 0,1 Ом = 0,07 В. Шина держится у 4,9 В против 4,2 В на USB-тракте с его 1,2 Ом. Поднялось к 4,9 В — просадка почти исчезла