ARTICLE DETAIL

资讯详情

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

PWM驱动MOS管H桥:电机控制核心原理与优化实战

PWM驱动MOS管H桥:电机控制核心原理与优化实战 1. 从零搞懂PWM驱动MOS管H桥为什么它是电机控制的核心搞嵌入式或者电力电子的人迟早会碰到一个绕不开的电路——H桥。不管是做小车、搞机械臂还是修个电动推杆只要涉及直流电机的正反转和调速H桥就是那个站在幕后干活的核心角色。而把PWM信号和MOS管结合起来去驱动H桥更是目前最主流、最高效的方案。我这些年经手的电机驱动项目少说也有几十个从玩具级的小板子到工业级的驱动器都摸过踩过的坑和总结出来的经验今天一次性摊开来讲。先把这个标题拆开看PWM、MOS管、H桥、驱动、优化。五个词每一个都值得单独写一篇文章。但真正有价值的是它们组合在一起之后产生的化学反应——怎么用PWM去控制MOS管的开关怎么让四个MOS管搭成的H桥既高效又可靠怎么在发热、干扰、死区这些细节上做优化。这套东西说白了就是用微控制器输出PWM波经过驱动电路放大后去控制MOS管的栅极让H桥的四个桥臂按照既定逻辑导通和关断从而在电机两端形成可调的平均电压实现调速和换向。你可能会问为什么不用继电器或者三极管继电器太慢PWM调速根本没法用而且触点寿命有限三极管压降大大电流下发热严重效率低得让人心疼。MOS管就不一样了导通电阻可以做到毫欧级别开关速度快非常适合PWM高频工作。所以现在但凡对效率有点要求的场合MOS管H桥基本是标配。这篇文章适合谁看如果你刚学完模电数电想动手做一个电机驱动板那这篇内容能帮你少走至少三个月的弯路。如果你已经在做驱动电路但总遇到发热、烧管、电机抖动的问题那这里面关于死区时间、栅极驱动、自举电路的部分应该能直接解决你的痛点。如果你只是好奇PWM和H桥到底怎么回事那也没关系我会尽量用生活化的类比把原理讲清楚。注意本文涉及的所有电路方案均基于低压直流场景12V-48V高压市电场景不在讨论范围内请务必注意人身安全。2. H桥电路的核心架构与MOS管选型逻辑2.1 H桥为什么叫H桥一张图看懂四个桥臂H桥这个名字来源于它的拓扑形状——四个开关管排列成一个字母H的样子电机接在中间那条横杠上。具体来说左边上下两个MOS管组成一个半桥右边上下两个组成另一个半桥电机跨接在两个半桥的中点之间。工作逻辑其实很直观。假设左边上管叫Q1左边下管叫Q2右边上管叫Q3右边下管叫Q4。想让电机正转就导通Q1和Q4电流从电源正极经过Q1流向电机再从电机经过Q4回到地。想反转就导通Q3和Q2电流方向反过来。想让电机停要么全部关断要么导通Q2和Q4让电机两端短接实现刹车。这里有个铁律同一侧半桥的上下两个管子绝对不能同时导通。Q1和Q2同时导通意味着电源正极直接通过两个管子接到地瞬间电流只受导通电阻限制轻则烧管重则炸电源。这个现象叫“直通”或者“ Shoot-through”是H桥最致命的问题。所以任何H桥驱动方案里死区时间都是必须认真对待的参数。2.2 MOS管选型不是随便抓一个就能用选MOS管的时候很多人第一反应是看耐压和电流。这没错但远远不够。我一般会按下面这个顺序来筛选第一步确定耐压。电源电压是12V那MOS管的VDS至少要有20V以上的余量一般选30V或者40V的。为什么要留余量因为电机是感性负载关断瞬间会产生反电动势电压可能冲到电源电压的两三倍。如果MOS管耐压不够直接被击穿。第二步看导通电阻RDS(on)。这个参数直接决定发热。举个例子电机工作电流5AMOS管导通电阻20毫欧那单个管子的导通损耗就是5×5×0.020.5W。四个管子加起来就是2W如果散热不好温度会升得很快。所以RDS(on)越小越好但代价是成本高、栅极电荷大。一般低压场合选10毫欧以下的N沟道MOS管比较合适。第三步看栅极电荷Qg。这个参数很多人忽略但它决定了驱动电路的设计难度。Qg越大开关速度越慢开关损耗越大对驱动电流的要求也越高。高频PWM应用下Qg小的管子优势明显。第四步看封装。TO-220适合插件和加散热片TO-252、PDFN适合贴片高密度布局。封装还影响热阻热阻越小散热越好。下面这张表是我常用的一些MOS管对比供参考型号耐压VDS导通电阻RDS(on)栅极电荷Qg封装适用场景IRF320555V8mΩ146nCTO-220大电流低压电机AO340030V28mΩ6nCSOT-23小功率微型电机IRF540N100V44mΩ71nCTO-220中压中等电流IRLZ44N55V22mΩ48nCTO-220逻辑电平驱动AOD418440V6mΩ32nCTO-252贴片大电流提示IRLZ44N和AO3400属于逻辑电平MOS管栅极阈值电压低可以直接用3.3V或5V单片机IO驱动。IRF3205和IRF540N是标准MOS管需要10V左右的栅极电压才能完全导通必须加驱动电路。2.3 为什么上管用N沟道需要自举电路H桥的四个管子下管用N沟道MOS管很好理解源极接地栅极给高电平就导通。但上管就麻烦了——N沟道MOS管要导通栅极电压必须比源极电压高出一个阈值。上管的源极接的是电机电机另一端可能接地也可能接电源源极电位是浮动的。如果电源是12V上管导通时源极接近12V那栅极就需要接近12V加上阈值电压比如15V以上。但单片机只能输出3.3V或5V根本不够。解决方案有两种一是用P沟道MOS管做上管栅极拉低就导通简单但P沟道管子导通电阻大、价格贵、可选型号少二是用N沟道MOS管加自举电路用一个电容把电压“抬”上去。自举电路的核心是一个二极管和一个电容电容一端接在上管源极另一端通过二极管接电源。当下管导通时上管源极接近地电容通过二极管充电到电源电压。当需要上管导通时驱动芯片把电容的电压叠加到栅极上栅极电压就变成了电源电压加上电容电压足够让上管完全导通。这个自举电容的选型也有讲究。容量太小高频PWM下电荷不够上管驱动电压会掉容量太大充电时间长低频时可能来不及充满。一般选100nF到1μF之间具体要看驱动芯片的要求和PWM频率。我通常先用100nF打底实测波形如果上管栅极电压有塌陷再加大。3. PWM信号如何驱动MOS管从单片机到栅极的完整链路3.1 PWM的本质用时间换电压PWM全称脉冲宽度调制说白了就是通过调节方波的占空比来控制平均电压。假设电源12VPWM频率20kHz占空比50%那电机两端的平均电压就是6V。占空比80%平均电压就是9.6V。电机因为机械惯性感受不到每个脉冲的开关只会响应平均电压所以转速就跟着占空比走。这里有个关键点PWM频率不能太低否则电机会听到啸叫而且电流纹波大也不能太高否则MOS管开关损耗急剧增加。一般有刷直流电机用10kHz到20kHz比较合适这个频率在人耳听觉范围边缘噪音小开关损耗也可接受。无刷电机因为需要更平滑的电流可能会用到20kHz到50kHz。以STM32F103为例用定时器输出PWM非常方便。假设用TIM3的通道1和通道2分别控制左右两个半桥配置代码如下// STM32F103 PWM初始化示例 void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // PA6和PA7作为PWM输出引脚 GPIO_InitStructure.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 定时器配置72MHz主频预分频72-1自动重装载1000-1 // PWM频率 72MHz / 72 / 1000 1kHz TIM_TimeBaseStructure.TIM_Period 1000 - 1; TIM_TimeBaseStructure.TIM_Prescaler 72 - 1; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); // 通道1配置 TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 500; // 初始占空比50% TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM3, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); // 通道2配置 TIM_OCInitStructure.TIM_Pulse 500; TIM_OC2Init(TIM3, TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); }这段代码把PWM频率设成了1kHz实际用的时候建议改成10kHz以上。修改预分频值就行比如预分频改成7-1频率就变成10kHz。3.2 栅极驱动芯片单片机IO直推MOS管为什么不行有人可能会想单片机IO输出3.3VMOS管栅极阈值2V那不是刚好能导通吗理论上可以但实际完全不行。原因有三第一单片机IO的驱动电流通常只有20mA左右而MOS管栅极在开关瞬间需要几百毫安甚至几安的峰值电流来快速充放电IO根本喂不饱第二3.3V栅极电压下MOS管处于半导通状态导通电阻远大于标称值发热严重第三开关速度慢开关损耗大PWM频率一高管子就烫得不行。所以栅极驱动芯片是必须的。常用的半桥驱动芯片有IR2104、EG2104、DRV8301等。以IR2104为例它一片就能驱动一个半桥内置自举电路输入兼容3.3V和5V逻辑输出驱动电流可达200mA以上足够驱动大多数MOS管。IR2104的接线逻辑很简单IN引脚接单片机PWMSD引脚接使能控制HO接上管栅极LO接下管栅极VB和VS之间接自举电容VS接半桥中点。两个IR2104就能组成完整的H桥驱动。注意IR2104的SD引脚是低电平使能还是高电平使能不同批次可能不一样用之前一定要看数据手册。我吃过这个亏板子焊好之后电机不动查了半天才发现使能极性搞反了。3.3 死区时间H桥最容易被忽略的致命细节死区时间是指同一半桥的上下两个MOS管在切换时故意插入的一小段两者都关断的时间。为什么需要因为MOS管关断需要时间如果上管还没完全关断就打开下管瞬间就会直通。死区时间就是给关断过程留出的安全余量。死区时间太短直通风险高太长输出波形失真电机低速时可能抖动。一般选200ns到1μs之间。IR2104本身内置了死区时间大约500ns左右对大多数应用够用。如果需要更精确的控制可以用带可编程死区的驱动芯片比如DRV8301。实测的时候用示波器同时看上管和下管的栅极波形确认两者没有重叠。如果没有示波器至少要用万用表测一下半桥中点电压如果发现异常的大电流或者管子发热严重死区时间可能就是元凶。4. 实操过程从原理图到能跑的驱动板4.1 原理图设计要点与常见错误画H桥原理图的时候有几个地方特别容易出错。第一个是自举二极管的方向。自举二极管要从电源正极指向自举电容的正端如果画反了自举电容充不上电上管永远导通不了。第二个是自举电容的耐压。电容两端电压大约是电源电压但考虑到开关瞬间的尖峰耐压至少要选电源电压的两倍。12V系统选25V或50V耐压的电容比较稳妥。第三个是栅极电阻。MOS管栅极和驱动芯片输出之间通常要串一个电阻用来限制栅极充电电流抑制振荡。电阻太小开关速度快但容易振荡电阻太大开关速度慢开关损耗大。一般选10Ω到100Ω之间我常用22Ω或33Ω。如果发现栅极波形有振铃可以适当加大电阻或者在栅极和源极之间并一个10kΩ的下拉电阻。第四个是电源去耦。H桥开关瞬间会产生很大的电流尖峰如果电源去耦不好电压会塌陷导致单片机复位或者驱动芯片误动作。每个半桥的电源和地之间至少要并一个100μF的电解电容和一个100nF的陶瓷电容越靠近MOS管越好。4.2 PCB布局走线比原理图更重要H桥的PCB布局有个基本原则大电流路径要短而粗。电源正极到上管漏极、上管源极到电机、电机到下管漏极、下管源极到地这一整条路径的走线宽度要足够。1盎司铜厚的情况下每安培电流至少需要0.5mm线宽。5A电流的话走线宽度至少2.5mm最好铺铜。自举电容和自举二极管要尽量靠近驱动芯片的VB和VS引脚走线越短越好。栅极驱动走线也要短避免和功率走线平行防止开关噪声耦合到栅极造成误触发。还有一个容易忽略的点半桥中点的走线。这个节点连接上管源极、下管漏极、电机和驱动芯片的VS引脚电流变化率很高走线电感会导致电压尖峰。所以这个节点要尽量短最好直接铺铜连接。提示如果PCB空间允许在电机两端并一个续流二极管或者RC吸收电路可以有效抑制反电动势尖峰。二极管选快恢复型的RC吸收一般用100Ω电阻串100nF电容。4.3 上电调试第一次通电千万别直接接电机板子焊好之后第一次上电一定要谨慎。我的习惯是先用可调电源限流设到100mA不接电机只给驱动板供电。用示波器看PWM输入信号和栅极驱动信号是否正常。如果电流异常大立刻断电检查。确认栅极波形正常后接一个功率电阻或者小灯泡作为假负载逐步加大PWM占空比观察输出波形和电流。假负载测试通过后再接电机。接电机的时候也要限流先给低占空比确认电机能转、方向正确、电流在合理范围内再逐步加大。这个流程看起来麻烦但能避免很多烧管炸电源的事故。我早期做驱动板的时候焊好直接上电接电机结果因为一个自举二极管焊反了上管一直半导通几秒钟管子就冒烟了。后来就养成了限流上电的习惯再也没烧过板子。4.4 关键波形实测与分析调试的时候几个关键波形必须看。第一个是半桥中点的电压波形正常应该是干净的方波上升沿和下降沿陡峭没有明显的振铃和过冲。如果振铃严重说明走线电感太大或者栅极电阻太小。第二个是上管栅极电压波形正常应该在电源电压附近摆动如果发现高电平只有几伏说明自举电路有问题。第三个是电机电流波形正常应该是三角波如果出现尖峰或者平台说明死区时间或者续流回路有问题。下面这张表总结了常见波形异常和对应的排查方向波形异常可能原因排查方法半桥中点振铃严重走线电感大、栅极电阻小缩短功率走线、加大栅极电阻上管栅极高电平不足自举电容容量小、二极管反接加大电容、检查二极管方向电机电流有尖峰死区时间不足、续流不良加大死区、加续流二极管下管栅极波形畸变驱动电流不足、地弹换驱动芯片、优化地平面PWM占空比线性度差死区时间过长、驱动延迟减小死区、换高速驱动5. 优化与保护让H桥稳定跑上几年的关键5.1 发热优化从导通损耗和开关损耗两头抓MOS管发热主要来自两部分导通损耗和开关损耗。导通损耗等于I²×RDS(on)开关损耗等于0.5×VDS×ID×(trtf)×fsw。低频下导通损耗占主导高频下开关损耗迅速上升。降低导通损耗最直接的办法是选RDS(on)更小的管子但要注意RDS(on)随温度升高会增大标称值通常是25°C下的实际工作到100°C时可能翻倍。所以选型时要留足余量按实际工作温度下的RDS(on)来算损耗。降低开关损耗的办法是加快开关速度也就是减小栅极电阻、提高驱动电流。但开关速度太快会带来EMI问题所以要在损耗和EMI之间找平衡。我一般先用22Ω栅极电阻实测温升和EMI再微调。散热方面TO-220封装的管子加散热片热阻可以降到10°C/W以下。贴片封装靠PCB铺铜散热需要足够的铜面积和过孔。如果温升还是太高可以考虑加风扇强制风冷。5.2 保护电路过流、过温、欠压一个都不能少H桥工作环境恶劣电机堵转、电源波动、负载突变都可能损坏管子。所以保护电路不是可选项是必选项。过流保护最简单的方式是串一个采样电阻用比较器检测电压超过阈值就关断PWM。采样电阻一般选几毫欧到几十毫欧太大影响效率太小检测精度不够。也可以用霍尔电流传感器隔离性好但成本高。过温保护可以用NTC热敏电阻贴在MOS管附近单片机ADC读取温度超过阈值降功率或者停机。欠压保护是防止电源电压过低时MOS管驱动不足导致半导通发热用电阻分压加比较器就能实现。有些驱动芯片内置了这些保护功能比如DRV8301就集成了过流、过温、欠压保护用起来省心很多但价格也贵不少。如果成本敏感可以用分立方案自己搭。5.3 常见故障排查速查表故障现象可能原因解决方法电机不转PWM没输出、使能脚极性错、自举电容坏查单片机PWM、查使能电平、换自举电容电机只往一个方向转一个半桥没工作、方向控制逻辑错查对应半桥栅极波形、查控制逻辑管子发热严重导通电阻大、开关损耗大、散热不良换低RDS(on)管子、调栅极电阻、加散热电机低速抖动死区时间过长、PWM频率太低减小死区、提高PWM频率上电就烧管直通、自举二极管反接、电源反接查死区、查二极管方向、加防反接电机飞车上管一直导通、控制信号异常查上管栅极、查单片机输出PWM调速不线性死区补偿不够、驱动延迟大加死区补偿、换高速驱动注意电机飞车是非常危险的情况尤其是大功率电机。调试时一定要固定好电机远离旋转部件。我见过有人调试时电机突然全速旋转连架子都甩飞了。5.4 进阶优化从能用到好用如果基础功能都跑通了还想进一步提升性能有几个方向可以尝试。一是用电流环控制代替简单的占空比控制通过采样电机电流做闭环可以实现恒转矩或者恒转速。二是用空间矢量PWM代替普通PWM电压利用率可以提高15%左右。三是加入死区补偿根据电流方向动态调整死区时间改善低速线性度。这些进阶优化需要更复杂的算法和更多的调试时间但效果也是显而易见的。我之前做一个机械臂项目用了电流环加死区补偿之后低速爬行现象基本消失定位精度提高了一个档次。6. 我踩过的那些坑和总结的经验做H桥驱动这些年烧过的管子少说也有几十个炸过的电容也不在少数。有些坑是教科书上不会写的只有自己亲手焊过、调过、烧过才能记住。第一个坑是自举电容的耐压。早期我用16V耐压的电容做12V系统的自举想着12V离16V还有余量结果开关尖峰直接把电容打穿了。后来一律用50V耐压的再也没出过问题。第二个坑是栅极电阻的位置。栅极电阻一定要靠近MOS管栅极不能靠近驱动芯片。如果放错了位置驱动走线的电感会和栅极电容形成LC振荡栅极波形振铃严重管子容易误触发。这个细节很多原理图上看不出来但PCB布局的时候必须注意。第三个坑是地线处理。功率地和信号地一定要分开走最后单点接地。如果混在一起大电流在地线上产生的压降会干扰信号导致单片机复位或者驱动误动作。我试过用0欧姆电阻或者磁珠连接两个地效果不错。第四个坑是PWM频率的选择。有一次做一个小车项目PWM频率设了1kHz电机啸叫特别明显而且低速时抖动厉害。后来改成16kHz噪音基本听不到了低速也平顺了很多。但频率提高之后管子温升也上来了又得重新调栅极电阻和散热。第五个坑是电机续流。H桥关断时电机电感会产生反电动势如果没有续流回路电压尖峰会击穿MOS管。虽然MOS管内部的体二极管可以续流但体二极管压降大、恢复慢大电流下发热严重。所以在电机两端并快恢复二极管或者RC吸收电路能显著降低尖峰和发热。最后分享一个调试小技巧如果手头没有示波器可以用一个简单的LED加电阻串在栅极和源极之间通过LED亮度粗略判断栅极有没有信号。虽然精度不高但应急的时候能快速定位问题。当然条件允许的话示波器还是必备的很多问题只有看到波形才能准确判断。这个电路后续还可以往无刷电机驱动方向扩展把三个半桥组合起来就是三相桥配合霍尔传感器或者无感算法就能驱动无刷电机。原理是相通的把H桥吃透了三相桥也就是多了一个桥臂的事。
返回列表