3. Clark变换:从三相静止坐标系到两相静止坐标系(αβ)的数学推导与物理意义

好,咱们进入FOC算法的第一个核心数学工具——Clark变换。

你可能会问:好好的三相电机,为什么要折腾到两相坐标系里去?

说白了,三相电机的数学模型太复杂了。三个绕组互相耦合,电流电压都是时变的,直接控制非常麻烦。我早年刚接触电机控制时,看着那堆微分方程就头疼。后来才明白,Clark变换就是一把「降维手术刀」——把三相系统砍成两相,保留全部信息,但计算量直接减半。

核心思想:三相静止坐标系(A-B-C)→ 两相静止坐标系(α-β),本质是等幅值或等功率的线性投影变换。

3.1 为什么要做Clark变换?

先看三相系统的痛点:

  • 耦合严重:A相电流变化会影响B、C相磁场
  • 变量冗余:三相对称系统里,iA + iB + iC = 0,实际上只有两个自由度
  • 控制复杂:PID调节器要同时处理三个互相影响的回路

Clark变换后,α-β轴完全解耦。α轴和β轴互相垂直,没有互感。你想想看,这就像把一个三脚凳简化成两脚支架——结构更简单,但稳定性一点没丢。

我在做伺服驱动器项目时,遇到过一个问题:三相电流采样噪声大,直接做PI控制,电机嗡嗡响。后来用Clark变换把电流投影到αβ坐标系,再做个低通滤波,效果立竿见影。为什么?因为αβ轴上的信号频率成分更干净,滤波更容易设计。

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

咱们从最直观的等幅值变换开始推导。假设三相电流为:

iA = Im · cos(ωt)
iB = Im · cos(ωt - 120°)
iC = Im · cos(ωt + 120°)

现在,我们要找到一组两相电流 iα 和 iβ,使得它们产生的合成磁动势与三相系统完全等效。

把三相绕组在空间上相差120°放置,两相绕组在空间上相差90°放置。磁动势等效的条件是:

N2 · iα = N3 · (iA · cos0° + iB · cos120° + iC · cos240°)
N2 · iβ = N3 · (iA · sin0° + iB · sin120° + iC · sin240°)

其中 N2 和 N3 分别是两相和三相绕组的有效匝数。整理后得到:

iα = (N3/N2) · [iA - (1/2)·iB - (1/2)·iC]
iβ = (N3/N2) · [0 + (√3/2)·iB - (√3/2)·iC]

这里有个关键选择:匝数比 N3/N2 取多少?

  • 等幅值变换:取 N3/N2 = 2/3,变换后电流幅值与变换前相同
  • 等功率变换:取 N3/N2 = √(2/3),变换前后功率不变

我的建议:工程上绝大多数场合用等幅值变换。因为电流环PI调节器的输出直接对应PWM占空比,等幅值变换让调试更直观。等功率变换多用于功率计算和效率分析。

3.3 Clark变换矩阵

写成矩阵形式,等幅值Clark变换为:

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

注意,我加了一行零序分量 i0。在三相三线制系统中,iA + iB + iC = 0,所以 i0 恒为0。但如果你做三相四线制系统(比如带中性线的逆变器),零序分量就不能忽略了。

逆变换同样重要,从αβ回到ABC:

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

3.4 物理意义:空间矢量的投影

Clark变换的物理本质是什么?

想象一下,三相电流在空间合成一个旋转的电流矢量。这个矢量以角速度 ω 旋转,幅值恒定。Clark变换就是把这个矢量投影到两个正交的坐标轴上。

α轴与A相轴线重合,β轴超前α轴90°。所以:

  • iα 反映的是合成矢量在A相方向上的分量
  • iβ 反映的是合成矢量在垂直于A相方向上的分量

我习惯把αβ坐标系想象成「观察窗口」——你不再关心三个绕组各自的电流,只关心合成磁动势的大小和方向。这为后续的Park变换(旋转坐标系变换)铺平了道路。

避坑指南:我曾经在一个项目里直接用ADC采样值做Clark变换,结果发现αβ电流波形畸变严重。排查了半天,原来是三相电流采样不同步——A相和B相之间差了几个微秒。记住:Clark变换要求三相采样值必须是同一时刻的快照,否则变换结果毫无意义。

3.5 代码实现:C语言版Clark变换

下面给出一段实际工程中用的代码。我习惯用Q格式定点数,避免浮点运算拖慢中断响应。

// 等幅值Clark变换,输入三相电流,输出αβ电流
// 使用Q15格式,1.0对应32768
void clark_transform(int16_t iA, int16_t iB, int16_t iC,
                     int16_t *iAlpha, int16_t *iBeta)
{
    // 系数:1/2 = 16384 (Q15), √3/2 = 28378 (Q15)
    const int16_t HALF = 16384;
    const int16_t SQRT3_2 = 28378;
    
    // iα = iA - (iB + iC)/2
    int32_t sumBC = (int32_t)iB + (int32_t)iC;
    *iAlpha = iA - (int16_t)((sumBC * HALF) >> 15);
    
    // iβ = (√3/2)*(iB - iC)
    int32_t diffBC = (int32_t)iB - (int32_t)iC;
    *iBeta = (int16_t)((diffBC * SQRT3_2) >> 15);
    
    // 注意:这里假设iA + iB + iC = 0,省略了零序分量计算
}

这段代码有几个工程细节:

  • 用32位中间变量防止溢出
  • 右移15位完成Q15乘法后的归一化
  • 利用 iA + iB + iC = 0 简化计算,少算一次乘法

3.6 知识体系总览

下面这张图帮你理清Clark变换在整个FOC中的位置:

Clark变换知识体系与FOC流程 Clark变换在FOC中的位置与作用 三相电流 iA, iB, iC Clark变换 三相→两相静止 等幅值/等功率 αβ电流 iα, iβ Park变换 αβ → dq旋转 关键说明 • Clark变换不改变信号的频率成分 • α轴与A相轴线重合,β轴超前90° • 零序分量i₀在三相对称系统中恒为0 • 变换矩阵可逆,信息无损失 Clark变换的本质:将三相耦合系统解耦为两相正交系统 为后续Park变换和PI控制提供线性、时不变的被控对象

3.7 常见问题与工程经验

问题 原因 解决方案
αβ电流波形有直流偏置 电流传感器零漂未校准 上电时采集零电流值做偏移补偿
αβ电流幅值不相等 三相采样增益不一致 用标准电阻校准每相采样通道
变换后噪声明显增大 ADC采样时间抖动 使用硬件触发同步采样,或软件插值对齐
零序分量不为零 三相电流采样不同步或传感器故障 检查采样时序,确认iA+iB+iC≈0

个人经验:调试Clark变换时,我习惯先用仿真器观察三相电流波形,确认它们互差120°且幅值相等。然后看αβ波形——理想情况下,iα 和 iβ 应该是幅值相同、相位差90°的正弦波。如果看到任何畸变,先别急着调PI参数,回头检查采样电路和变换代码。

嗯,Clark变换就讲到这里。它不复杂,但极其重要。你把它理解透了,后面的Park变换和SVPWM就水到渠成。