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

Недавно я начал возиться с набором Arduino UNO R3, который я купил некоторое время назад, и я был так раскручен, что решил построить роботизированную руку.

Эта роботизированная рука, которую я нашел на Thingiverse, требует использования 4 серводвигателей. Я купил дешевые моторы SG90 на амазоне. Поскольку для работы этих сервоприводов требуется довольно большой ток, я собираюсь использовать внешний источник питания для их одновременного питания и 16-канальный сервоконтроллер PCA9685.

Теперь ... я пришел к пониманию, что положение рупора серводвигателя можно выбрать с помощью широтно-импульсной модуляции (ШИМ) на частоте 50 Гц, с шириной импульса 1 мс, соответствующей 0°, и 2 мс - 180°, согласно техпаспорту. моего сервопривода SG90.

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

Как я могу точно определить, какая ширина импульса соответствует 0° и 180° с помощью Arduino?

Кроме того, если бы я отправил сервоприводу ширину импульса, меньшую, чем та, которая соответствует 0°, не повредит ли это двигатель?

Большое спасибо!

#Andrea Angella, Ширина импульса Servo PWM одинакова для Arduino и Rpi. Вы можете найти общие сведения и приемы полезными в моих ответах на следующие вопросы и ответы RpiSE: (1) Как Rpi может перемещать серводвигатель с помощью контакта GPIO в режиме PWM? - RpiSE, спросил 1 год, 11 месяцев назад Активен 1 год назад Просмотрено 2k раз, raspberrypi.stackexchange.com/questions/98467/… , / to continue, ...
/ продолжение, ... (2) RPi4B PCA9685 PWM Controlling Many Servos - RpiSE, спросил 1 год, 7 месяцев назад Активен 1 год, 2 месяца назад Просмотрено 587 раз, raspberrypi.stackexchange.com/questions/102269/… , (3) Как использовать контакты GPIO Rpi python в режиме вывода ШИМ для создания сигналов ШИМ? - RpiSE, задан 2 месяца назад Активен 25 дней назад Просмотрен 128 раз, raspberrypi.stackexchange.com/questions/120452/… . Ваше здоровье.

Ответы (2)

Как я могу точно определить, какая ширина импульса соответствует 0° и 180° с помощью Arduino?

Вы не можете. Начнем с того, что ни один любительский сервопривод, даже дорогой, не имеет точного хода на 180°. Дешевые сервоприводы почти гарантированно отличаются. Кроме того, некоторая дешевая сервоэлектроника зависит от частоты, поэтому положение 0 при 60 Гц может отличаться от положения 0 при 65 Гц.

если бы я отправил сервоприводу ширину импульса, меньшую, чем та, которая соответствует 0 °, повредит ли это двигатель?

Не должно, по крайней мере, не сразу. Но, скорее всего, сервопривод попытается туда добраться, потребляя довольно большой ток срыва и нагреваясь.

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

Если вы сомневаетесь, обратитесь к спецификации.

0 градусов = 1,5 мс
-90 градусов = 1 мс
+90 градусов = 2 мс

Вы сообщили об ошибке % на частоте 50 Гц? Показать фактические ошибки. Ошибка может быть вычислена или классифицирована как смещение и/или усиление , в зависимости от допусков компонентов (неуказанных).