ARTICLE DETAIL

资讯详情

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

SVPWM过调制详解:从母线电压利用率到FOC工程落地

SVPWM过调制详解:从母线电压利用率到FOC工程落地 做 FOC 电机控制做到中后期几乎人人都会在母线电压利用率上碰一次壁。速度环的指令已经给满电流环也在安全线上挣扎可电机就是顶不上去换个角度看母线明明有 48V折算到相电压却总是差一口气。我早期的做法是在 Park 逆变换之后做很保守的限幅把电压矢量的幅值锁在内切圆以内美其名曰保护波形。直到一个项目要求电机在额定点附近短时超速弱磁电流已经给到极限电压还是不够我开始认真啃 SVPWM 的过调制区域。啃完发现同一根母线能输出的电压硬生生多榨出了大约 10%。这篇文章就把 SVPWM 过调制拆开讲透过调制区域是怎么划分的I 区和 II 区各对应什么行为工程上怎么落代码以及接入 FOC 闭环之后的连锁反应。正在做 FOC 项目、被电压限幅卡住、或者准备做无感 FOC 高速段的朋友可以重点参考。1. 过调制到底在解决什么问题被限幅算法悄悄扔掉的电压1.1 电压指令为什么会撞上六边形边界SVPWM 的所有工作本质是用六个非零基本矢量加两个零矢量去合成任意方向和幅值的参考电压矢量。六个非零矢量在复平面上的端点连起来是一个正六边形这个六边形就是物理极限任何一个三相桥臂的占空比都必须在 0 到 100% 之间超出这个范围占空比公式会给负数或者大于 1 的数PWM 根本发不出来。在 FOC 里电流环 PI 输出的 Ud、Uq 经过反 Park 变换得到 Ualpha、Ubeta再交给 SVPWM。如果 Ualpha、Ubeta 合成的矢量幅值落在六边形内切圆以内SVPWM 可以做到三相电压严格正弦。这个内切圆的半径是 Udc/√3也就是说线性区能输出的最大相电压基波幅值就是母线电压除以根号三。很多代码在这里犯了一个隐形浪费在 dq 域直接做圆形限幅Uref sqrtf(Ud*Ud Uq*Uq); if (Uref Udc / SQRT3) { scale (Udc / SQRT3) / Uref; Ud * scale; Uq * scale; }这是把电压轨迹限制成一个圆。问题是逆变器真正的物理边界是六边形不是圆。圆和六边形之间的那二十几个百分点的面积被你亲手扔掉了。SVPWM 允许相电压瞬时值超过 Udc/2因为它通过零序分量把三相电压整体平移这正是它比单纯 SPWM 电压利用率高的原因。过调制就是在此基础上再往前走一步。1.2 过调制的收益账最多能多榨出多少要回答这个问题先看两个极限。线性区的天花板是相电压基波幅值 Udc/√3 ≈ 0.577Udc。而 SVPWM 的物理极限是六步运行也就是六个开关状态各导通 60° 电角度此时相电压基波幅值为 (2/π)Udc ≈ 0.637Udc。两者一比六步比线性区高出 2√3/π ≈ 1.103也就是大约 10%。这就是过调制的全部收益在同一根母线下基波电压最多提升 10% 左右。别小看这 10%。转速和电机反电动势近似成正比在弱磁区这就意味着转速范围多出约 10%或者在同样转速下弱磁电流可以明显减小铜耗和铁耗都跟着降。举一个我实际算过的例子48V 母线、额定相电压峰值 27V 的永磁同步电机。线性区把电压限制在 48/√3 ≈ 27.7V六步运行可以推到 48×2/π ≈ 30.6V中间这 2.9V 的真空地带就是过调制范围。如果你正在做高速无感 FOC这 2.9V 往往决定了你是 3500rpm 收顶还是 3900rpm 收顶。还需要强调过调制的电压提升是基波分量连续可调的不是只有线性区和六步两个档位。你要做的是在两者之间走出一条连续、可控、谐波代价可以接受的轨迹。这就是下面要讲的过调制 I 区和 II 区。2. 过调制 I 区、II 区和六步运行之间的地图2.1 两种归一化方式别被数字绕晕聊过调制第一个坑就是数字。同样说调制比 0.95不同论文里可能相差十万八千里。最常见有两种归一化以线性区边界为 1线性区最大就是 1六步运行是 2√3/π ≈ 1.103。以六步运行的基波幅值为 1线性区边界是 π/(2√3) ≈ 0.907六步运行是 1。文献里更常用第二种。以第二种折算过调制区域又可以切成两段I 区大约从 0.907 到 0.952II 区从 0.952 到 1。注意不同论文采用的谐波指标和保持角定义略有差异边界值会有一点点出入但 0.907、0.952、1.0 这三个关键数字在大多数场合都能对上。很多新手问SVPWM 过调制 1 区和 2 区分别在哪块面积内其实这句话本身就容易误会。过调制 I 区和 II 区不是复平面上的两块固定面积而是调制比的连续区间。它们描述的是参考电压矢量超出线性区之后实际的输出电压矢量轨迹怎么走。2.2 I 区和 II 区在几何上分别做了什么线性区内参考电压矢量的轨迹是一个完整的圆落在六边形内。过调制 I 区参考圆开始超出六边形但超出量还不大。此时实际输出的电压矢量没法完整跟踪参考被拉到六边形边界的对应点上。这一段的特点是电压矢量沿着六边形边界连续滑动基本不存在长时间停在顶点的情况基波幅值还能跟着调制比近似单调增长波形开始出现轻微的削顶趋向准梯形波。过调制 II 区调制比更高参考圆超出更多光靠沿边滑动已经无法补回基波幅值。这时实际输出电压矢量必须在六边形顶点停留一段时间这个停留角度叫保持角 αh。αh 从 0 逐渐增大到 π/6当 αh π/6 时整个 60° 扇区内矢量都停在顶点就是六步运行。用生活类比I 区像是车在盘山公路外侧贴着护栏开拐弯处有点蹭边但一直在走II 区像是过弯时干脆在弯心停一拍再猛踩油门到下个弯心。II 区的波形已经明显像梯形波甚至方波。2.3 三个区域的波形差异可以看哪些特征我用同一个台架、同样的母线电压分别跑线性区调制比 0.90、I 区0.94和 II 区0.98相电压和相电流的特征非常容易区分区域相电压波形相电流 THD转矩脉动感受噪声线性区正弦无明显削顶3%~6%不明显安静过调制 I 区峰值略削平准梯形8%~12%可感知轻微高频哨声过调制 II 区明显梯形/近方波15%~25%明显电磁噪声显著六步运行方波20%~30%谐波丰富很冲噪声大这里的 THD 数值是相对值受电机电感、PWM 频率、死区影响很大。但趋势是固定的调制比越高5、7 次谐波越突出。5 次谐波电流会和基波相互作用产生 6 次转矩脉动这也是过调制区域手感变冲的根本原因。3. 工程上能落地的过调制实现路径3.1 第一步判定与边界截断先讲最简单、也最实用的一版实现适合刚上手的项目。核心思想在反 Park 之后、SVPWM 之前把 Ualpha、Ubeta 合成为参考矢量判断它是否落在六边形外如果在外就沿原方向截断到六边形边界。判定逻辑用几何关系不需要查扇区表// 输入Ualpha, Ubeta, Udc // 输出调整后的 Ualpha_out, Ubeta_out float Uref sqrtf(Ualpha*Ualpha Ubeta*Ubeta); if (Uref 1e-6f) return; float theta atan2f(Ubeta, Ualpha); // 把角度折到 [0, 2*PI) float theta_norm fmodf(theta 2.0f*PI, 2.0f*PI); // 当前扇区中心顶点每 60° 一个顶点 float sector_index roundf(theta_norm / (PI/3.0f)); float theta_vertex sector_index * PI/3.0f; float delta fabsf(theta_norm - theta_vertex); // 0 ~ PI/6 float Rmax (Udc / SQRT3) / cosf(delta); if (Uref Rmax) { float scale Rmax / Uref; Ualpha * scale; Ubeta * scale; }这个 Rmax 的几何含义是在当前角度方向上六边形边界离原点的距离。边中点方向最近是 Udc/√3顶点方向最远是 2Udc/3。用 cos(delta) 修正中间的角度正好把圆变成六边形。这版代码只做幅值截断相位保持不变。它在过调制 I 区表现尚可但调制比越高基波幅值亏损越明显这就引出第二步。3.2 第二步修正系数与保持角只截断不修正输出基波幅值会比参考小尤其在 II 区。经典论文里的做法分成两段过调制 I 区用最小相位误差原则输出电压矢量沿六边形边界走通过调整相位来保证基波幅值。工程上可以简化成预修正 截断在截断之前根据当前调制比查表取一个修正系数 kiss 乘到 Uref 上把参考圆向外稍微撑大一点然后再让六边形边界去截最终基波幅值就更接近原始参考。kiss 从 1.0 逐渐变到约 1.06 附近查表粒度可以取 64 点或 128 点线性插值就够。过调制 II 区的实现思路换成保持角。每个 60° 扇区里实际电压矢量在顶点停留一个角度 αh然后沿六边形边界滑动到下一顶点。αh 根据调制比 0.952 到 1.0 之间映射0 到 π/6。工程上通常做一张 αh 表然后用扇区内角度和 αh 做比较角度在保持角范围内强制输出顶点矢量超出保持角输出边界截断矢量。这个状态机写起来并不复杂比推导复杂公式好调试。如果你不想自己推表还有一个取巧办法把参考电压幅值归一化以后映射到角度用离线仿真把调制比 → 输出基波幅值的曲线测出来再反查。效果同样能接受。3.3 七段式切五段式要留神常规 SVPWM 用七段式一个周期内两个零矢量对称插入开关次数多电流纹波小。但进入过调制 II 区后零矢量时间被压得很短七段式经常出现插不进零矢量的尴尬PWM 波形质量明显下降。这时候切五段式是常见操作一个周期只保留一个零矢量开关次数减少 1/3在过调制区更容易实现。五段式不是没代价。它打破了一个周期内的对称性电流纹波更大谐波、噪声都会上升。在过调制区波形本来就不是纯正弦五段式的额外谐波相对不那么起眼所以很多量产方案会在进入过调制区后自动从七段切五段退出时再切回来。切换时务必加滞环避免在边界反复横跳。我见过一个项目因为没加滞环调制比在 0.91 附近来回抖电流波形毛刺严重电机异响最后就是加了 0.02 的滞环解决。3.4 嵌进 FOC 主循环的正确位置过调制算法应该放在电流环 PI 之后、SVPWM 之前。典型顺序采样电流Clark 变换Park 变换得到 Id、Iq电流环 PI 输出 Ud、Uq电压分配/弱磁控制如果做弱磁反 Park 变换得到 Ualpha、Ubeta过调制算法判断 截断 修正/保持角进入 SVPWM 计算占空比。有一点我要特别提醒不要在 dq 域做简单圆形限幅来替代过调制。dq 域限幅会把电压矢量的角度也改掉而且改出来的边界是圆不是真实的六边形物理边界。真正过调制后的电压矢量应当是角度尽可能接近参考、幅值由六边形几何决定这两件事只有在 αβ 坐标系里处理才准确。4. 过调制进入电流环后的连锁反应4.1 电压饱和与 PI 积分抗饱和过调制算法本质上是一个非线性限幅器。当它启动时电流环给出来的电压参考并没有全部加到电机上一部分被吞了。此时电流误差消除不掉PI 积分项会一路狂飙这就是经典的积分饱和。转速越高、负载越重过调制越深积分饱和越严重恢复线性区后往往会有几十毫秒的电流过冲。工程上我推荐组合拳条件积分当过调制生效且电流误差极性同向时冻结积分项反算饱和误差把限幅前的电压参考 - 限幅后实际输出的电压这部分误差反馈回 PI让积分项知道电压已经到底了动态放缩调制比超过 0.95 后适当降低电流环比例增益因为谐波电流会放大到正常值的好几倍过高的 P 增益容易激发出 6 倍基频附近的振荡。这三种策略不是三选一可以同时上。实测下来反算饱和误差最有效但需要额外算出实际输出矢量注意代码开销。4.2 谐波电流、转矩脉动与母线电容压力过调制 I 区相电流 THD 大概翻倍II 区能到 20% 以上。这些谐波主要是 5、7、11、13 次。5 次谐波与基波相互作用产生 6 次转矩脉动7 次也是 6 次所以转矩脉动频率集中在 6 倍基频附近。举个例子4 对极电机在 4000rpm基频约 266.7Hz6 次转矩脉动约 1600Hz。这个频率常落在机械系统共振区附近整机噪声会突然变大。母线侧也不省心。过调制时三相电流畸变直流母线电容的纹波电流显著上升。我碰到过一款 10µF 薄膜电容方案在过调制 II 区连续跑几分钟电容温度直接超 80°C后来要么换成更大容量的 CBB 电容要么限制过调制区域的连续运行时间。如果项目对可靠性有要求母线电容选型必须把过调制工况算进去。4.3 ADC 采样窗口与五段式下的采样点这是最容易翻车的一个环节。七段式 SVPWM 一般把 ADC 采样触发点放在 PWM 周期中点也就是零矢量占据的时间窗口内。线性区这个窗口很宽随便采都准。进入过调制后零矢量时间越来越短中点窗口被压缩尤其在 II 区零矢量接近消失你原本那个中点采样可能已经落在有效矢量切换沿上采出来的电流全是开关噪声。解决思路有两个方向。第一改用五段式并重新计算采样点五段式的有效矢量中点通常在周期的一侧要把采样触发点挪过去而不是死守中点。第二降低对单次采样精度的依赖靠多次平均。但平均会引入相位延迟电流环带宽会被拖低转速高了以后相位余量会吃紧。权衡过后我在高速无感方案里选择的方式是过调制生效时把电流环带宽从 1.2kHz 降到 800Hz同时采样点跟着五段式的有效矢量中点走实测电流噪声明显收敛。4.4 无感 FOC 与观测器的压力如果是无感 FOC 项目过调制会给滑模观测器这类反电动势观测器添麻烦。观测器假设反电动势近似正弦但过调制的电压谐波会让它看到的反电动势里混入大量高次分量容易产生估计误差甚至在高调制比区域出现相位抖动、转子位置跳变。我踩过的一个坑是在过调制 II 区滑模观测器切换函数增益调太大反而放大谐波引起高频抖振。后来加了低通滤波器并降低增益位置输出是稳了但带宽也下来了。两者必须找一个折中。如果你的应用允许优先让过调制区只工作在弱磁控制前馈比较充分的工况让观测器面对的反电动势更可控。还有一个经验从线性区切到过调制区时调制比要连续变化。如果用速度环直接猛踩调制比从 0.91 跳到 0.98电压、电流都会出现明显的冲击。加一个调制比斜坡按 0.02/ms 的速率升上去冲击能小很多。5. 一次完整实测从线性区到六步的切入过程5.1 实验台架与切入策略我用的平台是 STM32F407主频 168MHzPWM 频率 16kHz死区 0.4µsHAL 库搭的 FOC 工程。电机是一台 48V、4 对极、额定 3000rpm 的 PMSM额定电流 12ALdLq≈0.35mH反电动势系数 0.0215V·s/rad。编码器用的是增量式用得上过调制的高速段电流采样问题同样存在。测试分四步走速度给定 2600rpm此时调制比约 0.88确认线性区基线速度给定 3300rpm调制比逼近 0.93进入过调制 I 区速度给定 3900rpm调制比到 0.98进入过调制 II 区速度给定 4200rpm短时逼近六步运行。每一档先让系统稳定再记录波形和数据。全程转速环带宽 20Hz电流环带宽 1kHz避免带宽打架。5.2 关键数据与踩坑过程实测数据整理如下注意是特定电机和母线下的结果不能直接套到别的项目工况调制比六步1转速 rpm相电流 THD逆变器效率观察到的现象线性区0.8826004.2%93%安静正弦好过调制 I0.9433009.8%91%轻微哨声过调制 II0.98390018.5%87%噪声明显手感发涩接近六步0.99420025%84%噪声大母线电流波动明显第一个坑出在 3300rpm 这档。刚切入 I 区时电流环出现 1.3kHz 左右的振荡比预期的 6 倍基频 1.33kHz 略低一点但节奏吻合。排查过程先怀疑过调制算法本身把截断函数屏蔽直接线性限幅振荡消失但电压不够转速顶不上去再把过调制打开、把电流环 P 增益从 0.6 降到 0.45振荡消失。结论很清楚不是过调制算法算错了是谐波电流让电流环增益显得过高。第二个坑在 3900rpm 时出现的 ADC 采样点漂移。当时用的还是七段式采样点固定 PWM 周期中点进入 II 区后电流波形噪声突然大增。用示波器对比电流采样值和绕组实测电流发现采样值在部分扇区明显偏离。把 PWM 中心对称模式改成五段式、采样点挪到有效矢量中点后波形恢复稳定。整个过程排查了一个工作日最后定位到采样窗口属于典型的波形难看先怀疑算法实际先怀疑采样。5.3 可以用作起点的工程参数给几组我用过且能稳定工作的初始参数具体值要按自己的电机微调参数推荐初始值说明过调制启动阈值Uref 1.0 × Ulin略大于线性边界留滞环滞环宽度0.02 × Ulin防止边界反复横跳I 区修正系数1.00 ~ 1.06 查表调制比 0.907~0.952 对应II 区保持角0° ~ 30° 查表调制比 0.952~1.0 对应调制比变化率≤0.02/ms切换平缓减小冲击电流环带宽II 区降 20%~30%给谐波留余地五段式切入点调制比 0.93按实测噪声决定调试顺序建议先把线性区调到最佳再开 I 区最后才碰 II 区和六步。每一步确认 THD、电机温度和母线电容温度都在接受范围内再往前推进。6. 最后过调制不是免费的午餐把过调制真正用好我个人的体会是最重要的不是算法本身而是知道什么时候该收手。I 区对整个系统是友好的THD 升高有限收益明显适合常规工况常驻II 区谐波和损耗都上来了适合短时过载或超速六步运行除非你就是要极限速度否则尽量只做短暂试验。调试的时候我习惯在示波器上同时挂三样东西相电流、母线电流、相电压 PWM 波。过调制算法改完先看 PWM 波在六边形边界附近是否出现不合理的窄脉冲再看母线电流纹波是否异常上涨。这两个信号比单纯看傅里叶分析结果更直接。还有一个小技巧做过调制实验前先在电机轴上贴一个加速度传感器或者至少用手机录段音转矩脉动和噪声的变化比电流波形更容易暴露问题。我很多次以为算法没问题结果一听声音就知道谐波分量已经超标了。这个习惯救了不少项目。过调制是把你手里的母线电压用到极致但极致永远是有代价的工程上真正值钱的地方是在收益和代价之间找到属于你自己的平衡点。
返回列表