坐标变换理论(上):Clark与Park变换

坐标变换,说白了就是换个角度看问题。你想想看,电机里三个绕组通的是三相正弦电流,转子却在转。我们做控制的,总不能盯着三个正弦波去算吧?太累了。所以就有了Clark和Park这两位老兄的变换,把问题从静止的三相坐标系,搬到了旋转的两相坐标系里。

我个人习惯把坐标变换比作「翻译官」。它把电机里复杂的电磁关系,翻译成我们控制器能轻松处理的直流信号。嗯,今天我们就来好好聊聊这两位翻译官。

核心思想: 将三相静止坐标系(ABC)下的交流量,变换到两相旋转坐标系(dq)下的直流量,从而简化控制。

1. Clark变换:从ABC到αβ

Clark变换,也叫3/2变换。它的任务是把三相静止的ABC坐标系,映射到两相静止的αβ坐标系上。α轴和A轴重合,β轴超前α轴90度。

为什么要这么做?因为三相系统有冗余。你想想看,Ia + Ib + Ic = 0(星形连接且无中线),实际上只有两个自由度。Clark变换就是去掉这个冗余,把三个变量变成两个。

1.1 等幅值变换 vs 等功率变换

这里有个坑,我刚开始学的时候也迷糊过。Clark变换有两种形式:等幅值变换和等功率变换。区别在于变换矩阵前面的系数。

变换类型 变换矩阵(前两行) 特点
等幅值 系数 = 2/3 变换后αβ电压幅值与ABC相电压幅值相等
等功率 系数 = √(2/3) 变换前后功率守恒,常用于功率计算
我的建议: 做FOC控制,绝大多数芯片厂商的库都用等幅值变换。因为PI调节器的输出直接对应电压幅值,物理意义更直观。我个人也一直用等幅值,省心。

1.2 公式推导

我们直接看等幅值变换的公式。假设三相电流为 Ia, Ib, Ic,那么αβ轴电流为:

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

等等,这个公式看着有点奇怪?其实它是从矩阵形式简化来的。完整的矩阵形式是这样的:

[ Iα ]   [ 1,    -1/2,   -1/2 ] [ Ia ]
[    ] = [                     ] [    ]
[ Iβ ]   [ 0,   √3/2,  -√3/2 ] [ Ib ]
                               [ Ic ]

因为 Ia + Ib + Ic = 0,所以 Ic = -Ia - Ib,代入化简就能得到上面的简化公式。我在项目里写代码时,为了省一个ADC采样通道(不采Ic),就用这个简化公式,效果完全一样。

2. Park变换:从αβ到dq

Clark变换完了,我们得到了两个正交的正弦波(Iα, Iβ)。但正弦波还是交流量,PI调节器对交流量的跟踪效果并不好,存在稳态误差。怎么办?

Park变换就是来解决这个问题的。它把静止的αβ坐标系,旋转起来,变成与转子磁链同步旋转的dq坐标系。这样一来,基波分量就变成了直流量。

2.1 旋转的数学本质

Park变换本质上是一个旋转矩阵。假设转子位置角为θ(电角度),那么:

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

你看,Id和Iq就是直流量了。Id代表励磁分量,Iq代表转矩分量。这就是FOC能像控制直流电机一样控制永磁同步电机的关键。

注意: θ必须是转子磁链的位置角,而不是转子机械角度。对于表贴式永磁同步电机(SPMSM),磁链位置与转子位置一致;但对于内置式(IPMSM),需要考虑磁饱和等因素。我曾经在一个项目里直接用编码器的机械角度做Park变换,结果电机抖得像筛子,查了两天才发现是角度没乘以极对数。

3. 反Park变换:从dq回到αβ

反Park变换,顾名思义,就是Park变换的逆过程。我们在dq坐标系下算出了想要的电压指令 Ud, Uq,但最终要给电机施加的是三相电压。所以需要先反Park到αβ,再反Clark到ABC。

公式很简单,就是Park变换矩阵的逆(因为旋转矩阵是正交矩阵,逆等于转置):

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

嗯,这里要注意符号。不同教材对Park变换的定义可能差一个负号,导致反Park的符号也不同。我的经验是:以电机能正常转动为准,如果发现电机反转或者电流失控,先检查Park/反Park的符号是否一致。

4. 知识体系总览

下面这张图,我把整个坐标变换的流程和关系画出来了。你对照着看,思路会更清晰。

FOC坐标变换流程 FOC坐标变换流程 三相静止 ABC 两相静止 αβ 两相旋转 dq Clark变换 3/2变换 Park变换 乘以旋转矩阵 反Park变换 乘以逆旋转矩阵 反Clark变换 2/3变换 说明: • 电流采样后:ABC → Clark → Park → dq(用于PI调节) • 电压输出前:dq → 反Park → 反Clark → ABC(用于SVPWM调制) 转子位置 θ

5. 避坑指南与个人经验

  • 角度对齐: 编码器安装时,Z脉冲与A相绕组的对齐方式,决定了θ的零点。我建议上电后先做一次角度自校准,否则Park变换出来的Id/Iq全是乱的。
  • 浮点精度: 在MCU里做三角函数运算,如果不开FPU,速度会很慢。我一般用查表法或者CORDIC算法,或者直接用IQmath库。
  • 符号一致性: 不同论文对Park变换的定义,Id和Iq的公式可能差一个负号。我的做法是:先按一种定义写好,然后给电机一个正方向的q轴电流,看电机是否正转。如果反转,就把Iq取反,或者把Park变换的符号改一下。
  • 反Park的陷阱: 反Park变换输出的Uα, Uβ,最终要经过SVPWM生成占空比。如果Uα, Uβ的幅值超过了直流母线电压的1/√3倍,就会过调制。我一般会在反Park之后加一个限幅,防止SVPWM饱和。
调试小技巧: 在代码里把Clark变换后的Iα, Iβ,以及Park变换后的Id, Iq,通过DAC或者串口打印出来。如果电机空转时Id接近0,Iq跟随转矩指令,说明坐标变换写对了。如果Id和Iq还在振荡,那大概率是角度θ不对,或者变换矩阵的符号错了。