简介

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