PCA9685: как "сбросить" ШИМ-сигнал?
Я использую свой Arduino с сервоконтроллером Adafruit PCA9685. Для установки ШИМ-сигналов я использую предоставленную библиотеку: https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
Он позволяет легко установить сигнал ПММ и хорошо работает. Но как я могу "сбросить" ШИМ-сигнал для определенного вывода?
Если ШИМ siganl активен, серво фиксируется в текущем положении и не может быть перемещено вручную, но только путем установки другой длины импульса. Поэтому мне нужно переместить серво, а затем "освободить" его.
5 ответов
К несчастью, AFAIK, сервопривод приводит двигатель в действие, даже когда ШИМ-сигнал не подается. Так что "удаление" ШИМ бесполезно.
Вам придется "выключить" сервопривод, отключив питание. Для этого используйте транзистор (обычно сервоприводы потребляют больше тока, чем может выдержать arduino). Когда вы захотите "освободить" сервопривод, отключите питание, и он будет "свободен".
вы ошибаетесь , если я подключаю сервопривод к своей сборке, он "свободен", пока у меня не будет ШИМ , а также я могу освободить все сервоприводы, отправив команду сброса на PCA9685 но моя задача состоит в том, чтобы "освободить" только один конкретный сервопривод: есть проблема, @Sergey Kravchenko
Вы можете попробовать изменить соответствующий вывод с выходного на входной. Чтобы не нарушать другие настройки, вы можете выполнить прямое управление портом.
void servo_off() {
DDRD &= ~(1<<PD5);
}
void servo_on() {
DDRD |= (1<<PD5);
}
Это предполагает, что вы используете контакт PD5 для ШИМ-сигнала. Отрегулируйте "D" в DDRD и PD5 таким образом, чтобы оно соответствовало используемому порту, а также номеру контакта.
Конечно, вам нужен какой-то дополнительный пользовательский ввод, например, кнопка для запуска вызовов этих функций.
PCA9685 управляется через I2C, и речь идет о библиотеке Adafruit для модуля PCA9685, @Juraj
Я получил ту же проблему, искал вокруг, но не нашел ответа, поэтому я заглянул в исходный код и обнаружил, что вам просто нужно установить угол наклона сервопривода на "Нет", чтобы перестать посылать ШИМ-импульсы на сервопривод. Например, если ваш сервопривод использует канал 14 на плате PCA9685:
комплект.сервопривод[14].угол = Нет
Это звучит так, как будто вы говорите о python или чем-то подобном, а может быть, и о какой-то другой библиотеке, и не имеет никакого отношения к этому вопросу., @timemage
Вы можете попытаться отправить время "ON" на свой выходной вывод на PCA9685. Итак, вы начинаете "ВКЛ." с 0 и останавливаете "ВЫКЛ." с 0.
void freeServo(uint8_t servoIdx)
{
pwm.setPWM(servoIdx, 0, 0 );
}
Являются ли управляющие контакты вашего сервопривода активными высокими или активными низкими?
Из библиотечного кода по адресу https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library/blob/d265f74fc0e66632e6dafc787c95b008f3245550/Adafruit_PWMServoDriver.cpp#L242 похоже,что существуют специальные значения включения и выключения setPWM(pin,on, off),
которые полностью включают или полностью выключают сервопривод, и то, как они работают, зависит от того, является ли сервопривод активным высоким или активным низким.
unsigned byte idle = CertainPin;
servoController01.setPWM(idle, 0, 4096); // полностью выключен Активный высокий
// servoController01.setPWM(idle, 4096, 0); // полностью выключен Активный низкий
или с помощью лучше документированного setPin()
:
servoController01.setPin(idle,0,false); // Active high
//servoController01.setPin(idle,0,true); // Active low
- Вопросы по сервопрограмме
- Arduino Due vs Mega 2560
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Точность часов времени Arduino
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
Я не очень-то люблю сервоприводы... "отпускают ли они" только тогда, когда рабочий цикл равен 0% или 100% (это легко сделать с помощью вашего PCA9685)? Если нет, то единственный способ-это отключить питание этого сервопривода., @mic
Вы нашли решение? У меня та же проблема., @Miguel