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相电压矢量
0000V0 (零矢量)
1100V1
2110V2
3010V3
4011V4
5001V5
6101V6
7111V7 (零矢量)

六个非零矢量把平面分成六个扇区,每个扇区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实现步骤

  1. 判断V_ref所在扇区
  2. 计算相邻基本矢量的作用时间T1、T2
  3. 计算各相切换时间Ta、Tb、Tc
  4. 生成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、弱磁控制,你就有了坚实的基础。下一节咱们聊聊电流环和速度环的设计,到时候会用到今天讲的这些内容。

嗯,今天就到这儿。有什么问题,咱们课后交流。