简介
PCA9685驱动板支持控制16路舵机,采用i2c通信协议。
- VCC:PCA9685芯片的电源
- V+:舵机的电源
- 舵机数量较少时电源可以通过V+引脚输入,较多时通过绿色电源输入端输入
Arduino驱动示例
#include <Wire.h>
#include <Adafruit_PWMServoDriverh>
#define SERVO_45 187
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
void setup() {
pwm.begin();
pwm.setPWMFreq(50);
pwm.setPWM(0,0,SERVO_45);
}
本示例使用了Adafruit PWM Servo Driver Library。 该程序可以使连接在PCA9685舵机驱动板上0号位的舵机转动45°。
setPWMFreq()设置了IIC通信的更新频率(50HZ对应脉冲周期20ms),
setPWM()`的三个参数依次为舵机编号、脉冲起始时间、脉冲结束时间,其中脉冲时间要以寄存器的值来表示(187对应1.0ms)。
舵机控制逻辑
上述示例使用舵机型号为SG90
,运动范围0°-180°,舵机的控制周期信号为20ms,工作脉冲在0.5ms-2.5ms之间,舵机的转动角度由PCA9685的12位寄存器中的值来决定,而寄存器的值由脉冲时间决定。故可以得到脉冲时间-寄存器值-转动角度
的关系如下:
'0.5ms-0°':0.5*204=102
'1.0ms-45°':1*204=204
'1.5ms-90°':1.5*204=306
'2.0ms-135°':2*204=408
'2.5ms-180°':2.5*204=510
然而在实际使用时会有误差出现,故除了0°与180°的情况,要将寄存器值乘以0.915的系数。
'0.5ms-0°':0.5*204=102
'1.0ms-45°':1*204=204*0.915=187
'1.5ms-90°':1.5*204=306*0.915=280
'2.0ms-135°':2*204=408*0.915=373
'2.5ms-180°':2.5*204