3. Clark变换:三相坐标系到两相静止坐标系

好,我们正式开始聊FOC的第一个数学变换——Clark变换。

很多初学者一上来就被αβ、dq绕晕了。其实没那么复杂。Clark变换说白了就是:把三相电机的三个物理量,投影到两个互相垂直的轴上去。

你想想看,电机里三个绕组相差120°,控制起来很麻烦。但如果我们能找到两个正交的轴,把三个量合并成两个,事情就简单多了。这就是Clark变换的初衷。

核心思想: 三相静止坐标系 (A, B, C) → 两相静止坐标系 (α, β)

变换后,α轴与A轴重合,β轴超前α轴90°。

3.1 数学推导:从三相到两相

我们先从数学上走一遍。假设三相电流为 iA、iB、iC,且满足 iA + iB + iC = 0(星形连接无中线)。

变换的核心是等幅值变换。我个人习惯用这种,因为后续PI调节器的参数整定更直观。公式如下:

iα = iA
iβ = (1/√3) * iA + (2/√3) * iB

等等,是不是觉得有点眼熟?其实就是把三相电流往αβ轴上做投影。

完整的矩阵形式是这样的:

| iα |   | 1      -1/2      -1/2   | | iA |
|    | = |                          | |    |
| iβ |   | 0    √3/2    -√3/2   | | iB |
                                   | iC |

嗯,这里要注意:如果电机是三角形接法,或者有中线,零序分量就不能忽略。不过大部分FOC应用都是星形无中线,所以这个公式够用了。

我的经验: 实际代码里,我一般不会直接用这个3x3矩阵。因为iC = -iA - iB,代入后可以化简成只有两路ADC采样的形式,省一个采样通道。

3.2 物理意义:投影与解耦

Clark变换的物理意义,我更喜欢用“投影”来理解。

你看,三相绕组在空间上相差120°,产生的磁动势是旋转的。但如果我们站在αβ坐标系里看,这个旋转磁动势可以被分解成两个正交的分量:

  • α轴分量:与A轴同向,代表磁场在水平方向的投影
  • β轴分量:与α轴垂直,代表磁场在垂直方向的投影

为什么要这么做?因为解耦。

三相之间互相耦合,控制一个相电流会影响另外两相。但变换到αβ后,两个轴是正交的,理论上互不影响。这就为后续的旋转坐标变换(Park变换)铺平了道路。

我曾经在一个项目里遇到过一个问题:电机低速运行时抖动厉害。查了半天,发现是Clark变换的系数用错了——用了等功率变换的系数,导致电流环增益不对。后来换成等幅值变换,问题就解决了。

避坑指南: 等幅值变换和等功率变换的系数不同。等幅值变换下,变换前后电流幅值不变;等功率变换下,变换前后功率不变。FOC里绝大多数都用等幅值变换,因为PI调节器参数更容易匹配。如果你用错了,电流环会莫名其妙地振荡。

3.3 代码实现:C语言实战

理论说完了,直接上代码。这是我实际项目中用过的Clark变换实现,经过多次优化,简洁且高效。

typedef struct {
    float alpha;  // α轴电流
    float beta;   // β轴电流
} Clark_Output;

Clark_Output Clark_Transform(float ia, float ib, float ic) {
    Clark_Output out;
    
    // 等幅值Clark变换
    out.alpha = ia;
    out.beta  = (ia + 2.0f * ib) * 0.577350269f;  // 1/√3 ≈ 0.57735
    
    return out;
}

你看,代码就这么几行。但有几个细节我要强调一下:

  1. 输入顺序:ia、ib、ic 必须对应实际的A、B、C相。接反了,电机转起来会抖。
  2. 系数计算:1/√3 我直接写成 0.577350269f,避免运行时除法,提高效率。
  3. 数据类型:嵌入式环境里,float 够用。如果MCU没有FPU,可以考虑用Q格式定点数,但精度会损失一点。

如果你只需要两路ADC采样(比如只采iA和iB),可以这样:

Clark_Output Clark_Transform_2Phase(float ia, float ib) {
    Clark_Output out;
    
    // 利用 iC = -iA - iB
    out.alpha = ia;
    out.beta  = (ia + 2.0f * ib) * 0.577350269f;
    
    return out;
}

嗯,这里要注意:如果ADC采样有偏置,或者电流传感器有零漂,变换后的αβ分量也会带直流偏置。我建议在Clark变换之前,先做一次软件滤波或者偏置校准。

3.4 知识体系图:Clark变换全景

下面这张图,是我自己总结的Clark变换知识结构。你可以把它当作一个快速索引。

Clark变换知识体系图 Clark变换知识体系 Clark变换 数学推导 物理意义 代码实现 矩阵形式 化简公式 投影分解 解耦控制 标准实现 两相采样 关键点:等幅值变换 vs 等功率变换 FOC中默认使用等幅值变换,PI参数更易整定

3.5 常见问题与避坑

问题 现象 原因 解决方案
变换后αβ分量有直流偏置 电机低速抖动,电流波形不对称 ADC采样偏置未校准 软件做偏置校准,或硬件加隔直电容
电机转向反了 给定正转指令,电机反转 Clark变换中相序接反 检查ia、ib、ic与实际相序对应关系
电流环振荡 高速时电流波形畸变 等幅值/等功率变换系数用错 统一使用等幅值变换系数

我曾经在一个量产项目里,因为ADC采样时序没对齐,导致Clark变换出来的αβ分量一直有毛刺。后来在采样完成后加了10μs的延时,问题就解决了。嗯,硬件上的小细节,往往会在软件里放大。

我的建议: 调试Clark变换时,先用直流母线电压模拟三相平衡信号(比如iA=1A, iB=-0.5A, iC=-0.5A),看变换后的αβ是否满足α=1, β=0。如果不对,先查系数,再查相序。

Clark变换是整个FOC的基石。这一步做扎实了,后面的Park变换和SVPWM才能站得住脚。别嫌它简单,我见过太多人在这个环节翻车了。