4、Park变换:从两相静止坐标系到两相旋转坐标系的变换原理与公式

好,咱们继续往前走。上一节我们把三相电机里的电流,通过Clark变换,硬生生拽到了两相静止坐标系αβ上。现在电机里的物理量,从三个变成了两个,看起来清爽多了。

但问题来了——αβ坐标系是静止的,可电机转子是在转的啊。你想想看,一个静止的坐标系去描述一个旋转的磁场,那观测到的电流和电压波形,一定是正弦波,频率还跟着转速变。这给控制器设计带来了麻烦:你没法用简单的PI调节器去跟踪一个不停变化的正弦波。

那怎么办?

换个思路——让坐标系跟着转子一起转。这就是Park变换的核心思想:把静止的αβ坐标系,变换到与转子磁链同步旋转的dq坐标系。

4.1 为什么要旋转坐标系?

我在做第一个FOC项目时,踩过一个坑。当时直接用αβ坐标系下的电流做PI控制,结果发现无论怎么调参数,电流波形总是有静差。后来才明白——PI调节器对直流量的跟踪是零静差的,但对交流量天生就有相位滞后和幅值衰减。

所以,Park变换的本质目的就一个:把交流量变成直流量。

在dq旋转坐标系下:

  • d轴(直轴):与转子磁链方向对齐,控制励磁分量
  • q轴(交轴):与转子磁链方向垂直,控制转矩分量

这样一来,原本在αβ坐标系下呈正弦变化的电流,到了dq坐标系下就变成了恒定值。PI调节器终于可以大显身手了。

核心理解:Park变换不是改变物理量本身,而是改变了观察这些物理量的参考系。就像你坐在旋转木马上看旁边的旋转木马——相对静止了。

4.2 Park变换的数学公式

公式其实不复杂。假设我们已经有了αβ坐标系下的电流iα和iβ,以及转子电角度θe,那么变换到dq坐标系下的公式就是:

id = iα × cos(θe) + iβ × sin(θe)
iq = -iα × sin(θe) + iβ × cos(θe)

写成矩阵形式更直观:

[ id ]   [  cos(θe)   sin(θe) ] [ iα ]
[ iq ] = [ -sin(θe)   cos(θe) ] [ iβ ]

嗯,这里要注意——θe是电角度,不是机械角度。对于一对极的电机,电角度等于机械角度;但对于多对极电机,电角度 = 机械角度 × 极对数。我见过不少新手在这里栽跟头,算出来的角度不对,整个控制就全乱了。

4.3 逆Park变换

有正变换,自然就有逆变换。当我们通过PI调节器算出了想要的d轴电压Ud和q轴电压Uq之后,需要把它们变回αβ坐标系,才能送到SVPWM模块去生成PWM波。

逆变换公式:

Uα = Ud × cos(θe) - Uq × sin(θe)
Uβ = Ud × sin(θe) + Uq × cos(θe)

矩阵形式:

[ Uα ]   [  cos(θe)  -sin(θe) ] [ Ud ]
[ Uβ ] = [  sin(θe)   cos(θe) ] [ Uq ]

你看,正变换和逆变换的矩阵其实是互为转置的。这个性质在实际编程中很有用——你只需要实现一个函数,稍微改一下符号就能复用。

4.4 角度θe从哪来?

这是整个Park变换里最关键的环节。没有准确的转子角度,Park变换就是瞎变。

对于带编码器的电机,角度直接读就行。但对于无感FOC——也就是咱们这门课的主题——角度需要通过观测器来估算。常用的方法有:

  • 反电动势法:通过检测电机反电动势来推算转子位置,适合中高速
  • 磁链观测器:基于电压模型或电流模型估算磁链方向
  • 滑模观测器:鲁棒性好,但存在抖振问题
  • 锁相环(PLL):从反电动势中提取角度和速度信息

个人经验:我建议初学者先用仿真环境跑通带编码器的FOC,把Park变换的逻辑彻底搞明白,再切换到无感模式。这样出了问题,你能快速定位是角度估算的问题,还是变换本身的问题。

4.5 Park变换的物理意义

说白了,Park变换就是在做一件事:坐标旋转。

想象一下,你站在地面上看一个旋转的风扇叶片——它在不停转动。但如果你坐在风扇叶片上一起转,那叶片在你眼里就是静止的。Park变换就是帮你「坐」到转子上去。

在dq坐标系下:

  • d轴电流id:产生磁通,类似于直流电机的励磁电流
  • q轴电流iq:产生转矩,类似于直流电机的电枢电流

这就是为什么FOC能实现像直流电机一样简单的控制——你把交流电机解耦成了两个独立的直流通道。

4.6 整体变换流程

从三相电流到dq轴电流,需要两步:

  1. Clark变换:三相静止 → 两相静止(abc → αβ)
  2. Park变换:两相静止 → 两相旋转(αβ → dq)

反过来,从dq轴电压到三相PWM,也是两步:

  1. 逆Park变换:两相旋转 → 两相静止(dq → αβ)
  2. 逆Clark变换 + SVPWM:两相静止 → 三相PWM

下面这张图把整个流程串起来了:

FOC坐标变换完整流程 三相电流 ia, ib, ic Clark变换 abc → αβ αβ电流 iα, iβ Park变换 αβ → dq dq电流 id, iq PI调节器 id*, iq* dq电压 Ud, Uq 逆Park变换 dq → αβ αβ电压 Uα, Uβ SVPWM αβ → PWM 三相PWM 驱动逆变器 θe 角度估算 说明:Park变换和逆Park变换都需要转子电角度 θe,无感FOC中通过观测器估算

4.7 代码实现示例

下面是一个C语言实现的Park变换和逆变换函数。我在实际项目中一直用这个模板,稍微改改就能移植到不同MCU上:

// Park变换:αβ → dq
void Park_Transform(float i_alpha, float i_beta, float theta,
                    float *i_d, float *i_q)
{
    float sin_theta = sinf(theta);
    float cos_theta = cosf(theta);

    *i_d = i_alpha * cos_theta + i_beta * sin_theta;
    *i_q = -i_alpha * sin_theta + i_beta * cos_theta;
}

// 逆Park变换:dq → αβ
void Inv_Park_Transform(float u_d, float u_q, float theta,
                        float *u_alpha, float *u_beta)
{
    float sin_theta = sinf(theta);
    float cos_theta = cosf(theta);

    *u_alpha = u_d * cos_theta - u_q * sin_theta;
    *u_beta = u_d * sin_theta + u_q * cos_theta;
}

注意:三角函数计算在低端MCU上比较耗时。如果CPU资源紧张,可以考虑用查表法或者CORDIC算法来加速。我曾经在一个STM32F103项目上,因为三角函数调用太频繁导致控制周期超时,后来改用查表法才解决问题。

4.8 常见误区

最后,我总结几个新手容易踩的坑:

  • 角度单位搞混:sin/cos函数通常要求弧度,但很多传感器输出的是角度。记得转换。
  • 电角度 vs 机械角度:极对数不为1时,一定要乘以极对数。
  • 角度更新不及时:Park变换和逆Park变换必须使用同一个角度值,否则会出现耦合。
  • 符号搞反:不同教材对dq轴的定义可能不同,导致公式符号有差异。选定一种约定后保持一致。