3、Clark变换:三相坐标系到两相静止坐标系变换、数学推导与代码实现

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

你想想看,电机里三相电流是互差120°的正弦波,控制起来很麻烦。我早年刚接触FOC时,看着三相电流波形就头疼,三个变量互相耦合,PID根本没法调。后来才明白,Clark变换就是干这个的——把三个缠在一起的变量,简化成两个互相垂直的变量。

说白了,就是把三相坐标系(a, b, c)映射到两相静止坐标系(α, β)上。α轴和a轴重合,β轴超前α轴90°。这样一来,三个变量变成两个,控制难度直接降了一个维度。

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

我们先看数学形式。假设三相电流分别为 ia、ib、ic,且满足 ia + ib + ic = 0(电机绕组星形连接时成立)。

Clark变换的公式很简单:

iα = i_a
iβ = (1/√3) * (i_a + 2*i_b)

嗯,这里要注意,有些教材里系数是 2/3,有些是 √(2/3)。我个人习惯用等幅值变换,也就是系数取 2/3 的版本。为什么?因为这样变换后,α-β 坐标系下的电流幅值和三相电流幅值相等,调试时更直观。

等幅值变换的完整公式是:

iα = (2/3) * (i_a - 0.5*i_b - 0.5*i_c)
iβ = (2/3) * ( (√3/2)*i_b - (√3/2)*i_c )

利用 ia + ib + ic = 0 化简后,就得到:

iα = i_a
iβ = (1/√3) * (i_a + 2*i_b)

我在项目中遇到过一个问题:如果电流采样有直流偏置,Clark变换后α-β轴会出现奇怪的直流分量。后来排查发现是ADC采样没做校准。所以,做变换前一定要确保三相电流之和为零,否则变换结果会失真。

核心要点:

  • Clark变换是线性变换,本质是坐标旋转
  • 等幅值变换(系数2/3)更常用,便于后续PI参数整定
  • 变换前提:三相电流平衡,即 ia + ib + ic = 0

3.2 代码实现:C语言实战

理论讲完了,咱们直接上代码。我习惯把Clark变换封装成一个函数,输入三相电流,输出α-β轴电流。这样主循环里调用起来很干净。

// Clark变换结构体定义
typedef struct {
    float i_a;   // A相电流
    float i_b;   // B相电流
    float i_c;   // C相电流
} t_abc_current;

typedef struct {
    float i_alpha;  // α轴电流
    float i_beta;   // β轴电流
} t_alpha_beta_current;

// Clark变换函数(等幅值变换)
t_alpha_beta_current clark_transform(t_abc_current abc) {
    t_alpha_beta_current ab;
    
    // 计算α轴分量
    ab.i_alpha = abc.i_a;
    
    // 计算β轴分量(利用三相平衡化简)
    ab.i_beta = (1.0f / 1.7320508f) * (abc.i_a + 2.0f * abc.i_b);
    
    return ab;
}

你可能会问:为什么只用了 ia 和 ib,没用 ic?因为三相平衡时,ic = -ia - ib,所以用两个电流就能算出全部信息。实际项目中,我通常只采样两相电流,第三相通过计算得到,省一个ADC通道。

我的小技巧:

1/√3 这个常数,我建议直接预计算成 0.57735027,避免每次运算都做除法。在STM32这类MCU上,浮点除法比乘法慢不少。

3.3 避坑指南:我踩过的三个坑

Clark变换看起来简单,但实际用起来有几个容易翻车的地方。我一个个说。

  1. 电流采样顺序搞反:我曾经在调试时,把A相和B相的ADC通道接反了,结果Clark变换后的α-β波形完全不对,电机嗡嗡响不转。查了半天才发现是硬件接线问题。所以,建议先用手动给定一个直流电流,验证变换结果是否正确。
  2. 浮点精度问题:在低端MCU上,float运算可能不够快。我试过用定点数实现Clark变换,但后来发现,只要MCU带FPU(比如STM32F4以上),直接用float完全没问题。如果实在要用定点,注意保留足够的小数位。
  3. 变换系数不一致:不同文献用的系数不一样。我建议团队内部统一用等幅值变换(2/3系数),否则后续Park变换和SVPWM的系数都要跟着改,容易乱套。

重要提醒:

Clark变换只是第一步,它把三相电流变成了两相静止坐标系下的正弦波。要想实现无感FOC,还需要Park变换把正弦波变成直流量,这样才能用PI控制器无静差跟踪。下一章咱们就聊Park变换。

3.4 小结

Clark变换是整个FOC算法的基石。它把三个耦合的变量简化为两个正交变量,为后续的旋转坐标变换铺平了道路。

我个人觉得,理解Clark变换的关键不在于背公式,而在于理解它背后的物理意义——把三相绕组的空间分布,映射到两相正交坐标系上。你想想看,电机内部磁场本来就是旋转的,用两相坐标系来描述,其实更符合物理本质。

好了,这一章就到这里。下一章我们讲Park变换,把静止的α-β坐标系转到旋转的d-q坐标系,到时候你就能看到电流变成直流量了,那才是FOC真正发力的地方。


公众号:蓝海资料掘金营,微信deep3321