03Clarke 变换
abc 到 alpha-beta 的投影
本模块主旨
Clarke = 把 3 维冗余三相投影成 2 维 αβ 平面矢量(丢零序),并把"KCL 残差"留作免费故障鉴别器。学完应能回答
- 能口算 Iα = Ia 和 Iβ = (Ia + 2·Ib)/√3,知道这就是"幅值不变"形式 (TI / ST FOC SDK 缺省)
- 能解释三相和 = 0 为什么是星型连接的几何约束、为什么三相三线电机 I0 物理上无回路
- 能区分"幅值不变 (αβ 直读相电流)"与"功率不变 (Vd·Id+Vq·Iq=P)"两种 Clarke 的工程后果
- 看到 |I0| / |Iαβ| > 5% 就能 30 秒鉴别:ADC 偏置 / 缺相 / 相阻不平衡 / 三角接错型
- 理解为什么 Clarke 输出 αβ "跟着时间转"——它仍然是 AC,Park 才把 AC 变 DC
- 会写 STM32 上 Clarke q15 整数版(避免 /√3 浮点除法,用 18919 / 32768 ≈ 0.57735 乘加)
总览
Clarke 变换 = 把"三个空间方向的标量"投影到"二维平面的矢量"。这是 FOC 用 PI 控两个直流量的几何前提。零基础速入
类比
Clarke 变换就像把三个箭头**投影**到一面墙上。三相电流 Ia/Ib/Ic 是三个空间相差 120° 的矢量,它们的合力只有两个独立自由度(因为 Ia+Ib+Ic=0),所以画一个 X-Y 平面就够。Clarke 把"三个箭头"压缩成"X 轴的 Iα + Y 轴的 Iβ"两个数。核心概念
"三相 → 两相静止" 的几何投影。三相平衡时只有 2 个自由度,用 αβ 表示更高效,也是 Park 变换前的必经一步。为什么要学
- Clarke 是 FOC 链路第一步坐标变换:ADC 三相 → Clarke → Park → PI → 反 Park → SVPWM。
- I0(零序分量)= (Ia+Ib+Ic)/3 是测量三相不平衡和 ADC 偏置的"健康指标"。
- 懂了 Clarke 就懂了"为什么 SVPWM 在 αβ 平面上画六边形"——它们坐标系一样。
第一手操作
右侧切到"手动 Ia/Ib/Ic",把 Ia 设 5、Ib 设 -5、Ic 设 0。看左侧 αβ 矢量端点跑到 (5, 5.77)。这是教科书例子:α=Ia=5,β=(Ia+2·Ib)/√3=(5−10)/1.732≈-2.89——咦不对?看你试出来对应的数。学习目标
- 理解 abc 三相坐标到 αβ 静止坐标的投影
- 掌握零序分量的意义
- 识别三相不平衡时 αβ 矢量的变化
核心概念
- Clarke 变换把三个相电流投影到两个互相垂直的静止轴上。平衡三相只有两个自由度,所以二维就够。
- 零序 I0 是三相共同偏移,三相三线电机里通常不能形成有效转矩,但能暴露采样偏置或不平衡。
公式
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);嵌入式更常用幅值不变形式。
工程意义
- Clarke 是 FOC 的入口。ADC 三相电流先过 Clarke,后面才有 Park 和电流环。
- 两电阻采样常用 Ic = -Ia - Ib 重构第三相,省一路 ADC,但前提是 ADC 偏置校准过且三相和为零的假设成立。
STM32 移植指南
- ADC 校准记录三相零电流偏置,运行时先减偏置再 Clarke。
- 用 static inline 实现 Clarke 函数,编译器把它直接展开到 FOC 中断,无额外开销。
- 常量 1/√3 ≈ 0.5773502692f 预先算好作为 const,避免运行时 sqrt。
常见误区
- 没减 ADC 偏置直接用原始电流。
- 公式幅值不变 / 功率不变形式混用导致后续 PI 和 SVPWM 标定全错。
- 两相采样重构 Ic 时符号写反(应该 Ic = -Ia - Ib,不是 +Ia + Ib)。
调试方法
- 空载静止时 Iα、Iβ、I0 都应接近 0;偏移就是 ADC 偏置没校准。
- 开环 V/f 正弦运行时,αβ 端点应画规则圆;变椭圆 → 三相不平衡或采样标定不一致。
- 把 Ia 设 +5 / Ib -2.5 / Ic -2.5(教科书例),应得 Iα=+5, Iβ=0, I0=0。
建议实验
- 切换"手动 Ia/Ib/Ic",故意让三相和不为 0,看 I0 偏离。
- 平衡 5A / 0° 相位 → αβ 矢量在 α 轴正方向;相位 90° → β 轴正方向。
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;
}下一步
- 进入 Park 变换,让 αβ 平面"跟着转子一起转",把交流量变成 dq 直流量。
随堂题
Clarke 变换中 Iβ 的标准(幅值不变)公式是?
- Iβ = Ib
- Iβ = (Ia + 2·Ib) / √3 (正确)
- Iβ = Ic - Ib
- Iβ = (Ib - Ic) / √3
提示:幅值不变形式 Iα=Ia, Iβ=(Ia+2Ib)/√3。也有写成 (Ib-Ic)/√3 的等价形式(用 Ic=-Ia-Ib 替换可证)。
运行时观测到 I0 = 0.8A,电机额定 6A。最可能的原因?
- 正常现象
- ADC 三相零点未校准 / 缺相 / 相阻不平衡 (正确)
- PWM 频率太高
- Park 角度错
提示:平衡三相 I0 应远小于幅值(< 1%)。0.8A/6A=13% 是显著偏移,先校 ADC 偏置。
两路 ADC 节省方案 Ic=-Ia-Ib 的隐含前提是?
- 母线电压稳定
- 三相星型连接且 ADC 偏置已减 (正确)
- PWM 频率高
- 电机静止
提示:前提是 ia+ib+ic=0 严格成立——星型 + ADC 准确。三角形连接相电流和不为 0,方案不成立。
如果 Clarke 公式里 Iβ 的 √3 系数写成 √2,会发生什么?
- 没影响
- αβ 矢量幅值标定错,Park 算 Id/Iq 全部按比例偏 (正确)
- 电机不转
- ADC 报错
提示:√3 ≈ 1.732、√2 ≈ 1.414,差 18%。所有依赖 αβ 的下游(PI、限幅、SVPWM)会按这个比例偏掉。
功率不变 vs 幅值不变 Clarke,在 FOC 中混用最直接的后果是?
- 没差别
- PI 增益、电流限幅、SVPWM 调制比都按 √(2/3) 比例错 (正确)
- 电机抖动
- ADC 溢出
提示:功率不变多个 √(2/3) ≈ 0.8165 缩放因子。一旦混用,所有下游标定都按这个倍数偏离。
相关公式索引
Clarke 变换
Iα = Ia, Iβ = (Ia + 2Ib) / √3
Clarke q15 整数实现
Iβ = (Ia + 2·Ib) × 18919 >> 15 (18919 ≈ 32768/√3)