桌面机械臂这个项目,2026年门槛降了不少。ESP32开发板不到30块,PCA9685舵机驱动板10来块,加上几个MG996R舵机,500块以内就能攒一台6自由度的桌面臂出来。这篇文章从零开始,把接线、供电、代码一步步讲清楚。

硬件清单:500块搞定
主控用ESP32 DevKit 38pin版本(WROOM模组),PWM驱动用PCA9685 16通道12位舵机驱动板,6个关节各用一个MG996R舵机(扭矩13kg·cm),末端夹爪用SG90微型舵机。供电用5V 10A开关电源。总预算400-500块。
有几个坑提前说:舵机一定要从PCA9685的独立供电端取电,绝对不能从ESP32的USB口取电。一个MG996R堵转电流2.5A,六个同时堵转就是15A,USB口最多几百毫安,分分钟烧板子。
接线方法:I2C两线搞定控制
PCA9685跟ESP32之间只需要两根线:SDA接GPIO21,SCL接GPIO22,这是I2C总线。PCA9685的VCC接3.3V(逻辑电平),V+接5V电源正极给舵机供电,GND共地。

每个舵机占PCA9685的一个通道(0-5号),信号线接通道对应的PWM输出。供电的话,PCA9685板子上有独立的V+和GND端子排,5V电源正负极直接拧上去就行。记得在电源端并一个100μF滤波电容,减少舵机启停时的电压波动。
供电避坑:最容易翻车的地方
桌面机械臂项目80%的问题出在供电上。几个关键数据:MG996R典型工作电流500mA,堵转电流2500mA;SG90典型200mA,堵转650mA;ESP32本身80mA,WiFi峰值500mA。
正常运动时总电流大概1.5A,快速多关节联动时峰值4A左右,极端情况六舵机同时堵转约10A。所以5V 10A电源是最低要求,有条件上15A的更稳。电源接口的5.5×2.1mm DC头一般只扛3-5A,全功率运行建议直接用螺丝端子接电源。
代码框架:Arduino IDE + Adafruit库
用Arduino IDE开发,装Adafruit PWM Library。核心初始化就几行:Wire.begin(21, 22)启动I2C,pwm.begin()初始化PCA9685,pwm.setOscillatorFrequency(27000000)设时钟,pwm.setPWMFreq(50)设50Hz——这是标准舵机PWM频率。
控制某个舵机转到指定角度,调pwm.setPWM(channel, 0, pulse_length),其中pulse_length根据角度换算。0度对应约150,180度对应约600。中间线性插值就行。
调试建议
第一次上电别急着六个关节一起动。先一个一个通道测试,确认每个舵机的方向和零位对不对。如果发现舵机抖动,大概率是供电不足或者I2C线上有干扰,先查电源再查接线。串口打印当前各关节角度,方便排查运动学解算的问题。


写得很清楚,收藏了周末试试
建议补充一下PCA9685的I2C地址设置方法,多块板子级联的时候需要改地址
500块预算真能搞下来吗?我算了一下舵机6个就要180了,加上ESP32、PCA9685、电源、结构件,感觉要700+
MG996R做桌面臂关节够不够精度?之前用做云台感觉有点抖
PCA9685供电这个坑我踩过了,当初从ESP32的5V引脚给舵机供电,结果一启动三个舵机ESP32就重启了。后来单独供电才解决