电机控制基础回顾:直流有刷/无刷电机原理、PWM生成与死区插入、H桥与MOSFET驱动逻辑
各位工程师朋友,咱们开始聊电机控制。说实话,这部分内容看起来基础,但我在调试现场见过太多人栽在基础细节上。你想想看,一个PWM波形没配好,电机可能直接啸叫甚至烧MOS管。所以这一章,咱们把基础夯扎实。
直流有刷电机:最简单的旋转机器
有刷电机,说白了就是通电就转,换向靠电刷和机械换向器。我刚开始做电机驱动时,觉得这东西太简单了——给电就转呗。结果有一次,客户反馈电机噪音大,查了半天才发现是电刷磨损导致的火花干扰了控制板。
核心要点:有刷电机的转速与电压成正比,转矩与电流成正比。控制策略就是调电压、限电流。
实际项目中,有刷电机控制主要关注三点:
- 启动电流冲击——直接满电压启动,电流可能冲到额定值的5-10倍。我建议用PWM软启动,逐步提升占空比。
- 电刷寿命——电刷是消耗品,高转速下磨损更快。我曾经在一个需要连续运行的项目里,三个月就得换一次电刷。
- EMI干扰——电刷换向时会产生电弧,对控制电路造成干扰。加RC吸收电路是常规做法。
直流无刷电机(BLDC):更高效,但控制更复杂
无刷电机把换向器从机械结构搬到了控制器里。转子是永磁体,定子是线圈。控制器根据转子位置,依次给不同线圈通电,产生旋转磁场。
这里有个关键点——换向时序。我见过不少新手,换向时序搞反了,电机要么不转,要么剧烈抖动。为什么会这样?因为磁场方向错了,转子被推着往回走。
| 对比项 | 有刷电机 | 无刷电机 |
|---|---|---|
| 换向方式 | 机械电刷 | 电子控制器 |
| 寿命 | 短(电刷磨损) | 长(无接触磨损) |
| 效率 | 较低(摩擦损耗) | 较高(可达90%+) |
| 控制复杂度 | 低(调电压即可) | 高(需要位置反馈) |
| 典型应用 | 玩具、电动工具 | 无人机、电动车、工业伺服 |
个人经验:调试BLDC时,我习惯先用开环强拖方式确认换向表是否正确。如果电机能平稳转动,再切入闭环控制。这招帮我省了不少排查时间。
PWM生成与死区插入:波形里的学问
PWM(脉宽调制)是电机调速的基本手段。但很多人只关注占空比,忽略了频率和死区时间。嗯,这里要注意——频率选不对,电机可能嗡嗡响;死区设不对,上下桥臂直接短路。
我一般这样选PWM参数:
- 频率——对于有刷电机,20kHz以上可以避开人耳听觉范围。对于无刷电机,通常10-20kHz,太高会增加开关损耗。
- 分辨率——8位(256级)够用,但要求平滑调速时建议用10位以上。
- 死区时间——根据MOSFET的关断延迟来定。我常用的经验值是:低速MOSFET设500ns-1μs,高速MOSFET设100-300ns。
避坑指南:我曾经在一个项目中,死区时间设得太短(只有50ns),结果MOSFET关断还没完成,上管就导通了。瞬间短路电流烧了三个MOS管。从那以后,我每次都会用示波器实测死区时间,确保安全裕量。
死区插入的实现方式有两种:
- 硬件自动插入——很多MCU的PWM模块自带死区插入功能,配置寄存器即可。推荐使用,减少软件负担。
- 软件手动插入——在PWM中断里修改占空比,人为制造死区。灵活性高,但容易出错。
// 示例:STM32 TIM1 死区配置(以STM32F4为例)
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
// 死区时间 = 250ns(假设TIM时钟为168MHz)
// DTG[7:0] = 42,对应死区时间 = 42 * (1/168MHz) ≈ 250ns
TIM_BDTRInitStructure.TIM_DeadTime = 42;
TIM_BDTRInitStructure.TIM_OSSR = TIM_OSSR_Enable;
TIM_BDTRInitStructure.TIM_OSSI = TIM_OSSI_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
H桥与MOSFET驱动逻辑:功率放大的核心
H桥,名字很形象——四个开关管组成一个"H"形电路。控制电机正反转、刹车、滑行,全靠这四个管的开关组合。
我画了一张H桥的状态图,帮你快速理解:
MOSFET驱动逻辑,说白了就是控制栅极电压。但这里有个坑——浮地驱动。上管的源极电压会随着电机状态变化,不能直接用MCU的GPIO驱动。我建议用专用的半桥驱动芯片(如IR2104、DRV8301),或者自举电路。
我的习惯:设计H桥驱动时,我会在栅极串联一个10-100Ω的电阻。这个电阻能抑制振荡,还能限制驱动电流。有一次没加这个电阻,MOSFET开关时产生了严重的振铃,干扰了控制电路。
MOSFET选型要点
选MOSFET,别只看耐压和电流。我列几个容易被忽略的参数:
- Rds(on)——导通电阻,直接影响发热。低压电机(12V/24V)建议选10mΩ以下的。
- Qg——栅极电荷,决定开关速度。Qg越小,开关损耗越低。
- Vgs(th)——阈值电压。3.3V MCU驱动时,建议选逻辑电平MOSFET(Vgs(th) < 2V)。
- 体二极管恢复时间——在电机换向时,体二极管会导通。恢复时间太慢会导致额外损耗。
嗯,这一章的内容就到这里。电机控制的基础,说白了就是理解电机怎么转、PWM怎么配、H桥怎么驱动。把这些搞清楚了,后面的控制算法才有落脚点。