Использование Arduino позволяет непрерывному сервоприводу двигаться в противоположном направлении
Для своего проекта я использую 6 непрерывных сервоприводов, подключенных к щиту Adafruit Servi. Чтобы запустить их, я использую - ‘pwm.setPWM(0, 0, 1000)’ , а затем установите задержку, чтобы запустить их так долго, как я хотел бы, а затем запустить - ‘pwm.setPWM(0, 0, 0)’ , чтобы остановить его.
Я хотел бы запустить сервопривод в противоположном направлении. Как бы я это сделал?
@nina, 👍-1
1 ответ
Вы, наверное, уже знаете, что непрерывные сервоприводы отличаются от других любительских сервоприводов тем, что они свободно вращаются, а ШИМ-сигнал используется для управления скоростью и направлением вращения.
Конкретная модель сервопривода, которую вы используете, очень важна, и вам нужно будет обратиться к спецификации, чтобы узнать ее детали. Особенности минимальная (обычно вращение по часовой стрелке); средняя (нейтраль / отсутствие вращения); максимальная (обычно вращение против часовой стрелки) ширина импульса ШИМ. Средняя точка часто устанавливается шириной импульса ШИМ 1500 микросекунд, но это может варьироваться, и стоит проверить.
Библиотека, на которую вы ссылались, реализует функцию setPWM (), как вы уже упоминали, однако вы заметите, что она работает в диапазоне тиков от 0 до 4095. Два значения параметров, устанавливающих время включения и выключения ШИМ-импульса, выражаются в значениях от 0 до 4095. Чтобы использовать эту функцию, вам нужно сопоставить эти параметры для получения ШИМ-сигнала, который ожидает сервопривод.
Я рекомендую альтернативу, используя функцию writeMicroseconds() той же библиотеки, которая принимает значение в микросекундах, для которого ШИМ-сигнал будет высоким. Вы сможете получить их непосредственно из таблицы данных.
В своем вопросе вы упоминаете использование ШИМ примерно 25% рабочего цикла (1000/4095) для включения. Это, вероятно, намного больше, чем желаемый максимум для вашего сервопривода, который, если он составляет 2000 микросекунд, может потребовать значения что-то вроде 430 (/4095). Точно так же вы упомянули нулевой импульс для достижения остановки. Я думаю, что эта библиотека использует ноль как частный случай отсутствия ШИМ-импульса. Вы сказали, что это создает условие остановки для ваших сервоприводов, но найти нейтральное значение может быть лучше.
Вместо того чтобы вычислять математику для setPWM() для включения и выключения импульса ШИМ, функция writeMicroseconds() может быть проще.
Вам нужно будет проверить данные для ваших сервоприводов, но значение 1500 микросекунд должно быть близко к нейтрали / отсутствию вращения. Уменьшение значений меньше этого должно генерировать увеличение скорости по часовой стрелке. Увеличение значений больше нейтрального должно генерировать увеличение скорости против часовой стрелки.
- Как изменить скорость нескольких сервоприводов, работающих одновременно с модулем PCA9685?
- Попытка одновременного питания нескольких сервоприводов с помощью Arduino Mega
- Adafruit Feather 32u4 BLE совместим с программным SPI?
- Когда я проверяю скетч, я получаю несколько ошибок
- Как управлять выключателем питания RC с помощью Arduino-/Adafruit-Board?
- Как совместить сервозащитный экран с перистальтическим насосом?
- Сервопривод делает частичное вращение и автоматически прекращает работу
- Невозможно выйти из цикла while