03Clarke 变换

abc 到 alpha-beta 的投影

本模块主旨
Clarke = 把 3 维冗余三相投影成 2 维 αβ 平面矢量(丢零序),并把"KCL 残差"留作免费故障鉴别器。

学完应能回答

查看完整 Walkthrough(9 步 + 4 误区)

总览
Clarke 变换 = 把"三个空间方向的标量"投影到"二维平面的矢量"。这是 FOC 用 PI 控两个直流量的几何前提。

零基础速入

类比
Clarke 变换就像把三个箭头**投影**到一面墙上。三相电流 Ia/Ib/Ic 是三个空间相差 120° 的矢量,它们的合力只有两个独立自由度(因为 Ia+Ib+Ic=0),所以画一个 X-Y 平面就够。Clarke 把"三个箭头"压缩成"X 轴的 Iα + Y 轴的 Iβ"两个数。
核心概念
"三相 → 两相静止" 的几何投影。三相平衡时只有 2 个自由度,用 αβ 表示更高效,也是 Park 变换前的必经一步。

为什么要学

第一手操作
右侧切到"手动 Ia/Ib/Ic",把 Ia 设 5、Ib 设 -5、Ic 设 0。看左侧 αβ 矢量端点跑到 (5, 5.77)。这是教科书例子:α=Ia=5,β=(Ia+2·Ib)/√3=(5−10)/1.732≈-2.89——咦不对?看你试出来对应的数。

学习目标

核心概念

公式

Clarke 变换(幅值不变)
Iα = Ia, Iβ = (Ia + 2·Ib) / √3

工程默认形式:Iα 直接等于 Ia,三相 → 二相只动用一次 sin 系数 1/√3。

零序分量
I0 = (Ia + Ib + Ic) / 3

平衡时 ≈ 0;明显偏离 → 排查 ADC 零点、缺相、相阻不一致。

矩阵形式
[Iα; Iβ; I0] = (1/3)·[2,−1,−1; 0,√3,−√3; 1,1,1]·[Ia; Ib; Ic]

功率不变形式还要除 √(2/3);嵌入式更常用幅值不变形式。

工程意义

STM32 移植指南

常见误区

  • 没减 ADC 偏置直接用原始电流。
  • 公式幅值不变 / 功率不变形式混用导致后续 PI 和 SVPWM 标定全错。
  • 两相采样重构 Ic 时符号写反(应该 Ic = -Ia - Ib,不是 +Ia + Ib)。

调试方法

建议实验

STM32 C 代码骨架

/* ============================================
 * clarke.h — Clarke 变换(幅值不变形式)
 * 编译器内联展开到 FOC 中断
 * ============================================ */
#define ONE_OVER_SQRT3   0.57735026919f

typedef struct {
    float alpha;
    float beta;
    float zero;     // I0 = (Ia+Ib+Ic)/3,零序,用作健康检查
} alpha_beta_t;

static inline alpha_beta_t clarke(float ia, float ib, float ic) {
    alpha_beta_t o;
    o.alpha = ia;
    o.beta  = (ia + 2.0f * ib) * ONE_OVER_SQRT3;
    o.zero  = (ia + ib + ic) * 0.33333333f;
    return o;
}

/* 两路 ADC 节省版:只用 Ia、Ib,重构 Ic = -Ia-Ib
 * 前提:三相星型且采样准、三相平衡 */
static inline alpha_beta_t clarke_2adc(float ia, float ib) {
    alpha_beta_t o;
    o.alpha = ia;
    o.beta  = (ia + 2.0f * ib) * ONE_OVER_SQRT3;
    o.zero  = 0.0f;     // 假设三相和=0
    return o;
}

/* 健康检查:在调试期定期跑,发现 ADC 偏置漂移 */
static inline int current_health_check(alpha_beta_t s) {
    return fabsf(s.zero) < 0.1f ? 1 : 0;
}

下一步

随堂题

Clarke 变换中 Iβ 的标准(幅值不变)公式是?
  1. Iβ = Ib
  2. Iβ = (Ia + 2·Ib) / √3 (正确)
  3. Iβ = Ic - Ib
  4. Iβ = (Ib - Ic) / √3
提示:幅值不变形式 Iα=Ia, Iβ=(Ia+2Ib)/√3。也有写成 (Ib-Ic)/√3 的等价形式(用 Ic=-Ia-Ib 替换可证)。
运行时观测到 I0 = 0.8A,电机额定 6A。最可能的原因?
  1. 正常现象
  2. ADC 三相零点未校准 / 缺相 / 相阻不平衡 (正确)
  3. PWM 频率太高
  4. Park 角度错
提示:平衡三相 I0 应远小于幅值(< 1%)。0.8A/6A=13% 是显著偏移,先校 ADC 偏置。
两路 ADC 节省方案 Ic=-Ia-Ib 的隐含前提是?
  1. 母线电压稳定
  2. 三相星型连接且 ADC 偏置已减 (正确)
  3. PWM 频率高
  4. 电机静止
提示:前提是 ia+ib+ic=0 严格成立——星型 + ADC 准确。三角形连接相电流和不为 0,方案不成立。
如果 Clarke 公式里 Iβ 的 √3 系数写成 √2,会发生什么?
  1. 没影响
  2. αβ 矢量幅值标定错,Park 算 Id/Iq 全部按比例偏 (正确)
  3. 电机不转
  4. ADC 报错
提示:√3 ≈ 1.732、√2 ≈ 1.414,差 18%。所有依赖 αβ 的下游(PI、限幅、SVPWM)会按这个比例偏掉。
功率不变 vs 幅值不变 Clarke,在 FOC 中混用最直接的后果是?
  1. 没差别
  2. PI 增益、电流限幅、SVPWM 调制比都按 √(2/3) 比例错 (正确)
  3. 电机抖动
  4. ADC 溢出
提示:功率不变多个 √(2/3) ≈ 0.8165 缩放因子。一旦混用,所有下游标定都按这个倍数偏离。

相关公式索引

Clarke 变换
Iα = Ia, Iβ = (Ia + 2Ib) / √3
Clarke q15 整数实现
Iβ = (Ia + 2·Ib) × 18919 >> 15 (18919 ≈ 32768/√3)