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

Управляющий импульс сервопривода

Хобби-сервопривод управляется одним проводом: микроконтроллер раз в 20 мс подаёт импульс, а его длительность в сотни микросекунд превращается в угол поворота вала. Диапазоны у разных приводов заметно различаются.

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

Управляющий импульс сервопривода — положительный импульс, который подают на сигнальный провод хобби-сервопривода с периодом около 20 мс; его длительность, обычно от 0,5 до 2,5 мс, задаёт угол поворота вала. Это ШИМ в широком смысле, но значение имеет именно длительность в микросекундах, а не коэффициент заполнения.

Диапазоны разных приводов

ИсточникИмпульсУгол
Parallax 900-00005620 / 1520 / 2420 мкс≈ 0° / 90° / 180°
Parallax 900-00005, рабочий диапазон500–2530 мкс ±20 мкс—
Hitec HS-422900–2100 мкс, центр 1500 мкс±60°
Arduino Servo, по умолчанию544–2400 мкс, центр 1500 мкс0–180°

Видно, что «стандартных» 1–2 мс на 0–180° нет: каждый привод нужно проверять по документации или осторожно, начиная с центра 1500 мкс.

Как формируют сигнал

На AVR библиотека Arduino Servo формирует импульсы прерываниями от 16-битного таймера, с периодом повтора 20 000 мкс. На STM32 и ESP32 удобнее аппаратный ШИМ с периодом 20 мс: таймер с разрешением 1 мкс даёт шаг угла около 0,1°. Значения предделителя и регистра сравнения для конкретной частоты тактирования считает калькулятор ШИМ для сервопривода.

Питание и подключение

Parallax рекомендует питать привод от отдельного источника 4–6 В с общей землёй: при движении под нагрузкой ток кратко доходит до 500 мА и выше. Сигнальный вход принимает уровни TTL и CMOS от 3,3 В, поэтому микроконтроллер с питанием 3,3 В подключают напрямую. Маленькие изменения длительности около текущего положения привод игнорирует — это его зона нечувствительности.

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

Важна ли частота 50 Гц или только длительность импульса?

Угол задаёт длительность импульса. Период 20 мс (50 Гц) — стандартный интервал повтора, его используют и Parallax, и библиотека Arduino Servo. Если импульсы прекратятся, привод Parallax перестаёт держать положение, поэтому сигнал нужно подавать постоянно.

Почему сервопривод упирается в край и гудит при write(0)?

Библиотека Arduino Servo по умолчанию переводит 0–180° в 544–2400 мкс, а у конкретного привода диапазон может быть уже: у Hitec HS-422 по спецификации ±60° соответствуют 900–2100 мкс. Импульс за пределами рабочего диапазона гонит вал в механический упор. Границы задают вызовом attach(pin, min, max).

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

Parallax прямо советует питать привод от отдельного источника 4–6 В и объединять только землю: под нагрузкой ток кратко растёт до 500 мА и больше, и просадка может сбросить микроконтроллер. Управляющий вход потребляет мало, его подключают к выводу ШИМ напрямую.

Источники

  1. Parallax Inc. Parallax Standard Servo (#900-00005) Product Guide, v3.0 (8/10/2022) — ШИМ 50 Гц, импульс повторяют каждые 20 мс; рабочий диапазон 500–2530 мкс ±20 мкс; 620, 1520, 2420 мкс ≈ 0°, 90°, 180°; вне диапазона и без импульсов привод не держит положение; механические упоры около −10° и 190°; сигнал TTL/CMOS от 3,3 В; питание привода 4–6 В отдельно от микроконтроллера, ток кратко 500 мА и больше
  2. Hitec RCD. HS-422 General Specification, spec sheet v2.2 (копия на сайте SparkFun) — ±60° по умолчанию при импульсе 900–2100 мкс, центр 1500 мкс; питание 4,8–6,0 В
  3. 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 мкс

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