Код библиотеки сервоприводов — «задержка» против «шагов»

Это довольно простой вопрос. По сути, я хочу знать разницу между настройкой базового кода развертки (из библиотеки) с точки зрения инструкции «задержка» и «поз += 1» (с шагом в 1 градус). ) инструкция.

Для моего проекта я хочу, чтобы мой сервопривод перемещался на 60 градусов с той же частотой, что и относительно быстрое сердцебиение (скажем, два удара в секунду). То есть сервопривод перемещается от нуля до 60 градусов дважды за одну секунду. Должен ли я настроить инструкцию «задержка» или «позиция» из библиотеки? Какая разница? Имеет ли значение, какой из них я настраиваю, если он делает то, что мне нужно?

Спасибо за ваше время!

, 👍0

Обсуждение

когда дело доходит до программирования микроконтроллеров, микроконтроллер делает именно то, что вы ему говорите, ни больше, ни меньше .... что касается «серводвигателя перемещается от нуля до 60 градусов дважды за одну секунду», вы можете перемещать от нуля до 60 только один раз. ..... вы должны вернуться к нулю, прежде чем действие можно будет повторить .... микроконтроллер не вернет сервопривод в ноль без специальной инструкции для этого, @jsotola

«пока он делает то, что мне нужно» .... вы не четко определили, как должен двигаться сервопривод, поэтому на вопрос нет ответа, @jsotola


2 ответа


Лучший ответ:

0

Изменение задержки и оставление приращения равным единице обычно дает "более плавное" движение. На самом деле, если вы хотите, например, двигаться (примерно) в пять раз быстрее, чем в примере, вы можете либо увеличить задержку до 3 мс, либо увеличить позицию на 5. Вот что происходит при запросе позиции:

Time   0  3  6  9 12 15 18 21 24 27 30 33 ...
Delay  0  1  2  3  4  5  6  7  8  9 10 11 ...
Incr.  0  0  0  0  0  5  5  5  5  5 10 10 ...

Теперь обычно я стараюсь максимально использовать подход с задержкой; ограничения этого подхода заключаются в том, что он потребляет больше ресурсов ЦП, если вы также должны выполнять другие действия между двумя движениями (что не в вашем случае, поскольку вы используете задержки).

Чтобы выполнить четыре движения на 60° за одну секунду, вы должны ждать между вызовами примерно 4 мс.

В любом случае, даже если одиночное приращение является лучшим решением, пока вы выполняете одно движение каждые 10-20 мс, вы не сможете увидеть никаких различий, поэтому даже увеличивая положение на 3 каждые 12 мс или на 5 каждые 20мс нормально. Если вы начинаете слышать «пульсирующий» шум или видите, что двигатель работает «рывками», уменьшите шаг и задержку.

Примечание. Вы также можете использовать несколько приращений, чтобы иметь "дробные" задержки. Например, если вы хотите иметь одно приращение каждые 3,5 мс, вместо использования delayMicroseconds вы можете выполнять два приращения каждые 7 мс.

,

0

Сервосистема отправляет командный импульс с частотой около 50 Гц. это означает, что нет смысла обновлять положение сервопривода чаще, чем это. Servo.write() дает разрешение 1 градус. если вам нужно большее разрешение, вы можете использовать servo.writeMicroseconds() В моем подходе я рассчитываю траекторию положения как функцию времени и обновляю положение сервопривода в цикле while, используя в качестве временной базы millis(). В любом случае, я заканчиваю его и внедряю в библиотеку под названием accServo. https://github.com/Menginventor/accServo

,