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 变换的坐标系关系图
下面这张图展示了三个坐标系之间的转换关系,我建议你多看几遍,把每个节点的物理意义搞清楚。
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剩下的部分就是水到渠成的事了。