资讯动态

电机驱动器PWM啸叫全解析:从原理到消除方案的工程实践

发布时间:2026/10/24 11:24:17 来源:尧图企业网站定制
电机驱动器发出PWM啸叫这个问题我前前后后折腾了快两年。最早是在一批设备上发现电机还没真正转起来控制器一上电耳朵贴过去就能听到一种高频“嘶嘶”声频率不偏不倚刚好落在人耳最难受的区间。后来换过电容、改过控制板布线、甚至试过给整个驱动模组灌胶才一步步把原理彻底弄明白。这篇就把我在实际项目里排查和消除PWM啸叫的思路完整记录一遍如果你也被这个声音折磨过应该能少走不少弯路。内容覆盖直流有刷电机、步进电机、无刷电机常见的PWM驱动场景适合做驱动硬件、写电机控制算法的工程师也适合喜欢自己折腾驱动板的玩家对照排查。1. 先说清楚声音到底是从哪来的1.1 电机本身就是一个“扬声器”很多人都以为啸叫是驱动板上的电感或者电容发出来的实际上在大多数情况下电机本体才是最大的发声源。电机的绕组是感性负载PWM方波驱动时线圈里的电流并不是平直的而是叠加了很多纹波分量。电流变化会产生变化的磁场绕组和铁芯在这个脉动磁场中受到周期性电动力就相当于一个音圈在推动空气电机外壳和内部结构跟着一起振动声音就传出来了。这个过程的链条其实是这样的PWM翻转→电流纹波→电磁力波动→机械振动→空气传声。电机绕组的电磁力大约和电流的平方成正比而PWM供电下的电流上升沿和下降沿里含有大量高次谐波。纹波越猛声音越大。用示波器挂在采样电阻上看电流波形你会发现噪声大小和纹波幅度几乎一一对应纹波峰峰值高的时候啸叫一定明显。另一个容易被忽略的机理是磁致伸缩。硅钢片这类铁磁材料在交变磁场中尺寸会发生微小变化变化的频率和磁场变化的频率一致。这个高频的“伸缩”会带动铁芯表面产生声音和扬声器振膜发声音的原理类似。电机叠片质量参差不齐时同样频率下声音大小会差出好几倍这也是为什么有些同型号电机叫得特别响有些就安静很多。1.2 驱动板和电容也会“开口说话”电机之外驱动板上最常见的发声源是陶瓷电容和功率电感。MLCC贴片陶瓷电容使用的X5R、X7R、Y5V这些介质本质上是铁电材料在电场作用下会发生压电形变。PWM信号本身是方波方波经过电路板的走线加在电容两端时电压以极高的斜率反复跳变电容芯片就会随着跳变节奏“鼓动”外壳。当这个机械振动的频率落在可听范围内你就会在板子某个角落听到嘶嘶声。功率电感的发声路径稍微不同磁芯在交变磁场里反复磁化线圈绕组的匝间也受到电磁力如果磁芯装配得不够紧或者线圈浸漆不彻底整个电感就会像一个小喇叭一样振动。有些电感外面包着一层热缩管振动时热缩管和磁芯之间还会产生摩擦声听起来更刺耳。区分电机发声还是板级发声有一个很笨但有效的办法用一根长柄螺丝刀或者绝缘棒尖端抵住电机外壳或者芯片封装表面耳朵贴在木柄上。抵住电机时声音变大说明电机本体是主要声源抵住某个电容或电感时声音突然变化那问题就在元件上。这个听诊法能帮你快速锁定目标避免在错误的路径上浪费时间。2. 方案一把频率拉到人耳范围之外2.1 提高PWM频率的利与弊最直观的消除手段就是把PWM频率往上抬。人耳能听到的频率范围大致是20Hz到20kHz大多数成年人到了18kHz以上灵敏度就已经很差所以把基波频率从15kHz改到25kHz人耳听到的“尖叫”会立刻消失大半。提高频率不只改变声学效果还会改变电机驱动本身的电气特性。电机电流纹波的峰峰值和PWM周期T基本成正比近似关系是ΔI(VCC-VEMF)×D×T÷L其中D是占空比L是绕组电感。频率翻倍意味着周期减半纹波电流差不多也会减半。纹波减小之后电机的电磁转矩脉动变小运行更平滑铜耗和高频铁耗的分布也会变化。所以从电机电流质量角度看提高PWM频率是有好处的。但要清醒认识到代价MOS管和续流二极管在每个开关周期里都要经历一次开和关开关损耗约等于0.5×V×I×(tontoff)×f频率提高一倍开关损耗就翻一倍。驱动芯片和MOS管的温升会明显增加小体积驱动板可能直接扛不住。另外PWM周期变短之后定时器计数值变小占空比分辨率下降。例如定时器时钟72MHz15kHz时一个周期有4800个计数点分辨率约为0.02%提到25kHz后只有2880个点分辨率掉到0.035%左右。低速精细调节时会感觉到占空比“跳变”导致电机转速不平滑。2.2 20kHz并不是绝对安全线把频率抬到20kHz以上确实能骗过大部分成年人的耳朵但别以为过了20kHz就万事大吉。人耳听力的截止频率因人而异儿童和年轻女性的高频听力上限常常超过20kHz某些敏感人群甚至能“感觉到”22kHz的存在这种感受更像是一种压力感而非声音但确实会让人烦躁。还有一点要注意无刷电机或步进电机驱动器中PWM载波频率并不是唯一的声音来源。换向电流的转矩脉动会产生频率较低的噪声这个频率往往等于电机转速和极对数的乘积驱动器内部采样保持电路、软开关动作也可能产生额外的分频分量。你就算把PWM基波推到人耳范围之外这些次生分量还是有可能会落在可听区间内。我的建议是优先把PWM频率提到25kHz以上因为25kHz相对于20kHz留出了一段安全的过渡余量抑制了基波及其二次谐波的可听风险。但“提高频率”只是第一步实际项目中真正有效的做法往往是频率提升配合扩频、滤波和机械减振综合使用。3. 方案二用扩频和随机调制抹掉尖峰3.1 随机PWM的原理与实现要点固定频率的PWM产生的声音在频谱上是一条尖锐的能量峰。人耳对这种单一频率的峰值格外敏感因为听觉系统会自动聚焦到持续不变的窄带信号上。如果让PWM频率在一个小范围内随机抖动能量就从一条尖峰铺开成一段平坦的宽带底噪感知上的“刺耳”会变成“温和的沙沙声”甚至完全被环境噪声掩盖。这就是扩频和随机PWM的基本思想。实现随机PWM的方式有很多种最简单的是在定时器的周期寄存器ARR附近加一个伪随机扰动。比如基础周期对应ARR2879每次进入更新中断时生成一个-64到64之间的随机数加到ARR上就能得到围绕25kHz上下扰动约±2%的变频PWM。更讲究一点的做法是维护一张预先算好的频率表比如16kHz、18kHz、20kHz、22kHz、24kHz循环切换切换间隔控制在几十到几百微秒避免人耳感知到一个周期性的重复规律。改频率时有一个容易踩的坑ARR变了比较寄存器CCR必须跟着按比例变否则占空比会漂移。假设期望占空比是30%原先是CCRARR×0.3现在ARR加了δCCR就应该变成(ARRδ)×0.3或者在做完随机扰动后重新计算整个周期和比较值。如果MCU的PWM模块支持影子寄存器最好先算好新ARR和新CCR再在同一个更新事件里同步加载避免PWM波形出现毛刺。3.2 频谱打散后的实际效果我在实际项目里对比过固定频率和随机扩频的频谱变化。在20kHz固定频率下用频谱分析软件能看到一个明显高出底噪的尖峰改成±5%的随机频率扰动后这个尖峰消失了能量展平到大约1.5kHz宽的频带里峰值幅度下降了10dB以上。主观听感上原来那种尖锐刺耳的“嘶嘶”变成了类似白色噪声的“沙沙”声在环境噪音稍大的地方几乎听不出来。随机扰动的幅度要控制好。调制深度太小比如只有±0.5%频谱展宽有限人耳还是能识别出单频调制深度太大比如±15%以上频率变化范围过宽低速占空比的精度会下降电流纹波的瞬时值也会忽大忽小可能导致电机运行抖动。我实测下来±3%到±8%是比较理想的区间既能有效打散能量峰又不会明显影响电流环的稳定性。还有一点值得提随机数生成器本身的质量会影响扩频效果。用C库里的rand()不是不行但它的周期短、调用开销在某些低端MCU上不可控建议用线性反馈移位寄存器自己写一个伪随机序列占用资源少输出也够均匀。伪随机序列的重复周期最好超过几十个PWM周期否则听起来又变成了一种有节奏的“嗡嗡”声。4. 方案三从控制模式里挤掉噪声4.1 电流衰减与斩波模式的取舍很多啸叫问题根子不在PWM基频而在电流斩波的方式。尤其是步进电机驱动驱动芯片内部通常有快衰减、慢衰减、混合衰减几种电流衰减模式。慢衰减模式下续流时间较长电流纹波小但电流下降速度慢电机在中高速时会显得“肉”快衰减模式让电流快速下降纹波大斩波产生的噪声也更响。混合衰减就是在同一个开关周期里先快后慢兼顾响应速度和纹波实际效果往往是噪声明显低于纯快衰减模式。直流有刷电机的H桥控制也有类似问题。如果用的是异步续流即关断时电流只通过二极管自然续流这时续流路径上的压降大电流掉得快纹波大如果改用同步续流关断时由下桥MOS管导通续流压降小电流更平滑电流环的噪声和啸叫都会降低。当然同步续流需要MCU精确控制上下桥的互补输出和死区不是所有驱动硬件都支持。如果你是自己在做电流环PI调节可以试试把电流环的带宽适当降低。有些系统把电流环带宽设置得太高导致电流反馈对PWM开关噪声特别敏感芯片里的比较器在噪声干扰下反复翻转表现为占空比抖动进而加剧噪声。用示波器查看电流波形如果上面叠加了很多毛刺优先检查电流采样电路的地线布局和RC滤波而不是继续调参数。4.2 软件层面的“软开关”技巧还有一个经常被忽视的思路不要一直让电机处于连续的PWM斩波状态。许多应用里电机并不需要持续高频输出完全可以利用软件把PWM分成一小段一小段中间插入强制关断时间。比如转速稳定时让PWM输出10ms然后再完全关闭2ms让线圈里的能量通过续流二极管自然泄放。这样做的代价是转矩会有轻微的周期性脉动但好处是声音不再持续人耳对间歇噪声的敏感度比连续噪声低得多主观感受明显变好。如果负载很轻还可以考虑ON/OFF控制而不是PWM调速。比如风扇、水泵这类应用低速时本来就不需要那么精细的电压调节直接转一会停一会平均转速靠开和关的时间比例控制。这种情况下PWM斩波时间大大缩短线圈振动和开关噪声自然就减少了。这个方案和汽车启停系统的逻辑有点像虽然不适用所有场景但在低速轻载下非常有效。另外提醒一句很多驱动器有EN使能引脚。如果PWM输出为0时驱动芯片还在继续斩波啸叫还是会存在。正确做法是在不需要驱动时直接拉低EN引脚让驱动器输出级完全关断比单纯把PWM设为0更彻底。这一条在电池供电的低功耗产品里尤其重要既能降低噪声又能省电。5. 方案四硬件滤波器与机械减振5.1 电机端的吸收网络怎么设计软件调完之后如果啸叫残余仍在就需要动硬件了。最常见的做法是在电机两端并联一个小容值的安规电容或者CBB电容吸收PWM开关瞬间产生的高频电压尖峰。这个电容不需要很大取10310nF到104100nF之间耐压按电机工作电压的2倍以上选。电容容量一旦过大会拖慢电机电流的建立速度导致转矩下降、启动变慢而且大容量电容与电机电感形成LC谐振可能反而激发新的振荡噪声。我自己的经验是在电机端用103/630V的CBB电容再串一个10欧左右的电阻组成RC吸收网络。串电阻的用意是给高频振荡提供一个阻尼路径避免电容和绕组电感发生低阻尼谐振。这个组合对减小换向火花带来的高频干扰特别明显同时不会像纯电容那样影响驱动波形。如果是无刷电机驱动器输出端可以加LC滤波器但电感的饱和电流一定要大于堵转电流否则电机一旦堵转电感先饱和再发热紧接着就开始啸叫那等于一个新声源。板级陶瓷电容的替换也值得做。X7R、X5R介质有较强的压电效应在PWM驱动下容易发声。换成C0G/NP0介质后压电效应基本可以忽略噪声会明显下降。C0G的代价是同等容量下体积更大、价格更贵所以一般只换PWM开关节点附近的、电压纹波大的那几个电容不必整板都换。5.2 灌封、减震垫与结构改进万不得已的时候还可以从声学传播路径下手。机械声要传到人耳必须经过结构振动和空气传播两个环节。如果能打断这个路径即使振动还在也听不见多少声音。电机外壳和机架之间加一片硅胶减震垫或者把固定螺丝的扭矩略微放松一点就能改变电机和安装面的机械阻抗匹配许多共振放大现象会随之消失。灌封胶在驱动板降噪上效果非常明显环氧树脂把电感、电容、芯片统统包裹起来机械振动在胶体内部被阻尼吸收实测整体噪声可以下降几个分贝。但灌封的代价是后续维修极不方便芯片一旦损坏整个模组基本报废。我一般只建议在散热条件允许且产品不计划返修的场景下使用比如一次性设备或者终身免维护的嵌入式模组。还有一招是针对轴承和机械装配的如果电机在PWM停止、直接通直流电的情况下依然有嗡嗡声那问题来自机械结构本身换低噪声轴承、增加转子动平衡、改进定子安装方式才是正确的处理方向。这个和PWM啸叫是两个不同的问题别混在一起排查。6. 实操记录一次15kHz到25kHz的迁移6.1 原始配置与啸叫定位拿我自己做过的一个直流有刷电机驱动板举例。板子用的是一颗内置固定频率驱动芯片配合外部MOS全桥MCU输出单路PWM控制方向和油门。一开始为了兼容旧设计PWM频率设成了15kHz结果调试时一上电清晰的“嘶嘶”声就出来了。用绝缘螺丝刀抵住电机外壳声音明显增大说明电机本体是声源主力再把耳朵贴近驱动板还能听到轻微的“吱吱”声初步判断是功率路径上的陶瓷电容在响。为了确认频点我用示波器接在电机两端的采样电阻上看电流波形纹波峰峰值大约0.6A锯齿状的纹波频率正好是15kHz。又用手机装了一个频谱App放在电机旁边能看到15kHz附近一个尖锐的能量峰。到这里目标就很明确了把这一簇能量从可听区移走或者打散。6.2 修改过程与实测数据第一步是把PWM基频从15kHz改到25kHz。定时器时钟是72MHz15kHz对应ARR4800改到25kHz后ARR2880。修改CCR按比例计算原来50%占空比的CCR是2400改后是1440。实测输出波形频率25.0kHz占空比误差控制在0.1%以内。第二步是在电机端并联一组RC吸收网络103/630V CBB电容串联10欧电阻。这个位置在电刷两端吸收换向尖峰的同时不会影响稳态驱动。第三步是找到驱动板上PWM节点处的一颗1206陶瓷电容把X7R介质替换成同容值的C0G介质板级“吱吱”声立刻消失。改完之后再用频谱软件查看25kHz附近没有突出的能量峰耳朵贴近电机只能听到极其轻微的高频在室内安静环境下基本不可感知故障告一段落。6.3 高频化带来的三个副作用频率提上来之后新的问题马上出现了。第一个是驱动芯片发热。原先15kHz时芯片外壳只是温热改成25kHz后同样负载条件下表面温度大约升高了8°C开关损耗随频率线性上升不是开玩笑的。最后加了铝散热片加强导热才算解决。第二个是低占空比时的控制精度下降。原来5%占空比还能平滑调速提到25kHz后因为周期计数值变短、死区时间占比变大PWM波形在低占空比段出现抖动表现为电机低速时一顿一顿。我加了一个最小占空比钳位并在低速段切换到不同的控制方式才缓解。第三个是输入侧的电解电容明显变热因为更高的开关频率带来了更高的dv/dt输入滤波电容上的纹波电流增加。换成低ESR的固态电容之后温度恢复正常。这里要特别提醒提频不只是改个数字那么简单热、EMI、低速性能都需要重新评估。建议提频前先看示波器上有没有明显的振铃波形不干净的话先把吸收网络加上再提频否则高频振荡会放大。7. 常见问题与排查技巧实录7.1 如何快速判断啸叫来自电机还是电路板第一个被问烂的问题声音到底是电机发出的还是板子发出的我总结了一个三步定位法。第一步用绝缘长螺丝刀当听诊器抵住不同元器件听声音变化抵住电机外壳声音变大、抵住驱动板电容声音变小那电机是主源反过来的情况则问题在板级。第二步断开PWM信号直接给电机通一个干净的直流电压让它慢慢转。如果依然有高频声那是电机机械或换向问题如果声音消失定位到PWM驱动。第三步保持驱动板供电、关掉PWM输出把耳朵贴近驱动板若还有吱吱声说明是板上电容或者电感在振动。要注意陶瓷电容发出的声音往往不是基波频率而是PWM上升沿和下降沿引起的振铃频率听起来比基波更尖。用示波器测开关节点电压波形如果看到上升沿有过冲和振铃优先处理振铃啸叫往往随之消失。7.2 静音模式仍有细微噪声怎么办现在很多驱动芯片有“静音”或者“低噪声”模式原理多半是把PWM斩波频率移到超声频段同时用更精确的电流环来维持波形质量。但不少用户反馈开启静音模式后仍然能听到轻微噪声。这个噪声通常来自两个地方一是电流环在换向时刻发生振荡产生了包络调制把超声频段的能量“差频”到了可听范围二是死区时间设置不当导致上下桥臂直通或关断时序产生微小毛刺毛刺激发机械振动。针对第一种情况试着调整驱动芯片的电流衰减模式尤其是步进驱动混合衰减往往比快衰减安静很多。针对第二种情况用示波器测量电机电流波形看换向点附近是否有阻尼振荡必要时增加吸收网络或者在采样端加低通滤波。如果芯片没有开放死区调节那就只能在PCB布局上尽量缩短功率回路的长度减小寄生电感。7.3 硬件动不了的时候还能调什么最后一种情况很现实硬件已经定型PCB不能大改换芯片也不可能啸叫还是明显。这时候能动的只剩软件。优先把固定频率改成随机扩频用定时器ARR扰动实现成本几乎为零。其次检查软件里电机控制的节拍是否固定比如PID周期本身如果产生固定的低频包络就会调制出可听噪声把控制周期稍微“抖动”一下或者与PWM周期设置成非整数倍关系往往能收到意想不到的效果。再就是充分利用驱动器的使能引脚和PWM输出关断。在不需要电机保持力矩的时候把驱动器完全关断比让PWM停在某个占空比更安静也更能省电。对于需要保持位置的场合如果机械刹车可以承受调整成“短时间高占空比→长时间零输出”的间歇控制策略用平均输出换安静。还有一个小技巧如果你只是想让某个测试场景安静下来可以在控制程序中增加一个“静音模式开关”正常性能模式用原始频率测试或者演示时切换到低噪声策略。我在好几个项目里用这个办法同时满足了两拨人的要求很实用。最后分享一个我自己的习惯做新的驱动板先默认把PWM频率定在25kHz再从示波器、温升、EMI三个角度综合评估除非有特殊需求否则尽量不降回可听频段。善待这颗耳朵它会在你调试到半夜的时候回报你。

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

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

免费获取报价 →
↑