3. 电机模型基础(二):Clark变换与Park变换

上一章我们把电机绕组的物理方程写出来了,但那是三相静止坐标系下的。说白了,三个变量互相耦合,控制起来很麻烦。我刚开始做FOC时,看着那三相互感的微分方程就头疼——你调一个参数,另外两相跟着变,根本没法解耦。

这一章要讲的Clark变换和Park变换,就是解决这个问题的。它们把三相交流量变成两相直流量,让控制变得像调直流电机一样简单。嗯,这里先给你一个整体框架:

核心思路:三相静止(ABC)→ 两相静止(αβ)→ 两相旋转(dq)。逆变换就是反过来走。

Clark & Park 变换流程 三相静止 ABC坐标系 两相静止 αβ坐标系 两相旋转 dq坐标系 逆Park dq → αβ 逆Clark αβ → ABC 变换目的 • 解耦三相耦合 • 交流变直流 • 简化PI控制器 • 实现磁场定向 • 提高动态响应

3.1 Clark变换:三相到两相静止

Clark变换的物理意义很直观——把三个互差120°的绕组,等效成两个互相垂直的绕组。你想想看,三相绕组产生的合成磁动势,其实可以用两相绕组来等效,只要保证合成磁动势一样就行。

我习惯用等幅值变换,因为这样变换后的电流幅值跟实际相电流幅值一致,调试时方便观察。数学表达式如下:

// Clark变换(等幅值)
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(星形连接无中线),所以可以简化成:iα = ia,iβ = (ia + 2*ib)/√3。少采一相电流,省一个ADC通道。

Clark变换的几何意义,就是把三相坐标系投影到αβ平面上。α轴跟A轴重合,β轴超前α轴90°。这样三相正弦波就变成了αβ轴上的两个正交正弦波——相位差90°,幅值不变。

3.2 Park变换:两相静止到两相旋转

Clark变换完了,信号还是交流的。要把它变成直流,就得用Park变换。Park变换的核心是——让坐标系跟着转子转。

我记得第一次调FOC时,没搞懂Park变换的物理含义,直接把αβ信号送进PI控制器,结果电流根本稳不住。后来才明白:PI控制器对直流信号效果最好,对交流信号会有稳态误差。

Park变换的公式:

// Park变换
id =  iα * cos(θ) + iβ * sin(θ)
iq = -iα * sin(θ) + iβ * cos(θ)

// 矩阵形式
| id |   |  cos(θ)   sin(θ) | | iα |
| iq | = | -sin(θ)   cos(θ) | | iβ |

这里的θ是转子电角度,由编码器或霍尔传感器提供。变换之后,id和iq就变成了直流量——id对应励磁分量,iq对应转矩分量。这就是FOC能独立控制磁通和转矩的根本原因。

关键理解:Park变换的本质是坐标旋转。你把αβ坐标系旋转到跟转子磁场同步,看到的电流就是直流。这就像你坐在旋转木马上看旁边的马——相对静止。

3.3 逆变换

控制算法算出来的是dq轴电压指令,但最终要加到电机三相绕组上。所以得把dq电压变回三相电压。这就是逆变换。

逆Park变换(dq → αβ):

// 逆Park变换
vα = vd * cos(θ) - vq * sin(θ)
vβ = vd * sin(θ) + vq * cos(θ)

逆Clark变换(αβ → ABC):

// 逆Clark变换(等幅值)
va = vα
vb = -vα/2 + √3/2 * vβ
vc = -vα/2 - √3/2 * vβ

我曾经踩过的坑:逆变换时角度θ必须跟正变换时完全一致。有一次我用了电角度和机械角度混在一起,结果电流波形全乱了。记住:Park变换和逆Park变换必须用同一个θ,而且单位要统一(电角度)。

3.4 变换的物理意义总结

我把这三个变换的物理意义整理成了一张表,方便你对照理解:

变换名称 从 → 到 物理意义 输出信号特征
Clark变换 ABC → αβ 三相绕组等效为两相正交绕组 两个正交正弦波(交流)
Park变换 αβ → dq 坐标系旋转到与转子同步 两个直流量(直流)
逆Park变换 dq → αβ 旋转坐标系回到静止坐标系 两个正交正弦波(交流)
逆Clark变换 αβ → ABC 两相绕组等效为三相绕组 三个互差120°的正弦波

你可能会问:为什么要绕这么大一圈?直接控制三相不行吗?

我刚开始也有这个疑问。后来在项目里调试电流环时发现:三相控制需要三个PI控制器,而且互相耦合,调一个另外两个就飘。用了Clark+Park变换后,只需要两个PI控制器(id和iq),而且完全解耦——调iq只影响转矩,调id只影响磁通。这体验,谁用谁知道。

实用建议:代码实现时,建议把Clark和Park变换写成独立的函数。我习惯把角度处理单独拎出来,因为角度计算(尤其是用观测器时)容易出bug,独立出来方便调试。