3. 数学模型(二):Clark变换与Park变换推导,dq轴数学模型建立

上一章我们把PMSM在三相静止坐标系下的电压方程、磁链方程和转矩方程都摆出来了。但你真拿那套方程去写控制代码,会发现根本没法用——三个相电流耦合在一起,转子还在转,电感参数跟着位置变,这谁受得了?

所以这一章,我们要干两件事:坐标变换和dq模型建立。说白了,就是把那个乱糟糟的三相系统,变成两个直流系统来控。我当年刚接触FOC时,觉得Clark和Park就是两个数学游戏,后来调试一台抖动严重的伺服电机,才真正体会到——没有这两个变换,你连电流环都调不稳。

3.1 为什么非变不可?

先看三相静止坐标系下的电压方程长什么样:

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不仅包含自感,还包含另外两相的互感,而且互感还随转子位置θ变化。你想想看,这要是直接做PI控制,三个环互相打架,参数整定能把你整疯。

我做过一个项目,用三相模型直接做电流预测控制,结果跑出来的电流波形全是毛刺。后来换成dq轴模型,同样的算法,波形干净得像教科书。这就是坐标变换的价值——把时变系统变成定常系统。

3.2 Clark变换:从三相到两相

Clark变换的目标很简单:把abc三相绕组,等效成αβ两相正交绕组。注意,这里只是等效,不是真的把电机拆了重绕。

变换的核心思想是磁动势不变。也就是说,三相绕组产生的合成磁动势,和两相绕组产生的合成磁动势,在空间上完全一样。

我习惯用等幅值变换,因为这样变换后的电流幅值和实际相电流幅值一致,调试时方便观察。公式如下:

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

其中i_0是零序分量,对于星形连接且中线不引出的电机,i_a + i_b + i_c = 0,所以i_0 = 0,可以忽略。

我的习惯:实际代码里,我通常只算α和β,零序分量直接扔掉。但如果你做的是带中线或者非对称故障诊断,零序分量就不能丢。

Clark变换的逆变换也很简单:

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

3.3 Park变换:从静止到旋转

Clark变换做完,我们得到了αβ坐标系下的两相正弦电流。但问题来了——这两个电流还是交流量,PI控制器对交流量的跟踪效果很差,稳态误差永远消不掉。

Park变换就是来解决这个问题的。它把αβ坐标系旋转起来,旋转速度和转子同步,这样从旋转坐标系看过去,电流就变成了直流量。

变换公式:

[i_d]   [cosθ    sinθ] [i_α]
[i_q] = [-sinθ   cosθ] [i_β]

其中θ是转子电角度,由编码器或霍尔传感器提供。

逆Park变换:

[i_α]   [cosθ   -sinθ] [i_d]
[i_β] = [sinθ    cosθ] [i_q]
注意:θ是电角度,不是机械角度。对于极对数为p的电机,θ_elec = p * θ_mech。我曾经在调试一台8极对数的永磁同步电机时,忘了乘极对数,结果电流环直接发散,电机嗡嗡响,吓得我赶紧按了急停。

3.4 dq轴数学模型建立

经过Clark和Park变换,我们终于得到了dq坐标系下的数学模型。这个模型是FOC的基石,也是参数辨识的理论依据。

电压方程:

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)

其中:

  • R_s:定子电阻
  • L_d、L_q:d轴和q轴电感
  • ω_e:电角速度
  • ψ_f:永磁体磁链

磁链方程:

ψ_d = L_d * i_d + ψ_f
ψ_q = L_q * i_q

转矩方程:

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

看到这个转矩方程,你应该能理解为什么会有最大转矩电流比(MTPA)控制——对于凸极电机(L_d ≠ L_q),利用i_d可以产生额外的磁阻转矩。

核心结论:在dq坐标系下,所有电感参数都是常数(L_d、L_q不随转子位置变化),电压方程中的耦合项ω_e * L_q * i_q和ω_e * L_d * i_d可以通过前馈补偿解耦。这就是FOC能实现高性能控制的根本原因。

3.5 变换的物理意义与避坑

我再用一个直观的方式解释一下:

  • Clark变换:把三个绕组投影到两个正交轴上,相当于降维。
  • Park变换:把坐标系转到和转子一起转,相当于你坐在转子上看电流。

你想想看,坐在转子上看,电流当然就是直流了。

下面这张图展示了整个变换流程:

坐标变换与dq模型建立流程 三相静止 abc 两相静止 αβ 两相旋转 dq dq数学模型 Clark变换:等幅值/等功率变换,常用等幅值 Park变换:需要转子位置θ,θ = p * θ_mech dq轴模型关键参数 L_d、L_q:d/q轴电感(常数) | ψ_f:永磁体磁链 | R_s:定子电阻 耦合项:ω_e * L_q * i_q(d轴)和 ω_e * L_d * i_d(q轴)

3.6 代码实现:C语言版Clark+Park

下面是我在实际项目中用的一段代码,做了定点数优化,适合在DSP或MCU上跑:

// 三相电流输入:ia, ib, ic
// 转子电角度:theta_elec
// 输出:id, iq

void clark_park_transform(float ia, float ib, float ic, 
                          float theta_elec, 
                          float *id, float *iq)
{
    // 1. Clark变换(等幅值)
    float i_alpha = ia;
    float i_beta  = (ia + 2.0f * ib) / 1.7320508f;  // 1/√3 近似
    
    // 2. Park变换
    float cos_t = cosf(theta_elec);
    float sin_t = sinf(theta_elec);
    
    *id =  i_alpha * cos_t + i_beta * sin_t;
    *iq = -i_alpha * sin_t + i_beta * cos_t;
}

// 逆变换:从dq到三相电压给定
void inv_park_clark_transform(float vd, float vq, 
                              float theta_elec, 
                              float *va, float *vb, float *vc)
{
    float cos_t = cosf(theta_elec);
    float sin_t = sinf(theta_elec);
    
    // 逆Park变换
    float v_alpha = vd * cos_t - vq * sin_t;
    float v_beta  = vd * sin_t + vq * cos_t;
    
    // 逆Clark变换(等幅值)
    *va = v_alpha;
    *vb = -0.5f * v_alpha + 0.8660254f * v_beta;
    *vc = -0.5f * v_alpha - 0.8660254f * v_beta;
}
性能优化建议:如果MCU没有硬件三角函数单元,建议用查表法或者CORDIC算法。我曾在某款国产MCU上跑这个变换,直接用math.h的cosf/sinf,一个变换周期吃掉200多个时钟周期,换成查表后降到40个周期。

3.7 常见问题与避坑

问题 现象 原因 解决办法
电流id、iq有交流分量 id、iq波形不是直线,有正弦波动 Park变换用的θ不准或延迟太大 检查编码器角度读取时序,做角度补偿
转矩输出抖动 电机低速运行时转矩脉动明显 Clark变换系数用错(等功率vs等幅值) 统一用等幅值变换,系数为2/3
电流环发散 给定转速后电流迅速增大到限幅值 θ极性反了(正转给成反转) 交换两相线序或取反θ符号

我曾经在一个风电变流器项目里,调试时发现id、iq波形总是有100Hz的波动。查了两天,最后发现是角度采样和电流采样不同步——电流在PWM周期中点采,角度在周期起点采,差了半个周期。后来做了角度预测补偿,问题解决。嗯,这种时序问题,示波器看不出来,得靠逻辑分析仪抓总线。

3.8 小结

这一章我们完成了从abc到dq的完整变换推导,得到了PMSM在旋转坐标系下的数学模型。这个模型是后续所有控制算法和参数辨识方法的基础。你如果能把Clark和Park变换的物理意义和数学形式都吃透,后面学MTPA、弱磁控制、无传感器控制都会轻松很多。