Я новичок в использовании сервоприводов с Raspberry Pi. Хотя у меня есть некоторый опыт, я хотел бы понять вещи немного лучше. Поэтому я хотел бы поделиться с вами некоторыми вопросами и надеюсь получить лучшее представление о том, как работать с сервоприводами.
Вопросы, с которыми я сейчас борюсь:
1. Учитывая характеристики сервопривода, как я могу вычесть минимальное и максимальное значения (углы) сервопривода?
2. Используя ШИМ-шляпу, описанную ниже, и библиотеку Python, которая поставляется вместе с ней, как точно рассчитать время, в течение которого импульс ШИМ должен быть установлен на высокий уровень для достижения определенного угла? Например: какой должна быть высокая длина импульса ШИМ для отправки на сервопривод, чтобы он находился в положении 90 градусов? И что это будет за положение 120 градусов?
Любые мысли, замечания или комментарии высоко ценятся, заранее спасибо!
Аппаратные и программные характеристики
Сервопривод
У нас есть сервопривод Power HD LF-20MG.
Крутящий момент (4,8 В): 16,5 кг-см
Крутящий момент (6,6 В): 20 кг-см
Скорость: 0,18 с (4,8 В) | 0,16 с (6,6 В)
Рабочее напряжение: 4,8–6,6 В пост. тока
Вес: 60 г
Рабочая частота: 1520 мкс (= 1,52 мс) при 333 Гц
Максимальный ход: 165 градусов
ШИМ-контроллер
Для управления сервоприводом с помощью Raspberry Pi мы используем PWM/SERVO HAT от Adafruit для точной синхронизации . HAT должен управляться с помощью их библиотеки Python, в которой следующие функции управляют сервоприводом:
Программный ШИМ-контроллер
Во-первых, установка частоты. Судя по спецификациям сервопривода, думаю, должно быть 333.
pwm.setPWMFreq(333)
Во-вторых, есть функция, которая фактически управляет импульсом ШИМ. Вот в чем я действительно сомневаюсь (см. второй вопрос выше).
var port = 15
var tickHigh = 0
var tickLow = 1400 #For example; range from 0-4096
pwm.setPWM(port, tickHigh, tickLow)
Как указано в документах (см. эту ссылку ), используемые значения рассчитываются на основе необходимой длительности импульса в микросекундах. Но я действительно борюсь здесь: я не могу определить, какой должна быть необходимая ширина импульса для этого сервопривода (отсюда и вопросы).
ЕСЛИ бы я знал это, вычисления для программного обеспечения стали бы намного проще:
(1 / частота) / 4096 = время за тик
Для частоты этого сервопривода это было бы: (1/333) / 4096 = 0,00000073315503
Тогда я мог используйте следующую формулу, учитывая необходимую длину импульса:
необходимая длина импульса / время на тик = tickHigh
> If you need to calculate pulse-width in microseconds, you can do that
> by first figuring out how long each cycle is. That would be 1/freq
> where freq is the PWM frequency you set above. For 1000 Hz, that would
> be 1 millisecond. Then divide by 4096 to get the time per tick, eg 1
> millisecond / 4096 = ~0.25 microseconds. If you want a pulse that is
> 10 microseconds long, divide the time by time-per-tick (10us / 0.25 us
> = 40) then turn on at tick 0 and turn off at tick 40.
Ваш вопрос был слишком длинным, чтобы его можно было прочитать.
Эти серводвигатели для хобби управляются шириной импульса. Стандартный диапазон составляет от 1 до 2 мс и должен повторяться каждые 20-50 мс. Ширина импульса 1,5 мс поместит сервопривод в середину его диапазона, с 1 мс на один конец и 2 мс на другой. Некоторые сервоприводы могут двигаться немного дальше, реагируя на значения, немного превышающие диапазон 1-2 мс.
Большинство сообщит вам диапазон углов, в котором они предназначены для работы, так что это даст вам некоторое представление об изменении угла на увеличение ширины импульса на вашем конце.
В конце концов, помните, что это сервоприводы для хобби , поэтому не ждите настоящего описания, в котором все будет правильно изложено. Лучший способ узнать, на что способен конкретный сервопривод для хобби, — это измерить его. Настройте приспособление, которое может изменять ширину импульса от 500 мкс до 2,5 мс, и посмотрите, что устройство делает в ответ.
Исходя из этой строки - « Рабочая частота: 1520 мкс (= 1,52 мс) при 333 Гц », 1,52 мс - это ширина импульса, необходимая для максимального вращения вашего сервопривода, т.е. 165 градусов.
в таком случае:
Как вы уже подсчитали, период времени вашего пульса составляет 1/333 = 0,003003 сек. Требуемое время максимума в периоде составляет 1,52 мс = 0,00152 сек. Как вы уже рассчитали время на тик = 1/333/4096 = 0,000000733
Таким образом, чтобы создать высокий импульс шириной 0,00152 с, вам нужно 0,00152/0,000000733 = 2073 тика.
попробуйте задать tickHigh = 0 и tickLow = 2073
или tickHigh = 4096-2073 = 2023 и tickLow = 4096
Крис Стрэттон