二、硬件基础:常用微控制器选型、电机驱动器介绍、电源与布线注意事项
好,咱们进入第二章。这一章是硬件的底子,说白了就是你要选什么“大脑”来发号施令,用什么“肌肉”去驱动电机,以及怎么把“血管”(电源和信号线)铺好。我见过太多项目,算法写得天花乱坠,结果硬件一上电就冒烟,或者电机抖得像帕金森。嗯,咱们今天就把这些坑填平。
2.1 常用微控制器选型:STM32 vs ESP32
选MCU,我个人的习惯是先看需求,再看生态。别一上来就追新,稳定才是硬道理。
2.1.1 STM32:工业级的“老黄牛”
STM32系列,尤其是F1和F4,在运动控制领域是绝对的主力。为什么?
- 定时器资源丰富:高级定时器可以输出多路PWM,还能做编码器接口。我做过一个四轴点胶机,用的就是STM32F407,16位定时器做PWM输出,分辨率够用,频率也稳。
- 生态成熟:HAL库、LL库、标准外设库,随便选。出了问题,网上搜一下,答案一大把。
- 实时性好:中断响应快,适合做闭环控制。
选型建议:
- 简单步进电机控制(开环):STM32F103C8T6(蓝 Pill)足够,性价比高。
- 多轴联动或闭环控制:STM32F407VGT6,带FPU,算PID快。
- 需要EtherCAT或CANOpen:STM32F4或H7系列。
2.1.2 ESP32:WiFi/蓝牙加持的“多面手”
ESP32这两年很火。它自带WiFi和蓝牙,适合做远程监控或无线调试。
- 优势:集成度高,一块芯片搞定控制和通信。我有个项目,需要把电机状态实时上传到云端,用ESP32加一个步进驱动器,两周就搞定了原型。
- 劣势:实时性不如STM32。它的WiFi协议栈会抢占CPU,导致PWM波形偶尔抖动。如果你做的是高精度插补,比如雕刻机,我建议还是用STM32。
我的经验:如果你只是做远程启停、速度调节这种非实时控制,ESP32完全够用。但如果你要控制伺服电机做位置同步,老老实实上STM32。
2.1.3 选型对比表
| 特性 | STM32F103 | STM32F407 | ESP32 |
|---|---|---|---|
| 主频 | 72 MHz | 168 MHz | 240 MHz |
| 定时器精度 | 16位 | 16/32位 | 16位(有抖动风险) |
| 无线通信 | 无 | 无 | WiFi/BT |
| 典型应用 | 单轴步进控制 | 多轴联动/闭环 | 远程监控/物联网 |
| 开发难度 | 低 | 中 | 中(Arduino友好) |
2.2 电机驱动器介绍:A4988 / DRV8825 / TB6600
选好了MCU,接下来就是驱动器。这玩意儿是把MCU的弱信号放大成驱动电机的大电流。选错了,电机要么没力,要么发热严重。
2.2.1 A4988:小电流、低成本的首选
A4988是入门级驱动器,最大电流2A(加散热片)。它支持全、半、1/4、1/8、1/16微步。
- 优点:便宜,几块钱一片。适合做小负载,比如3D打印机的挤出机、小型的XY平台。
- 缺点:电流大了容易过热。我曾经在一个项目中,用A4988驱动42步进电机,没加散热片,运行半小时后直接保护了。嗯,后来加了风扇才稳住。
注意:A4988的参考电压(Vref)一定要调准。公式是:I_max = Vref / (8 * Rs)。Rs是采样电阻,一般是0.1Ω或0.05Ω。调高了,电机发热;调低了,力矩不够。
2.2.2 DRV8825:A4988的升级版
DRV8825是TI的产品,最大电流2.5A,支持1/32微步。它的散热性能比A4988好一些。
- 优点:微步更高,运行更平滑。而且它内部有电流调节,不容易丢步。
- 缺点:价格稍贵。另外,它的逻辑电压是3.3V,如果你用5V的MCU,需要加电平转换,或者用分压电阻。我吃过这个亏,直接接5V,把片子烧了。
2.2.3 TB6600:大电流、工业级
TB6600是东芝的产品,最大电流4.5A,支持1/32微步。它自带光耦隔离,抗干扰能力强。
- 优点:驱动57、86步进电机毫无压力。适合做雕刻机、大型3D打印机。
- 缺点:体积大,价格高。而且它的PWM频率是固定的,有时候会有噪音。
选型口诀:
- 小负载、低成本:A4988
- 需要高微步、中等电流:DRV8825
- 大电流、工业环境:TB6600
2.3 电源与布线注意事项
这部分是很多新手容易忽略的。电源没搞好,电机一转,MCU就复位。布线没搞好,信号干扰大,编码器读数乱跳。
2.3.1 电源选型
电机驱动需要独立的电源,千万别和MCU共用同一个LDO。
- 电压:步进电机额定电压一般是12V或24V。但驱动器可以承受更高的电压(比如A4988最高35V)。电压高,高速力矩大。我一般用24V开关电源。
- 电流:总电流 = 电机额定电流 × 轴数 × 1.2(安全系数)。比如两个42电机,额定1.5A,那就选3.6A以上的电源。
- 滤波:电源输出端一定要加一个大电容(1000μF以上),吸收电机启停时的尖峰。我曾经偷懒没加,结果驱动器上的MOS管被击穿了。
2.3.2 布线原则
布线,说白了就是“大电流和小信号分开走”。
- 电源线:用粗线(至少18AWG),走短路径。电机线和信号线不要平行走,交叉要成90度。
- 信号线:PWM、方向、使能信号,用双绞线或者屏蔽线。屏蔽层单端接地。
- 地线:采用星型接地。所有驱动器的GND、电源的GND、MCU的GND,最终汇到一点。不要形成地环路。
避坑指南:我曾经在一个项目中,把电机线和编码器线绑在一起走线。结果电机一转,编码器读数就跳变。后来把编码器线换成屏蔽线,并且远离电机线,问题才解决。所以,信号线和动力线一定要物理隔离。
2.3.3 一个简单的电源电路示例
// 电源输入:24V DC
// 1. 24V 经过保险丝(自恢复保险丝,2A)
// 2. 并联一个1000μF/50V电解电容(滤低频)
// 3. 并联一个0.1μF瓷片电容(滤高频)
// 4. 输出到电机驱动器 Vmot
// 5. 同时,24V经过一个DC-DC降压模块(比如LM2596)降到5V,给MCU供电
// 6. 5V再经过一个LDO(AMS1117-3.3)降到3.3V,给MCU核心供电
嗯,这一章的内容就这些。硬件基础打牢了,后面写代码才心里有底。下一章,咱们开始讲PWM和定时器,那才是真正让电机转起来的关键。