尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

三次谐波注入原理与实现:如何突破SPWM电压利用率并逼近SVPWM

三次谐波注入原理与实现:如何突破SPWM电压利用率并逼近SVPWM 前阵子有个刚入行的同事问我直流母线540V为什么普通SPWM带不动380V电机我没直接回话反手给他画了个波形。这个问题乍看是个基础题实际牵扯到SPWM电压利用率的天花板而打破这个天花板的钥匙就是三次谐波注入。今天这篇就专门把这事讲透三次谐波到底往哪儿注、注入系数怎么算以及为什么“基波幅值的1/6”这个值值得被叫作三次谐波注入的黄金分割点。这篇内容适合正在做变频器、伺服驱动、UPS、光伏逆变器或者任何三相逆变器控制的人。不管你是刚接触SPWM的新手还是已经用SVPWM但没仔细琢磨过调制波形态的老手都可以从里面拿走点东西。我会从电压利用率为什么被卡住讲起再手把手把数学推导和代码实现过一遍最后分享一些我在实际调试中踩过的坑和排查方法。1. 先算清楚账SPWM的电压利用率到底卡在哪1.1 一个真实场景母线540V为什么带不动380V电机很多做电机驱动的朋友都遇到过这种情况三相整流桥出来直流母线电压大概是540V后面接一个额定380V的异步电机用纯SPWM调制调制度已经拉到1了电机空载还行一带负载就转速掉、电流飙。用示波器看输出线电压有效值怎么都到不了380V。问题就出在SPWM的线性调制范围上。我这里用一个大家最常用的定义电压利用率等于输出线电压基波峰值除以直流母线电压。纯SPWM在调制度M1时相电压基波峰值是Vdc/2线电压基波峰值是√3倍的相电压峰值也就是√3乘以Vdc/2约等于0.866Vdc。换算成有效值线电压有效值大约是0.612Vdc。拿540V母线来算线电压有效值就是540乘以0.612约330V。你目标要输出380V差了整整15%。这15%不是靠调高M能补回来的因为M到1就已经进入过调制区了再往上调波形就会削顶电流畸变爆炸。所以纯SPWM在这个系统里天生就喂不饱380V电机。1.2 为什么M1就是极限载波是三角波调制波是正弦波两者比较产生PWM。当调制波幅值等于三角载波幅值时正弦波峰顶刚好顶到100%占空比。一旦调制波幅值超过载波顶部那一段就会失去线性关系表现出来就是波形削顶。所以M1就是这个方案的天花板。这里很多初学者会问那我能不能让M1.1、M1.2硬件上能做但那叫过调制。过调制不是不能用而是电压利用率提升的同时输出电压出现大量低次谐波电流波形失真严重。传统V/F控制里偶尔允许浅过调制但在高性能矢量控制里基本不敢碰。所以核心矛盾就变成了既不想进入过调制区又想把输出电压往上抬。这时候大家就想到了一条路给调制波做整形。你不是正弦波峰值顶到1吗我把你峰值削下来一点让基波成分还能继续增加。这就是三次谐波注入的出发点。1.3 波形整形的思路向调制波开口子纯正弦调制波是sine函数峰值必然在π/2处到达1这个1就是限制。如果我在正弦波上叠一个三次谐波分量三次谐波在90度附近刚好是负值可以把调制波的总峰值往下压。这就是“削峰填谷”。但要强调一点三次谐波注入不是简简单单往输出波形里加三次谐波污染。三相三线系统里三次谐波是零序分量在对称负载下根本没有通路所以线电压里不会出现三次谐波。我们注入的只是一个存在于调制波内部的数学分量最终受益的是基波电压的线性输出能力。打个比方原来一个一米八的人过限高1.5米的门直接被卡死。三次谐波注入就是让这个人稍微弯腰低头身高看起来矮了一截但他走过去之后该有的骨架一点没变。这里的“骨架”就是基波分量“弯腰低头”就是三次谐波对峰值的压制。2. 三次谐波注入的数学1/6这个数是怎么来的2.1 写出带注入的调制波设调制波为g(θ) M [ sinθ k sin(3θ) ]这里θ是电角度M是基波的调制度k是三次谐波相对于基波幅值的比例系数。注意这个定义方式三次谐波幅值不是固定常数而是跟随基波幅值同步缩放即三次谐波注入幅值 k × M。比如后面讲的k1/6就是指在任意调制度下三次谐波分量始终是基波分量的六分之一。为什么用相对比例而不是固定幅值因为这样调制波形态不随M变化峰值和M保持线性关系工程实现最简单。实际写代码的时候modWave M * (sinθ k * sin3θ)M变化时自动缩放。现在问题就变成k取多大才能让调制波g(θ)的峰值尽可能小峰值越小M能推得越高而M越高基波输出电压就越高。2.2 极小化峰值从波形峰值推导k我们先把M拿出来只看括号里的部分f(θ) sinθ k sin(3θ)目标是找k使max|f(θ)|最小。这是一个典型的极小极大问题。要解它先找f的极值点。求导f(θ) cosθ 3k cos(3θ)把cos(3θ)用三倍角公式展开f(θ) cosθ 3k (4cos³θ - 3cosθ) cosθ 12k cos³θ - 9k cosθ cosθ (1 - 9k 12k cos²θ)令f(θ)0可以得到两类极值点cosθ0也就是θ90度和270度cos²θ(9k-1)/(12k)这个解只有当k大于1/9时才存在。当k取不同值时f(θ)的峰值位置会变化。k特别小时比如k0.05三次谐波分量太弱压不住正弦波在90度处的峰值f的最大值仍然出现在θ90度数值接近1-k。k慢慢增大波形峰值逐渐下降。当k增大到超过1/9后θ60度附近开始出现新的局部极值点而且这个极值点会随着k增大先下降后上升。整个过程中存在一个k值能让波形的整体峰值达到最小。标准推导的结论是k1/6。代入验证f(θ) sinθ (1/6) sin(3θ)在θ60度处f(60°) sin60° (1/6) sin180° √3/2 0 ≈ 0.866在θ90度处f(90°) sin90° (1/6) sin270° 1 - 1/6 5/6 ≈ 0.833在θ30度处f(30°) sin30° (1/6) sin90° 0.5 1/6 ≈ 0.667所以在k1/6时整个调制波的最大值等于√3/2约0.866。这就意味着原来峰值压到1的正弦波经过三次谐波注入后峰值被压到了0.866。换句话讲基波调制度M最多可以推到1/0.866 2/√3 ≈ 1.1547仍然不碰载波峰值。这个结果就是电压利用率从0.866Vdc提升到Vdc的数学根据。2.3 为什么1/6被称为黄金分割点其实“黄金分割点”这个叫法不是严格的数学定义而是工程人对这个数值的一种评价。0.618之于线段分割是在美观和比例之间的一个平衡点1/6之于三次谐波注入是在“削峰能力”和“反噬风险”之间的平衡点。你可能会觉得k大一点是不是削峰能力更强不是。k太大三次谐波分量在0到60度之间会推高波形过了某个点后波形峰值反而回升。k太小90度处压不下去峰值还是高。只有k1/6这个位置既能把正弦波峰压到最低又不会在波形的其他位置产生新的更高尖峰。这个甜点位从数学上看是极值极小化问题的最优解从工程手感上看就是黄金分割级别的好用数值。另外一个很有意思的点是2/√3这个提升倍数φ≈1.618的黄金比例正好差得不远。虽然没到严格相等但在工程美学上这种“最优解刚好出现在一个简洁分数附近”的现象总会让人产生一种数学结构上的美感。2.4 马鞍波与SVPWM的关系把k1/6代入调制波画出波形你会看到一个长得像马鞍的曲线。正弦波在峰顶被压平在过零点附近又鼓起一个包。这个马鞍波正是SVPWM在数字实现中等价于SPWM叠加三次谐波注入的直观证据。SVPWM的调制波本质上是正弦波叠加了一个零序分量。在最大线性调制时这个零序分量的三次谐波成分刚好等效于基波的1/6。所以你在DSP里直接跑SVPWM和先做SPWM再注入1/6三次谐波得到的外部特性几乎一致。区别在于SVPWM的零序分量会随着调制度和扇区变化调制波形态更灵活而固定1/6注入是它最简单的一种近似。这也是为什么我说搞懂三次谐波注入就等于搞懂了SVPWM的一半。你看SVPWM的马鞍波本质上就是今天算出的这个f(θ)。3. 黄金分割点实操注入系数、代码实现与工程取舍3.1 如果k值没选对波形会发生什么我经常在调试现场直接用示波器看调制波这一步能直观判断k选得对不对。下面几种情况我都遇到过k偏小比如k0.05。三次谐波分量太弱调制波峰值仍然被90度附近的正弦波主导峰值接近0.95左右削峰效果有限电压利用率只能提升一点达不到1.1547倍。k取1/6波形峰值正好压在0.86660度和120度附近高度一致90度处稍微凹陷整个波形的峰谷交替均匀这是最舒服的状态。如果你把基波调制度M拉到1.1547调制波峰值刚好等于1每个波峰都刚好不削顶。k偏大比如k0.3。三次谐波分量过强波形在0到60度之间隆起峰值超过1。这时候你不仅没有获得更高的电压利用率反而会提前进入过调制。有些工程师为了“多注入一点”去追求更高的输出电压结果适得其反这个坑很典型。所以我的建议是除非有特殊原因否则固定用k1/6。这个值在全调制度范围内都不会把调制波峰值推出合理区间省心又安全。3.2 数字实现用STM32实现SPWM三次谐波注入接下来给一套可以直接抄作业的实现思路。下面以STM32的高级定时器做三相PWM输出为例。先确定几个参数载波频率10kHz三角载波幅值标幺化为1对应定时器从0到ARR的三角波输出调制波标幺值范围-1到1PWM比较值CMP的计算CMP (调制波值 1) / 2 × ARR核心代码长这样#include math.h #define THIRD_HARMONIC_RATIO (1.0f / 6.0f) float calcModulationWave(float theta, float M) { float fundamental sinf(theta); float third sinf(3.0f * theta); float modWave M * (fundamental THIRD_HARMONIC_RATIO * third); return modWave; } // 在PWM更新中断中调用 void PWM_UpdateISR(float theta, float M, uint16_t ARR) { float modWave calcModulationWave(theta, M); // 限幅防止意外过调制 if (modWave 1.0f) modWave 1.0f; if (modWave -1.0f) modWave -1.0f; // 映射到定时器比较值 uint16_t cmp (uint16_t)((modWave 1.0f) * 0.5f * (float)ARR); // 边界保护避免极窄脉冲 if (cmp 2) cmp 2; if (cmp ARR - 2) cmp ARR - 2; // 写三个比较寄存器 TIM_CaptureCompare1Set(htim, cmp); TIM_CaptureCompare2Set(htim, cmp); TIM_CaptureCompare3Set(htim, cmp); }如果平台没有浮点运算单元建议把sin表预计算成定点表用Q15格式存储。角度可以用一个递增的累加器实现每载波周期增加一个角度步进。注意三倍角公式sin3θ 3sinθ - 4sin³θ所以只用存一张sin表再查表后用三倍角公式算三次谐波能省不少内存。// 定点化示例sinLut[4096] 为Q15格式的sin表 int32_t idx (uint32_t)(theta * 4096.0f / (2 * M_PI)) 4095; int32_t sinVal sinLut[idx]; int32_t sin3Val 3 * sinVal - ((4 * sinVal * sinVal) 15) * sinVal / 32768;这个定点化方案我用在低成本单片机上跑过载波8kHz三相全开CPU占用依然可以接受。比例系数要用Q15格式的1/6也就是5461左右别写成浮点。3.3 电压利用率实测从330V到381V用一台2.2kW异步电机做实验母线电压540V设定输出频率50Hz。先用纯SPWMM1用功率分析仪测线电压有效值得到的结果和理论计算一致约330V。电机空载电流偏大带载后转速往下掉。然后改为三次谐波注入k1/6M逐渐从1提高到1.1547。注意这里M要慢慢加同时在电流环或V/F曲线里同步调整电压给定。最终线电压有效值稳定在约381V刚好覆盖380V额定电压。这个提升比例就是1.1547倍。对比数据整理如下调制方式相电压基波峰值标幺到Vdc线电压有效值Vdc540V带380V电机能力纯SPWM0.5 Vdc330.7V不足电压缺口约15%SPWM1/6三次谐波0.577 Vdc381.8V刚好满足SVPWM0.577 Vdc381.8V刚好满足方波/过调制0.637 Vdc421.6V满足但谐波大可以看到SPWM加三次谐波注入后的电压利用率和SVPWM是完全一致的。如果你的系统原来用的是纯SPWM只需要改十几行代码就能白拿15%的电压余量这是非常划算的一个改动。3.4 单相系统别乱用三次谐波注入的适用范围必须提醒一句三次谐波注入在三相三线系统里有效因为三次谐波在三相之间是零序关系线电压里不会出现。但如果你是单相逆变器或者三相四线系统情况就完全不同。单相系统里只有一相调制波里注入的三次谐波会直接反映到输出电压上负载上会出现大量三次谐波电流纯纯的波形污染。三相四线系统如果有中线三次谐波电流会从中线溜回直流侧造成中线过流。所以这个技巧只适合三相三线对称负载。还有一种情况是电机中性点被引出使用比如某些特殊电机或测试台架这时候三次谐波也会形成回路。遇到这种非标准接法别直接套k1/6先确认系统拓扑再说。4. 调试实录常见问题与排查技巧4.1 注入三次谐波后输出相电压不是正弦别慌第一次在马鞍波模式下用示波器看输出相电压波形时很多人会怀疑自己代码写错了。相电压波形里明显带着一个凹坑看起来像失真但线电压波形是干净的正弦调制出来的PWM序列。这是正常的。判断标准只有一个线电压的基波分量是否符合预期。我习惯直接用功率分析仪看线电压的THD和基波有效值而不是用肉眼判断波形形状。如果线电压有效值接近理论值且电流波形正弦度良好说明调制波整形是成功的。有一个实操小技巧在V/F开环调试时给定M1.0分别测纯SPWM和注入三次谐波后的线电压。前者约330V后者约381V。两者一对比就能确认注入代码生效了同时也能验证你计算出来的理论母线电压值是否准确。4.2 波形削顶先查M再查k最后查死区如果调试时发现电流波形出现平台状畸变大概率是进入了过调制区域。排查顺序是这样的。第一步查M。M是不是超过了1.1547很多人写代码时直接把M的上限设成了1.0以为这就是最大输出实际上注入之后M可以推到1.1547。反过来如果M的上限没放开你永远吃不到三次谐波注入的红利。第二步查k。k有没有被无意中改成固定常数而不是相对比例我见过一个项目开发人员图省事把三次谐波直接设成固定幅值0.3结果低调制度时波形严重畸变峰值超出载波范围电流噪声特别大。正确做法是随M缩放。第三步查死区。如果M和k都正常但电流波形在过零点附近有毛刺多半是死区补偿没做好。三次谐波注入后电流过零点附近调制波比较平缓占空比变化率低死区造成的电压误差更容易暴露此时需要做死区补偿或者电流极性判断补偿。4.3 三次谐波对电机噪声和效率的影响有朋友问注入三次谐波会不会让电机噪声变大电机的电磁噪声主要由气隙磁场中的谐波分量和开关频率附近的高频分量决定。三次谐波作为零序分量在三相三线系统中不产生旋转磁场中的有效分量所以对基波转矩没有直接贡献也不会制造额外的低频转矩脉动。实际带载测试下来三次谐波注入后电流波形更接近理想正弦因为调制比推高了PWM的等效分辨率更高。有些工况下电机噪声反而会下降。但如果你的PWM载波比较低比如300Hz载波带50Hz输出同步调制切换点的电流毛刺会变得明显这时候需要做同步调制和相位对齐而不是怀疑三次谐波注入本身。效率方面三次谐波注入不改变开关次数损耗主要增加在控制器的计算量上。真正影响效率的是调制波峰值降低后输出电压的提升让你可以在更低母线电压下工作系统整体损耗下降。在电池供电的逆变器里这个特性可以折算成实实在在的续航提升。4.4 一组可复现的参数参考这里给一组我在电机驱动平台上验证过的参数方便你做仿真或者实验对照。直流母线电压540V载波频率10kHz基波频率50Hz调制方式SPWM 1/6三次谐波注入开关器件IGBT死区时间3μs电机参数2.2kW380V50Hz额定电流5A仿真观察点调制波峰值理论值0.866仿真值0.8661线电压基波有效值理论值381.8V仿真/实测381V左右相电流THD满载时小于5%母线电压利用率1.0如果调试阶段不方便用功率分析仪可以用两个电压探头测线电压再用示波器的数学运算功能做FFT看50Hz分量的幅值换算成有效值后和理论值对比。4.5 最后说一个我踩过的坑做三次谐波注入时最容易忽略的是同步调制的相位问题。刚开始我直接在开环V/F的代码里加了三次谐波注入载波频率固定10kHz电机运行到30Hz以下时电流波形还正常。结果升到40Hz以上电流开始波动噪声变大。查了半天发现是提前角度没做补偿。原因在于调制波在普通SPWM下是纯正弦相位延迟对输出影响不大。但注入三次谐波后调制波包含3倍频分量同样的相位延迟作用下三次谐波的相位偏差是基波的3倍。载波比降低到一定程度这个相位误差就会显著影响合成电压矢量。解决办法是提高同步载波比或者做载波相位实时补偿。调试时一定要在低速和高速两个区间都验证波形不能只盯着50Hz一个点。还有一个细节限幅函数别乱加。有些代码里为了安全把调制波直接限幅到±1这本身没问题。但如果你在M1.1547时就让限幅动作等于人为把电压利用率又压回去了。正确做法是先算好边界限幅只作为最后的保护正常工作时不应该触发。调试的时候可以加一个计数器一旦限幅动作就记录下来看看是不是常态触发。从纯SPWM切到三次谐波注入整个过程就是一个从330V到381V的故事。这个改动不复杂代码层面十几行但背后的数学逻辑值得每个做电力电子的人吃透。等你想明白1/6这个数是怎么来的再看SVPWM、看空间矢量合成很多原来觉得抽象的东西都会串起来。
返回列表