3、电机驱动基础:H桥驱动原理、MOSFET选型与栅极驱动、PWM调制与死区时间设置
各位同学,咱们今天聊点硬核的。电机驱动,说白了就是怎么让电机听话。你让它转它就转,让它停它就停,让它正转它绝不反转。这背后,H桥是核心,MOSFET是手脚,PWM是大脑的指令。我做了这么多年转向系统,这三个东西要是没搞透,车子上了路心里是真没底。
3.1 H桥驱动原理:让电机正反转的“魔法开关”
H桥这个名字,你一看电路图就明白了。四个开关管摆成“H”形,电机横在中间那根横杠上。它的任务很简单:控制电流方向。
怎么控制?我习惯这么记:
- 正转:左上和右下导通,电流从左往右流过电机。
- 反转:右上和左下导通,电流从右往左流过电机。
- 刹车:要么上下同侧导通(短路制动),要么全部关断(滑行)。
你想想看,这就像过河。你想从左岸到右岸,就开左边的桥和右边的桥。想回来?换一对桥就行。简单吧?
核心要点:H桥绝对不能出现“上下直通”。也就是左上和左下同时导通,或者右上和右下同时导通。那叫“直通短路”,电流瞬间爆炸,管子直接冒烟。我在项目里见过有人调试时忘了加死区,一上电MOSFET就炸了,那声音,跟放鞭炮似的。
实际应用中,我们常用的是“半桥”组合。一个半桥就是上下两个管子。两个半桥拼起来,就是一个完整的H桥。很多集成驱动芯片,比如DRV8837、L298N,内部就是这么干的。
3.2 MOSFET选型与栅极驱动:选对管子,成功一半
MOSFET是H桥的执行者。选型选不好,后面全是坑。我个人习惯从这几个维度下手:
| 参数 | 我的建议 | 为什么 |
|---|---|---|
| Vds(漏源击穿电压) | 至少2倍母线电压 | 电机反电动势尖峰很高,留余量才安全 |
| Rds(on)(导通电阻) | 越小越好,<10mΩ | 电阻大,发热大,效率低。转向电机电流大,发热是头号敌人 |
| Qg(栅极总电荷) | 尽量小,<50nC | Qg小,开关速度快,开关损耗低。但要注意,太快了会有振铃 |
| Id(漏极电流) | 2倍峰值电流以上 | 电机堵转时电流最大,必须扛得住 |
嗯,这里要注意。栅极驱动不是随便给个电压就行。MOSFET的栅极是个电容,你得给它快速充放电才能让它快速开关。驱动电流不够,管子就会“慢吞吞”地开关,损耗巨大。
我曾经在一个项目中,用了普通的GPIO直接推MOSFET,结果管子温升特别快。后来加了专门的栅极驱动芯片,比如IR2104,问题就解决了。驱动芯片的好处是:
- 提供足够的峰值电流(通常1A~4A)
- 自带死区时间控制
- 有的还带欠压锁定和故障反馈
我的小技巧:栅极串联一个10Ω~22Ω的电阻。这个电阻能抑制开关时的振荡,又不至于让开关速度太慢。具体阻值,用示波器看栅极波形,调到没有明显振铃为止。
3.3 PWM调制与死区时间设置:精细控制的灵魂
电机要调速,靠的就是PWM。占空比越大,平均电压越高,电机转得越快。但PWM不是简单的“给电-断电”,这里有两个关键点:
3.3.1 PWM调制方式
常用的有两种:
- 单极性调制:一个半桥的上下管互补导通,另一个半桥的下管常开或常闭。优点是纹波小,但开关损耗集中在一边。
- 双极性调制:四个管子全部参与开关,对角线上的管子同时通断。优点是响应快,但纹波大,损耗也大。
转向系统里,我一般用单极性调制。因为转向电机对纹波敏感,纹波大了会抖,手感很差。
3.3.2 死区时间——绝对不能省
死区时间是什么?就是上下管切换时,故意插入的一段“全关断”时间。为什么要这么做?
因为MOSFET关断比开通慢。你想想看,上管还没完全关断,下管就开了,这不就直通了吗?
警告:死区时间太短,会直通炸管。死区时间太长,波形失真,电机噪音大,效率低。我一般从100ns开始调,用示波器看上下管的栅极波形,确保一个完全关断后另一个才开通。
具体设置多少?我分享一个经验公式:
死区时间 > 关断延迟时间 - 开通延迟时间 + 安全裕量
安全裕量我通常取50~100ns。比如某款MOSFET的关断延迟是40ns,开通延迟是20ns,那死区时间至少设到120ns。
实际项目中,很多MCU的PWM模块自带死区插入功能。比如STM32的高级定时器,直接配置DTG寄存器就行。我习惯用库函数:
// 以STM32为例,设置死区时间为100ns
TIM_BDTRInitTypeDef bdtr;
bdtr.TIM_OSSRState = TIM_OSSRState_Enable;
bdtr.TIM_OSSIState = TIM_OSSIState_Enable;
bdtr.TIM_LOCKLevel = TIM_LOCKLevel_1;
bdtr.TIM_DeadTime = 10; // 根据时钟频率计算,这里假设时钟为100MHz,10对应100ns
bdtr.TIM_Break = TIM_Break_Disable;
bdtr.TIM_BreakPolarity = TIM_BreakPolarity_High;
bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &bdtr);
代码看着简单,但实际调试时,我建议先用示波器抓波形确认。别信手册,信眼睛。
3.4 知识体系总览
下面这张图,是我自己画的。它把H桥、MOSFET、PWM和死区的关系串起来了。你一看就明白:
说白了,H桥给了你控制方向的能力,MOSFET给了你执行的能力,PWM给了你精细调节的能力。而死区时间,是保证这一切安全运行的底线。这三样东西,你吃透了,电机驱动这块就算入门了。
避坑指南:我曾经在调试时,为了追求极致的效率,把死区时间压到50ns。结果电机一启动,噪音大得吓人,波形上全是毛刺。后来老老实实加到150ns,世界清净了。记住,稳定比效率更重要。
好了,这一章就到这里。下一章咱们聊聊电流采样和闭环控制,那又是另一片天地了。
公众号:蓝海资料掘金营,微信deep3321