第3章:H桥驱动电路原理
好,咱们今天聊聊H桥。说实话,这玩意儿是电机驱动的核心,搞不懂它,后面啥都白搭。我当年刚入行时,第一次看到H桥电路图,心想:这不就是个H形状的开关组合吗?后来踩了坑才明白,里面的门道多着呢。
3.1 H桥拓扑结构
H桥为什么叫H桥?你想想看,四个开关管,上下各两个,中间夹着电机,画出来就是个大写字母H。上管叫Q1、Q3,下管叫Q2、Q4。电机接在H的横杠上,也就是Q1/Q2的中间点和Q3/Q4的中间点。
我习惯用N沟道MOSFET做下管,P沟道做上管。为什么?N沟道导通电阻小,开关速度快,适合做低端驱动。但上管用P沟道有个好处——驱动电路简单,不需要自举电容。不过现在很多方案都用全N沟道,因为N沟道性能更好,只是需要自举电路,麻烦一点。
关键点:H桥的四个开关管绝对不能同时导通。上下管同时导通,那就是电源对地短路,瞬间冒烟。我见过不止一次,新手一上电,MOSFET直接炸飞。
3.2 开关管导通逻辑
电机要正转,怎么办?导通Q1和Q4,电流从电源正极→Q1→电机→Q4→地。电机反转呢?导通Q2和Q3,电流方向反过来。
这里有个细节:绝对不能只导通一个上管和一个下管就完事了。你得考虑死区时间,这个后面细说。
我整理了一个导通逻辑表,你直接拿去用:
| 电机状态 | Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|---|
| 正转 | ON | OFF | OFF | ON |
| 反转 | OFF | ON | ON | OFF |
| 刹车(快速停止) | OFF | ON | OFF | ON |
| 滑行(自由停止) | OFF | OFF | OFF | OFF |
看到没?刹车模式是让下管都导通,电机两端短路,利用反电动势快速制动。滑行模式就是四个管子全关,电机靠惯性转,慢慢停下来。
我的习惯:在点钞机应用中,我一般用滑行模式停止,因为刹车模式会产生很大的电流冲击,容易干扰控制电路。除非需要急停,否则别用刹车。
3.3 死区时间设置
嗯,这里要重点讲。死区时间,说白了就是防止上下管同时导通的那段空白期。
你想想看,MOSFET开关不是瞬间完成的。关断需要时间,导通也需要时间。如果上管还没完全关断,下管就开始导通了,那不就是直通短路吗?
死区时间怎么设?我一般这样算:
死区时间 = 上管关断延迟 + 下管导通延迟 + 安全裕量
举个例子,我用的是IRF540N,关断延迟大约50ns,导通延迟大约30ns。那我死区时间至少设80ns。但我习惯再加50%的裕量,设到120ns。为什么?温度变化、器件离散性,这些都会影响开关速度。
注意:死区时间不是越大越好。死区时间太长,电机电流会断续,导致转矩波动,点钞机就会发出嗡嗡声。我遇到过一台机器,客户说噪音大,查了半天,就是死区时间设了500ns,太大了。
实际项目中,我建议用示波器实测。把上下管的栅极电压波形抓出来,看看交叉点。调整死区时间,直到交叉点刚好消失,再留一点余量。这才是最靠谱的方法。
3.4 电流续流路径
电机是感性负载,电流不能突变。当开关管关断时,电机线圈里的电流必须有个地方去,不然会产生高压尖峰,击穿MOSFET。
续流路径怎么走?分两种情况:
- 上管关断,下管还没导通:电流通过下管的体二极管续流,从地→体二极管→电机→上管关断端。
- 下管关断,上管还没导通:电流通过上管的体二极管续流,从电源→体二极管→电机→下管关断端。
说白了,就是靠MOSFET内部的体二极管来续流。但体二极管有个问题——反向恢复慢,损耗大。高频PWM下,体二极管发热严重。
我的做法:在点钞机这种低电压、小电流的应用中,体二极管够用了。但如果电流超过2A,或者PWM频率超过20kHz,我建议并联肖特基二极管。肖特基二极管反向恢复快,压降低,能显著减少发热。
我曾经在一个项目中,没加肖特基二极管,结果MOSFET温度飙到85度。加了之后,直接降到45度。差距就这么大。
续流路径还有一个坑:续流电流会流过电源。如果电源内阻大,或者走线长,续流电流会在电源线上产生压降,干扰其他电路。所以,H桥的电源走线要短而粗,最好加个大电容在H桥旁边。
3.5 实际电路设计要点
好了,理论讲完了,说点实际的。设计H桥时,我一般注意这几点:
- 栅极驱动电阻:每个MOSFET的栅极串一个10-100Ω的电阻。为什么?抑制栅极振荡,控制开关速度。电阻太小,开关太快,EMI大;电阻太大,开关太慢,损耗大。
- 自举电容:如果用全N沟道方案,上管需要自举电容。电容值一般选0.1-1μF,耐压要够。我习惯用X7R材质的,温度特性好。
- 电流采样:在下管和地之间串一个采样电阻,检测电机电流。采样电阻要选低阻值、高精度的,比如10mΩ、1%的。
- 保护电路:加个过流检测,一旦电流超过阈值,立刻关断所有MOSFET。我一般用比较器加D触发器,锁死保护状态,直到手动复位。
避坑指南:我曾经在PCB布局上吃过亏。H桥的大电流回路一定要短,不要绕来绕去。电源和地要铺铜,走线宽度至少能承受3倍额定电流。否则,铜箔会发热,甚至烧断。
最后,给你一个简单的H桥驱动代码示例,基于STM32的定时器PWM输出:
// 初始化定时器,设置死区时间
void H_Bridge_Init(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
// 定时器时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1, ENABLE);
// 时基配置
TIM_TimeBaseStructure.TIM_Period = 999; // PWM频率 = 72MHz / (999+1) = 72kHz
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
// 死区时间设置:120ns
// 公式:DTG = 死区时间 / Tclk = 120ns / 13.9ns ≈ 8.6,取9
TIM_BDTRInitStructure.TIM_DeadTime = 9;
TIM_BDTRInitStructure.TIM_OSSR = TIM_OSSR_Enable;
TIM_BDTRInitStructure.TIM_OSSI = TIM_OSSI_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRInit(&TIM_BDTRInitStructure);
// 配置PWM通道
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500; // 50%占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
// 使能定时器
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
// 设置电机正转
void Motor_Forward(uint16_t speed) {
TIM_SetCompare1(TIM1, speed); // 设置占空比
// 这里假设CH1和CH1N分别控制Q1和Q2,CH2和CH2N控制Q3和Q4
// 正转:Q1和Q4导通,Q2和Q3关断
TIM_SetCompare2(TIM1, 0); // Q3关断
// Q4由互补PWM控制,自动与Q3互补
}
// 设置电机反转
void Motor_Reverse(uint16_t speed) {
TIM_SetCompare2(TIM1, speed); // 设置占空比
TIM_SetCompare1(TIM1, 0); // Q1关断
// Q2由互补PWM控制,自动与Q1互补
}
这段代码里,死区时间由硬件自动插入,你只需要配置TIM_DeadTime寄存器就行。STM32的定时器在这方面做得不错,省了很多事。
好了,H桥的原理就讲到这里。下一章咱们聊聊PWM调制策略,看看怎么让电机转得更平滑、更安静。