2、PMSM数学模型:从三相静止到dq旋转坐标系

大家好,欢迎来到第二章。这一章咱们要啃的,是PMSM无传感器控制的“地基”——数学模型。

说实话,我刚入行那会儿,觉得数学公式特别烦人。心想“我写代码就完了,搞这么复杂干嘛?”后来踩了坑才明白,模型不清,控制就是空中楼阁。你想想看,连电机怎么转的都不知道,怎么去估它的位置和速度?

所以,这一章我会带着大家,从最直观的三相静止坐标系出发,一步步推导到最常用的dq旋转坐标系。我会把我在项目中遇到的坑和心得,都揉进去讲。

2.1 三相静止坐标系模型(ABC模型)

这是最原始的模型。说白了,就是直接描述电机三相绕组里的电压、电流和磁链关系。

永磁同步电机的定子有三相绕组,空间上相差120度。转子呢,是一块永磁体。我们给三相绕组通电,就会产生旋转磁场,拉着转子转。

在三相静止坐标系(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

其中,u_a、u_b、u_c是三相电压,i_a、i_b、i_c是三相电流,R_s是定子电阻,ψ_a、ψ_b、ψ_c是三相磁链。

磁链方程就复杂一些了,因为它包含了自感和互感,还有转子永磁体产生的磁链:

ψ_a = L_aa * i_a + M_ab * i_b + M_ac * i_c + ψ_f * cos(θ_e)
ψ_b = M_ba * i_a + L_bb * i_b + M_bc * i_c + ψ_f * cos(θ_e - 2π/3)
ψ_c = M_ca * i_a + M_cb * i_b + L_cc * i_c + ψ_f * cos(θ_e + 2π/3)

这里L_aa、L_bb、L_cc是自感,M_ab等是互感,ψ_f是永磁体磁链,θ_e是转子电角度。

核心问题:这个模型里,电感L和互感M都是随转子位置θ_e变化的!

这意味着什么?意味着方程是时变的,非常难解。你想想,每算一步都要更新一大堆电感值,实时控制根本跑不动。

我在做第一个无传感器项目时,就试图直接用这个模型做观测器。结果呢?代码跑得跟蜗牛一样,还经常发散。后来我才明白,必须做坐标变换,把时变系统变成时不变系统。

2.2 Clark变换:从三相到两相

Clark变换的目的,就是把ABC三相坐标系,变换到αβ两相静止坐标系。

为什么要这么做?因为三相系统本质上是一个平面旋转磁场,用三个坐标轴(ABC)描述太冗余了。用两个互相垂直的轴(αβ)就够了。

变换公式很简单(等幅值变换):

[i_α]   [1,  -1/2,  -1/2 ] [i_a]
[i_β] = [0, √3/2, -√3/2] [i_b]
                           [i_c]

嗯,这里要注意,Clark变换有两种形式:等幅值变换和等功率变换。我个人习惯用等幅值变换,因为这样变换后的电流幅值跟实际三相电流幅值一样,调试起来更直观。

我的经验:在代码实现时,Clark变换只需要两个电流传感器(比如只测i_a和i_b),因为i_c = -i_a - i_b。这样可以省一个ADC通道,降低成本。

变换之后,αβ坐标系下的电压方程变成了:

u_α = R_s * i_α + L_s * di_α/dt - ω_e * ψ_f * sin(θ_e)
u_β = R_s * i_β + L_s * di_β/dt + ω_e * ψ_f * cos(θ_e)

这里L_s是定子电感(在表贴式PMSM中,L_d = L_q = L_s)。虽然方程简化了,但依然包含sin和cos项,还是时变的。

2.3 Park变换:从静止到旋转

Park变换才是真正的“杀手锏”。它把αβ静止坐标系,变换到dq旋转坐标系。

dq坐标系是跟着转子一起转的。d轴(直轴)指向转子磁极方向,q轴(交轴)超前d轴90度电角度。

变换公式:

[i_d]   [cos(θ_e),  sin(θ_e)] [i_α]
[i_q] = [-sin(θ_e), cos(θ_e)] [i_β]

反过来,逆Park变换:

[u_α]   [cos(θ_e), -sin(θ_e)] [u_d]
[u_β] = [sin(θ_e),  cos(θ_e)] [u_q]

关键点:经过Park变换后,在dq坐标系下看,电机模型变成了直流电机模型!

i_d和i_q变成了直流量,不再随转子位置正弦变化。这就是矢量控制的精髓所在。

2.4 dq旋转坐标系下的数学模型

好了,终于到了最常用的模型。在dq坐标系下,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)

其中:

  • u_d、u_q:d轴和q轴电压
  • i_d、i_q:d轴和q轴电流
  • L_d、L_q:d轴和q轴电感(对于表贴式PMSM,L_d = L_q;对于内置式PMSM,L_d < L_q)
  • ω_e:电角速度
  • ψ_f:永磁体磁链

电磁转矩方程:

T_e = 1.5 * p * [ψ_f * i_q + (L_d - L_q) * i_d * i_q]

这里p是极对数。注意看,转矩由两部分组成:

  • 永磁转矩:1.5 * p * ψ_f * i_q —— 这是主要的,跟i_q成正比
  • 磁阻转矩:1.5 * p * (L_d - L_q) * i_d * i_q —— 只有L_d ≠ L_q时才存在,内置式PMSM可以利用这个来提升效率

避坑指南:我曾经在调试一个内置式PMSM时,忽略了磁阻转矩项,结果算出来的转矩跟实际差了一大截。后来查了半天才发现,原来(L_d - L_q) * i_d * i_q这一项不能省!

对于表贴式PMSM(L_d = L_q),磁阻转矩为0,可以简化。但内置式的一定要保留。

2.5 状态空间方程

为了做无传感器控制(比如用观测器估测位置和速度),我们需要把dq模型写成状态空间方程的形式。

状态空间方程的标准形式:

dx/dt = A * x + B * u
y = C * x + D * u

对于PMSM,我们通常选择电流作为状态变量。以i_d和i_q为例:

d/dt [i_d] = [-R_s/L_d,    ω_e * L_q/L_d] [i_d]   + [1/L_d,    0    ] [u_d]
     [i_q]   [-ω_e * L_d/L_q,  -R_s/L_q] [i_q]     [  0  ,  1/L_q] [u_q]
                                              + [  0   ]
                                                [-ω_e * ψ_f/L_q]

写成矩阵形式更清晰:

状态向量 x = [i_d, i_q]^T
输入向量 u = [u_d, u_q]^T
输出向量 y = [i_d, i_q]^T(通常电流是可测量的)

A矩阵 = [[-R_s/L_d,    ω_e * L_q/L_d],
         [-ω_e * L_d/L_q,  -R_s/L_q]]

B矩阵 = [[1/L_d,    0    ],
         [  0  ,  1/L_q]]

C矩阵 = [[1, 0],
         [0, 1]]

D矩阵 = [[0, 0],
         [0, 0]]

注意:这个状态空间方程里,A矩阵包含了ω_e(转速信息)。这意味着,如果我们能通过某种方法(比如滑模观测器、扩展卡尔曼滤波器)从电流中反推出ω_e,就能实现无传感器控制。

说白了,无传感器控制的核心,就是利用这个模型,从可测量的电压和电流中,把不可测量的转子位置和速度“算”出来。

在实际项目中,我们通常会对这个模型进行离散化处理(比如用欧拉法或双线性变换),才能在数字处理器(DSP/MCU)上运行。

小结

这一章我们走完了从ABC到dq的完整推导路径。我个人觉得,理解这个变换过程,比死记硬背公式重要得多。你想想看,当你真正理解了“为什么dq模型是直流模型”,你就能明白为什么矢量控制这么好用。

下一章,我们会基于这个dq模型,开始讲具体的无传感器控制算法。到时候你会发现,今天打下的数学基础,全都会用上。

嗯,今天就到这里。有问题欢迎交流。