Почему сервопривод поворачивается не на 180°?
Обновлено Редакция GAW
Сервопривод не знает градусов. Он получает импульс раз в 20 мс и поворачивает вал в положение, которое его электроника сопоставила с длительностью этого импульса. Какой длительности соответствует какой угол, решает производитель, а библиотека в программе переводит градусы в микросекунды по своей шкале. Если шкалы не совпадают, привод поворачивается не на тот угол.
Шкалы разных приводов
| Что | 0° (или −60°) | Центр | 180° (или +60°) | Ход |
|---|---|---|---|---|
| Arduino Servo по умолчанию | 544 мкс | 1500 мкс | 2400 мкс | считается 180° |
| Parallax Standard Servo | 620 мкс | 1520 мкс | 2420 мкс | 180° |
| Hitec HS-422 | 900 мкс | 1500 мкс | 2100 мкс | 120° |
У Parallax на один градус приходится 10 мкс, у HS-422 — тоже (1200 мкс на 120°). Пересчитаем, куда встанет Parallax при командах библиотеки с настройками по умолчанию (наш расчёт):
Для Parallax это почти полный ход. А HS-422 на тех же импульсах попытался бы уйти далеко за свои ±60° и упёрся бы в ограничитель.
Как откалибровать
- Командой
writeMicroseconds()найдите длительность, при которой привод стоит в одном крайнем положении без гудения, затем во втором. - Передайте найденные значения в
attach(pin, min, max)— тогдаwrite(0)иwrite(180)дадут именно эти крайние положения. - Не заходите в упоры: привод в упоре гудит и греется, как разобрано в калькуляторе ШИМ для сервопривода.
Если привод вращается непрерывно и не держит угол, это сервопривод постоянного вращения: у него импульс задаёт скорость, а не положение. Подробно об импульсе управления — в словаре, о дрожании вала — в ответе «Почему сервопривод дёргается».
Похожие вопросы
Можно ли выйти за 180°, увеличив длительность импульса?
Немного — до механических упоров, у Parallax это около −10° и 190°. Дальше двигатель упирается, гудит и берёт ток остановки, а пластиковые шестерни могут не выдержать. Расширяйте диапазон шагами и следите, чтобы привод не упирался.
Почему HS-422 поворачивается всего на 120°?
Так он нормирован: Hitec указывает ход ±60° при импульсах 900–2100 мкс. Шире импульс — больше угол, но за пределами спецификации линейность и упоры производитель не гарантирует, поэтому крайние значения подбирают осторожно.
Что передавать в write(): угол или микросекунды?
Оба варианта работают: значения меньше 544 библиотека считает углом, остальные — микросекундами. Для точной настройки удобнее writeMicroseconds(): шаг 1 мкс понятен и не зависит от того, какие min и max переданы в attach().
Источники
- 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 мкс; attach(pin, min, max) задаёт крайние длительности; write() — угол 0–180°, значения не меньше MIN_PULSE_WIDTH считаются микросекундами; writeMicroseconds()
- Parallax Inc. Parallax Standard Servo (#900-00005) Product Guide, v3.0 — 0–180°; рабочий диапазон импульсов 500–2530 мкс ±20 мкс; 620/1520/2420 мкс — 0°/90°/180°, угол растёт против часовой стрелки; механические упоры около −10° и 190°; проверять, что привод не упирается в упоры
- Hitec RCD. HS-422 General Specification, spec sheet v2.2 — ход ±60° при 900–2100 мкс, центр 1500 мкс; зона нечувствительности 5 мкс
Нашли ошибку?
Смотрите также
- СервоприводыУстройство, импульс и угол, постоянное вращение, ток, питание, Arduino Servo
- ШИМ сервопривода: угол и таймерИмпульс по углу, диапазоны производителей, ICR1/OCR1A и PSC/ARR/CCR
- Управляющий импульс сервоприводаИмпульс раз в 20 мс, длительность которого задаёт угол поворота сервопривода
- Почему сервопривод дёргается?Просадка питания, нет общей земли, импульс дрожит больше зоны нечувствительности
- Сервопривод постоянного вращенияСервопривод, у которого импульс задаёт скорость и направление вращения