ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

H桥电机驱动原理与PWM调速工程实现

H桥电机驱动原理与PWM调速工程实现 做电机驱动的朋友迟早都会碰到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的全称是脉冲宽度调制简单说就是让电源以固定的频率快速接通和断开接通的时间占整个周期的比例叫作占空比。假设电源电压是12VPWM频率是16kHz占空比是50%那电机两端等效的平均电压就是6V转速大约就是全速的一半。频率通常选在10kHz到20kHz之间高于人耳的听觉上限避免电机发出尖锐的啸叫声再高的话开关损耗会明显增大散热压力变大。PWM占空比和转速严格来说不是完全线性的因为电机存在死区电压也就是电压低到一定程度电机会转不动但在大多数开环调速场景里我们直接按线性关系处理然后通过闭环或者手动校准去修正。有一点必须注意PWM调速改变的是端电压不是电流。电机在负载变化时电流会随之变化如果项目要求转速精准需要加编码器做闭环PID控制这是PWM调速之外的工作了但驱动级的原理是一样的。3.2 STM32定时器PWM输出从CubeMX到寄存器单片机上输出PWM最常用的就是定时器。以STM32F103为例用CubeMX配置定时器PWM输出非常简单但很多人配置完发现自己看不懂生成的代码遇到问题不知道怎么调。我先给个通用配置思路假设系统时钟是72MHz我想得到一个16kHz的PWM。先算分频和重载值公式是PWM频率 定时器时钟 / ((PSC1)*(ARR1))。如果我设PSC0那么ARR4499频率就是72MHz/450016kHz。占空比由比较寄存器CCR决定占空比 CCR/(ARR1)。比如CCR2250时占空比就是50%。在CubeMX里对应操作是选择TIM3Channel1设置成PWM Generation CH1把Prescaler设为0Counter Period设为4499Pulse设为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频率、占空比范围、死区时间、限流值下次遇到问题直接对照排查这比临时翻笔记高效得多。做电机驱动稳比快更重要。
返回列表