第3章:Clark变换——三相坐标系到两相静止坐标系
好,咱们进入FOC的第一个核心数学变换——Clark变换。
说实话,很多初学者一上来就被这三个坐标系搞晕了。什么三相、两相静止、两相旋转,听着就头大。但你别怕,Clark变换其实是最简单的一个。它就是把电机里那三根线的电流,投影到一个平面上来。
3.1 为什么要做Clark变换?
你想想看,电机里有三根相线——U、V、W。这三相电流是互差120°的正弦波。但问题是,我们控制电机时,更习惯用直角坐标系来思考。比如“我想让转子往东转”,这在直角坐标系里很好描述,但在三相坐标系里就很别扭。
Clark变换干的事,就是把三相电流(Ia, Ib, Ic)映射到两相静止坐标系(Iα, Iβ)上。说白了,就是坐标投影。
核心思想:三相电流在空间上合成一个旋转磁动势。这个磁动势可以用两个正交的轴(α轴和β轴)来描述。只要这两个轴上的电流合成效果和三相一样,那电机转起来就没区别。
3.2 数学推导——从三相到两相
咱们先看公式。假设三相电流为:
Ia = Im * cos(θ)
Ib = Im * cos(θ - 120°)
Ic = Im * cos(θ + 120°)
Clark变换的公式是:
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
等等,你是不是觉得奇怪?为什么Iα直接等于Ia?
嗯,这里有个约定俗成的做法。我们把α轴和A相轴对齐。这样Ia在α轴上的投影就是它本身。而β轴垂直于α轴,所以需要把Ib和Ic投影过来。
完整的推导过程是这样的:
- 三相电流在空间上互差120°,构成一个三相对称系统。
- 我们想要一个两相正交系统(α-β),使得合成磁动势相同。
- 根据磁动势等效原则,列出投影方程。
- 解方程得到变换矩阵。
最终的标准形式(等幅值变换)是:
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
或者写成矩阵形式:
[Iα] [ 1 -1/2 -1/2 ] [Ia]
[Iβ] = [ 0 √3/2 -√3/2 ] [Ib]
[Ic]
个人经验:我刚开始做FOC时,一直纠结用等幅值变换还是等功率变换。后来发现,在电流环里用等幅值变换更方便,因为电流采样值直接对应物理值。等功率变换多用于功率计算场景。你如果刚开始做,建议先用等幅值,不容易出错。
3.3 代码实现——C语言版
理论讲完了,咱们直接上代码。这是我在STM32上跑过的实现:
typedef struct {
float Ialpha;
float Ibeta;
} Clark_Output;
Clark_Output Clark_Transform(float Ia, float Ib, float Ic) {
Clark_Output out;
// 等幅值Clark变换
out.Ialpha = Ia;
out.Ibeta = (Ia + 2.0f * Ib) / 1.7320508f; // 1.7320508 = √3
return out;
}
你看,代码就这么几行。但有几个坑我得提醒你:
避坑指南:我曾经在一个项目里直接用float算除法,结果发现每次变换都有微小误差。后来改成查表法,把1/√3预先算好存成常量。虽然现在MCU算力强了,但做批量产品时,能省一点是一点。
如果你用的是带FPU的MCU(比如STM32F4系列),直接用浮点除法也没问题。但如果是M0内核,建议用定点数实现:
// 定点数版本,Q15格式
int16_t Ialpha_q15, Ibeta_q15;
int16_t Ia_q15, Ib_q15, Ic_q15;
Ialpha_q15 = Ia_q15;
// 注意:这里需要做饱和处理,防止溢出
Ibeta_q15 = (Ia_q15 + 2 * Ib_q15) * 18919 >> 15; // 18919 ≈ 32768/√3
3.4 实际项目中的注意事项
做Clark变换时,有几个细节你一定要注意:
- 电流采样顺序:我习惯先采U相和V相,W相通过Ia+Ib+Ic=0算出来。这样少用一个ADC通道,但要注意三相平衡时才能这么干。
- 零点漂移:ADC采样会有偏置。我一般在初始化时采100次取平均,把这个偏置减掉。不然Clark变换出来的Iα、Iβ会有直流分量,导致电机发热。
- 数值范围:变换后的Iα、Iβ最大值是Ia的1.15倍左右。做定点数时要留够裕量,不然会溢出。
核心总结:Clark变换就是把三相电流投影到两相静止坐标系。公式简单,但实现时要注意采样精度和数值范围。做好这一步,后面的Park变换才能准确。
3.5 验证方法
写完代码怎么验证?我教你一个土办法:
- 给Ia、Ib、Ic输入三相对称正弦波(比如Ia=1.0, Ib=-0.5, Ic=-0.5)。
- 看Iα是不是等于Ia,Iβ是不是等于0。
- 如果Iβ不为0,说明你的变换矩阵有问题。
这个方法我在调试时用了无数次,百试百灵。
好了,Clark变换就讲到这里。下一章咱们讲Park变换,把静止的α-β坐标系转到旋转的d-q坐标系。那才是FOC的精髓所在。