想做六足机器人、机械臂或者一排舵机同时动的项目,Arduino那点引脚和时钟根本带不动十几个到几十个舵机。PCA9685就是来解决这个问题的:一片16通道的PWM驱动芯片,用I2C只要两根线就能控制16路舵机的角度,还能级联到数百路。这篇把它的接线和驱动要点讲透。
引脚分布:一侧电源,一侧PWM
PCA9685模块一侧是GND、OE、SCL、SDA、VCC,另一侧是16路PWM输出和供电引脚。SCL接主控A5、SDA接A4(Uno),VCC接逻辑电源(接主控的3.3V或5V逻辑口),模块上的逻辑电平就能跟主控通信了。OE是输出使能,不控制时悬空即可。

舵机供电要独立,别压在逻辑上
这是最关键的坑:16路舵机同时动作,瞬时电流能到几安,绝对不能靠主控的5V带,Arduino的稳压器撑不住,一跑就重启。舵机的V+要单独接一个足够电流的外接电源(比如2A、甚至更大的),并且和主控共地——把外接电源的GND跟主控GND接一起。很多舵机乱抖、重启,根子就在供电源不足或没共地。

几种6万级脉冲来控制角度
舵机的角度是通过给它的信号线发特定占空比的PWM来定的,信号周期一般是20毫秒。PCA9685库(Adafruit_PWMServoDriver)里有现成的函数,给你换算好了脉冲宽度和角度范围。写程序时先调好脉宽上下限,让舵机转满0到180度,别一上来就硬转。
每路输出可以单独设角,所以做机械臂、六足都特别省心,改一个角度调用就行。
级联和扩展
一块不够,可以把好几片PCA9685级联,每片地址可设(通过A0-A5或焊盘改地址),同一个I2C总线上挂多片,就能控制几十上百路舵机。地址要片片不同,否则冲突。数据量虽然多,但I2C速度够用,实际控制流畅。
把I2C两根线接对、给舵机独立供电并共地、用库把脉宽调好,PCA9685就能稳稳驱动一大片舵机。卡壳九成在外接电源上,先把电搞扎实再谈控制。


共地真是驱动板保命的点,不共地舵机乱抖,接了一起就老实了
脉宽上下限要自己调好,不然舵机转不到满量程,这个细节很实用
独立供电这个坑太深了,我一开始用Arduino的5V带十几个舵机,一跑就重启