2、电机控制基础回顾:永磁同步电机(PMSM)数学模型、Clark/Park变换、SVPWM原理
各位同学,咱们今天聊聊电机控制里最核心的几个基础模块。说实话,搞了这么多年电机控制,我见过太多人一上来就调PID,结果连电机模型都没搞明白,最后折腾半天也不知道问题出在哪。所以这一节,咱们把PMSM的数学模型、坐标变换和SVPWM这几个硬骨头啃下来。
2.1 永磁同步电机(PMSM)的数学模型
先说说PMSM的数学模型。你想想看,电机本质上就是个电磁能量转换装置。我习惯把数学模型分成两部分:电压方程和磁链方程。
在自然坐标系(ABC三相)下,电压方程长这样:
u_a = R_s * i_a + dψ_a/dt
u_b = R_s * i_b + dψ_b/dt
u_c = R_s * i_c + dψ_c/dt
看着简单吧?但这里有个坑——磁链ψ_a、ψ_b、ψ_c不仅跟自感有关,还跟互感、转子位置有关。说白了,三相之间互相耦合,方程解起来非常麻烦。
注意:我在项目中遇到过,有人直接用ABC三相模型做仿真,结果模型跑得巨慢,还容易发散。为什么?因为电感矩阵是时变的,每算一步都要重新计算矩阵元素。
所以,咱们得想办法简化。怎么简化?坐标变换就是干这个的。
2.2 Clark变换与Park变换
坐标变换的核心思想,就是把三相静止坐标系下的变量,变换到两相旋转坐标系下。这样,时变的电感矩阵就变成了常数矩阵。
2.2.1 Clark变换(3s/2s)
Clark变换把ABC三相变换到αβ两相静止坐标系。公式如下:
[i_α] [1 -1/2 -1/2 ] [i_a]
[i_β] = [0 √3/2 -√3/2] [i_b]
[i_c]
嗯,这里要注意,这个变换是等幅值变换。我个人习惯用等幅值变换,因为这样变换后的电流幅值跟实际相电流幅值一致,调试时看着直观。
小技巧:如果你做仿真,建议用等功率变换,因为功率守恒,算效率时不容易出错。但做工程调试,等幅值变换更友好。
2.2.2 Park变换(2s/2r)
Park变换把αβ静止坐标系变换到dq旋转坐标系。公式:
[i_d] [cosθ sinθ] [i_α]
[i_q] = [-sinθ cosθ] [i_β]
θ是转子电角度。经过Park变换后,我们得到了d轴和q轴电流。d轴对应励磁分量,q轴对应转矩分量。这就是矢量控制的精髓——把交流电机控制问题,变成了直流电机控制问题。
我记得刚入行时,有个老工程师跟我说:「小伙子,搞懂Clark和Park,你就掌握了电机控制的一半。」当时我不信,后来做了几个项目才明白,这话一点不夸张。
2.3 旋转坐标系下的PMSM模型
经过Clark和Park变换后,PMSM的数学模型变得清爽多了:
u_d = R_s * i_d + L_d * di_d/dt - ω_e * L_q * i_q
u_q = R_s * i_q + L_q * di_q/dt + ω_e * (L_d * i_d + ψ_f)
转矩方程:
T_e = 1.5 * p * [ψ_f * i_q + (L_d - L_q) * i_d * i_q]
你看,现在d轴和q轴之间只有反电动势项耦合,比原来简单多了。而且L_d和L_q是常数(对于表贴式PMSM,L_d = L_q)。
关键点:对于表贴式PMSM,L_d = L_q,转矩只跟i_q有关。对于内置式PMSM,L_d ≠ L_q,可以利用磁阻转矩,这就是MTPA(最大转矩电流比)控制的基础。
2.4 SVPWM原理
好了,模型有了,坐标变换会了,接下来怎么让电机转起来?得给电机施加合适的电压矢量。SVPWM(空间矢量脉宽调制)就是干这个的。
SVPWM的核心思想,是用八个基本电压矢量(六个非零矢量+两个零矢量)来合成任意方向的电压矢量。说白了,就是「拼凑」出你想要的那个电压。
2.4.1 基本电压矢量
三相逆变器有六个开关管,上桥臂和下桥臂互补导通。用1表示上桥臂导通,0表示下桥臂导通,共有8种状态:
| 状态 | a相 | b相 | c相 | 电压矢量 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | V0 (零矢量) |
| 1 | 1 | 0 | 0 | V1 |
| 2 | 1 | 1 | 0 | V2 |
| 3 | 0 | 1 | 0 | V3 |
| 4 | 0 | 1 | 1 | V4 |
| 5 | 0 | 0 | 1 | V5 |
| 6 | 1 | 0 | 1 | V6 |
| 7 | 1 | 1 | 1 | V7 (零矢量) |
六个非零矢量把平面分成六个扇区,每个扇区60度。
2.4.2 合成原理
假设你想合成一个电压矢量V_ref,它落在某个扇区里。那就用这个扇区边界的两个基本矢量,加上零矢量,按时间比例合成。
举个例子,V_ref在第一扇区,用V1和V2合成:
T_s * V_ref = T1 * V1 + T2 * V2 + T0 * V0(或V7)
其中T_s是开关周期,T1、T2、T0分别是V1、V2、零矢量的作用时间。T1和T2的计算公式:
T1 = √3 * T_s * |V_ref| * sin(60° - θ) / U_dc
T2 = √3 * T_s * |V_ref| * sin(θ) / U_dc
T0 = T_s - T1 - T2
θ是V_ref在扇区内的角度。
避坑指南:我曾经在调试SVPWM时,发现电机噪音特别大。查了半天,原来是零矢量分配不合理。我建议采用七段式SVPWM,即把零矢量V0和V7各分一半,这样谐波含量最小。
2.4.3 七段式SVPWM实现步骤
- 判断V_ref所在扇区
- 计算相邻基本矢量的作用时间T1、T2
- 计算各相切换时间Ta、Tb、Tc
- 生成PWM波形
代码实现(伪代码):
// 扇区判断
if (V_β > 0) sector = 1;
// ... 根据V_α、V_β判断具体扇区
// 计算T1、T2
T1 = √3 * T_s * |V_ref| * sin(60° - θ) / U_dc;
T2 = √3 * T_s * |V_ref| * sin(θ) / U_dc;
// 计算切换时间
Ta = (T_s - T1 - T2) / 4;
Tb = Ta + T1 / 2;
Tc = Tb + T2 / 2;
// 根据扇区分配PWM比较值
switch(sector) {
case 1: CMP1 = Ta; CMP2 = Tb; CMP3 = Tc; break;
// ... 其他扇区
}
个人经验:实际工程中,SVPWM的载波频率一般选10kHz-20kHz。频率太低,电流谐波大;频率太高,开关损耗大。我一般选12kHz,兼顾性能和效率。
2.5 小结
这一节咱们把PMSM的数学模型、Clark/Park变换和SVPWM原理过了一遍。你想想看,从三相耦合的复杂模型,到dq轴解耦的简洁模型,再到用SVPWM精确控制电压矢量,每一步都是前人智慧的结晶。
搞懂这些,后面的矢量控制、MTPA、弱磁控制,你就有了坚实的基础。下一节咱们聊聊电流环和速度环的设计,到时候会用到今天讲的这些内容。
嗯,今天就到这儿。有什么问题,咱们课后交流。