3. 过调制模式一:最小相位误差法,保持矢量角度不变,只调整幅值
好,咱们正式开始聊过调制。这一章我先讲第一种方法——最小相位误差法。
说白了,它的核心思想就一句话:我不管电压矢量的角度怎么偏,我只管把它的幅值拉长,拉到六边形边界上。 角度?不动。相位误差?最小化。
你想想看,传统SVPWM在进入过调制区之后,参考电压矢量会跑到六边形外面去。这时候如果你硬要合成,逆变器根本输出不了那么高的电压。怎么办?最简单的办法就是——把矢量拽回来,拽到六边形的边上,但方向不变。
核心原则:保持矢量角度 θ 不变,仅将幅值 Vref 限制在六边形边界上。
3.1 为什么先讲这个方法?
我个人习惯,讲技术一定要从最简单的入手。最小相位误差法,就是所有过调制算法里最直观、最容易实现的一种。
我记得刚做FOC那会儿,第一次遇到母线电压利用率不够的问题。电机转速一高,电流波形就开始扭曲,噪声也大。我当时第一反应就是——是不是SVPWM饱和了?后来一查,果然是参考电压超出了六边形。
那时候我用的就是最小相位误差法。为什么?因为好调,好验证,不容易出bug。
3.2 算法原理
咱们先回顾一下正常SVPWM的线性区。在线性区,参考电压矢量 Vref 的轨迹是一个圆,完全内切于六边形。这时候调制比 M ≤ 0.9069。
一旦 M > 0.9069,圆就跑出去了。这时候你拿到的 Vref 有一部分在六边形外面。最小相位误差法的做法是:
- 计算当前扇区:根据 Vα 和 Vβ 判断参考矢量落在哪个扇区。
- 计算六边形边界:根据扇区,算出该角度下六边形边界的幅值 Vmax(θ)。
- 限幅:如果 |Vref| > Vmax(θ),则令 |Vref| = Vmax(θ),角度不变。
就这么简单。没有迭代,没有查表,没有复杂的三角函数逼近。
小提示:Vmax(θ) 的计算其实有闭式解。每个扇区边界是一条直线,你只需要根据角度算出直线上的幅值即可。具体公式我后面会贴。
3.3 数学表达
假设参考电压矢量在扇区 I(0° ~ 60°),六边形边界的表达式为:
V_max(θ) = V_dc / (√3 * cos(30° - θ))
其中 θ 是矢量相对于扇区起始边的角度,范围 0° ~ 60°。
那么过调制后的输出电压为:
V_out = V_ref, if |V_ref| ≤ V_max(θ)
V_out = V_max(θ) * (V_ref / |V_ref|), if |V_ref| > V_max(θ)
说白了,就是做一个矢量限幅。角度不变,幅值砍到边界上。
3.4 代码实现
下面我给出一段C语言风格的伪代码。这是我当年在STM32F4上跑过的版本,稍微改改就能用。
// 输入:V_alpha, V_beta (参考电压)
// 输出:V_alpha_lim, V_beta_lim (限幅后的电压)
void svpwm_overmod_min_phase(float V_alpha, float V_beta,
float *V_alpha_lim, float *V_beta_lim) {
float V_ref = sqrtf(V_alpha*V_alpha + V_beta*V_beta);
float theta = atan2f(V_beta, V_alpha);
// 1. 判断扇区
int sector = get_sector(theta);
// 2. 计算该扇区边界幅值
float V_max = calc_boundary_amplitude(theta, sector);
// 3. 限幅
if (V_ref > V_max) {
float scale = V_max / V_ref;
*V_alpha_lim = V_alpha * scale;
*V_beta_lim = V_beta * scale;
} else {
*V_alpha_lim = V_alpha;
*V_beta_lim = V_beta;
}
}
注意:这里用了 sqrtf 和 atan2f,计算量稍大。如果要在低成本MCU上跑,建议用查表法或者CORDIC近似。我曾经在STM32F103上试过,直接算的话,10kHz的电流环会吃掉不少CPU时间。
3.5 波形分析
咱们来看看这个方法的输出波形长什么样。
在过调制区,输出电压的轨迹不再是圆,而是六边形的边。具体来说:
- 低过调制区(0.9069 < M < 0.95):大部分时间矢量还在圆内,只有峰值附近被削平。波形失真不大。
- 高过调制区(0.95 < M < 1.0):矢量几乎全程都在六边形边上跑。输出电压波形接近六边形,谐波含量明显增加。
我当年做测试的时候,用示波器看过相电压波形。M=0.92的时候,波形还比较正弦;M=0.98的时候,波形顶部明显变平了,像被切了一刀。
3.6 优缺点对比
| 项目 | 说明 |
|---|---|
| 优点 | 实现简单,计算量小,相位误差最小 |
| 缺点 | 电压利用率提升有限(最大M=1.0),谐波较大 |
| 适用场景 | 对谐波不敏感、要求快速实现过调制的场合 |
| 不适用场景 | 低噪音要求、高精度电流控制 |
3.7 避坑指南
我曾经踩过一个坑,说出来你可能不信——扇区边界判断搞错了。
那时候我直接用 atan2 算角度,然后根据角度范围判断扇区。结果在扇区边界附近,由于浮点精度问题,角度会抖动,导致扇区判断来回跳。输出电压一下子跳到另一个扇区的边界上,电流波形出现毛刺。
后来怎么解决的?我加了一个滞回比较器。在扇区边界附近,保持上一次的扇区判断结果,直到角度变化超过一个阈值(比如1°)才切换。问题就解决了。
经验之谈:扇区判断的滞回阈值不要设太大,否则会引入额外的相位延迟。我一般设0.5° ~ 1.5°,具体看你的PWM频率和电机转速。
3.8 本章小结
最小相位误差法,说白了就是「砍幅值,保角度」。它是最简单的过调制方法,适合入门和理解概念。虽然性能不是最优,但作为过调制技术的第一课,它把核心问题讲清楚了——当参考电压超出六边形时,我们该怎么处理。
下一章我会讲第二种方法,那个就稍微复杂一点了。不过别急,先把这一章吃透。