Вторая серво в проекте сломала мне голову раньше первой. Одна SG90 с лёгким указателем жила на Uno счастливо: втыкалась в плату, слушалась, перезагрузок не было. Я добавил вторую для второй стрелки — и началось: при каждом движении в монитор летела каша, плата перезапускалась, серво дёргались поодиночке. Я поменял скетч, поменял пины, заподозрил библиотеку. Виноват оказался толстый белый шнур USB: два серво на старте просили 400–500 мА, плата съедала свои 50, и просадка напряжения выбивала микроконтроллер в сброс. Скетч был ни при чём — счёт шёл на миллиамперы.
Здесь мы собираем питание серво как систему, а не как «три провода куда-то». Разберём роли всех трёх проводов и цену их перепутывания, посчитаем ток на пальцах, добавим внешний блок питания с общим GND, найдём две ловушки макетки — разорванную посередине шину и тонкие перемычки, — и закончим механикой: качалкой, винтом и удлинением кабеля. Первое знакомство с SG90, если вы его ещё не прошли, живёт в уроке про подключение и первые углы — там базовая схема и язык импульсов.
Три провода и цена переполюсовки
У SG90 три жилы в общем шлейфе, и раскладка почти никогда не меняется от партии к партии: оранжевый (иногда жёлтый) — сигнал, красный — плюс питания, коричневый (реже чёрный) — земля. Сигнал — это импульсы 1000–2000 мкс, их подаёт Arduino, ток там копеечный. А вот красный с коричневым — силовая пара: через неё идёт весь ток мотора, и именно она делает из «просто подключить» инженерное решение. Разъём серво трёхпиновый, втыкается в макетку в один ряд, из него удобно развести три перемычки: сигнал на пин 9, питание и землю — на шины макетки.
Перепутать провода проще, чем кажется: шлейф смотрит на вас разъёмом, а не цветами. Сигнальный провод, посаженный на 5V вместо пина, превращает команду в постоянный уровень — серво уйдёт в упор и начнёт давить мотором на стопор. Переполюсовка красного и коричневого хуже всего: моторчик и плата серво питаются наоборот, корпус греется за десятки секунд, пластик рядом с мотором становится неприятным на ощупь, дальше — деградация. Если серво после такой ошибки гудит, но едет криво — шестерни уже пострадали. Моё правило: перед подачей питания читаю цвета на обеих сторонах соединения, серво и платы, а не надеюсь на память. Ошибка «перепутал плюс и минус» вообще самая частая в макетных проектах — её разбор, с последствиями и лечением, я делал в уроке про общий GND.
| Провод SG90 | Куда на Arduino | Ошибки, которые я видел |
|---|---|---|
| Оранжевый — сигнал | любой цифровой пин, у нас 9 | посадили на 5V — серво ушло в упор |
| Красный — плюс 5 В | шина 5V макетки или внешний БП | перепутали с коричневым — нагрев корпуса |
| Коричневый — земля | шина GND, общая с внешним БП | забыли соединить GND внешнего БП с платой |
Сколько серво ест на самом деле
Цифры, на которые я опираюсь, проверены щипковым мультиметром на десятке экземпляров SG90. В покое, когда серво держит позицию без нагрузки, — около 10 мА. Обычный ход по горизонтали с лёгкой качалкой — 100–250 мА. Старт с грузом или ход против тяжести — до 650–700 мА. Заклинивший вал — режим, близкий к короткому замыканию, с перегревом за минуты. Теперь складываем: две серво одновременно стартуют — до полуампера только на серво, плюс 40–50 мА на саму Uno. USB-порт по стандарту отдаёт 500 мА, и у дешёвых хабов меньше. Отсюда правило с вилкой: одна SG90 с картонным флажком от USB — обычно вывозит; две серво, тяжёлое плечо или любое серво крупнее SG90 — внешний блок питания 5–6 В на 2 А.
Почему просадка валит плату, а не просто тускло светит светодиод? Посчитаем через закон Ома — мы его раскладывали с формулами в уроке про расчёт тока. У тонкой перемычки и дорожек макетки сопротивление порядка десятых долей ома, у USB-кабеля ещё больше. При токе 0,7 А даже полома сопротивления отбирает 0,35 В, при 1 Ом — уже 0,7 В. Пять вольт превращаются в четыре с небольшим, стабилизатор Uno проседает, и микроконтроллер уходит в сброс задолго до того, как серво почувствует себя плохо. Серво переживает просадку, Arduino — нет.
Схема с внешним питанием — две линии. Блок 5–6 В даёт плюс на красную шину макетки и минус на синюю; 5V-пин Arduino в этой схеме остаётся свободным или подключается к той же красной шине, если плата питается от неё. Сигналы остаются на своих пинах. Единственное железное требование: минус внешнего блока обязан быть соединён с GND Arduino — без этого общего провода импульсы повиснут в воздухе, потому что у сигнала и серво нет общей точки отсчёта уровней. Ток сигнала крошечный, поэтому GND соединяют обычной перемычкой.
Макетка добавляет свои два сюрприза. Первый: боковые шины питания у большинства макеток разорваны посередине — на верхней кромке видно разрыв сплошной линии и столбцы a–j на половину длины. Серво, воткнутое левее разрыва, питание не получит, даже если справа шина под напряжением; я прозваниваю шину мультиметром от конца до конца один раз и ставлю перемычку через разрыв навсегда. Как устроены эти линии и почему про них забывают, показано в уроке про шины питания и полярность. Второй сюрприз: штатные перемычки папа-папа держат около одного ампера суммарно, дальше греются и добавляют сопротивление в уже больную цепь. Правило, к которому я пришёл: силовые линии — короткие и толстые провода, по одному красному и чёрному от блока к шинам, серво втыкаются в соседние ряды; сигнальные могут быть любыми.
Разъемы и общая геометрия макетки разобраны в уроке про то, как ею пользоваться — там же, почему соседние ряды внутри соединены полоской, что как раз удобно для трёхпинового разъёма серво. После сборки схемы я всегда гоняю один и тот же тестовый прогон: медленный обход углов с печатью в Serial. Если питание хромает, просадка проявится на крайних углах, где серво бьётся об упоры и ест максимум.
#include <Servo.h> Servo sv; void setup() { sv.attach(9); Serial.begin(9600); Serial.println("Проверка питания: медленный прогон");} void loop() { for (int a = 0; a <= 180; a += 30) { sv.write(a); Serial.print("ang="); Serial.println(a); delay(800); } for (int a = 150; a >= 0; a -= 30) { sv.write(a); Serial.print("ang="); Serial.println(a); delay(800); }}Качалка, винт и кабель
Электрика готова — половина проблем осталась в механике. Качалка надевается на зубчатый вал с лёгким нажатием пальца и фиксируется идущим в комплекте саморезом через центральное отверстие. Плоскогубцами я её больше не запрессовываю: один раз раздавил шлицы, и качалка начала проворачиваться под нагрузкой при целом серво. Перед тем как закрутить винт, подайте write(90) и наденьте качалку перпендикулярно корпусу — тогда середина программного диапазона совпадёт с серединой механического, и ваши 45 градусов будут выглядеть как 45, а не как 30 вбок.
Кабель у SG90 короткий — около 20 сантиметров. Удлиняется он dupont-кабелями папа-мама, но на вибрирующих механизмах скрутки и слабые вставки расшатываются: контакт то есть, то нет, серво дёргается, а вы ищете ошибку в коде. Для постоянной механики я обжимаю или паяю удлинение и добавляю каплю термоклея на разъём. И ещё наблюдение из практики: шлейф, натянутый между серво и макеткой, со временем перетирается на изгибе — оставьте слабину, провод не струна.
Задания на закрепление, по возрастанию. Первое: в тестовом прогоне сократите паузы с 800 до 200 мс и найдите угол, на котором серво перестаёт доезжать — сверьте с паспортной скоростью 0,1 с на 60 градусов. Второе: соберите в симуляторе привычку печатать пары имя=значение — добавьте в лог строку с текущим углом read() рядом с целью и убедитесь, что заказ и факт совпадают не сразу. Третье: рассчитайте по цифрам из урока, потянет ли USB-блок 500 мА три SG90 с лёгкими флажками, если стартуют они по очереди, а не разом, — и обоснуйте вывод паузами в setup, разнесёнными на 300 мс. Этот приём — расставить старты серво по времени — стоит копейки и снимает пик пускового тока почти целиком.
- SG90: оранжевый — сигнал на цифровой пин, красный — плюс 5 В, коричневый — GND; цвета читайте с обеих сторон соединения
- Токи SG90: около 10 мА покой, 100–250 мА ход, до 650–700 мА старт с грузом, заклинивание — почти короткое замыкание
- Две серво и больше — внешний блок 5–6 В на 2 А, минус блока обязательно соединён с GND Arduino
- Электролит 470–1000 мкФ поперёк питания серво сглаживает стартовый бросок; полярность — длинная ножка к плюсу
- Шина макетки разорвана посередине, перемычки держат около 1 А: силовые линии — короткие и толстые
- Качалку ставьте на 90 градусов до закрутки винта; удлинения кабеля паяйте или обжимайте — скрутки на вибрации живут недолго
- 1. Две SG90, при каждом движении Uno перезагружается. Первое действие?
- 2. Почему тонкие перемычки макетки ухудшают питание серво?
- 3. Серво, воткнутое в левую половину боковой шины, молчит, а справа шина под напряжением. Что проверить первым?
- 4. Красный и коричневый провода серво перепутаны местами. Что произойдёт?
- 5. Зачем электролитический конденсатор ставят поперёк питания серво?
Частые вопросы по теме урока
- Две SG90, при каждом движении Uno перезагружается. Первое действие?
- Суммарный стартовый ток двух серво превышает возможности USB. Лечится внешним питанием с обязательным общим GND. Взять внешний блок 5–6 В и соединить его GND с GND платы
- Почему тонкие перемычки макетки ухудшают питание серво?
- Сопротивление в десятые доли ома при 0,7 А отбирает 0,2–0,4 В. Пять вольт проседают, и Uno уходит в сброс раньше серво. Их сопротивление при токе в сотни миллиампер отбирает заметные доли вольта
- Серво, воткнутое в левую половину боковой шины, молчит, а справа шина под напряжением. Что проверить первым?
- Боковые шины большинства макеток разорваны посередине. Прозвоните шину от конца до конца и поставьте перемычку через разрыв. Разрыв шины посередине макетки
- Красный и коричневый провода серво перепутаны местами. Что произойдёт?
- Переполюсовка питания — нагрев за десятки секунд и деградация мотора и платы. Диодной защиты у SG90 нет. Корпус быстро нагреется, плата серво питается наоборот
- Зачем электролитический конденсатор ставят поперёк питания серво?
- Конденсатор 470–1000 мкФ отдаёт первые миллиамперы при старте мотора, просадка на шинах становится меньше. Соблюдайте полярность. Чтобы сгладить стартовый бросок тока и уменьшить просадку