Почему Arduino использует диапазон ШИМ от 544 до 2400?

В школе я узнал, что типичные сервоприводы используют простую систему ШИМ для управления сервоприводом. Для этого мы сгенерируем импульс длительностью 1000 мс, чтобы установить сервопривод на 0 градусов, и импульс 2000 мс, чтобы установить его на 180 градусов. Простые основы, не так ли?

Недавно я попытался настроить свой HS-311 с этими значениями и обнаружил, что сервопривод движется менее чем на 90 градусов. Я переключился на библиотеку Servo.h, и она работала нормально. Я заглянул в файл Servo.h и обнаружил следующее:

#define MIN_PULSE_WIDTH       544     // самый короткий импульс, отправленный на сервопривод
#define MAX_PULSE_WIDTH      2400     // самый длинный импульс, отправленный на сервопривод
#define DEFAULT_PULSE_WIDTH  1500     // ширина импульса по умолчанию при подключенном сервоприводе

544? 2400? Откуда эти цифры?

Я просмотрел старая таблица данных для этого сервопривода и найдена

OPERATING TRAVEL: 40�/ONE SIDE PULSE TRAVELING 400usec
DIRECTION: CLOCK WISE/PULSE TRAVELING 1500 TO 1900usec

Трудно сказать, что означают цифры, но они определенно не от 1000 до 2000!

Затем я взглянул на спецификации на servocity.com и увидел:

Max PWM Signal Range    575-2460μsec

Это соответствует исходному коду Servo.h!

Что здесь происходит? Производители обычно выходят за пределы диапазона 1000–2000 мкс? Эти значения, которые я вижу, намного превышают то, что я считаю приемлемыми допусками. Помогите, пожалуйста, разобраться, откуда взялись эти цифры!

, 👍5

Обсуждение

IIRC первые модели таких сервоприводов появились в 70-х годах, около 50 лет назад. По крайней мере, один производитель использовал низкие импульсы в отличие от других брендов. Диапазон ширины импульса также не был стандартизирован. Так что эти вариации могут быть исторически необходимыми, или неизбежным разным качеством продукции, или просто попыткой выйти за рамки. Но поскольку я не эксперт, это всего лишь комментарий, а не реальный ответ... Возможно, вы захотите начать исследование по этому вопросу. ;-), @the busybee

Вы можете изменить это на «Почему Servo...» или что-то в этом роде. Большинство людей, читающих текущий заголовок, вероятно, подумают, что речь идет об analogWrite()., @timemage


1 ответ


1

Arduino очень терпим к пользователю. Некоторым пользователям может потребоваться немного выйти за пределы стандартного диапазона, поэтому он расширен на 400 мкс в обоих концах.

,