openmmoo 发表于 2016-8-26 11:13:49

PCA9685舵机控制板的无反应的问题

本帖最后由 openmmoo 于 2016-8-26 11:14 编辑

最近弄了个PCA9685舵机控制板。

按以下方式连接
+5v -> VCC
GND -> GND
Analog 4 -> SDA
Analog 5 -> SCL
外接电源(不要接反,会烧舵机的,我就损失了一个)



使用自带的例程(只接2个舵机):
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>


Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX600 // this is the 'maximum' pulse length count (out of 4096)


void setup() {
Serial.begin(9600);
Serial.println("16 channel Servo test!");

pwm.begin();

pwm.setPWMFreq(60);// Analog servos run at ~60 Hz updates
}


void setServoPulse(uint8_t n, double pulse) {
double pulselength;

pulselength = 1000000;   // 1,000,000 us per second
pulselength /= 60;   // 60 Hz
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096;// 12 bits of resolution
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}

void loop() {
   for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    pwm.setPWM(0, 0, pulselen);
    pwm.setPWM(1, 0, pulselen);
}
delay(500);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    pwm.setPWM(0, 0, pulselen);
    pwm.setPWM(1, 0, pulselen);
}
delay(500);
}

编译通不过的话,要添加库:程序->导入库->Add Library ->添加例程目录中的Adafruit_PWMServoDriver.h

再次编译通过后,下载到arduino中,但是舵机无没反应,看了一个成功了的例程,发现它加了一个servo.h,就随手加了一个#include <Servo.h>再次编译,下载,舵机动了。

发现在例程中有setServoPulse这个函数,它有两个参数,第一个表示舵机的数据脚,第二个参数表示舵机要转的度数,但使用这个函数舵机完全不动,不知道是什么原因,希望通过了的老鸟可以指点一下。

dyr2001 发表于 2016-10-19 09:39:46

PCA9685,我的mode1,和LED0寄存器都设置了,还是无PWM输出,请问是否还需要设置别的寄存器?QQ64468856

shysxm 发表于 2017-11-5 21:23:35

本帖最后由 shysxm 于 2017-11-5 21:25 编辑

找usc driver驱动软件
页: [1]
查看完整版本: PCA9685舵机控制板的无反应的问题