基于均值零序分量注入的 SVPWM 算法实现
d-q轴电压指令→(逆 Park 变换)→α-β轴电压→(归一化)→(逆 Clark 变换)→三相电压→(注入零序分量优化)→三相PWM占空比→ 输出 PWM 波形。其中,均值零序分量注入是该 SVPWM 算法的核心优化,用于提高直流电压利用率并避免过调制,保证电机稳定运行。(注:文档部分内容可能由 AI 生成)
基于均值零序分量注入的 SVPWM 算法实现
这段代码实现了基于均值零序分量注入的 SVPWM(空间矢量脉宽调制) 算法,核心功能是将旋转坐标系(d-q 轴)下的电压指令转换为三相 PWM 占空比,最终输出到逆变器驱动电机。下面分步解释其原理和代码逻辑:
1. 函数作用与输入参数
void setPhaseVoltage(float Uq, float Ud, float el\_angle)
-
输入参数:
-
Ud
、Uq
:旋转坐标系(d-q 轴)下的电压指令(d 轴通常为励磁分量,q 轴为转矩分量)。 -
el_angle
:电机转子的电角度(用于坐标变换)。
-
-
功能:通过一系列坐标变换和 SVPWM 调制,计算三相 PWM 的占空比,最终输出到定时器的比较寄存器。
2. Park 逆变换(d-q 轴 → α-β 轴)
float U\_alpha = -Uq \* arm\_sin\_f32(el\_angle) + Ud \* arm\_cos\_f32(el\_angle);
float U\_beta = Uq \* arm\_cos\_f32(el\_angle) + Ud \* arm\_sin\_f32(el\_angle);
-
原理:Park 变换用于将静止坐标系(α-β 轴)与旋转坐标系(d-q 轴)之间的转换。此处为逆 Park 变换,将旋转坐标系的
Ud
、Uq
转换为静止坐标系的Uα
、Uβ
(α-β 轴是静止的,与电机定子绕组对齐)。 -
公式来源:逆 Park 变换的矩阵运算为:
$\begin{bmatrix} U_\alpha \ U_\beta \end{bmatrix} =
\begin{bmatrix} \cos\theta & -\sin\theta \ \sin\theta & \cos\theta \end{bmatrix}
\begin{bmatrix} U_d \ U_q \end{bmatrix}
$
其中θ = el_angle
(电角度),与代码计算一致。
3. 电压归一化(转换为占空比比例)
U\_alpha = U\_alpha / Udc;
U\_beta = U\_beta / Udc;
- 原理:
Udc
是直流母线电压(逆变器输入的直流电压)。将Uα
、Uβ
除以Udc
,得到归一化的电压比例(范围通常在 [-0.5, 0.5] 之间),便于后续后续计算 PWM 占空比。
4. Clark 逆变换(α-β 轴 → a-b-c 轴)
float Ua = U\_alpha;
float Ub = -0.5f \* U\_alpha + 0.8660254f \* U\_beta;
float Uc = -0.5f \* U\_alpha - 0.8660254f \* U\_beta;
-
原理:Clark 变换用于将三相坐标系(a-b-c 轴)与静止坐标系(α-β 轴)之间的转换。此处为逆 Clark 变换,将
Uα
、Uβ
转换为三相静止坐标系的相电压Ua
、Ub
、Uc
。 -
公式来源:逆 Clark 变换(假设三相平衡,无零序分量)的简化公式为:
KaTeX parse error: {align*} can be used only in display mode.
代码中0.8660254f
是√3/2
的近似值,与公式一致。
5. 均值零序分量注入(SVPWM 核心优化)
float Umax = findMax(\&Ua, \&Ub, \&Uc); // 找三相电压最大值
float Umin = findMin(\&Ua, \&Ub, \&Uc); // 找三相电压最小值
float Umid = -0.5f \* (Umax + Umin); // 计算均值零序分量
Ta = Ua + Umid;
Tb = Ub + Umid;
Tc = Uc + Umid;
-
零序分量的作用:在 SVPWM 中,零序分量(如三次谐波)注入不会影响电机的相电压(因相电压差中零序分量会抵消),但可提高直流电压利用率或避免过调制(防止 PWM 占空比超出 0~1 范围)。
-
均值零序分量计算:
这里通过三相电压的最大值
Umax
和最小值Umin
,计算出Umid = -0.5*(Umax + Umin)
,作为注入的零序分量。其目的是将三相电压整体 “平移”,使调制波的峰值被约束在合理范围内(减少过调制风险)。
6. 占空比约束与 PWM 输出
map\_constraint(\&Ta); // 约束Ta在\[0,1]范围
map\_constraint(\&Tb);
map\_constraint(\&Tc);
// 设置定时器比较值(PWM占空比)
\_\_HAL\_TIM\_SET\_COMPARE(\&htim1, TIM\_CHANNEL\_1, Ta \* PWM\_ARR);
\_\_HAL\_TIM\_SET\_COMPARE(\&htim1, TIM\_CHANNEL\_2, Tb \* PWM\_ARR);
\_\_HAL\_TIM\_SET\_COMPARE(\&htim1, TIM\_CHANNEL\_3, Tc \* PWM\_ARR);
-
map_constraint
:确保Ta
、Tb
、Tc
(归一化的占空比)被限制在[0, 1]
范围内,避免 PWM 输出异常。 -
PWM 输出:将归一化的占空比
Ta
、Tb
、Tc
乘以定时器的自动重装载值PWM_ARR
,得到实际的比较寄存器值,最终通过定时器输出三相 PWM 波形,驱动逆变器的功率管。
总结
整个流程是:
d-q轴电压指令
→(逆 Park 变换)→ α-β轴电压
→(归一化)→(逆 Clark 变换)→ 三相电压
→(注入零序分量优化)→ 三相PWM占空比
→ 输出 PWM 波形。
其中,均值零序分量注入是该 SVPWM 算法的核心优化,用于提高直流电压利用率并避免过调制,保证电机稳定运行。
更多推荐
所有评论(0)