Перейти к содержанию

Сервоприводы для моделей и роботов: устройство и управление

Модельный сервопривод — двигатель с редуктором и обратной связью в одном корпусе: ему достаточно трёх проводов и импульса каждые 20 мс. Разбираем по документации производителей, что у него внутри, как длительность импульса задаёт угол, чем отличается привод постоянного вращения и почему питание важнее сигнала.

Обновлено Редакция GAW

Сервопривод (servo) для моделей и роботов — коллекторный двигатель, редуктор, датчик положения и плата управления в одном корпусе. На вход приходит импульс, длительность которого задаёт угол; плата сравнивает его с положением выходного вала и крутит двигатель, пока они не совпадут. Снаружи — три провода: питание, земля и сигнал. Внутри Hitec HS-422, по его спецификации, — коллекторный двигатель, четыре пластиковые шестерни, контактный потенциометр как датчик положения и аналоговая плата управления.

Коротко

  • Сигнал — импульс каждые 20 мс (50 Гц); угол задаёт длительность импульса, обычно в пределах 0,5–2,5 мс.
  • Диапазоны разные — Parallax 900-00005: 620–2420 мкс на 180°, Hitec HS-422: 900–2100 мкс на ±60°, Arduino Servo по умолчанию: 544–2400 мкс.
  • Питание — 4–6 В у Parallax, 4,8–6 В у Hitec, 4–8,4 В у Feetech FS5106R (данные в его спецификации — при 4,8 и 6 В); ток от единиц миллиампер в покое до сотен миллиампер и больше ампера при остановке вала.
  • Уровень сигнала — от 3,3 В (Parallax), высокий уровень 2–5 В (Feetech); микроконтроллер на 3,3 В подходит.
  • Постоянное вращение — без датчика угла: импульс задаёт скорость и направление, нейтраль около 1500 мкс.

Устройство

Устройство сервопривода: плата, двигатель, редуктор и потенциометрСигнал управления приходит на плату. Плата сравнивает длительность импульса с напряжением потенциометра на выходном валу и подаёт ток на коллекторный двигатель в нужную сторону. Двигатель через редуктор поворачивает выходной вал, вместе с валом поворачивается потенциометр, и плата останавливает двигатель, когда положение совпадёт с заданным.Сигналимпульс 50 ГцПлатасравнениеДвигательколлекторныйРедукторшестерниВалвыходПотенциометрнапряжение = положение валаток в одну или другую сторону, пока положение не совпадёт с заданным
Сервопривод — следящая система: плата сравнивает заданное импульсом положение с напряжением потенциометра на выходном валу
  • Двигатель — маленький коллекторный двигатель постоянного тока; у HS-422 — трёхполюсный с ферритовыми магнитами. Направление и скорость задаёт плата через свой H-мост — так же, как в статье об управлении коллекторным двигателем.
  • Редуктор понижает скорость в i раз и увеличивает момент в i · η раз, где η — КПД редуктора: часть мощности уходит на трение в шестернях (КПД сервоприводов в их документации не указан). У сервопривода постоянного вращения Feetech FS5106R передаточное отношение 1/210. Шестерни бывают пластиковые и металлические; люфт выходного вала HS-422 — не больше 0,5°.
  • Потенциометр на выходном валу — датчик положения: его напряжение пропорционально углу. Поэтому обычный сервопривод поворачивается только в пределах хода потенциометра и упоров.
  • Плата сравнивает длительность импульса с положением вала. Пока разница меньше зоны нечувствительности (dead band) — у HS-422 5 мкс по спецификации и 8 мкс на странице изделия, — двигатель стоит; иначе плата крутит его в сторону уменьшения разницы.

Parallax выпускает свой стандартный привод в аналоговом и цифровом исполнении и приводит отличия цифровой версии: стабильнее скорость поворота, меньше ток без нагрузки в движении (100 мА против 120 мА), больше ток покоя (20 мА против 10 мА) и защита от упора — при импульсах вне рабочего диапазона 500–2530 мкс привод перестаёт давить на вал.

Сигнал: длительность импульса и угол

Импульсы повторяются каждые 20 мс, угол задаёт длительность импульса. Коэффициент заполнения при этом мал — 2,5–12,5 % при 50 Гц, — и обычный ШИМ «для двигателя» на килогерцах сюда не подходит: нужен именно импульс заданной длительности с периодом около 20 мс.

Сигнал управления сервоприводом: импульс каждые 20 мсИмпульсы повторяются с периодом 20 миллисекунд, то есть с частотой 50 герц. Угол задаёт длительность импульса: у сервопривода Parallax 900-00005 0,62 мс соответствуют 0°, 1,52 мс — 90°, 2,42 мс — 180°. Между импульсами сигнал в нуле.0,62 мс — 0°1,52 мс — 90°2,42 мс — 180°период 20 мс (50 Гц)3,3–5 В0
Сигнал Parallax 900-00005: импульс 0,62–2,42 мс каждые 20 мс, длительности по горизонтали в масштабе

Связь угла и длительности линейная, но концы диапазона у производителей разные:

ПриводИмпульсХодЦентрРабочий предел
Parallax 900-00005620–2420 мкс0–180°1520 мкс500–2530 мкс ±20 мкс
Hitec HS-422900–2100 мкс±60°1500 мкс—
Arduino Servo (по умолчанию)544–2400 мкс0–180°——
Feetech FS5106R (постоянное вращение)1200–1800 мксскорость1500 ± 9 мкс500–2500 мкс

У Parallax каждый градус — 10 мкс, и производитель даёт формулу: t = 10 · φ + 620 мкс. Parallax предупреждает о внутренних механических упорах — около −10° и 190°: импульсов, уводящих вал к упорам, нужно избегать, работа в упор сильно сокращает срок службы. Если программа выходит за 620–2420 мкс, чтобы получить углы за пределами 0–180°, производитель советует проверить, что вал не доходит до упоров. Без импульсов, как и при импульсах вне рабочего диапазона, привод не держит положение и не сопротивляется внешней силе.

Пересчитать угол в длительность, а длительность — в регистры таймера AVR (ICR1, OCR1A) и STM32 (PSC, ARR, CCR) поможет калькулятор ШИМ сервопривода; подобрать предделитель для другого таймера — калькулятор таймера.

Скорость поворота

Скорость в документации дают как время поворота на 60° без нагрузки: у Parallax — 0,19 с при 6 В и 0,23 с при 4,8 В, у HS-422 — 0,16 и 0,21 с. Наш расчёт: поворот Parallax на 180° при 6 В займёт не меньше 3 · 0,19 ≈ 0,57 с, под нагрузкой — дольше. Программа, которая сразу после команды ждёт, что вал уже на месте, ошибается: нужна пауза или датчик.

Сервопривод постоянного вращения

Привод постоянного вращения (continuous rotation) устроен так же, но без датчика угла и без упоров — у Feetech FS5106R в спецификации прямо указано: датчика угла нет, ограничения угла нет. Импульс задаёт не положение, а скорость и направление:

  • 1500 ± 9 мкс — нейтраль, вал стоит; зона нечувствительности вокруг неё — 18 мкс (п. 7-7);
  • 1500–1800 мкс — вращение против часовой стрелки, 1200–1500 мкс — по часовой;
  • без нагрузки — 75 об/мин при 4,8 В и 95 об/мин при 6 В.

Допуск нейтрали ±9 мкс означает, что у конкретного экземпляра вал может медленно ползти при ровно 1500 мкс: точку остановки подбирают на образце. Угол без внешнего датчика такой привод не держит — для колёс робота, где нужно пройденное расстояние, ставят энкодер.

Ток и питание

Сервопривод потребляет мало, пока стоит без нагрузки, и много, когда разгоняется или упирается. Данные трёх производителей:

ПриводПокойДвижение без нагрузкиОстановка вала
Parallax 900-00005, 6 В20 мА100 мАне указан; под нагрузкой — кратковременные выбросы 500 мА и больше
Hitec HS-422, 4,8 / 6 В8 мА150 / 180 мА600 / 750 мА (страница изделия — 800 мА, напряжение не указано)
Feetech FS5106R, 4,8 / 6 В6 мА250 / 350 мА0,9 / 1,1 А

Отсюда правила питания:

  • Отдельный источник для приводов. В схеме подключения Parallax привод питается отдельно от микроконтроллера, чтобы броски тока под нагрузкой не вызывали просадку и сброс. Общий источник допустим, только если микроконтроллер работает от 4–6 В, а стабилизатор держит напряжение при одновременном пиковом токе всех приводов.
  • Общая земля. Земля привода и микроконтроллера соединяются, иначе сигнал не имеет общей точки отсчёта.
  • Не от выводов микроконтроллера. Parallax прямо запрещает питать привод от вывода порта.
  • Проверка блока питания. Сетевой адаптер может не держать номинальное напряжение; Parallax советует проверить его во всём диапазоне нагрузки от 20 до 500 мА.

Источник рассчитывают на сумму токов остановки приводов, которые могут упереться одновременно (наш расчёт): четыре HS-422 при 6 В — 4 · 0,75 А = 3,0 А по спецификации v2.2 или 4 · 0,8 А = 3,2 А по странице изделия, где напряжение не указано; берите большее. Посчитать бюджет питания с несколькими нагрузками поможет калькулятор бюджета питания.

Момент и выбор привода

Момент в документации указан при остановке (stall torque) — это предел, а не рабочая нагрузка: у HS-422 3,1 кгс·см при 4,8 В и 3,9 кгс·см при 6 В. Feetech для FS5106R даёт и номинальный момент — 1,6 и 2 кгс·см, около трети момента остановки (4,8 и 6 кгс·см). Чтобы перейти к ньютон-метрам, кгс·см умножают на 0,0981: 3,9 кгс·см ≈ 0,38 Н·м.

Нагрузку на рычаге считают так (наш расчёт): груз 0,5 кг на плече 4 см требует 0,5 · 4 = 2 кгс·см в горизонтальном положении. Для HS-422 при 6 В это половина момента остановки — работать будет, но с малым запасом на ускорение и трение. Как выбирать привод по моменту и скорости с запасом — в статье о выборе двигателя; как пересчитать момент через рычаг или шестерни — калькулятор передаточного числа.

Управление от Arduino и микроконтроллеров

Библиотека Arduino Servo формирует импульсы в прерываниях таймера и ведёт до 12 приводов на один таймер. Учтите: при подключении первого привода analogWrite() на выводах, связанных с этим таймером, перестаёт работать. По умолчанию write(angle) переводит 0–180° в 544–2400 мкс — для Parallax диапазон лучше задать явно:

#include <Servo.h>

Servo arm;   // positional servo, Parallax 900-00005
Servo wheel; // continuous rotation servo, Feetech FS5106R

void setup() {
  // 620 us = 0 deg, 2420 us = 180 deg (Parallax guide v3.0)
  arm.attach(9, 620, 2420);
  wheel.attach(10);
  wheel.writeMicroseconds(1500); // neutral: stopped (1500 +/- 9 us)
}

void loop() {
  arm.write(0);
  delay(1000);                   // 180 deg at 0.19 s per 60 deg takes ~0.6 s
  arm.write(180);
  delay(1000);

  wheel.writeMicroseconds(1700); // counterclockwise, part speed
  delay(2000);
  wheel.writeMicroseconds(1500); // stop; trim this value on the actual unit
  delay(1000);
}

writeMicroseconds() задаёт длительность напрямую, а detach() прекращает импульсы — обычный привод после этого не держит положение.

На STM32 и других микроконтроллерах импульс формирует аппаратный таймер в режиме ШИМ с периодом 20 мс, и программа меняет только регистр сравнения; расчёт регистров — в калькуляторе. Если приводов больше, чем каналов таймера, ставят PCA9685: 16 каналов по I²C, 4096 шагов на период. Наш расчёт: при 50 Гц шаг — 20 мс / 4096 ≈ 4,9 мкс, примерно полградуса у привода с 10 мкс на градус.

Типичные ошибки

  • Привод дёргается, микроконтроллер перезапускается — питание приводов от стабилизатора платы; нужен отдельный источник с общей землёй.
  • Привод гудит в крайнем положении — импульс уводит вал в упор; сузьте диапазон attach(pin, min, max) под свой привод.
  • Привод не доходит до 180° — диапазон по умолчанию не совпадает с диапазоном привода: у HS-422 ход всего ±60°.
  • Привод постоянного вращения медленно ползёт при 1500 мкс — нейтраль экземпляра сдвинута в пределах допуска ±9 мкс; подберите её на образце.
  • Перестал работать analogWrite() на соседнем выводе — библиотека Servo заняла его таймер.

Частые вопросы

Какой сигнал нужен сервоприводу?

Импульс каждые 20 мс (50 Гц), длительность которого задаёт угол. Диапазон у каждого привода свой: у Parallax 900-00005 0° — 620 мкс, 90° — 1520 мкс, 180° — 2420 мкс; у Hitec HS-422 ±60° при 900–2100 мкс с центром 1500 мкс. Уровень сигнала — 3,3–5 В: Parallax указывает минимум 3,3 В, Feetech FS5106R — высокий уровень 2–5 В, так что микроконтроллер на 3,3 В подходит.

Можно ли питать сервопривод от Arduino?

Не стоит: при остановке вала привод потребляет сотни миллиампер — у Hitec HS-422 до 600–750 мА по спецификации и 800 мА по странице изделия, у Feetech FS5106R до 1,1 А. Такой бросок вызывает просадку и перезапуск микроконтроллера. Parallax в своей схеме питает привод от отдельного источника 4–6 В, а с микроконтроллером соединяет только землю и сигнальный провод.

Чем сервопривод постоянного вращения отличается от обычного?

У него нет обратной связи по углу: импульс задаёт не положение, а скорость и направление. У Feetech FS5106R нейтраль — 1500 ± 9 мкс, а зона нечувствительности — 18 мкс: около нейтрали вал стоит, при 1500–1800 мкс вращается против часовой стрелки, при 1200–1500 мкс — по часовой, быстрее по мере удаления от нейтрали. Повернуть его на заданный угол без внешнего датчика нельзя.

Почему сервопривод гудит и греется?

Он упирается: импульс задаёт угол за механическим упором или нагрузка больше момента привода, и двигатель стоит под током, близким к току остановки. Сузьте диапазон импульсов, уменьшите плечо нагрузки или возьмите привод мощнее.

Как подключить много сервоприводов?

Библиотека Arduino Servo ведёт до 12 приводов на одном таймере. Если выводов или таймеров не хватает, ставят контроллер ШИМ PCA9685: 16 каналов по I²C. Главное в обоих случаях — источник питания, рассчитанный на сумму токов остановки приводов, которые могут упереться одновременно.

Источники

  1. Parallax Inc. Parallax Standard Servo (#900-00005) Product Guide, v3.0 (цифровая версия, 8/10/2022) — страница загрузок Parallax (файл 900-00005-Parallax-Digital-Std-Servo-Guide-v3.0.pdf); 0–180°, 38 oz-in при 6 В, 0,19 с/60° при 6 В и 0,23 с/60° при 4,8 В; питание 4–6 В; 100 мА в движении без нагрузки, 20 мА в покое, под нагрузкой кратко 500 мА и больше; ШИМ 50 Гц; рабочий диапазон импульсов 500–2530 мкс ±20 мкс; 620/1520/2420 мкс — 0°/90°/180°; механические упоры около −10° и 190°; сигнальный вход 3,3 В мин., 5 В тип., до Vservo + 0,2 В; отдельное питание привода, общая земля; без импульсов привод не держит положение; отличия цифровой версии от аналоговой
  2. Hitec RCD. HS-422 General Specification, spec sheet v2.2 — копия на сайте SparkFun; ШИМ-управление, датчик положения — контактный потенциометр, коллекторный двигатель с сердечником, аналоговый контроллер, четыре пластиковые шестерни, люфт не более 0,5°; 4,8–6,0 В; 0,21/0,16 с на 60°; момент останова 3,1/3,9 кгс·см; ток покоя 8 мА, без нагрузки 150/180 мА, при остановке 600/750 мА; зона нечувствительности 5 мкс; ход ±60° при 900–2100 мкс, центр 1500 мкс
  3. Hitec RCD. HS-422 Deluxe Standard Servo — страница изделия — проверено 29.10.2026: ток остановки 800 мА (напряжение не указано), зона нечувствительности 8 мкс, двигатель трёхполюсный с ферритовыми магнитами
  4. Feetech. FS5106R Product Specification, edition A/0 (2021-07-29) — копия на сайте Pololu; сервопривод постоянного вращения, датчика угла нет, ограничения угла нет, редуктор 1/210; при 4,8/6 В: 75/95 об/мин, ток без нагрузки 250/350 мА, момент останова 4,8/6 кгс·см, ток останова 0,9/1,1 А, ток покоя 6 мА, номинальный момент 1,6/2 кгс·см при 300/400 мА; п. 5-10 — напряжение питания 4–8,4 В, 4,8 и 6 В — напряжения испытаний; п. 7-6 — нейтраль 1500 ± 9 мкс; п. 7-7 — зона нечувствительности 18 мкс; против часовой стрелки при 1500→1800 мкс, диапазон 1200–1800 мкс; период 20 мс, импульс 500–2500 мкс, высокий уровень 2–5 В, низкий 0–0,45 В
  5. Arduino. Servo library, src/Servo.h и src/avr/Servo.cpp (LGPL 2.1) — MIN_PULSE_WIDTH 544 мкс, MAX_PULSE_WIDTH 2400 мкс, DEFAULT_PULSE_WIDTH 1500 мкс, REFRESH_INTERVAL 20 000 мкс; до 12 приводов на таймер; при подключении первого привода analogWrite на выводах этого таймера перестаёт работать; attach(pin, min, max), write() — угол 0–180°, значение не меньше MIN_PULSE_WIDTH считается микросекундами, writeMicroseconds(), detach() прекращает импульсы
  6. NXP Semiconductors. PCA9685 16-channel, 12-bit PWM Fm+ I2C-bus LED controller, product data sheet (Rev. 4, 16 April 2015) — 16 каналов, 12 бит (4096 шагов) на период, частота ШИМ 24–1526 Гц через PRE_SCALE

Нашли ошибку?