2. 电机选型与驱动:直流减速电机、编码器原理、电机驱动器(L298N/BTS7960)、PWM调速控制
做Rover底盘,第一件事就是选电机。我见过不少新手上来就买大功率电机,结果装上车根本跑不动——不是扭矩不够,就是控制精度太差。说白了,电机选型是底盘设计的根基,选错了后面全白搭。
2.1 直流减速电机:为什么是它?
Rover底盘用的基本都是直流减速电机。为什么?因为普通直流电机转速太高、扭矩太小,直接驱动轮子根本带不动。减速箱的作用就是把转速降下来,把扭矩提上去。
我个人习惯看三个参数:
- 空载转速:一般在100-300 RPM之间,太快了不好控制
- 额定扭矩:至少要能推动车体在粗糙地面起步
- 减速比:常见1:30到1:100,越大扭矩越大,但速度越慢
举个例子,我做过一台30cm长的Rover,用的电机参数是:
| 参数 | 值 |
|---|---|
| 额定电压 | 12V |
| 空载转速 | 200 RPM |
| 额定扭矩 | 0.5 N·m |
| 减速比 | 1:50 |
这个配置在室内瓷砖地面跑得很稳,但拿到草地上就有点吃力了。所以选型时一定要考虑实际使用场景。
2.2 编码器原理:怎么知道轮子转了多少?
编码器就是电机的“眼睛”。没有它,你只能给电机发PWM信号,但不知道轮子实际转没转、转了多少。这在做闭环控制时是致命的。
常用的编码器有两种:
- 霍尔编码器:利用霍尔效应检测磁极变化,输出脉冲信号
- 光电编码器:用光栅盘和光电对管,精度更高但怕灰尘
我建议Rover底盘用霍尔编码器,便宜、耐用、够用。一般每转输出几百到几千个脉冲,配合定时器就能算出转速和位置。
核心公式:转速(RPM) = (脉冲数/秒) / (每转脉冲数) × 60
嗯,这里要注意:编码器输出的是两路正交信号(A相和B相),通过判断相位差就能知道正反转。我在项目中遇到过只接了一路信号的情况,结果电机反转时完全不知道,差点撞墙。
2.3 电机驱动器:L298N vs BTS7960
电机驱动器就是电机的“放大器”。单片机的IO口电流太小,直接驱动电机根本转不动。你需要一个H桥电路来放大信号。
市面上最常见的两种方案:
L298N
- 双H桥,可驱动两个电机
- 最大电流2A(实际建议1.5A以内)
- 价格便宜,10块钱左右
- 压降大,发热严重
BTS7960
- 单H桥,一个芯片驱动一个电机
- 最大电流43A(实际建议20A以内)
- 内阻小,效率高
- 价格贵一些,但性能好很多
我个人习惯:小Rover(3kg以内)用L298N就够了,大一点的必须上BTS7960。曾经有一次我用L298N驱动一个5kg的底盘,跑了10分钟芯片烫得能煎鸡蛋,最后烧了。从那以后,超过2A电流的场合我再也没用过L298N。
避坑指南:L298N的使能引脚一定要接PWM,不能直接接高电平。否则电机全速运转,失控风险很大。
2.4 PWM调速控制:怎么让电机听话?
PWM就是脉冲宽度调制。说白了,就是通过改变高电平占空比来控制电机电压。占空比50%就是半速,100%就是全速。
在STM32上实现PWM控制很简单:
// 初始化定时器TIM2,通道1输出PWM
// 频率50Hz,占空比50%
TIM_TimeBaseInitTypeDef TIM_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_InitStructure.TIM_Prescaler = 7199; // 72MHz / 7200 = 10kHz
TIM_InitStructure.TIM_Period = 199; // 10kHz / 200 = 50Hz
TIM_TimeBaseInit(TIM2, &TIM_InitStructure);
TIM_OCInitStructure.TIM_Pulse = 100; // 占空比 100/200 = 50%
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_Cmd(TIM2, ENABLE);
你想想看,PWM频率选多少合适?我一般用50Hz到100Hz。太低了电机会抖动,太高了驱动器反应不过来。50Hz是个比较稳妥的选择。
小技巧:PWM占空比不要从0直接跳到100%,最好用斜坡函数慢慢加速。这样电机启动更平滑,也能减少机械冲击。
2.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。从电机选型到编码器反馈,再到驱动器选择和PWM控制,每一步都是环环相扣的。
好了,这一章的内容就到这里。电机选型、编码器、驱动器、PWM控制,这四个点你吃透了,Rover底盘的驱动部分就稳了。下一章我们聊聊怎么把这些硬件和ROS接起来,让底盘真正跑起来。
公众号:蓝海资料掘金营,微信deep3321