ARTICLE DETAIL

资讯详情

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

SPWM电压利用率天花板0.866:三次谐波注入1/6系数的完整推导与工程落地

SPWM电压利用率天花板0.866:三次谐波注入1/6系数的完整推导与工程落地 做过变频器的人应该都有印象直流母线明明有540V用SPWM去驱动380V异步电机额定点附近总感觉电压不够用。原因不在开关管也不在散热而是SPWM调制本身带来的电压利用率上限——三相SPWM线性区输出线电压基波峰值最高只能到0.866倍的直流母线电压这个0.866就是正弦波调制的天然天花板。为了打破这层天花板三次谐波注入是业界最常用的手段之一而注入幅值的选取恰恰是整个技巧的精髓。我常把那个最优注入幅值称为“黄金分割点”因为它不是越大越好也不是越小越好而是刚好落在基波幅值的1/6这个平衡点上。这篇文章就把这件事彻底讲透为什么SPWM卡在0.866、三次谐波为什么能“免费”提升、1/6是怎么推出来的、以及工程上怎么落地。1. 电压利用率卡在0.866SPWM被正弦波“天花板”压住1.1 SPWM生成与“幅值”的底层含义先回到最基本的SPWM生成原理。SPWM的中文全称是正弦脉宽调制一句话概括拿一个高频三角波当载波拿一个低频正弦波当调制波两者实时比较三角波高于正弦波的时候输出高电平低于的时候输出低电平。这个比较过程把正弦波的幅值信息转换成了脉冲宽度信息再经过逆变桥的LC滤波或者电机绕组的电感滤波脉冲串里的基波分量就把原来那个正弦波还原出来了。很多人第一次看到SPWM生成过程时会问幅值是什么意思这里的幅值就是正弦调制波的峰值大小它在算法里一般用调制比m来表示。当m1的时候正弦波峰值刚好顶到三角波的峰值PWM脉冲在峰值附近接近满占空比当m0.5的时候正弦波只有三角波幅度的一半对应输出基波幅值也减半。在数字控制器里三角波载波幅值通常被归一化成1.0的标幺值单片机里的Q15格式、或者浮点格式都以这个1.0为基准。输出相电压基波幅值和调制比m的关系很直接U_相基波 m × Vdc / 2这个公式是整个SPWM电压利用率的出发点记住它后面所有计算都围绕它展开。1.2 0.866这个数字怎么算出来的三相SPWM系统里A、B、C三相各有一个相差120°的正弦调制波。每相输出对直流母线中点的电压最大能到Vdc/2对应m1所以单相基波幅值上限就是Vdc/2。但电机或者电网关心的是线电压也就是相与相之间的电压。三相对称系统里线电压基波幅值等于相电压基波幅值的√3倍U_线基波峰值 √3 × (Vdc / 2) ≈ 0.866 × Vdc再换算成有效值就是0.866×Vdc/√2 ≈ 0.612×Vdc。就是说常规SPWM在纯线性调制区永远不可能输出超过这个数值的线电压。拿异步电机调速最常用的例子算一笔账。直流母线540V这是三相380V交流电整流滤波后的典型值。常规SPWM能输出的最大线电压有效值是0.612 × 540V ≈ 331V而一台额定380V的异步电机在额定频率50Hz时需要约380V的线电压有效值。差了大约50V也就是15%左右。实际变频器当然不会这么傻傻地往下限压通常会通过提高调制比进入过调制区来“硬凑”但过调制带来的低次谐波、转矩脉动、母线电流波动都会让系统表现出各种奇怪的问题电机发热偏大、噪音刺耳、直流母线电容温升异常。所以在变频器设计里这条0.866的线绕不过去必须从调制策略上想办法。1.3 变频器到底“差了多少电”这段用一个更直观的对比。同样540V母线调制策略线电压基波峰值线电压有效值能否覆盖380V额定常规SPWM线性区467V331V差49V不够过调制SPWM可到540V可到380V勉强够但波形畸变三次谐波注入SPWM540V382V刚好覆盖线性区完成SVPWM540V382V刚好覆盖线性区完成也就是说三次谐波注入之后同样的母线电压线性区输出能力从331V拉到382V多出来的这51V就是“白捡的”。这也是为什么异步电机V/F控制和无速度传感器矢量控制里三次谐波注入SPWM一直是经久不衰的实用方案。2. 三次谐波为何能“免费”提升输出零序分量在线电压中抵消2.1 三相对称系统里3次谐波的特殊身份三次谐波在三相系统里有个非常特别的身份——零序分量。什么叫零序其实就是三相同相位的分量。你看三相基波A、B、C各自差120°而三相的三次谐波呢A相k×sin(3ωt)B相k×sin(3ωt - 360°) k×sin(3ωt)C相k×sin(3ωt - 720°) k×sin(3ωt)看到没有因为3乘以120°等于360°转了一圈又回到原处三相的三次谐波相位完全一样。这就是“零序”——在三相系统里同步变化、没有相互相位差的分量。这个特性带来一个巨大的好处线电压是相电压相减的结果比如Uab Ua - Ub。两个完全相同的三次谐波分量相减刚好抵消干净(基波A k·sin3ωt) - (基波B k·sin3ωt) 基波A - 基波B三次谐波在相电压里存在但在线电压里干干净净地消失了。相当于我们把一个分量偷偷塞进了相电压调制波里它不影响最终的线电压波形却能改变调制波本身的峰值。这简直是“作弊”而且是规则允许的作弊。2.2 马鞍波是怎么来的当你在原始正弦调制波上叠加一个三次谐波得到的不是一个丑八怪而是一个“马鞍波”——中间被压平了两边带一点凹陷看起来像马背上的鞍子。拿纯正弦波和注入1/6三次谐波的马鞍波做个对比。原始正弦波在90°时达到峰值1.0而马鞍波呢在90°时sin(90°) 1三次谐波项sin(270°) -1所以叠加后是1 - k。如果k1/6这个点的高度就是5/6≈0.833。原来顶到1.0的地方现在只有0.833峰值被压下去了将近17%。关键问题在于这个被压下去的峰值并不是拿输出能力换的。调制波峰值低了意味着在不超过载波幅值也就是不进入过调制的前提下我们可以把整个调制波的增益往上调直到峰值重新顶到1.0。增益能调多少如果原峰值是0.866那就可以乘以1/0.866 ≈ 1.155倍。于是基波的幅值也跟着放大了1.155倍。2.3 调制比上限从1.0拉到1.155这个放大过程用公式表达更清楚。注入k倍三次谐波之后调制波表达式变成f(x) m × [sin(x) k×sin(3x)]其中m是放大后的调制比。为了让调制波峰值不超过载波峰值1.0必须满足m × max|f_归一化(x)| ≤ 1如果k选择得当使max|sin(x) k·sin(3x)| 0.866那m最大就能取到1.155。相比原来的m最大取1.0输出基波幅值凭空提升了15.5%。这就是三次谐波注入提升电压利用率的完整逻辑链——注入三次谐波本身不产生输出但它把调制波的峰值压低为基波放大腾出了空间。3. 注入幅值k1/6的推导波形压顶的完整过程3.1 目标函数让调制波峰值最小既然注入三次谐波的目的清楚那幅值k怎么定很多人第一反应是“随便给一个小的就行”实际完全不是。我们把问题抽象成数学优化问题。注入后的调制波归一化表达式为f(x) sin(x) k·sin(3x)目标很明确让f(x)在一个周期内的最大绝对值最小。因为峰值越小m能放得越大电压利用率越高。直觉上往正弦波里加一个反向的三次谐波能在90°附近把波峰压低k越大压得越狠。但有个陷阱三次谐波在这90°附近确实往下拽可是在30°到60°区域它方向是往上的如果k注入过量会在30°到60°之间拱出来两个鼓包新的鼓包反而超过了被压低的波峰。所以这是一个“摁下葫芦浮起瓢”的博弈最优解必然是一个平衡点。3.2 分区间讨论极值点具体看数学。对f(x)求导f(x) cos(x) 3k·cos(3x)令A cos(x)利用cos(3x) 4A³ - 3A可以得到f(x) A × [1 3k(4A² - 3)]导数为零有两种情况。第一种是A 0也就是x 90°的位置这在任何k下都是极值点高度为f(90°) 1 - k。第二种是方括号为零1 12kA² - 9k 0也就是A² (9k - 1) / (12k)这个公式非常关键。当k ≤ 1/9的时候右边是个负数或零方程无解说明除了90°以外没有别的极值点波形峰值就是1-k。这个区间内峰值随k增大而下降但1-k始终大于等于8/9离0.866还差一截。当k超过1/9新的极值点出现了。通过代入可以算出这些极值点的高度h(k) (3k1)^(3/2) / (3√(3k))h(k)这个函数在k 1/6的位置取得极小值数值是√3/2 ≈ 0.866。而x 90°处的高度1-k在k 1/6时为5/6 ≈ 0.833低于0.866。所以当k取1/6时整个调制波的最大峰值就是侧峰的√3/2如果k再大侧峰会继续拱高超过0.866如果k再小主峰压不下去也超过0.866。结论是严格的最优注入系数 k* 1/6调制波最小峰值为 √3/2 ≈ 0.8663.3 1/6的几何意义主峰与侧峰刚好持平1/6这个数字几何意义比代数推导更直观。当k 1/6时把A² (9k - 1)/(12k)等于1/4即cos x ±0.5对应x 60°和120°这些位置。也就是说新出现的侧峰刚好落在60°和120°而马鞍波的凹陷也在60°附近回归到与主峰相当的高度。这个时候的波形状态是90°主峰被压到0.83360°和120°的侧峰拱到0.866主峰反而比侧峰低。整个调制波的峰值由侧峰决定且正好是原始正弦峰值0.866倍。如果k取0.2侧峰继续往上拱到0.871k取0.25侧峰涨到0.891过注入的损失很明显。如果k取0.1主峰还有0.9侧峰还没形成压峰效果不足。所以1/6不是拍脑袋定的它是让主峰压降收益和侧峰新生代价刚好持平的临界点。这个性质让它成为工程上的最爱——谷底比较平缓即便控制精度或者查表量化造成k有小幅偏差峰值变化也很小鲁棒性好。3.4 为什么这个均衡点配得上“黄金分割点”这个说法标题里说的“黄金分割点”我理解有两层含义。第一层是比喻。三次谐波注入的幅值选取本质是“压主峰”和“长侧峰”两个相反作用力的均衡。主峰被压得越多基波放大空间越大但给侧峰留下的生长空间也越大侧峰一旦超过主峰收益就开始往回吐。最优解永远是两股力量恰到好处的交汇点就像黄金分割在审美上那种不偏不倚的平衡感。1/6就是这样一个物理意义上的平衡点。第二层是算法含义。如果换一个更复杂的优化目标——比如同时考虑峰值、总谐波畸变率THD、转矩脉动或者注入对象不是纯净三次谐波而是含五次七次的混合零序分量解析解往往不存在。这时最实用的手段就是在一维参数空间里做数值搜索而黄金分割法0.618法正是处理单峰函数极值问题最高效的算法之一。用它能稳定收敛到1/6附近所以“黄金分割点”也可以字面理解为“用黄金分割法找出的最优幅值点”。4. 用黄金分割搜索法逼近最优幅值从解析到数值4.1 什么时候必须用数值搜索解析推导虽然漂亮但现实工程里经常遇到两个问题。第一个目标函数不是单纯的sin(x)k·sin(3x)注入三次谐波之后系统还要考虑死区补偿、最小脉宽限制、电流采样延迟实际调制波峰值和理论值会有偏差第二个优化目标变了不是只压峰值还要同时看转矩脉动和噪声实测值这种目标无法写成一个简单函数。这时候就需要一种不依赖导数、只依赖函数值比较的搜索算法黄金分割法就是最经典的选择。4.2 黄金分割法0.618法的操作逻辑黄金分割法的思路特别朴素。假设我们有一个单峰函数F(k)要在区间[0, 0.5]里找它的最小值点。0.5这个上限不是瞎取的k超过0.25波形已经明显劣化0.5足够覆盖实际有意义的所有范围。算法在每一步维持一个不断缩小的搜索区间流程如下在区间[a, b]内部取两个试探点λ a 0.382×(b-a)和μ a 0.618×(b-a)算F(λ)和F(μ)比较大小如果F(λ) F(μ)说明最小值在λ的左边丢掉[μ, b]这一段新区间为[a, μ]如果F(λ) F(μ)说明最小值在μ的右边丢掉[a, λ]这一段新区间为[λ, b]重复直到区间宽度小于设定精度这个方法的高明之处在于每轮迭代只需要计算一次新的目标函数值另一个试探点是从上一轮直接继承下来的计算成本几乎减半。区间长度每轮乘以0.618收敛速度非常稳定。4.3 Python实现与结果验证为了直观验证我把这个搜索过程用Python写了一段很短的代码。目标函数F(k)直接用数字方式计算调制波在一个周期内的峰值不依赖任何解析公式import numpy as np def waveform_peak(k, n8192): 给定注入系数k计算调制波sin(x)k*sin(3x)在一个周期内的最大绝对值 x np.linspace(0, 2*np.pi, n, endpointFalse) wave np.sin(x) k * np.sin(3*x) return np.max(np.abs(wave)) def golden_section_search(a, b, eps1e-6): 黄金分割法搜索使waveform_peak最小的k phi (np.sqrt(5) - 1) / 2 # 0.618 lam a (1 - phi) * (b - a) mu a phi * (b - a) f_lam waveform_peak(lam) f_mu waveform_peak(mu) while (b - a) eps: if f_lam f_mu: b mu mu lam f_mu f_lam lam a (1 - phi) * (b - a) f_lam waveform_peak(lam) else: a lam lam mu f_lam f_mu mu a phi * (b - a) f_mu waveform_peak(mu) return (a b) / 2 k_opt golden_section_search(0.0, 0.5) peak_val waveform_peak(k_opt) print(最优注入系数 k , k_opt) print(最小调制波峰值 , peak_val)跑一下输出很干净最优注入系数 k 0.166666... 最小调制波峰值 0.866025...这个结果和解析解1/6、√3/2完全吻合误差在搜索精度范围内。也顺带验证了前面的推导没有算错。4.4 数值法和解析法的分工有人可能会问既然都能算出来为什么还要学两种方法解析法的作用是给你“洞察”它告诉你为什么是1/6往左往右各会发生什么变化而且能直接推广到其他注入组合比如同时注入3次和5次谐波的低次零序注入策略。数值法的作用是给你“结果”当模型里掺杂了死区非线性、数字延迟、采样量化这些实际因素后解析解往往失真你只要把实测的THD或者转矩脉动指标封装成F(k)函数照样能用黄金分割法搜出工程意义上的最优点。我在实际调试里两种方法都用先用解析法确定起点再上黄金分割法做局部精调效率最高。5. 工程落地三次谐波注入SPWM的完整实施与调试点5.1 数字控制里的实现流程如果用的是浮点MCU或者DSP三次谐波注入的实现其实就几行代码的事。假设我做一个异步电机V/F控制载波频率8kHz每个PWM周期更新一次调制波。核心代码大致是这样// 输入转速给定归一化值 speed_norm当前电角度 theta // 输出三相调制波 mod_a, mod_b, mod_c范围[-1.0, 1.0] float m 1.155f * speed_norm; // 调制比放大到1.155倍区 if (m 1.155f) m 1.155f; // 线性区上限 float sin_t sinf(theta); float sin_3t sinf(3.0f * theta); // 三次谐波三相共用 // 三相基波相位差120° float mod_a m * sin_t; float mod_b m * sinf(theta - 2.094f); // -120° float mod_c m * sinf(theta 2.094f); // 120° // 注入三次谐波注意是所有相都加同一个值 float inj (m / 6.0f) * sin_3t; mod_a inj; mod_b inj; mod_c inj; // 限幅到[-1.0, 1.0] if (mod_a 1.0f) mod_a 1.0f; if (mod_a -1.0f) mod_a -1.0f; // mod_b, mod_c 同理这里有一个特别容易忽视的点三次谐波注入量是三相共用的同一个值不是分别算三相的sin(3θ)。因为三相三次谐波本来就同相位代码里先算一次sin(3θ)再往三路上各加一遍就行省下两路三角函数计算。另一个细节调制比m要乘以1.155。很多人第一次做的时候忘了这个放大只是机械地往原正弦波上叠三次谐波结果输出基波没变大白忙一场。放大1.155后调制波峰值在k1/6时刚好顶到1.0才真正把电压利用率顶到上限。5.2 和SVPWM的等价性对比搞电机控制的人看到电压利用率提升15.5%第一反应往往是“这不就是SVPWM吗”对从最终效果看两者在线性区的电压利用率完全一样这是业界共识。SVPWM在一个开关周期内通过两个相邻电压矢量和零矢量的时间分配合成目标电压矢量它的等效相电压调制波里本身就带零序分量这个零序分量压低了调制波峰值所以调制比上限同样是2/√3≈1.155。三次谐波注入SPWM和SVPWM的关系可以这么理解一个是直接改调制波形状让二极管钳位或三角载波比较的硬件逻辑不用变另一个是在算法层面通过矢量时间计算间接得到同样的等效结果。对V/F控制或者要求不高的电流环来说直接注入三次谐波SPWM更省事代码量小调试直观。对需要充分利用直流母线电压、且动态响应要求高的矢量控制SVPWM仍然是主流但两者互换并不改变最终基波输出性质。5.3 不同注入系数下的实测对比为了说明1/6的价值我在一个两电平变频器平台上实测过不同k值下的调制波峰值和输出能力数据整理在下表注入系数k调制波峰值线性区最大调制比相对普通SPWM提升实测反馈01.0001.0000%输出最干净但电压利用率低0.050.9501.0535.3%峰值压得不够1/90.8891.12512.5%侧峰刚开始冒头0.150.8681.15215.2%已经接近最优探针上看不出差别1/60.8661.15515.5%最优主峰侧峰平衡0.200.8711.14814.8%侧峰起拱过注入0.250.8911.12212.2%明显过注入波形变尖从k0.13到k0.18调制比上限都在1.14以上曲线的谷底很平缓。这也是为什么我敢在工程里直接取1/6——即使三相调制波因为死区、管压降等因素导致实际峰值略偏只要k在这个区间内损失都在1%以内。5.4 与死区、过调制、采样时序的交互三次谐波注入不是孤立调一下波形就完事它和系统其他部分有交互。先说死区。逆变器上下桥臂为了避免直通必须加死区死区会在输出里引入低次谐波其中就包括三次分量。当调制波里已经注入了1/6的三次谐波死区产生的三次谐波会和它叠加造成实际的相电流三次谐波增大。所以在浅调制低速工况下死区补偿的精度对三次谐波注入效果影响明显。我做测试时发现死区补偿不准时电流波形里的三次谐波畸变会从0.5%涨到2%以上直观表现是电机噪音变大、低速轻载时电流波形抖动。解决办法是把死区补偿做准或者把注入系数略微调小到0.15让出一点裕量。再说采样时序。数字控制里电流采样通常放在PWM周期的中心点因为那里DI/DT最小、噪声最小。注入三次谐波后调制波在60°附近有一段平顶区这段区域的PWM脉冲宽度变化很平缓对电流采样的影响并不大。但如果你用的是边界对齐的PWM而不是中心对齐采样点附近的dv/dt会变大需要特别加滤波或者提高采样窗口。实测下来推荐使用中心对齐、双更新模式载波频率8-10kHz时效果最好。最后说过调制。三次谐波注入把线性区上限推到了m1.155但这不是无限度的。超过1.155之后进入过调制区调制波被载波削顶输出基波还会继续增加但谐波明显恶化。很多应用会在m超过1.155后切换到六阶梯波模式方波模式来进一步榨取母线电压。切换要做好平滑过渡否则电流冲击会很大。我一般用最小相位误差过调制策略在1.155到1.27之间做线性过渡实测电机端电压畸变可以控制在可接受范围。6. 实战避坑我调三次谐波注入踩过的几个坑6.1 三相四线制场合别乱注入三次谐波在线电压里被抵消前提是三相三线制负载也就是星形不引出中线、或者三角形接法的负载。一旦系统是三相四线制——比如某些电网补偿装置、带中性线的UPS输出——零序三次谐波分量就会通过中线形成回路造成中线电流明显增大甚至超过相电流。我见过一个逆变器样机在实验室三相四线平台测试时中线电流飙到相电流的1.2倍把母排都烧变色了查了半天发现是三次谐波注入没有针对负载类型做配置。异步电机本身是三线制没问题但如果你做的装置可能接中线必须加判断逻辑或者直接把注入关掉。6.2 相位不同步导致马鞍变成不对称波这是一个非常隐蔽的坑。三次谐波项必须严格和基波保持同步也就是sin(3θ)里的θ必须和基波θ是同一个角度。我之前在调试时图省事把三次谐波项拆到独立的查表里用定时器单独累加角度结果低速时看着波形是对的高速时调制波逐渐出现明显的不对称就像马鞍一边高一边低。原因就是两个角度累积路径存在微小偏差导致三次谐波和基波不是严格的三倍频关系产生了偶次谐波和直流偏置。正确做法永远在同一时刻、用同一个θ计算sin(θ)和sin(3θ)不要分路查表更不要用两个独立的相位累加器。6.3 示波器测量共地问题调逆变器时用示波器测相电压或线电压这是个老生常谈但永远有人踩的坑。直流母线电压540V下桥臂开关管的检测电阻上高频噪声很大如果你用普通探头共地测线电压地线夹子一夹到另一个桥臂瞬间就形成了高频地回路轻则波形毛刺大重则炸示波器探头。我自己的习惯是测线电压用隔离探头或者至少用两个探头做差分运算同时保证示波器电源隔离。测完线电压再看调制波用DAC输出电压或者直接在调试软件里看数字量不要在线测量PWM引脚波形那上面是500V级别的高压摆动。6.4 调试时的检查清单把三次谐波注入加进系统的调试过程我总结了一份检查清单照着走过一遍基本不会出大问题开环工况下给定50Hz用差分探头测线电压波形确认马鞍波形状正常、周期对称调制比逐步加观察线电压有效值是否按预期提升验证m1.155时输出是否接近382V母线540V用电流钳测三相电流波形确认三相电流对称、无直流偏置FFT分析电流确认3次谐波分量处于合理范围正常情况下应远低于基波轻载和满载分别测试母线电压波动确认电容纹波电流没超规格最后说两句体己话最早我在一块F28035上做V/F控制用的还是普通SPWM额定点电压怎么都差一截电机空载能转但一带负载就蔫了。后来把三次谐波项加进去线电压直接从330V左右推到380V那感觉真像白捡了15%输出能力。这个改动前后不到十行代码效果却立竿见影。如果你正在调变频器或者逆变器强烈建议从k1/6开始上示波器看线电压实际波形然后往0.15和0.18两个方向各试一下亲自体会那个“黄金分割点”两边波形峰值的变化。这种手感是看再多的公式和文档都换不来的。
返回列表