Сервопривод делает частичное вращение и автоматически прекращает работу
Я использую эту плату в своем проекте роботизированной руки:
Adafruit PCA9685 16-Канальный сервопривод (
https://learn.adafruit.com/16-channel-pwm-servo-driver/using-the-adafruit-library)
Я подключил все свои сервоприводы и теперь пытаюсь откалибровать каждый из них.
Вот моя конфигурация:
Настройка
pwm = Adafruit_PWMServoDriver(0x40);
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(50);
Движение
pwm.setPWM(pinPosition, 0, power);
Мощность
отображается с помощью map
и minPulse и maxPulse на основе этой структуры данных:
ServoSettings servo0 = ServoSettings{
0, // pinPosition
125, // minPulse
400, // maxPulse
125 // currentPWM
};
Я использую minPulse
и maxPulse
для калибровки и currentPWM
для хранения данных для каждого сервопривода.
Данные передаются через iPhone через BLE.
Мой сервопривод, начав вращаться от 125 до ~280, возвращается назад и перестает работать. Мне нужно выключить питание моей платы и переместить сервопривод из положения 0 только для того, чтобы снова совершать движения.
Я не понимаю двух вещей:
- почему вращение происходит не на 180°, а примерно на 45°?
- почему после 45° сервопривод возвращается домой и перестает работать?
Я предполагаю, что это связано с неправильной конфигурацией библиотеки Adafruit, но, конечно, я не уверен.
Используя ручной цикл вместо данных BLE, результат получается тот же:
moveServo
-это оболочка pwm.setPWM(pinPosition, 0, power).
delay(1500);
servoMgr.moveServo(0, 90);
Serial.println("0");
delay(1500);
servoMgr.moveServo(0, 125);
Serial.println("A");
delay(1500);
servoMgr.moveServo(0, 145);
Serial.println("B");
delay(1500);
servoMgr.moveServo(0, 190);
Serial.println("C");
delay(1500);
servoMgr.moveServo(0, 220);
Serial.println("D");
delay(1500);
servoMgr.moveServo(0, 250);
Serial.println("E");
delay(1500);
servoMgr.moveServo(0, 280); // <<<--- here servo come back home and die.
Serial.println("F");
delay(1500);
servoMgr.moveServo(0, 300);
Serial.println("G");
Плата Adafruit питается от внешней батареинапряжением 9 В.
Arduino питается от USB-кабеля.
Может быть, что-то связанное с напряжением?
Что не так с конфигурацией библиотеки?
Плата теперь имеет только 1 сервопривод, только для тестирования.
Это используемые сервоприводы: https://www.amazon.it/dp/B07KD6NVPM
спасибо за ваши предложения.
@elp, 👍1
Обсуждение0
- Как запитать 6 серводвигателей от батареи для создания робота-манипулятора?
- Как подключить 2 сервопривода MG996R towerpro
- Сервопривод с высоким крутящим моментом 6 В не будет работать на моторном щитке?
- Как заставить сервопривод вращаться на угол больше 180°
- Почему Adafruit motor shield не крутит моторы?
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
- Бесполезная проводка коробки и код
Просто чтобы проверить: Вы не используете стандартные блочные батареи 9В?, @chrisl
Вот как это: https://www.amazon.it/Duracell-Plus-Power-6LP3146-Transistor/dp/B004W7GYGQ/, @elp
Эти блочные батареи 9 В предназначены для маломощных применений. Они не могут обеспечить большой ток. Вполне возможно, что это и есть проблема. Пожалуйста, попробуйте использовать лучший источник питания, например настенный выключатель 9 В (просто чтобы проверить это) или несколько последовательных батареек типа АА, @chrisl
Спасибо @christl, я постараюсь., @elp