☰
H桥电机驱动原理与PWM调速工程实现
2026/10/7 17:30:31 网站建设 项目流程

做电机驱动的朋友迟早都会碰到H桥这个电路。无论是做一个直流电机正反转控制器、给机器人底盘加PWM调速,还是给电动推杆设计制动逻辑,H桥都是绕不开的基础单元。所谓H桥,就是用四个开关管搭成一个很像字母H的结构,电机横在中间那根横梁上,通过对角导通来改变电流方向,从而实现正反转;再配合PWM调速,就能连续控制电机转速,制动也有一套专门的开关组合。这篇文章我会把H桥的原理讲透,把正反转、制动以及PWM调速的工程实现细节全部拆开,包括管子选型、死区时间处理、STM32定时器输出PWM的配置流程,以及实际调试中踩过的坑,适合刚接触电机驱动、或者正在为项目选驱动方案的硬件工程师和嵌入式开发同学参考。

1. H桥驱动电路的工作原理与结构拆解

1.1 为什么叫H桥:拓扑结构

H桥的电路形态并不复杂,四只开关管Q1、Q2、Q3、Q4组成左右两个桥臂,直流电机M横跨在两个桥臂中间。Q1和Q2在顶上接到电源正极,Q3和Q4在底下接到地,电机两端分别接在左桥臂中点(Q1和Q3的连接处)和右桥臂中点(Q2和Q4的连接处)。你把这个图画出来,电源线和地线在两侧,电机横在中间,整体就是母H的轮廓,所以叫H桥。

这四只管子可以全是MOS管,也可以全是三极管,甚至可以用IGBT、继电器等方式实现,但本质逻辑是一样的:任何时候都不允许同一桥臂的上下两只管子同时导通。如果Q1和Q2同时导通,电源正极直接经过这两只管子到地,相当于短路,电流会瞬间冲到几十甚至上百安培,管子立刻冒烟。这个现象在工程上叫“直通”或“桥臂导通”,是H桥设计的第一禁忌。

那正反转是怎么实现的?很简单,让电流方向反过来就行。Q1和Q4导通时,电流从电源经Q1流入电机左端,从电机右端经Q4流到地,电机正向转动;Q2和Q3导通时,电流方向正好相反,电机反转。所以H桥的本质不是一个“桥”,而是一个可控的电流方向切换器,电机本身不知道正反,它只认电流方向。

1.2 四种工作状态:正转、反转、制动、滑行

我把H桥的基本工作状态整理成一张表,这张表是做驱动逻辑时直接对照用的:

工作状态导通的开关管电流路径电机表现
正转Q1、Q4VCC→Q1→电机→Q4→GND电机正向通电,正常转动
反转Q2、Q3VCC→Q2→电机→Q3→GND电机反向通电,反转
制动Q3、Q4电机两端被下管短接电机反电动势形成短路电流,快速减速
滑行无电机两端悬空电机靠惯性自由转动,缓慢减速

这里有一个初学者最容易搞错的地方。很多人以为制动就是把电源断开让电机停下来,其实那是滑行,电机带着负载能转好几圈才停。真正的制动是把电机两端短路,因为电机在转动时就是一个发电机,两端短接以后,反电动势会驱动一个很大的短路电流,这个电流产生反向力矩把电机迅速刹停,能量全部消耗在绕组电阻上,这就是能耗制动。具体到H桥里,就是把两个下管Q3、Q4同时导通,或者把两个上管同时导通,都能把电机短接。工程上优先用下管,因为下管驱动电路简单,不需要自举,控制逻辑也安全。

很多人会问:下管同时导通会不会短路电源?不会,因为电机在中间,它不是一个纯导线,电机的绕组有电阻和电感,电源的那条通路被电机断开了,电流只能从电机两端走。但如果电机没有转动、没有反电动势,下管导通时就没有电流,这时候电机相当于被“锁死”,你用手拧都拧不动,这就是所谓的“抱闸”效果。

1.3 续流二极管:感性负载的必备附件

电机是典型的感性负载,电流不能突变。当PWM脉冲关断、管子断开的时候,电机绕组里的电流还要继续走,如果没有续流回路,电机两端会产生一个很高的反向电压,瞬间就能把MOS管击穿。这个反向电压的大小和电流变化率以及回路寄生电感有关,实际测量常常超过电源电压的数倍。

所以H桥里每个开关管旁边都要有一个续流二极管。你可能会说MOS管本身有体二极管,是不是就不用加了?体二极管确实能续流,但它的反向恢复时间比较慢,开关频率一高,体二极管的恢复损耗会非常大,导致管子发热。小功率、低频率的场合用体二极管凑合没问题,但PWM频率超过10kHz以后,最好在外部并联一个快恢复二极管或者肖特基二极管。续流二极管的耐压要留够余量,至少是电源电压的两倍以上,电流额定值也要大于电机峰值电流。

续流方向也要特别注意:正转时Q1和Q4导通,PWM关断后电流要经过Q2的体二极管或外部二极管回到电机,也就是说,续流回路是靠“对面桥臂”的二极管完成的。这四个二极管缺一不可,少了一个,对应的开关管在某个状态下就会承受高压尖峰,烧管只是时间问题。

2. 器件选型与驱动方案:从三极管到专用驱动芯片

2.1 三极管H桥还是MOS管H桥

小功率应用,比如玩具电机、小型减速电机、微型风扇,用三极管搭H桥完全够用。常见组合是NPN管加PNP管做互补结构,或者直接全部用NPN管配逻辑电路。三极管是电流驱动器件,基极需要持续供电,饱和导通时管压降一般在0.3V到0.7V,四个管子加起来的压降就有1V以上,在大电流场合这部分损耗会变成实实在在的热量。而且三极管的开关速度慢,不适合高频PWM。

一旦电流超过1A,或者开关频率超过几kHz,老老实实用MOS管。MOS管是电压驱动器件,栅极几乎不取电流,导通后是纯电阻特性,导通电阻可以做到几毫欧,大电流下的压降和损耗都很小。选MOS管的时候重点看三个参数:耐压Vdss、连续电流Id、导通电阻Rds(on)。工程上我会按电源电压的1.5到2倍选耐压,按电机堵转电流的2倍选连续电流,Rds(on)则越小越好,毕竟它直接决定了导通损耗。

不过MOS管也有一个麻烦:栅极驱动。三极管给基极加个电流就行,MOS管的栅源之间是一个电容,你必须先把栅极电容充到阈值电压以上,管子才会导通。充放电电流越大,开关速度越快,开关损耗越小。所以MOS管不能直接用单片机的IO口去推,中间需要一个专门的驱动电路。

2.2 高边MOS的驱动难题与自举电路

H桥里有两个管子是“高边”管,源极不是接地的,而是接在电机端。当高边管导通时,源极电压约等于电源电压,这时候要让管子保持导通,栅极电压必须比源极高出一个Vgs(一般需要10V以上)。可是你的控制电路是0到5V或者0到3.3V的,根本没有能力给高边管提供这么高的栅极电压,这就是高边驱动的核心难题。

工程上最常见的解法是自举电路。以半桥驱动芯片IR2104为例,芯片给高边驱动专门设计了一个自举引脚VB和VS,在低边管导通的时候,芯片内部会通过一个自举二极管给外部的自举电容充电,电容上的电压大概等于VCC减去二极管压降。等到低边管关断、高边管需要导通时,电容的电就“垫”在高边管的源极之上,让栅极电压保持高出源极一个VCC,这样高边管就能正常导通了。自举电容不能选太小,否则高边管导通后电压跌落太多,管子无法完全导通而进入线性区,发热严重;也不能盲目选很大,电容大了充电恢复慢,占空比太极限时会来不及补充电荷。我在直流电机驱动里一般取1uF到10uF,频率低就选大一点,频率高就选小一点,贴片陶瓷电容优先。

需要注意的是,自举电路有占空比限制。因为自举电容要靠低边管导通时来充电,如果占空比长期接近100%,低边管一直关断,电容得不到补充,高边管就会因为栅极电压不足而退出饱和区。所以用自举方案时,PWM占空比要限制在一个范围内,比如不超过95%,或者定期给一个最短低边导通时间来补电。

2.3 半桥驱动芯片与大功率IGBT驱动

自己用分立元件搭栅极驱动电路不是不行,但要处理电平位移、死区、过流保护一堆问题,调试周期长,出问题还不容易查。工程上更推荐直接用半桥驱动芯片,一颗IR2104就能解决高边驱动和死区问题。IR2104内部集成了自举二极管、电平位移电路和死区控制,你只需要给它一个PWM输入信号,它内部自动生成互补的高边和低边驱动信号,而且两个输出之间自带大约500ns的死区时间,防止上下管直通。一颗芯片加两个MOS管就是半个H桥,两片IR2104加四个MOS管就是一个完整的H桥,这个方案在中小功率直流电机驱动里非常常用。

如果项目对成本敏感,国产的EG2104、EG2110可以直接替代IR系列的同类芯片,引脚兼容,用起来几乎没差别。功率再往上走,比如电动车的电机控制器、大功率逆变器,就要上IGBT了。IGBT的栅极特性和MOS管类似,但它的输入电容更小、米勒电容的影响更明显,驱动电路需要提供更大的瞬态电流,并且通常需要负压关断来提高抗干扰能力。大功率IGBT驱动还要考虑退饱和保护,也就是当管子过流导致C-E电压升高时,驱动芯片要能检测到并关断输出,这个功能在IPM模块和专用IGBT驱动芯片里已经集成好了,自己用分立电路实现的话复杂度会高出不少。对于大多数个人项目和中小型设备,用半桥驱动芯片加MOS管是性价比和可靠性最平衡的方案。

3. PWM调速的工程实现

3.1 PWM调速原理:占空比决定平均电压

电机调速最常用的方法就是PWM。PWM的全称是脉冲宽度调制,简单说就是让电源以固定的频率快速接通和断开,接通的时间占整个周期的比例叫作占空比。假设电源电压是12V,PWM频率是16kHz,占空比是50%,那电机两端等效的平均电压就是6V,转速大约就是全速的一半。频率通常选在10kHz到20kHz之间,高于人耳的听觉上限,避免电机发出尖锐的啸叫声;再高的话开关损耗会明显增大,散热压力变大。

PWM占空比和转速严格来说不是完全线性的,因为电机存在死区电压,也就是电压低到一定程度电机会转不动,但在大多数开环调速场景里,我们直接按线性关系处理,然后通过闭环或者手动校准去修正。有一点必须注意:PWM调速改变的是端电压,不是电流。电机在负载变化时电流会随之变化,如果项目要求转速精准,需要加编码器做闭环PID控制,这是PWM调速之外的工作了,但驱动级的原理是一样的。

3.2 STM32定时器PWM输出:从CubeMX到寄存器

单片机上输出PWM最常用的就是定时器。以STM32F103为例,用CubeMX配置定时器PWM输出非常简单,但很多人配置完发现自己看不懂生成的代码,遇到问题不知道怎么调。我先给个通用配置思路:假设系统时钟是72MHz,我想得到一个16kHz的PWM。

先算分频和重载值,公式是:PWM频率 = 定时器时钟 / ((PSC+1)*(ARR+1))。如果我设PSC=0,那么ARR=4499,频率就是72MHz/4500=16kHz。占空比由比较寄存器CCR决定,占空比 = CCR/(ARR+1)。比如CCR=2250时占空比就是50%。在CubeMX里对应操作是:选择TIM3,Channel1设置成PWM Generation CH1,把Prescaler设为0,Counter Period设为4499,Pulse设为2250。生成代码后调用:

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

然后在主循环里改占空比:

__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000);

不用死记这几个API,只要理解比较寄存器CCR的值可以直接映射占空比就行。如果你用定时器的PWM模式,要留意模式1和模式2的区别:模式1是计数小于CCR时输出有效电平,模式2反过来。选错模式的话,现象就是占空比越大电机越慢,很容易让人绕进去。

如果想让PWM输出占空比随时间自动变化,比如做一个缓启动或者正弦波调制,还可以用定时器的DMA功能,让内存里的占空比数据按顺序自动搬运到CCR寄存器,CPU完全不用干预,这是后面做更复杂控制时很实用的招。

3.3 电平转换与隔离:PWM信号怎么送出去

单片机IO口输出的是3.3V或者5V的PWM信号,能不能直接接到半桥驱动芯片?IR2104这类芯片的输入阈值兼容TTL电平,3.3V高电平可以直接识别,很多项目就这么用的。但如果你的PWM信号要跨越一段比较长的线,或者驱动板和大功率部分有地电位差,那就不能直接连了。

最简单的隔离方案是用线性光耦,比如6N137,把PWM信号从控制侧传到功率侧。光耦的输出是开漏结构,需要加上拉电阻,而且要注意光耦的延迟时间,高速光耦一般延迟在几十纳秒量级,低速光耦可能会到微秒级,会严重降低有效占空比的分辨率。另一种方案是数字隔离器,比如ISO7720、ADuM1201,延迟更小、寿命更长,但成本稍高。

这里还要提醒一句:所谓“高精度PWM电平转换输出电路”,很多人在做激光雷达、舵机控制这类项目时会遇到。本质是把单片机3.3V的PWM电平转成5V或12V的TTL电平,或者反过来。如果用三极管做电平转换,注意不要让它在放大区停留太久,否则PWM边沿会变缓;用专门的逻辑电平转换芯片会更省事。关键是,PWM边沿质量直接影响电机驱动的开关损耗和电磁干扰,边沿越陡,开关损耗越小,但EMI会变大,实际工程里要在栅极电阻上找个平衡点。

3.4 PWM接MOS管发热的真相

热词里“PWM接MOS管发热”几乎是所有做电机驱动的朋友必踩的坑。现象很统一:纯直流导通时管子不热,一上PWM就烫手,甚至烧管。原因是MOS管有两类损耗,导通损耗和开关损耗。导通损耗好理解,就是导通电阻Rds(on)上的I²R损耗,直接给管子散热就行;开关损耗就麻烦了,在管子从关断到完全导通的过程中,会有一段区域工作在“半导通”状态,这时候管子两端有很高的电压,同时电流也在上升,电压和电流的乘积很大,瞬时功耗非常可观。开关频率越高,这个损耗占比就越大。

解决思路按优先级排列:第一,看栅极驱动能力。驱动芯片的灌拉电流够不够,栅极电阻是不是太大。栅极电阻过大,充放电时间变长,管子就会长时间停留在半导通区,这是发热的头号原因。第二,选总栅极电荷Qg小的MOS管,Qg小代表栅极电容小,开关过程短,损耗自然小。第三,适当降低PWM频率,不需要20kHz就用10kHz,损耗能降近一半。第四,检查死区时间,死区太长或者太短都会增加损耗。另外,用示波器查看Vgs波形,如果上升沿和下降沿时间超过100纳秒,那开关损耗一定小不了。

3.5 延伸应用:风扇PWM调速与温控

PWM调速不只是直流电机驱动才用。现在四线散热风扇的第四根线就是PWM输入,频率一般是25kHz左右,由风扇内部的驱动芯片直接控制,不需要自己搭H桥。但很多人拆风扇后找不到正负极和PWM引脚,其实标准线序是红色正极、黑色负极、黄色测速、蓝色PWM控制,不同品牌有差异,尽量看标签或者查手册再接线。这类风扇用PWM调速时,占空比和转速大致是线性的,但风扇内部芯片对高电平电压有要求,一般需要5V或3.3V,接反或者电压过高都可能烧掉控制芯片。

还有一类常见场景是用温度传感器控制PWM。比如STM32读DS18B20的温度,再把温度值映射成占空比去控制风扇或者加热器,这就把传感器采集、PID控制、PWM输出整个链路串起来了。温度低时占空比小,温度高时占空比大,映射关系可以用简单的线性公式,也可以加滞回防止在临界点反复抖动。驱动端依然是H桥或半桥,控制端只是多了一个读取温度的环节,整个系统的难点其实还是在功率部分,也就是占空比变化那一刻管子怎么不被热坏、电机怎么不飞车。

4. 正反转切换、制动策略与系统保护

4.1 正反转切换:先停稳,再换向

正反转控制看起来就是导通不同的对角管子,但工程实现里有大坑。比如电机正在全速正转,你直接把管子从Q1/Q4切换成Q2/Q3,相当于瞬间给一个高速旋转的电机加上反向电压,电流会变得非常大,同时机械冲击也会很剧烈,齿轮箱和负载很容易被这脚“急刹”打坏。

合理的切换流程是:先发PWM使能停止,让管子全部关断,等电机转速降下来,最好降到零或者接近零,再切换导通方向。如果是开环控制、没有速度反馈,那就在软件里固定一个等待时间,比如50到200毫秒,让电机先自由滑行一段;如果要求快速换向且不能等,那需要先进行能耗制动把电机刹停,再立即反向启动。不管是哪种方式,都不能在没做任何处理的情况下直接翻转H桥的导通方向,这是H桥软件逻辑里最基本的保护意识。

4.2 三种制动策略怎么选

制动在工程上有多种实现方式,我对比过性能,简单总结一下:

第一种是能耗制动,也叫短接制动。把电机两端短路,让反电动势产生短路电流来制动。优点是控制简单,管子逻辑现成,缺点是制动能量全部变成电机绕组的热量,连续频繁制动会让电机很烫。

第二种是反接制动。让电机加上反向电压,这时制动力矩最大,转速能很快降到零。但电流会飙升到堵转电流级别,对MOS管和电源的冲击都很大,一般只在需要紧急停车或者大惯量负载快速刹车时才用,并且要配合电流限制。

第三种是再生制动。电机减速时变成发电机,能量回馈到电源母线,这在电动车上很常见。但直流电机驱动里再生制动需要在母线上有能吸收能量的电容或者其他负载,否则电压会泵升到很高,把驱动板打穿。个人项目一般不主动做再生制动,用能耗制动就够了,如果硬要回收能量,会用到双向变换器或者单相H桥整流器的思路,复杂度直接上一个量级。

4.3 继电器正反转方案的取舍

热词里“两路继电器接电机正反转”也是很多人最先尝试的方法。用两个双刀双掷继电器,或者两个SPDT继电器,把电机的两条线分别接到继电器的常开和常闭触点上,一组继电器给电机一端接正电源、另一端接地,另一组反着接,这样切换继电器就能改变电机转向。

继电器方案的优点是简单、便宜、接触电阻小,大电流场合比MOS管还好使,但它有先天短板:寿命短,机械触点频繁通断几百次就会出现接触不良;速度慢,切换一次继电器要几十毫秒,根本没法做高频PWM调速;触点闭合时会有机械弹跳,如果两个继电器逻辑互锁做不好,可能出现电源短路的危险。所以继电器方案适合ON/OFF控制、不频繁换向的场合,比如卷扬机、水泵、门锁这类设备,而需要平滑调速和频繁正反切换的移动机器人、电动工具,直接上H桥。

如果想兼顾两者,有人会用两个继电器的同时再接一个MOS管做PWM调速,继电器负责方向切换,MOS管负责速度调节。这个方案能工作,但要注意继电器的切换瞬间会让电机感性负载产生电弧,需要加RC吸收或者压敏电阻,否则继电器触点寿命会急剧下降。

4.4 过流、飞车与硬件保护

H桥驱动最容易出现的故障模式就是过流烧管。电机堵转、负载卡死、上下管直通,都会导致电流失控。最简单的过流保护是在电源负极和H桥地之间串一个采样电阻,比如0.01欧姆的合金电阻,用比较器检测电阻上的压降,超过阈值立即关断PWM或者拉低使能引脚。采样电阻的功率要按最大电流的平方乘以电阻值来选,别用小功率贴片电阻,过大电流瞬间就会烧断。

“PWM电机飞车”这个热词对应的场景是这样:PWM信号因为干扰丢失、单片机死机、或者光耦损坏,驱动芯片的输入一直保持高电平,电机突然全速运转。防止飞车的办法有几个:硬件上给驱动芯片的使能引脚接一个RC下拉,信号丢失时自动关断;软件上用一个定时器定期检查PWM信号,如果一定时间内没有有效跳变就进入故障状态;更稳妥的是在控制板上加独立看门狗,单片机死机了看门狗复位,复位期间驱动芯片的使能引脚被拉低,电机自然停住。另外,H桥电源入口还要加大容量电解电容和TVS管,应对负载突变产生的电压尖峰。

5. 常见问题与排查技巧实录

5.1 管子一上电就烧,问题可能出在哪儿

我调试H桥时最怕的不是功能不对,而是上电瞬间“啪”一声冒烟。大多数情况是无件没坏、接线没接对。整理一下最常见的几个原因:第一,电源极性接反,这个低级错误烧的是防反接二极管而不是MOS管;第二,逻辑混乱导致同一桥臂上下管同时导通,电源被短路,这通常是驱动信号时序问题,或者是死区时间没设置;第三,电机启动或者堵转时电流过大,管子选的余量不够;第四,没有续流二极管或者二极管接反,关断瞬间的高压尖峰把管子击穿。

排查方法有一套固定的顺序:先用限流电源供电,把电流限制在正常电流的十分之一左右,再上电观察。如果限流电源显示电流异常大,立刻断电,大概率是直通或者短路。然后用万用表测四个管子栅源之间有没有电压,确认驱动信号正常。最后再逐步提高电源电压和电流限制。养成这个习惯以后,烧管子的概率会明显降低。

5.2 电机转速不受控或者飞车

现象是:给定50%占空比,电机却全速转;或者运行时偶尔突然加速。先排除软件问题,确保定时器的PWM输出确实占空比可调,用示波器直接测驱动芯片输入端的PWM波形。如果波形正常,再看驱动芯片输出端,有没有因为栅极电阻过大导致上升沿严重变缓。再往下查电源电压,PWM调速时电机平均电压降低,但电源电压本身应该稳定,如果电源在轻载时偏高,或者有大的纹波,也会让转速看起来不正常。

飞车还有一个容易被忽略的原因:高速光耦的输入电流不够,导致PWM高电平没有被完全传送到驱动端,占空比上限被压低,占空比50%的时候输出可能已经是100%了。把光耦输入端的限流电阻算一下,确保额定电流在光耦推荐范围内,同时检查上拉电阻和信号极性,别把低有效和高有效搞混。

5.3 发热问题速查表

这里给出一个我平时排查发热问题直接对照的表格:

现象可能原因排查与解决
全速导通时发热明显导通损耗过大更换更小Rds(on)的MOS管,检查是否完全导通
PWM开启后明显更热开关损耗过大减小栅极电阻,提高驱动电流,降低PWM频率
上管比下管热很多自举电容不足或占空比过高加大自举电容,限制最大占空比
两个管子同时发热死区时间不足导致微直通增大死区时间,检查驱动芯片死区配置
发热伴随机身抖动PWM频率过低或占空比分辨率不足提高PWM频率,调整定时器重载值

还有一种情况是电机正转正常、反转时发热严重,通常是反转对应的那两只管子驱动电路有问题,重点查它们的栅极电阻、驱动芯片通道有没有虚焊,别一上来就怀疑理论方案错了。用红外测温枪逐个测管壳温度,发热不均衡的位置就是问题所在,这个比手摸准得多。

5.4 推荐调试顺序

最后给一套我验证过很多次的调试顺序,照着做能省很多事。先用低压小电流电源,比如12V系统先用5V供电,电流限制在200mA以下。然后手动把PWM占空比设成极低值,比如5%,不带电机负载,先测四个管子的驱动波形是否正常,特别注意上下管互补输出的死区间隔。确认波形没问题后,再接上电机,占空比从10%开始慢慢往上加,同时观察电源电流有没有异常。如果一切正常,再上全速测试正反转切换和制动功能。

调试工具至少要有示波器和两把万用表。示波器看PWM波形和死区,万用表测电压和通断。没有示波器也可以驱动,但遇到问题就会非常被动,因为很多故障是瞬态的,万用表根本捕捉不到。测波形时探头接地线要尽量短,直接夹在管子源极和栅极脚下,别用长鳄鱼夹夹在板子另一端,那样测出来的波形会因为地线电感而严重失真,干扰你判断。

我个人在实际调试中的体会是,H桥电路本身并不难,难的是把“逻辑正确”变成“工程可靠”。逻辑上正反转、PWM调速都很直观,但真的放在一个电源波动、有感性负载、还有各种电磁干扰的环境里,一个问题一个问题冒出来,某种程度上比拼的是谁踩坑总结更快。最后再分享一个小技巧:每次改完电路和程序,都先记录一版验证过的参数,包括PWM频率、占空比范围、死区时间、限流值,下次遇到问题直接对照排查,这比临时翻笔记高效得多。做电机驱动,稳比快更重要。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询