2. Clark变换与Park变换:三相静止坐标系到两相旋转坐标系的数学推导与物理意义

聊到FOC,绕不开的就是Clark和Park这两个变换。很多初学者一上来就被矩阵公式吓住了,觉得这东西好抽象。其实说白了,这两个变换就是给电机电流做「坐标搬家」——把麻烦的三相交流量,变成好控制的直流量。

我记得刚入行那会儿,带我的老工程师跟我说:「你先把Clark和Park吃透,FOC你就懂了一半。」当时我不信,后来踩了不少坑才明白,这话一点不夸张。

2.1 为什么非要从三相变两相?

先想想我们面对的是什么问题。电机三相绕组,通的是三相正弦电流。这三相电流互相差120°,在空间上合成一个旋转磁场。但问题是——三相耦合在一起,你动其中一相,另外两相也跟着变。想单独控制转矩?很难直接下手。

你想想看,直流电机为什么好控制?因为它的励磁和转矩是解耦的,一个控制磁场,一个控制电流,互不干扰。交流电机要是也能这么干就好了。

嗯,Clark和Park就是干这个的。它们把三相静止坐标系下的交流量,一步步变成两相旋转坐标系下的直流量。这样一来,交流电机就能像直流电机一样控制。

核心思想: 三相 → 两相静止 → 两相旋转。最终目的是让控制量变成常数,而不是随时间变化的正弦波。

2.2 Clark变换:三相静止 → 两相静止

Clark变换,也叫3s/2s变换。它把三相静止坐标系(a, b, c)投影到两相静止坐标系(α, β)上。

怎么投影?很简单。α轴和a轴对齐,β轴垂直于α轴。然后把三相电流在α、β轴上分别求和就行。

数学上长这样:

Iα = Ia
Iβ = (Ia + 2*Ib) / √3

等等,是不是少了Ic?其实没少。因为三相电流满足 Ia + Ib + Ic = 0,所以Ic可以由Ia和Ib算出来。实际做项目时,我们通常只采样两相电流,第三相靠这个关系推算。

写成矩阵形式更清楚:

| Iα |   | 1    -1/2   -1/2 | | Ia |
| Iβ | = | 0    √3/2  -√3/2| | Ib |
| 0  |   | 1/2   1/2    1/2 | | Ic |

最后一行是零序分量,在电机控制里通常用不到,直接忽略。

我的经验: 实际代码里,Clark变换我一般写成查表或者直接计算,不用矩阵库。因为公式固定,就几个乘加运算,自己写反而更高效、更可控。

2.3 Park变换:两相静止 → 两相旋转

Clark变换做完,我们得到了α、β轴上的两个正弦量。它们还是交流,不好直接做PID。这时候Park变换上场。

Park变换,也叫2s/2r变换。它把α、β坐标系旋转起来,旋转速度等于电机电角速度。旋转后的坐标系叫d、q轴。

数学公式:

Id = Iα * cos(θ) + Iβ * sin(θ)
Iq = -Iα * sin(θ) + Iβ * cos(θ)

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

为什么要这么做?因为当坐标系和转子同步旋转时,d轴电流产生的是励磁分量,q轴电流产生的是转矩分量。这两个量变成了直流量,用PI控制器就能轻松跟踪。

我曾经踩过的坑: 有一次调试,电机转起来电流波形看着没问题,但转矩就是出不来。查了半天,发现是Park变换里的角度θ搞反了符号。sin和cos的符号错了,d轴和q轴分量完全对调。从那以后,我每次写Park变换都会先画个坐标系确认方向。

2.4 物理意义:从「交流」到「直流」的魔法

这两个变换的物理意义,我用一个比喻来解释。

想象你站在路边看一辆行驶的汽车。你看到的是汽车在三维空间里的运动——这是三相静止坐标系。但如果你坐在汽车里,你看到的是汽车相对于你自己的运动——这是两相旋转坐标系。

Clark变换相当于把三维空间投影到二维平面。Park变换相当于你跳上汽车,和它一起运动。

在电机里,三相电流产生的旋转磁场,在d、q坐标系下看,就是一个静止的磁场。d轴控制磁场强弱,q轴控制转矩大小。完美解耦。

2.5 变换的逆过程

控制完d、q轴电压,还得变回三相电压去驱动电机。所以需要逆变换。

逆Park变换(2r/2s):

Vα = Vd * cos(θ) - Vq * sin(θ)
Vβ = Vd * sin(θ) + Vq * cos(θ)

逆Clark变换(2s/3s):

Va = Vα
Vb = -Vα/2 + √3/2 * Vβ
Vc = -Vα/2 - √3/2 * Vβ

整个FOC的电流环,就是 Clark → Park → PI控制 → 逆Park → 逆Clark → SVPWM 这么一条链路。

2.6 变换的坐标系关系图

下面这张图展示了三个坐标系之间的转换关系,我建议你多看几遍,把每个节点的物理意义搞清楚。

Clark与Park变换坐标系关系图 Clark与Park变换坐标系关系图 三相静止 (a, b, c) 两相静止 (α, β) 两相旋转 (d, q) Clark 3s/2s Park 2s/2r 逆Park 逆Clark 💡 说明: Clark变换:三相静止 → 两相静止(幅值不变或功率不变) Park变换:两相静止 → 两相旋转(需要转子角度θ参与) 物理意义: • 三相静止:实际电机绕组的物理电流,互相耦合 • 两相静止:解耦为两个正交分量,但仍为交流 • 两相旋转:与转子同步旋转,变为直流量,可独立控制励磁和转矩

2.7 两种变换的对比

对比项 Clark变换 Park变换
变换方向 三相静止 → 两相静止 两相静止 → 两相旋转
输入 Ia, Ib, Ic(三相电流) Iα, Iβ, θ(转子角度)
输出 Iα, Iβ Id, Iq
输出信号类型 正弦交流 直流(稳态时)
是否需要角度 不需要 需要转子电角度
主要作用 减少相数,简化计算 实现解耦,便于控制

2.8 实际项目中的注意事项

做项目时,有几个细节我建议你特别留意:

  • 幅值不变 vs 功率不变: Clark变换有两种系数选择。幅值不变系数是2/3,功率不变系数是√(2/3)。我习惯用幅值不变,因为电流采样值直接对应物理值,调试时更直观。
  • 角度对齐: Park变换用的θ必须是转子电角度,不是机械角度。极对数要乘上去。我见过有人直接拿编码器读数当θ用,结果电机乱转。
  • 浮点精度: 在MCU上做变换,sin/cos计算很费时间。我一般用查表法,256点或512点,精度够用。如果芯片有CORDIC硬件,那就直接用。
  • 零序分量: 大多数电机控制用不到零序分量,但如果你做的是开绕组电机或者容错控制,零序分量就不能忽略了。

我的调试习惯: 每次写完变换代码,我会先给电机通直流电,然后手动转转子,看Id、Iq的波形。如果Id、Iq在转子转动时变化很大,说明角度或者变换符号有问题。这个方法帮我抓出过好几次bug。

Clark和Park变换,说难不难,说简单也不简单。关键是理解它们背后的物理意义——把交流变直流,把耦合变解耦。搞懂了这两个变换,FOC剩下的部分就是水到渠成的事了。