|
本帖最后由 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 SERVOMIN 150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 600 // 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这个函数,它有两个参数,第一个表示舵机的数据脚,第二个参数表示舵机要转的度数,但使用这个函数舵机完全不动,不知道是什么原因,希望通过了的老鸟可以指点一下。 |
|