4. Park变换:两相静止坐标系到两相旋转坐标系

好,咱们接着往下走。上一章聊了 Clarke 变换,把三相 ABC 变到了两相静止的 αβ 坐标系。但问题来了——αβ 坐标系里的电流还是正弦波,你想想看,PI 控制器追正弦波,永远追不上,稳态误差是跑不掉的。

那怎么办?把正弦波变成直流。这就是 Park 变换要干的事。

Park 变换,说白了就是把 αβ 两相静止坐标系,旋转一下,变成跟转子磁极同步旋转的 dq 坐标系。这样一来,原本交变的电流分量,在 dq 坐标系里就变成了直流量。PI 控制器追直流量,那叫一个轻松。

核心思想:Park 变换的本质是「坐标旋转」。把静止的 αβ 轴系,旋转一个角度 θ(转子位置角),得到旋转的 dq 轴系。d 轴与转子磁极对齐,q 轴超前 d 轴 90°。

4.1 变换矩阵推导

推导其实不复杂。咱们从几何角度来理解。

假设 αβ 坐标系里有一个矢量,它在 α 轴上的分量为 Iα,在 β 轴上的分量为 Iβ。现在,我们把这个坐标系逆时针旋转 θ 角,得到 dq 坐标系。那么,这个矢量在 dq 坐标系下的分量 Id、Iq 是多少?

画个图就清楚了。我习惯用投影法来记:

  • d 轴分量:Iα 在 d 轴上的投影 + Iβ 在 d 轴上的投影
  • q 轴分量:Iα 在 q 轴上的投影 + Iβ 在 q 轴上的投影

写成数学表达式:

Id = Iα · cosθ + Iβ · sinθ
Iq = -Iα · sinθ + Iβ · cosθ

写成矩阵形式:

[ Id ]   [  cosθ   sinθ ] [ Iα ]
[ Iq ] = [ -sinθ   cosθ ] [ Iβ ]

这就是 Park 变换矩阵。记法有个小窍门:第一行是 cos 和 sin,第二行是 -sin 和 cos。我当年刚学的时候,老是搞混正负号,后来在项目里烧过一次 MOSFET 之后,就再也没记错过。

我的小技巧:如果你用的是等幅值变换(Clarke 变换系数为 2/3),那么 Park 变换矩阵不需要额外系数。如果你用的是等功率变换,Clarke 和 Park 的系数要统一处理。我个人习惯用等幅值变换,调试时看波形更直观。

4.2 反Park变换

有正变换,自然就有反变换。从 dq 回到 αβ,就是 Park 的逆变换。

因为 Park 变换矩阵是正交矩阵(行列式为 1),它的逆矩阵就是转置矩阵:

[ Iα ]   [  cosθ   -sinθ ] [ Id ]
[ Iβ ] = [  sinθ    cosθ ] [ Iq ]

反 Park 变换在 FOC 里用在哪儿?电压输出环节。PI 控制器算出来的是 dq 坐标系下的电压指令 Vd*、Vq*,但 SVPWM 模块要的是 αβ 坐标系下的电压。所以,必须先用反 Park 变换,把 Vd*、Vq* 变回 Vα*、Vβ*,才能喂给 SVPWM。

4.3 角度θ的重要性

嗯,这里要重点敲黑板。Park 变换里这个 θ,是整个 FOC 的灵魂。

θ 是转子磁极的位置角。它必须实时、准确地反映转子当前的位置。如果 θ 不准,会发生什么?

  • θ 偏差 5°:转矩输出会损失约 0.4%,还能转,但效率下降。
  • θ 偏差 30°:转矩损失约 13%,电机开始抖。
  • θ 偏差 90°:d 轴和 q 轴完全串扰,转矩输出几乎为零,电机可能直接堵转。

我曾经在一个伺服项目里,因为编码器安装时有个 0.5mm 的偏心,导致角度反馈有周期性误差。电机低速运行时,电流波形上出现了明显的 2 次谐波,转矩脉动大得离谱。查了三天,最后用示波器对比编码器 A/B 信号和反电动势过零点,才定位到问题。

避坑指南:千万不要以为角度误差「一点点没关系」。在 FOC 里,角度误差直接映射为电流的 dq 轴耦合。误差越大,你 PI 调得再好也没用。我曾经见过一个团队,花了两周调 PI 参数,电流纹波就是下不去,最后发现是编码器零位偏了 3°。换了个编码器,问题秒解。

4.4 角度获取方式

实际工程中,θ 怎么来?主要有三种方式:

方式 传感器/方法 精度 成本 适用场景
绝对式编码器 光电/磁编码器 高(12-20 bit) 高 伺服、机器人、高端数控
增量式编码器+初始定位 光电/磁编码器 中高 中 通用伺服、工业驱动
无传感器观测器 滑模观测器/磁链观测器 中(中高速较好) 低 风机、水泵、家电

我个人建议,能上编码器就上编码器。无传感器方案虽然省成本,但低速性能和带载能力差一截。除非你的应用对成本极度敏感,或者工作环境不允许装传感器(比如压缩机内部),否则别省这个钱。

4.5 Park变换在FOC中的位置

咱们把整个 FOC 的电流环串起来看看:

  1. 采样三相电流 IA、IB、IC
  2. Clarke 变换 → Iα、Iβ
  3. Park 变换 → Id、Iq(本章内容)
  4. Id、Iq 分别与给定值比较,经过 PI 控制器 → Vd*、Vq*
  5. 反 Park 变换 → Vα*、Vβ*
  6. SVPWM 调制 → 六路 PWM 驱动逆变器

你看,Park 变换处在电流环的「入口」位置。它把交流量变成了直流量,让 PI 控制器有了用武之地。没有 Park 变换,FOC 就无从谈起。

Park变换在FOC电流环中的位置 三相电流采样 Clarke变换 Park变换 PI控制器 反Park变换 SVPWM调制 逆变器 电机 角度 θ Park变换将αβ静止坐标系旋转到dq旋转坐标系,使交流量变为直流量 角度θ的精度直接影响FOC控制效果,是系统性能的关键

4.6 代码实现示例

最后,给一段 C 代码。这是我在 STM32F4 上实际跑过的 Park 变换实现:

typedef struct {
    float Id;   // d轴电流
    float Iq;   // q轴电流
} DQ_Current;

DQ_Current Park_Transform(float I_alpha, float I_beta, float theta)
{
    DQ_Current dq;
    float sin_theta = sinf(theta);
    float cos_theta = cosf(theta);

    dq.Id = I_alpha * cos_theta + I_beta * sin_theta;
    dq.Iq = -I_alpha * sin_theta + I_beta * cos_theta;

    return dq;
}

DQ_Current Inv_Park_Transform(float Vd, float Vq, float theta)
{
    DQ_Current ab;
    float sin_theta = sinf(theta);
    float cos_theta = cosf(theta);

    ab.Id = Vd * cos_theta - Vq * sin_theta;   // 这里复用结构体,实际是 V_alpha
    ab.Iq = Vd * sin_theta + Vq * cos_theta;   // 这里复用结构体,实际是 V_beta

    return ab;
}

工程建议:sinf 和 cosf 计算比较耗时。如果 MCU 没有硬件 FPU 或三角函数加速指令,建议用查表法或者 CORDIC 算法。我在一个低成本 MCU 项目里,用 256 点的 sin 表 + 线性插值,角度分辨率达到 1.4°,完全够用,计算时间从 12μs 降到了 1.5μs。