Clark变换:三相静止到两相静止的坐标变换

Clark变换,说白了就是把电机里那三根线的电流,转换到两相坐标系里。你想想看,三相电机有三根线,每根线都有电流,控制起来多麻烦。但如果我们能把它变成两相,事情就简单多了。

我记得刚入行那会儿,第一次看到Clark变换公式,觉得挺抽象的。后来在项目里调试电机,才真正体会到它的价值。今天我就把这块内容掰开揉碎了讲给你听。

为什么要做Clark变换?

三相电机里,电流是这么走的:

  • A相、B相、C相,三根线
  • 每根线的电流随时间变化
  • 三根线之间相差120度

这就像三个人在跳舞,步调不一样。你想想看,要同时控制三个人,多累啊。Clark变换就是把这「三个人」变成「两个人」,让控制变得简单。

核心思想:三相静止坐标系(ABC)→ 两相静止坐标系(αβ)

说白了,就是把三个变量变成两个变量,但信息不丢失。

变换的数学原理

我们先从物理角度理解。三相电流满足一个条件:

iA + iB + iC = 0

嗯,这里要注意,这是理想情况。实际电机里,因为绕组不对称或者传感器误差,这个和不一定为零。我在项目里就遇到过这个问题,后面会讲怎么处理。

既然三个电流的和为零,那其实只有两个是独立的。Clark变换就是利用这个特性,把三个变量映射到两个轴上:

  • α轴:与A相轴线重合
  • β轴:与α轴垂直,逆时针旋转90度

你想想看,这样就把三相的120度分布,变成了两相的90度正交分布。正交的好处是什么?控制起来互不影响,解耦了。

公式推导过程

我个人习惯从几何角度去理解。把三相电流看成空间矢量:

iA 在 A 相轴线上
iB 在 B 相轴线上(滞后A相120度)
iC 在 C 相轴线上(滞后A相240度)

现在我们要把它们投影到αβ轴上:

α轴分量:

iα = iA + iB·cos(120°) + iC·cos(240°)
   = iA - 1/2·iB - 1/2·iC

β轴分量:

iβ = 0 + iB·sin(120°) + iC·sin(240°)
   = 0 + √3/2·iB - √3/2·iC

写成矩阵形式就是:

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

我的经验:这个矩阵叫Clark变换矩阵。实际编程时,我建议先算好系数,不要每次都算cos和sin,省CPU资源。

等幅值变换 vs 等功率变换

这里有个坑,我当年踩过。Clark变换有两种形式:

变换类型 变换矩阵 特点
等幅值变换 系数为 2/3 变换前后电流幅值不变
等功率变换 系数为 √(2/3) 变换前后功率不变

我个人习惯用等幅值变换,因为调试时看电流波形更直观。但如果你做功率计算,就得用等功率变换。

避坑指南:我曾经在项目里混用了两种变换,结果算出来的扭矩完全不对。后来花了半天才找到原因。建议你在代码开头就定义好用哪种,全局统一。

代码实现示例

下面是我常用的C代码实现:

// Clark变换 - 等幅值变换
void clark_transform(float iA, float iB, float iC, 
                     float *iAlpha, float *iBeta) {
    // 系数预计算
    const float sqrt3_2 = 0.8660254f;  // √3/2
    
    *iAlpha = iA - 0.5f * iB - 0.5f * iC;
    *iBeta  = sqrt3_2 * iB - sqrt3_2 * iC;
    
    // 等幅值变换,乘以2/3
    *iAlpha *= 0.6666667f;
    *iBeta  *= 0.6666667f;
}

你看,代码其实很简单。但要注意浮点数精度问题,我建议用float就够了,double太慢。

逆Clark变换

有时候我们需要从αβ变回ABC,比如做电流重构。逆变换公式:

iA = iα
iB = -1/2·iα + √3/2·iβ
iC = -1/2·iα - √3/2·iβ

嗯,这里要注意,逆变换的前提是三相电流和为0。如果实际电流不满足这个条件,逆变换会出错。

实际应用场景:

  • 电流采样后,先做Clark变换
  • 然后做Park变换(下一章讲)
  • 在旋转坐标系下做PI控制
  • 再逆变换回去生成PWM

SVG流程图:Clark变换在FOC中的位置

FOC控制流程中的Clark变换 三相电流 iA, iB, iC Clark变换 ABC → αβ αβ电流 iα, iβ Park变换 αβ → dq PI控制 Clark变换是FOC的第一步,将三相电流转换为两相正交电流

实际项目中的注意事项

我在做电机驱动项目时,总结了几条经验:

  1. 采样同步:三相电流要同时采样,不能有延迟。我一般用定时器触发ADC,同时采集三路。
  2. 零点校准:电流传感器有零漂,要先校准。我习惯上电后先采一组数据做平均,作为零点。
  3. 数值范围:变换后的αβ电流范围会变化,要注意ADC和DAC的满量程匹配。

调试技巧:如果你发现电机转起来有抖动,先检查Clark变换的输出。用示波器看iα和iβ,应该是两个相差90度的正弦波。如果不是,说明采样或者变换有问题。

Clark变换看起来简单,但它是整个FOC的基础。基础打牢了,后面的Park变换、SVPWM才能做好。我个人建议你多动手推导几遍公式,再写代码验证一下,这样理解会更深刻。


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