Управляющий импульс сервопривода
Хобби-сервопривод управляется одним проводом: микроконтроллер раз в 20 мс подаёт импульс, а его длительность в сотни микросекунд превращается в угол поворота вала. Диапазоны у разных приводов заметно различаются.
Обновлено Редакция GAW
Управляющий импульс сервопривода — положительный импульс, который подают на сигнальный провод хобби-сервопривода с периодом около 20 мс; его длительность, обычно от 0,5 до 2,5 мс, задаёт угол поворота вала. Это ШИМ в широком смысле, но значение имеет именно длительность в микросекундах, а не коэффициент заполнения.
Диапазоны разных приводов
| Источник | Импульс | Угол |
|---|---|---|
| Parallax 900-00005 | 620 / 1520 / 2420 мкс | ≈ 0° / 90° / 180° |
| Parallax 900-00005, рабочий диапазон | 500–2530 мкс ±20 мкс | — |
| Hitec HS-422 | 900–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 мА и больше, и просадка может сбросить микроконтроллер. Управляющий вход потребляет мало, его подключают к выводу ШИМ напрямую.
Источники
- 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 мА и больше
- Hitec RCD. HS-422 General Specification, spec sheet v2.2 (копия на сайте SparkFun) — ±60° по умолчанию при импульсе 900–2100 мкс, центр 1500 мкс; питание 4,8–6,0 В
- 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 мкс
Нашли ошибку?
Смотрите также
- ШИМ сервопривода: угол и таймерИмпульс по углу, диапазоны производителей, ICR1/OCR1A и PSC/ARR/CCR
- ШИМPWM: среднее напряжение через коэффициент заполнения
- Коэффициент заполненияD = τ / T и скважность S = 1 / D
- Зона нечувствительности сервоприводаМинимальное изменение импульса, на которое сервопривод отвечает движением
- Сервопривод постоянного вращенияСервопривод, у которого импульс задаёт скорость и направление вращения
- Таймеры AVRTimer0/1/2, режимы WGM, предделители, формулы ШИМ, захват, примеры