Сервоприводы SG90 и MG996R: чем отличаются и когда не хватает тока
Сервопривод — это мотор с редуктором, датчиком положения и платой, которая держит вал под заданным углом. В самоделках на Arduino и ESP32 чаще всего встречаются две модели: крошечный SG90 и «стандартный» MG996R. Один весит 9 граммов, другой — 55, и разница не только в размерах: у них разный момент, разные шестерни и совсем разный аппетит по току. Разбираем оба по паспорту производителя — где их реально хватает, а где нет.
Как сервопривод понимает, куда крутить
Внутри обычного серво: моторчик, редуктор, потенциометр на выходном валу и плата. Контроллер шлёт импульс каждые 20 мс (частота 50 Гц), и ширина этого импульса — команда. Примерно 1 мс — одно крайнее положение, 1,5 мс — центр, 2 мс — другое. По даташиту SG90 рабочий диапазон пульсов — 500–2400 мкс, то есть крайние углы конкретного экземпляра могут не совпадать с теоретическими 0° и 180°.
Плата сравнивает задание с реальным углом и крутит мотор, пока они не совпадут. Отсюда главное свойство серво: он не «едет», а «стоит» в заданном угле и сопротивляется попыткам его сдвинуть — и в этот момент потребляет максимальный ток. Обе модели цифровые, мёртвая зона по паспорту 1 мкс.
Характеристики по паспорту Tower Pro
| Параметр | SG90 | MG996R |
|---|---|---|
| Момент | 1,8 кг·см при 4,8 В | 9,4 кг·см при 4,8 В; 11 кг·см при 6 В |
| Скорость | 0,1 с/60° при 4,8 В | 0,19 с/60° при 4,8 В; 0,15 с/60° при 6 В |
| Питание | 4,8 В (допустимо до 6 В) | 4,8–6,6 В |
| Ток | 0,5–2 А под нагрузкой (оценка производителя) | покой 10 мА; без нагрузки 170 мА; до 2,5 А при стопоре (6 В) |
| Шестерни | POM (пластик) | металл; алюминий 6061-T6 в версии на 180° |
| Вес | 9 г | 55 г |
| Габариты | 23×12,2×29 мм | 40,7×19,7×42,9 мм |
| Мёртвая зона | 1 мкс | 1 мкс |
| Длина провода | 25 см | 32 см |
| Температура | 0…55 °C | 0…55 °C |
Числа — со страниц производителя towerpro.com.tw (SG90 digital и MG996R); ток под нагрузкой и стопорный ток MG996R — из даташита дистрибьютора.
Чем они отличаются на практике
Момент. 1,8 кг·см против 9,4 кг·см при 4,8 В — разница в пять раз. SG90 уверенно двигает лёгкую заслонку, флажок или мини-манипулятор; MG996R тащит рычаг с грузом, поворачивает камеру, рулит моделью 1/10 масштаба.
Шестерни. У SG90 редуктор из POM-пластика: заклинил механизм — шестерни срезает за секунду. У MG996R редуктор металлический, в версии на 180° производитель ставит алюминий 6061-T6: переживает удар, но тяжелее и дороже.
Скорость. Парадокс: маленький SG90 формально быстрее, 0,1 с/60° против 0,19 с/60° у MG996R при 4,8 В. Но скорость сильно зависит от нагрузки: с реальным плечом лёгкий SG90 часто проигрывает тяжёлому собрату.
Когда не хватает тока
Здесь серво-проекты и умирают. Ток покоя MG996R — 10 мА, без нагрузки — 170 мА, а при стопоре (вал держит нагрузку или упёрся в край) — до 2,5 А при 6 В. Производитель SG90 на своём сайте оценивает рабочий ток в 0,5–2 А — уже больше, чем отдаёт USB-порт (0,5 А).
Пин 5V Arduino Uno питается через стабилизатор и рассчитан на доли ампера. Один MG996R под нагрузкой просаживает питание — контроллер перезагружается, серво «заикается». Это не брак, это физика. Кормим серво правильно:
- отдельный блок питания 5–6 В с запасом: на два MG996R — от 3 А;
- для одного-двух SG90 хватит UBEC на 2 А;
- конденсатор 470–1000 мкФ параллельно питанию серво сглаживает броски;
- минус блока питания соединить с GND контроллера — без общего минуса сигнальный импульс не работает.
Подключение к Arduino Uno
Провода по даташиту SG90: красный — плюс питания, коричневый — минус, оранжевый — сигнал. Схема: оранжевый на D9, красный и коричневый — на питание внешнего блока, минус блока — на GND Arduino.
#include <Servo.h>
Servo myServo; // объект серво
void setup() {
myServo.attach(9, 500, 2400); // D9, пульсы 500-2400 мкс по даташиту
}
void loop() {
for (int a = 0; a <= 180; a++) { // плавно от 0 до 180
myServo.write(a);
delay(15); // пауза, чтобы серво успевало
}
for (int a = 180; a >= 0; a--) { // и обратно
myServo.write(a);
delay(15);
}
}
Подключение к ESP32
У ESP32 свой ШИМ, ставим библиотеку ESP32Servo из менеджера библиотек Arduino IDE. Сигнал — на GPIO 13, питание серво по-прежнему отдельное.
#include <ESP32Servo.h>
Servo myServo;
void setup() {
ESP32PWM::allocateTimer(0); // таймеры под ШИМ серво
ESP32PWM::allocateTimer(1);
myServo.attach(13, 500, 2400); // GPIO 13, пульсы 500-2400 мкс
}
void loop() {
myServo.write(0); delay(1000); // край
myServo.write(90); delay(1000); // центр
myServo.write(180); delay(1000); // другой край
}
Про уровни: выход ESP32 даёт 3,3 В против 5 В у Uno. Обе модели читают такой импульс нормально, но если экземпляр капризничает на краях — подтяни сигнальный провод резистором 10 кОм к 5 В.
Частые ошибки
- Кормить MG996R от пина 5V Arduino. Стопорный ток 2,5 А — стабилизатор уходит в защиту, контроллер перезагружается. Только отдельное питание.
- Нет общего GND. Блок серво отдельный, а земля к контроллеру не пришла — импульс без опоры, серво дёргается или молчит.
- Просить 180° у экземпляра с ограничителем. Диапазон пульсов 500–2400 мкс по даташиту шире механического хода многих клонов: на краях серво трещит и греется. Найди края своего экземпляра и работай внутри них.
- Держать под нагрузкой постоянно. Серво, удерживающее рычаг, греется и жрёт ток, даже когда стоит. Для «держать» лучше механическая фиксация или реле, для редких перемещений — серво.
- Перепутать SG90 с MG90S. Внешне близнецы, но у MG90S металлические шестерни и выше момент. Проверяй маркировку, прежде чем вешать нагрузку.
Когда нужна не позиция, а непрерывное вращение — это к шаговым двигателям: у нас есть разбор связки 28BYJ-48 с драйвером ULN2003. А включать силовую нагрузку по команде контроллера удобнее через реле-модуль — в проектах серво и реле часто работают в паре.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.