资讯动态

PWM死区引发电机启动抖动?实测诊断与补偿方案

发布时间:2026/10/22 15:12:52 来源:尧图企业网站定制
电机启动那一下整个机架都在抖抖得跟蹦迪似的。PID参数前前后后调了不下十版增益加过也减过积分限幅来回试启动微颤依然在电流波形上始终挂着一层说不清的毛刺。如果你也撞上过这种PID怎么调都压不住的诡异抖动我得先提醒一句八成问题不在PID环路而在逆变电路最容易被忽略的PWM死区。这篇文章我用实际测试的波形把死区怎么导致电机微颤、怎么用示波器确认、以及补偿前后的实测差异一条条讲清楚。1. 电机启动微颤查了一圈最后锁定PWM死区1.1 死区到底是什么上下桥臂的保护延时三相电机驱动器里每一相上下两个开关管MOSFET或者IGBT是串联在母线上的。如果上下管同时导通母线直接短路电流瞬间能把管子炸掉。为了避免这种灾难控制器在切换上下管状态时必须插入一段两边都关断的时间让上管彻底关断之后下管再开通反过来也一样。这段强制双方都关断的间隔就叫死区时间典型值在几百纳秒到几微秒之间。打个比方死区就像给门装了一个缓冲铰链你在推门的时候有一瞬间门既不受你推的力也还没被另一侧的弹簧拉走处于没人管的状态。放在逆变电路里这段没人管的时间里相电压不由开关管决定而由电流方向和续流二极管决定。这个不受控的窗口虽然短但在高速开关下它积累起来的电压误差非常可观。1.2 为什么PID参数怎么调都压不住这种抖很多人包括我自己早期遇到启动抖动第一反应就是电流环PID没调好。比例增益加大想让它快速修正积分调强想消掉稳态误差。但实际操作下来会发现一个尴尬的事实增益调得越猛抖动在某个频点上不但没消失反而更容易被激起来甚至伴随高频噪声。原因在于PID是线性控制器它假设被控对象的输入输出关系是线性的而死区带来的电压损失是不连续的、带方向性的非线性环节。它不像负载突变那样能被PID学习掉它更像是每个PWM周期都在叠加一个和电流方向绑定的系统误差。更麻烦的是死区造成的电压损失在低速轻载时被放得特别大。低速的时候电机反电动势低电流环输出的指令电压本身就没多少可能就几伏而死区每个周期损失的电压可以达到这个量级的百分之几十。指令电压10V实际加在电机上的平均电压只有7V还有3V被系统私吞了。这已经不是PID增益能补救的范畴单纯靠调环路参数本质上是在用控制器带宽去硬扛一个非线性扰动效果自然有限。2. 死区引入的电压误差算给你看2.1 电流方向决定误差方向一个反直觉的细节死区期间输出相电压到底被拉到什么电平取决于电流方向而不是开关管的驱动信号。这一点特别关键很多人一开始都搞反了。拿一相桥臂举例。当上管导通、下管关断时理想情况下输出端应该接母线正极Vbus。但在死区时间里上管已经关断而下管尚未导通此时如果负载电流方向是流出桥臂正向电流会继续通过上管的续流二极管体二极管流向下游输出电压依然接近母线正极误差极小但如果电流方向是流入桥臂反向下管的续流二极管会续流输出就被拉低到负母线这时候输出电压和理想值之间就差了整整一个母线电压。把时间累积起来算死区引起的平均电压误差约等于ΔU ≈ Udc × t_dead × fsw × sign(i)其中Udc是母线电压t_dead是死区时间fsw是开关频率sign(i)是电流方向符号。举个具体数值例子母线电压300V开关频率10kHz死区时间2微秒。代入公式300 × 0.000002 × 10000 6V。也就是说无论电流方向朝哪边每个周期输出平均电压都会和理想值差6V左右。在低速轻载时电流环出来的指令电压往往只有十几伏这6V误差就是不可忽略的大头。2.2 误差电压的量化计算和阶梯效应上面这个公式是平均意义上的估算但实际波形比公式更闹心。死区导致的电压误差不是平滑的它的方向会随电流方向翻转尤其电流在过零点附近来回穿越时误差符号反复跳变形成一种阶梯状的电压畸变。我习惯用一张表格把死区误差的四个象限列出来排查问题的时候对照着看非常直观电流方向死区时间内续流路径实际输出状态误差方向流出桥臂正上管体二极管续流接近母线正极无明显误差流入桥臂负下管体二极管续流接近母线负极误差为正电压偏高流出桥臂正下管体二极管续流接近母线负极误差为负电压偏低流入桥臂负上管体二极管续流接近母线正极无明显误差注意表格里前两种是正常换向后两种才是死区真正作妖的场景——它们出现在上下管切换和电流方向不匹配的时候。电流过零附近误差符号有一个明显的阶跃这就是电流波形在零点附近出现畸变、平台、畸形的根本原因。这样的畸变电流作用在电机上产生额外的转矩脉动启动低速阶段尤其明显表现出来就是抖得停不下来。3. 示波器实测确认接线方式与特征波形3.1 测量点怎么选波形怎么看理论推得再漂亮不实测等于纸上谈兵。死区诊断最直接的手段就是示波器实测但测量点选不对很容易误判。我的做法是同时测三路信号相电压对直流母线中点、相电流、PWM驱动波形。相电压要用差分探头测而且是测在电机端子处不是测在驱动板输出侧。别小看这一点驱动板到电机端子之间还有一段线缆线缆上的寄生电感和压降会污染波形。差分探头的接法是探头正极接电机端子探头负极接直流母线电容中点或者用Chassis地视系统而定这样测出来的才是真正加在电机上的相电压。电流用电流探头直接卡在相线上带宽建议至少比开关频率高一个数量级。如果手头只有分流电阻采样的方案就只能在控制板上测波形会多一点开关噪声但不影响判断死区特征。判断死区最典型的特征是在上下管驱动信号切换的瞬间相电压波形出现一段钉住不动的平台平台宽度约等于死区时间。正常不带死区补偿的系统里这个平台会在电流过零点附近变得非常醒目经常伴随电流波形出现一个小台阶、一个缓慢爬坡或者一个尖刺。把示波器时基放到每格50微秒~200微秒触发设在相电流上连续抓几个开关周期就能看得很清楚。3.2 电流采样时刻踩过的坑这里必须多说一个我首批实测时踩过的坑电流采样时刻如果落在死区边沿附近采样值会被噪声污染得很厉害看起来像是电流环出了故障。PWM周期内电流信号在开关动作的那一瞬间跳变是最剧烈的。如果你的ADC采样恰好安排在上管关断瞬间或者死区结束瞬间采样得到的电流值会带上相当大的尖峰这种尖峰进到电流环里等价于给PID叠加了一个周期性扰动。有些开发者调PID越调越乱其实根子可能在这里——不是PID不合适是采样时刻一直在采集死区边沿的毛刺。我后来的做法是把ADC采样点强制对准PWM载波的中心或者中心附近一个稳定窗口远离死区边沿。做过这个调整之后即使不做死区补偿抖动幅度也会肉眼可见地降一截。这是一种错峰采样的思路配合死区补偿一起使用效果最好。4. 死区补偿实操方案对比、实现细节与实测波形4.1 三种补偿思路我推荐先上平均电压补偿死区补偿的思路大体分三种平均电压补偿、脉冲补偿、查表补偿。平均电压补偿最简单把前面算出来的ΔU按电流方向叠加到电压指令上去。电流方向为正时补偿量取ΔU电流为负时补偿量取-ΔU。这个方案实现成本低只需在电流环输出之后、PWM比较寄存器赋值之前加一个加法运算适合绝大多数驱动器改造。脉冲补偿则是在PWM波形的边沿上直接加宽或收窄脉冲把死区吃掉的时间补回来精度更高但需要在底层PWM生成逻辑里做精细的时序控制老一点的控制芯片改起来费劲。查表补偿是事先把不同电流角度、不同调制比下的误差电压算好存表运行时直接查表。这个方案灵活性最好但也最费存储和标定时间一般用在高端伺服驱动或对低速平稳性要求极高的场合。我个人的建议是先上平均电压补偿把架构跑通、用示波器确认效果再视情况升级成脉冲补偿或查表。不要一上来就追求最复杂的方案因为在死区补偿这件事上90%的收益来自正确的误差方向和合理的补偿量而不是补偿精度本身。4.2 补偿参数的计算与限幅平均电压补偿的关键是算准ΔU以及确保电流方向判断正确。ΔU的计算要拆成两个部分第一部分是死区时间本身造成的电压损失第二部分是开关管开通/关断延时不对称造成的微小偏差。工程上更常用的是直接测驱动波形算出实际的等效死区时间再用这个实测值计算补偿量。补偿量需要加限幅这一点容易忽略。补偿电压本质上是在原指令电压上叠加一个修正值但如果补偿量超过当前PWM周期能提供的电压范围就会造成过补偿——你补过头了误差从原来的负变成正波形反而更烂。我的限幅习惯是补偿量不超过PWM周期对应电压的5%。还应该加一个软启动逻辑启动瞬间电流尚未建立电流方向检测不稳定此时禁止补偿介入等电流稳定后再逐步切入。补偿放在电流环输出之后、PWM赋值之前这个位置决定了它不会改变PID环路本身的稳定性PID参数可以保持原样。这是平均电压补偿一个很讨喜的特性你不需要重新做一遍环路整定只需要在控制链末端校正一下执行器的非线性。4.3 补偿前后示波器波形对比这是整篇文章的重头戏直接看实测数据。补偿前的启动电流波形电机堵转或低速启动阶段相电流波形在过零点附近明显变钝出现一段几乎水平的停滞带电流从正到负的穿越过程不干脆像卡了壳。与此同时相电压在死区窗口内可以清楚看到被钳位的平台段波形边缘存在一间歇性的毛刺。补偿后的波形过零点的停滞带明显变窄电流穿越更线性毛刺减少启动初期的噪声大幅下降。直观上看电机启动过程变得干脆了抖动消失声音也从那种闷闷的突突声变成平滑的启动声。如果把这些波形并列放在同一张抓图上差异非常明显——你甚至不需要懂什么复杂理论一眼就能看出哪条曲线更干净。我把补偿前后的关键指标列个表方便对照参考指标补偿前补偿后启动阶段电流过零畸变宽度明显停滞带平台约数百微秒畸变大幅收窄过零斜率恢复电流波形高频毛刺明显伴随周期性尖峰显著减少接近纯正弦低速运行抖动幅度肉眼可见手摸机座有震感明显改善震感基本消失噪声表现闷响/突突声平滑类似白噪声5. 实测中容易翻车的操作细节5.1 死区时间以实测为准别信手册芯片手册上的死区时间是一个配置值但实际加到功率管上的真实死区还受驱动芯片传播延时、MOSFET栅极电阻、关断延时等因素影响和理论值可能差不少。实测方法很简单用示波器双通道同时测上管和下管的栅源电压或者栅极信号测量两个信号交叉区间里两边都低的宽度多测几次取平均值这才是有效的实际死区时间。我遇到过配置的死区设在1微秒实测驱动波形上真正同时关断的时间到了1.8微秒的情况。如果按1微秒去做补偿补偿量差了将近一倍效果大打折扣。所以补多少一定以实测为准。5.2 电流过零点方向误判补偿反而帮倒忙平均电压补偿的方向完全依赖电流方向符号而电流过零点附近方向本来就不稳定。如果电流采样噪声大或者方向判决逻辑太粗暴比如只看单次采样值的符号补偿量会在过零点附近反复倒向形成比死区误差更严重的震荡源。我踩过这个坑之后总结了一套处理办法对电流方向判断加滞回区间电流绝对值小于某个阈值比如额定电流的2%时强制补偿量为零不做过零附近的精细补偿。这等于主动放弃过零点那一小段补偿精度换取整体的稳定性。实测下来丢掉的精度对低速性能影响很小但稳定性大幅提升。真正需要过零点精细补偿的场景应该用更聪明的观测器去估计电流方向而不是硬判符号。5.3 补偿强度要匹配工况别一套参数用到底死区补偿量跟母线电压、开关频率、死区时间都有关系而母线电压在不同工况下会波动尤其电池供电的系统负载突变会让母线电压明显跌落。如果补偿量是按额定母线电压算的母线电压掉下来之后补偿偏大轻载时可能从欠补偿变成过补偿。我的处理方式是在补偿计算里实时读母线电压ADC把Udc当成变量而不是常量。另外不同温度下功率管的通断延时也会漂移死区效果跟着变所以理想做法是保留一个温度修正系数至少要在常温和大电流温升两种工况下各测一组补偿参数取其折中值或做线性插值。因为功率管发热后通断速度变快同时还出现导通压降问题这时候死区误差会可感知地变化。实测中我见过有人在冷机状态下调好参数热机后反而出现轻微抖动就是因为没考虑这个温漂。我还要提醒一下做完死区补偿之后可以回头重新审视一遍PID参数。如果原来的PID是为了跟死区带来的抖动对抗而调得比较激进那么补偿生效后激进的参数反而可能带来新的噪声。把增益适当回退一点往往能找到更好的稳态表现。配合前面说的错峰采样整个系统会安静非常多。我自己的体会是死区补偿这个活儿看起来只是加一个电压修正量但它牵扯到功率级硬件、PWM时序、电流采样、控制环路几个层面的配合任何一个环节出了问题补偿都会从解药变成毒药。先实测确认再小步切入最后全工况验证这套节奏走下来电机启动抖动的问题才能算是真正解决。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑