Использование Arduino позволяет непрерывному сервоприводу двигаться в противоположном направлении

Для своего проекта я использую 6 непрерывных сервоприводов, подключенных к щиту Adafruit Servi. Чтобы запустить их, я использую - ‘pwm.setPWM(0, 0, 1000)’ , а затем установите задержку, чтобы запустить их так долго, как я хотел бы, а затем запустить - ‘pwm.setPWM(0, 0, 0)’ , чтобы остановить его.

Я хотел бы запустить сервопривод в противоположном направлении. Как бы я это сделал?

, 👍-1


1 ответ


1

Вы, наверное, уже знаете, что непрерывные сервоприводы отличаются от других любительских сервоприводов тем, что они свободно вращаются, а ШИМ-сигнал используется для управления скоростью и направлением вращения.

Конкретная модель сервопривода, которую вы используете, очень важна, и вам нужно будет обратиться к спецификации, чтобы узнать ее детали. Особенности минимальная (обычно вращение по часовой стрелке); средняя (нейтраль / отсутствие вращения); максимальная (обычно вращение против часовой стрелки) ширина импульса ШИМ. Средняя точка часто устанавливается шириной импульса ШИМ 1500 микросекунд, но это может варьироваться, и стоит проверить.

Библиотека, на которую вы ссылались, реализует функцию setPWM (), как вы уже упоминали, однако вы заметите, что она работает в диапазоне тиков от 0 до 4095. Два значения параметров, устанавливающих время включения и выключения ШИМ-импульса, выражаются в значениях от 0 до 4095. Чтобы использовать эту функцию, вам нужно сопоставить эти параметры для получения ШИМ-сигнала, который ожидает сервопривод.

Я рекомендую альтернативу, используя функцию writeMicroseconds() той же библиотеки, которая принимает значение в микросекундах, для которого ШИМ-сигнал будет высоким. Вы сможете получить их непосредственно из таблицы данных.

В своем вопросе вы упоминаете использование ШИМ примерно 25% рабочего цикла (1000/4095) для включения. Это, вероятно, намного больше, чем желаемый максимум для вашего сервопривода, который, если он составляет 2000 микросекунд, может потребовать значения что-то вроде 430 (/4095). Точно так же вы упомянули нулевой импульс для достижения остановки. Я думаю, что эта библиотека использует ноль как частный случай отсутствия ШИМ-импульса. Вы сказали, что это создает условие остановки для ваших сервоприводов, но найти нейтральное значение может быть лучше.

Вместо того чтобы вычислять математику для setPWM() для включения и выключения импульса ШИМ, функция writeMicroseconds() может быть проще.

Вам нужно будет проверить данные для ваших сервоприводов, но значение 1500 микросекунд должно быть близко к нейтрали / отсутствию вращения. Уменьшение значений меньше этого должно генерировать увеличение скорости по часовой стрелке. Увеличение значений больше нейтрального должно генерировать увеличение скорости против часовой стрелки.

,