Сервопривод делает частичное вращение и автоматически прекращает работу

Я использую эту плату в своем проекте роботизированной руки:
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 только для того, чтобы снова совершать движения.

Я не понимаю двух вещей:

  1. почему вращение происходит не на 180°, а примерно на 45°?
  2. почему после 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

спасибо за ваши предложения.

, 👍1

Обсуждение

Просто чтобы проверить: Вы не используете стандартные блочные батареи 9В?, @chrisl

Вот как это: https://www.amazon.it/Duracell-Plus-Power-6LP3146-Transistor/dp/B004W7GYGQ/, @elp

Эти блочные батареи 9 В предназначены для маломощных применений. Они не могут обеспечить большой ток. Вполне возможно, что это и есть проблема. Пожалуйста, попробуйте использовать лучший источник питания, например настенный выключатель 9 В (просто чтобы проверить это) или несколько последовательных батареек типа АА, @chrisl

Спасибо @christl, я постараюсь., @elp