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

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

Выберите сервопривод или задайте его диапазон импульсов — калькулятор переведёт угол в длительность импульса, посчитает коэффициент заполнения и значения регистров таймера для AVR и STM32, а заодно суммарный ток приводов при остановке, на который нужно рассчитывать питание.

Исходные данные

По документу: Parallax 900-00005 Product Guide v3.0

мкс
мкс
°
°
Гц

Обычно 50 Гц — период 20 мс

Таймер
МГц
мА

Hitec HS-422: 600–750 мА по спецификации, 800 мА по сайту Hitec; Parallax: кратко 500 мА и больше

Результат

Длительность импульса
1520 мкс
10 мкс на градус
Коэффициент заполнения
7,6 %период 20 мс
Предделитель N
8 (биты CS12:CS10 в TCCR1B)
ICR1 (TOP, режим 14 Fast PWM)
39999
OCR1A для нужного угла
3039
OCR1A в начале и в конце хода
1239 … 4839
Шаг таймера
0,5 мксчастота 50 Гц; импульс выходит 1520 мкс
Ток всех приводов при остановке
0,5 Астолько должен выдать источник питания приводов

Единого стандарта на диапазон импульсов нет: у Parallax 620–2420 мкс на 180°, у Hitec HS-422 900–2100 мкс на ±60°, библиотека Arduino Servo по умолчанию даёт 544–2400 мкс. Импульс за пределами хода упирает вал в механический упор — ток растёт до тока остановки.

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Сервопривод для моделей — это двигатель с редуктором, потенциометром на выходном валу и платой управления. Плата сравнивает положение вала с длительностью входного импульса и крутит двигатель, пока они не совпадут. Импульсы повторяются с периодом около 20 мс; угол задаёт только длительность импульса, а не коэффициент заполнения как таковой — при 50 Гц он лежит в пределах 2,5–12,5 %.

Длительность импульса и угол

Зависимость линейная: каждый градус добавляет одно и то же число микросекунд,

t=tmin+(tmax−tmin)⋅φφход.t = t_\text{min} + (t_\text{max} - t_\text{min}) \cdot \frac{\varphi}{\varphi_\text{ход}}.

Но концы диапазона у каждого производителя свои:

ИсточникИмпульсХодмкс на градусЧастота
Parallax Standard Servo 900-00005620–2420 мкс, центр 1520180°1050 Гц
Hitec HS-422900–2100 мкс, центр 1500±60°10—
Arduino Servo, по умолчанию544–2400 мкс180°10,350 Гц

У Parallax 90° — это 1520 мкс, у Arduino Servo те же 90° дают 1472 мкс, а 1500 мкс соответствуют 92,7°. Поэтому «1,5 мс — центр» верно лишь приблизительно, а для точной работы диапазон берут из документации на свой привод или подбирают на образце. Parallax указывает и рабочий диапазон своего привода — 500–2530 мкс: за его пределами привод перестаёт держать положение.

Таймер AVR

На ATmega328P удобнее всего 16-битный Timer1 в режиме 14 (Fast PWM, TOP = ICR1). Частота повторения по даташиту

f=fclkN⋅(1+ICR1),f = \frac{f_\text{clk}}{N \cdot (1 + \text{ICR1})},

а выход OC1A держится в единице OCR1A + 1 тиков. При 16 МГц и N = 8 один тик — 0,5 мкс, ICR1 = 39 999 даёт ровно 50 Гц, и импульс 1500 мкс получается при OCR1A = 2999. Библиотека Arduino Servo тоже работает на Timer1 с предделителем 8, только формирует импульсы в прерываниях, чтобы вести до 12 приводов одним таймером. Шаг в 0,5 мкс — это 0,05° у привода с 10 мкс на градус, точнее, чем держит механика.

Таймер STM32

У STM32 частота счётчика — fTIM/(PSC + 1), период — ARR + 1 тиков, а в режиме PWM mode 1 выход активен, пока счётчик меньше CCRx. Калькулятор подбирает самый маленький предделитель, при котором период получается точно. Для таймера на 72 МГц это PSC = 23 и ARR = 59 999: тик 1/3 мкс, импульс 1520 мкс — CCR = 4560. Если удобнее считать в микросекундах, можно взять PSC = 71 — тогда ARR = 19 999 и CCR равен длительности импульса в микросекундах.

Питание и ток

Привод потребляет мало, пока стоит, и много, когда двигается или упирается. По спецификации Hitec HS-422 потребляет 8 мА в покое, 150–180 мА при движении без нагрузки и 600–750 мА при остановке вала; на странице изделия Hitec указаны 800 мА — для расчёта питания берите большее. Parallax предупреждает, что ток его привода под нагрузкой кратковременно доходит до 500 мА и больше, и в схеме подключения даёт приводу отдельный источник питания. Источник рассчитывают на сумму токов остановки всех приводов, которые могут упереться одновременно, — это сделает калькулятор бюджета питания. Регистры для других частот и таймеров подберёт калькулятор таймера.

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

Какая длительность импульса у сервопривода?

Общего стандарта нет. Часто называют 1–2 мс при 50 Гц, но производители дают свои диапазоны: Parallax Standard Servo — 620–2420 мкс на 180°, Hitec HS-422 — 900–2100 мкс на ±60° с центром 1500 мкс, библиотека Arduino Servo по умолчанию — 544–2400 мкс на 180°. Если документа нет, начните с 1500 мкс и расширяйте диапазон понемногу, пока вал не дойдёт до упора без гудения.

Почему сервопривод гудит и греется в крайнем положении?

Импульс просит угол за механическим упором, и привод пытается его достичь: двигатель стоит под током, близким к току остановки. У Hitec HS-422 это 600–750 мА по спецификации v2.2 и 800 мА по странице изделия против 150–180 мА без нагрузки. Сузьте диапазон импульсов, чтобы крайние значения не доходили до упоров.

Как настроить Timer1 ATmega328P на сервопривод?

При 16 МГц и предделителе 8 таймер тикает каждые 0,5 мкс. Режим 14 (Fast PWM, TOP = ICR1) с ICR1 = 39 999 даёт период 20 мс, то есть 50 Гц. Импульс длится OCR1A + 1 тиков: для 1500 мкс OCR1A = 2999, для 1000 мкс — 1999, для 2000 мкс — 3999. Так один таймер ведёт два привода через выходы OC1A и OC1B.

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

Один маленький привод без нагрузки — иногда, но ток при остановке и при старте в сотни миллиампер вызывает просадки и перезапуски микроконтроллера. В схеме подключения Parallax привод питается от отдельного источника, чтобы скачки его тока не вызывали просадку питания микроконтроллера; общая у них только земля. Суммарный ток всех приводов при остановке и подбор источника посчитает калькулятор бюджета питания.

Источники

  1. Parallax Inc. Parallax Standard Servo (#900-00005) Product Guide, v3.0 (цифровая версия, 2022) — страница загрузок Parallax (файл 900-00005-Parallax-Digital-Std-Servo-Guide-v3.0.pdf); ШИМ 50 Гц, период 20 мс; рабочий диапазон импульсов 500–2530 мкс ±20 мкс; 620 / 1520 / 2420 мкс — 0° / 90° / 180°, t_pulse = 10 · angle + 620; механические упоры около −10° и 190°; ток 100 мА в движении без нагрузки, 20 мА в покое, под нагрузкой кратко 500 мА и больше; в схеме подключения привод питается от отдельного источника, чтобы скачки его тока не вызывали просадку питания микроконтроллера, общая — земля
  2. Hitec RCD. HS-422 Deluxe Standard Servo — страница изделия — проверено 29.10.2026: питание 4,8–6,0 В, ток покоя 8 мА, без нагрузки 150 мА, ток остановки 800 мА, зона нечувствительности 8 мкс; диапазона импульсов на странице нет
  3. Hitec RCD. HS-422 General Specification, spec sheet v2.2 — копия на сайте SparkFun, на сайте Hitec файла нет; по умолчанию ±60°, длительность импульса 900–2100 мкс, центр 1500 мкс; питание 4,8–6,0 В; ток покоя 8 мА, без нагрузки 150 и 180 мА, ток остановки 600 мА при 4,8 В и 750 мА при 6,0 В; зона нечувствительности 5 мкс
  4. 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 мкс; write(angle) переводит 0–180° в 544–2400 мкс; Timer1 с предделителем 8, usToTicks(us) = clockCyclesPerMicrosecond() · us / 8
  5. Microchip. ATmega328P Data Sheet (DS40002061B), 16-bit Timer/Counter1 — Fast PWM: f = f_clk_I/O / (N · (1 + TOP)), режим 14 — TOP = ICR1; неинвертирующий выход OC1A устанавливается на BOTTOM и сбрасывается при совпадении с OCR1A
  6. STMicroelectronics. RM0008 Reference Manual, STM32F101xx–F107xx, general-purpose timers TIM2–TIM5 — частота счётчика f_TIM / (PSC + 1), период (ARR + 1) тактов; PWM mode 1 при счёте вверх — выход активен, пока CNT < CCRx

Где пригодится

Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/servo-pwm/" title="Сигнал управления сервоприводом: импульс, угол, таймер" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/servo-pwm/">Сигнал управления сервоприводом: импульс, угол, таймер</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?