机器人做多了就会发现,舵机一多,Arduino那十几个IO脚根本不够用,PWM还不够精确。PCA9685就是来解这个围的——一块板能带16路PWM输出,走I2C总线只占两个引脚,多块还能级联,机械臂、机器狗、多足机器人的“关节”基本都是靠它驱动。这篇讲接线、调频率和怎么控制到舵机角度。
PCA9685怎么接Arduino
模块引脚不少,但核心就四个:VCC接5V(逻辑电源)、GND接地、SDA接A4、SCL接A5,走的又是I2C。注意它舵机电源是单独的V+,千万别跟5V并在一起——舵机一通电就是大电流,直接从外接电源的V+供电,Arduino和驱动板只负责发信号,这样才稳。

图上这个典型接法把关键说清了:左侧PCA9685的SDA/SCL/VCC/GND连到Arduino,右侧每个通道接一个舵机的信号、电源、地三根线。舵机多的时候一定要共地,Arduino、PCA9685逻辑、舵机电源的地都得连在一起,不然信号没基准,舵机乱抖。
调频率和设置舵机角度
库用Adafruit_PWMServoDriver,第一步setPWMFreq设置频率,普通SG90舵机发50Hz的PWM信号就行。接下来每路舵机用一个脉宽范围对应0到180度,比如setPWM(channel, 0, pulseWidth),pulse是角度的脉宽值——大致150对应0度、600对应180度,具体按自己舵机的转角标定一下最准。

这块图把I2C地址怎么设讲得清楚:板上有A0到A5六个地址跳线,全默认悬空时地址是0x40,点亮A0地址就变0x41,以此类推,最多能把弹成0x7F。这样一条I2C总线上能挂多块板,舵机数量几乎是无限扩展——两板并行就是32个舵机,机械臂多节点项目的标准玩法。
使用时的两点提醒
一是别让Arduino的5V去扛一堆舵机,大负载一定要外接稳压电源给V+,总舵机电流动辄几安,板上那个主控喂不动。二是舵机多了先分批上电测试,一次全接上不动弹也别慌,先确认共地和电源够不够,再逐路扫一遍看每路有没有信号。




地址跳线A0-A5点亮就能扩展,多板并联就能带几十个舵机做机械臂
setPWMFreq 50Hz配SG90刚好,角度对应的脉宽扫一遍就标定了
舵机一多真的只能靠PCA9685,一块板16路,I2C才占两个脚,省IO神器
舵机电源V+千万别跟板载5V并,大电流一涌直接会把板子拉垮