攒六足机器人这件事,最爽的和最坑的都在同一个地方——手上这18颗舵机。腿一多,走起来确实有内味,但一接上电就往一个方向硬掰、或者碰到一点负载就抖成帕金森,也是不少人的噩梦。这台机器真正卡住你的,往往不是算法,是接线和供电。今天就把PCA9685驱动18路舵机这件事,照着真实踩坑记录捋一遍。
先搞清楚:六足到底要几路舵机
一条腿三个关节,照着昆虫解剖来分:coxa是髋关节,管整条腿前后摆;femur是大腿,管抬腿高度,是最吃力的关节;tibia是小腿,管脚踩多深,配合femur决定机身高低。6条腿乘3,正好18个自由度。
标准六足板的腿编号,从右前方R1顺时针数到R3,再切到左后方L3、L2、L1。这个顺序后面分配通道时要用到,别凭感觉乱插,不然调步态时根本对不上号。
为什么非要PCA9685,不能硬怼开发板
很多人刚上手觉得,18颗舵机直接接开发板的PWM口不就行了。算笔账就清醒了:Arduino Mega顶配也就15路原生PWM,Uno更惨只有6路,怎么算都不够18颗。硬用软件PWM,信号抖得厉害,腿也跟着抖,电流还白白耗掉。
PCA9685是16路PWM驱动板,走I2C两根线通信,一块板自带16个独立PWM通道。18路就用两块,默认地址0x40那块,第二块焊一下A0脚跳线改成0x41,两条总线一个接SDA一个接SCL就能级联。这是最省事也最稳定的正解。
供电才是八成翻车的真凶
先说结论:别用USB口、别用开发板上的5V引脚、更别用9V电池给舵机供电。MG996R堵转电流能到800mA,8颗同时动峰值就奔着10A去了。有人实测把4颗MG996R接在5V2A充电头上,几分钟驱动板直接过热,I2C通信失灵,舵机当场发不出去力。
这里有个极易踩的双电源坑:PCA9685的VCC只管逻辑,V+才管舵机,两套电源只共享一个地。灯亮、I2C能扫到地址,不代表舵机这路有电——很多人栽在这。所以V+必须接一个独立的、合舵机电压的稳压电源(5V或6V),外加一个1000微法的电解电容并在电源端吸收尖峰,所有GND必须共地,这条线是命根子。
接线的几处细节
舵机三条线,橙色或黄的信号线接PCA9685的OUT通道,红色接电源正,棕黑色接地,接到V+的正负端而不是开发板的5V。信号线和舵机电源严格分开,这是底线。
线材也别将就。舵机电源线尽量用18AWG以上的粗线,细铜丝走一米压降能超0.5V,舵机会变得又慢又没力。线长了每颗舵机电源端就近加个0.1微法的陶瓷电容去噪,能少很多莫名其妙的问题。
调试顺序:一颗一颗来
最容易省的时间:先单独接一颗舵机在CH0上,写个setPWM(0,0,307)让它动,测通了再加下一颗。别一口气18颗全接上再查,那样根本分不清是谁的问题。
装机之前,把每颗舵机都先发到90度再固定到支架上,不然舵机一开始就顶在机械限位硬别着,一通电就咔咔响还费电。等你把18路都稳住,步态就可以慢慢来了。
说点实在的
六足这东西,硬件通了才有资格谈算法。PCA9685加独立电源加共地,这三样做好了,你的机器人就输在了别人起步八年都还没绕过的那道坎上。剩下的,就是让它一步一步爬出去的事了。
PCA9685双电源这个坑我焊废过两块板。灯亮、I2C也能扫到地址,结果V+那路根本没供电,查了半天。写文的大哥把这说透了,接舵机的兄弟先拿万用表量V+有没有电压,再谈别的。代码说话,供电这关不过全是废话。
六条腿=18颗舵机,那它哪天走一半电量不够,会不会当场瘫成一只生无可恋的蜘蛛?
补一个实操点:装机前把所有舵机先发到90°再固定,这条太关键了。我第一台就是没居中,一上电某条腿直接顶到机械限位,舵机咔咔响还发烫。先单颗测通再逐腿加,效率也比全接上去猜高得多。步态是后面的事,先把电供稳。
90°居中这条我笑死,我第一次做六足就是把所有腿拧得乱七八糟,上电的一瞬间三条腿起飞、三条腿趴窝,像极了过年抢红包的群?
你真的问过自己吗——我们执着于造一只六条腿的机器,是想要它走得更稳,还是单纯想要一个更听话的'自己'?接线解决了稳定性,但'为什么造它'这个问题,板子可帮不了你。