4. Clark变换

Clark变换是FOC矢量控制的第一道数学桥梁,它将三相静止坐标系(abc)中的电流或电压矢量,映射到两相静止坐标系(αβ)中。这一变换的核心价值在于:将原本互差120°、随时间正弦变化的三相分量,转化为两个正交且便于后续Park变换(旋转坐标变换)处理的时变分量。理解Clark变换,必须首先厘清两种最常用的归一化形式——等幅值变换与等功率变换,因为它们的矩阵系数不同,直接决定了后续PI控制器参数整定、SVPWM扇区判断以及功率计算的一致性。本节将从数学推导、矩阵形式、物理意义和代码实现四个维度,彻底拆解这一基础环节。

Clark变换:从abc三相到αβ两相静止坐标系 三相静止坐标系 ia, ib, ic 互差120° 正弦 ia+ib+ic=0 (无中线) Clark变换矩阵 等幅值: K = 2/3 等功率: K = √(2/3) 零轴分量 i0 = K·(ia+ib+ic)/2 两相静止坐标系 iα, iβ 正交 90° 仍为交流时变信号 物理意义与关键点 • 等幅值变换:变换前后电流矢量幅值不变,便于SVPWM直接使用幅值比较,逆变器调制比直观。 • 等功率变换:变换前后功率守恒,适用于功率计算与效率分析,但幅值变为原来的 √(3/2) 倍。 • 零轴分量:三相不平衡时 i0 ≠ 0,需单独处理;平衡系统中 i0 = 0,可忽略。 • 变换矩阵可逆,逆变换用于从αβ重构abc,是SVPWM输出相电压的基础。

核心原理:从三相耦合到两相正交的数学本质

三相交流电机的定子绕组在空间上互差120°电角度,通入对称三相正弦电流后,产生圆形旋转磁场。然而,直接对三相分量进行控制非常困难,因为每一相电流都与其他两相存在耦合关系。Clark变换的数学本质,是利用线性代数中的基变换思想,将三维向量空间中的一组基(abc轴)映射到另一组基(αβ轴)上。由于三相绕组在空间上对称,且无中线时满足 ia + ib + ic = 0,因此实际只有两个独立变量,变换后恰好对应两个正交分量 iα 和 iβ。

设三相电流瞬时值为 ia、ib、ic,变换矩阵的一般形式为:

[ iα ]   [ 1   -1/2   -1/2 ] [ ia ]
[ iβ ] = K · [ 0   √3/2  -√3/2 ] [ ib ]
[ i0 ]   [ 1/2  1/2    1/2  ] [ ic ]

其中 K 为归一化系数。当 K = 2/3 时,称为等幅值变换;当 K = √(2/3) 时,称为等功率变换。两种变换的矩阵结构完全相同,仅系数不同。等幅值变换的物理含义是:变换后合成矢量(iα + j·iβ)的幅值等于三相电流合成矢量的幅值,这对于SVPWM的调制比计算非常友好。等功率变换则保证变换前后功率(电压与电流乘积的积分)不变,适用于需要精确计算电磁转矩或系统功率的场合。

关键理解:两种变换没有优劣之分,只有适用场景的差异。在FOC控制中,如果使用等幅值变换,则Park变换后的 dq 轴电流幅值即为实际相电流峰值;若使用等功率变换,则 dq 轴电流幅值会放大 √(3/2) 倍,PI控制器的比例和积分系数需要相应调整。工程上,ST、TI 等主流MCU的电机库默认采用等幅值变换,因为其与SVPWM的电压利用率计算衔接更自然。

判断方法:如何根据应用场景选择变换形式

在实际工程中,选择等幅值还是等功率变换,需要根据系统设计目标来判断。以下给出三条核心判断准则:

  • 准则一:看后续环节是否涉及功率/转矩计算。如果系统需要精确计算电磁功率、效率或进行损耗分析,必须使用等功率变换,否则功率计算会引入固定比例误差。例如,在电动汽车电驱系统中,整车控制器需要精确的功率数据来估算续航,此时应选择等功率变换。
  • 准则二:看SVPWM调制策略的接口要求。如果SVPWM直接使用 αβ 轴电压幅值进行扇区判断和矢量作用时间计算,等幅值变换更直观。因为等幅值变换下,逆变器输出线电压峰值与直流母线电压的关系为 Udc/√3,而相电压幅值最大为 Udc/√3,调制比 m = Uref / (Udc/√3) 直接反映电压利用率。
  • 准则三:看PI控制器参数整定的一致性。若电流环PI控制器基于幅值误差进行调节,等幅值变换下电流反馈值与实际相电流峰值一致,PI参数物理意义明确;等功率变换下反馈值放大,需要将PI增益除以 √(3/2) 才能获得相同的闭环带宽。

此外,还需要注意零轴分量 i0 的处理。在三相三线制系统中,由于没有中线,ia + ib + ic = 0 恒成立,因此 i0 始终为0,可以忽略。但在三相四线制系统或存在零序电流的故障工况下,i0 不为0,需要单独处理,否则会引入控制误差。

案例拆解:基于STM32的Clark变换代码实现与验证

下面以一个典型的FOC电流环采样为例,展示等幅值Clark变换的代码实现与验证过程。假设电机额定电流为5A,使用两个电流传感器分别采样 A 相和 B 相电流,C 相电流通过基尔霍夫定律计算得到。

背景与约束:MCU为STM32G474,ADC采样精度12位,参考电压3.3V,电流传感器采用0.5Ω采样电阻+差分放大器,放大倍数20倍,即每安培对应 20×0.5 = 10V/V,但受限于3.3V供电,最大可测电流为 3.3V / (0.5Ω×20) = 0.33A,显然不满足5A量程。因此实际采用电流互感器(变比1:100)配合采样电阻,将5A电流转换为0.05A次级电流,再通过10Ω电阻得到0.5V电压,经放大6.6倍后得到3.3V满量程。

关键输入数据:ADC采样值 adc_a = 2048(对应1.65V,即0A偏置),adc_b = 2560(对应2.06V,即0.5A)。电流计算公式:I = (V_adc - V_offset) / (R_sense × Gain × Turns_ratio)。经计算,ia = 0.5A,ib = 0.25A,ic = -(ia+ib) = -0.75A。

代码实现(等幅值变换):

// 定义变换系数,等幅值 K = 2/3
#define K_CLARK 0.6666667f

typedef struct {
    float i_alpha;
    float i_beta;
    float i_zero;
} Clark_Output;

Clark_Output clark_transform(float ia, float ib, float ic) {
    Clark_Output out;
    // 矩阵运算:iα = K * (ia - 0.5*ib - 0.5*ic)
    out.i_alpha = K_CLARK * (ia - 0.5f * ib - 0.5f * ic);
    // iβ = K * (√3/2 * ib - √3/2 * ic)
    out.i_beta  = K_CLARK * (0.8660254f * ib - 0.8660254f * ic);
    // i0 = K * (0.5*ia + 0.5*ib + 0.5*ic)
    out.i_zero  = K_CLARK * (0.5f * ia + 0.5f * ib + 0.5f * ic);
    return out;
}

// 主循环中调用
float ia = 0.5f, ib = 0.25f, ic = -0.75f;
Clark_Output clk = clark_transform(ia, ib, ic);
// 结果: i_alpha = 0.6667*(0.5 - 0.125 + 0.375) = 0.5A
//       i_beta  = 0.6667*(0.2165 + 0.6495) = 0.577A
//       i_zero  = 0.6667*(0.25 + 0.125 - 0.375) = 0.0A

分析判断过程:从计算结果看,i_alpha = 0.5A 恰好等于 ia 的瞬时值,这是因为在等幅值变换下,当 ib 和 ic 对称时,iα 与 ia 同相。i_beta = 0.577A,合成矢量幅值 √(0.5² + 0.577²) = 0.763A,而三相电流合成矢量幅值为 1.5 × 0.5 = 0.75A(考虑系数后),两者一致,验证了等幅值变换的正确性。i_zero = 0 验证了平衡系统的零轴分量为零。

结果对比与风险:若改用等功率变换(K = √(2/3) ≈ 0.8165),则 i_alpha = 0.612A,i_beta = 0.707A,幅值变为原来的 √(3/2) ≈ 1.225倍。此时如果直接使用等幅值变换的PI参数,会导致电流环增益偏大,可能引发振荡。因此,切换变换形式时必须同步调整PI参数。此外,ADC采样时刻必须与PWM中心对齐,避免开关噪声干扰;采样电阻的温漂会导致增益误差,建议在软件中做偏置校准和增益校准。

常见工程陷阱:很多初学者在实现Clark变换时,直接使用浮点运算,但在低成本MCU上浮点运算较慢。建议使用Q15或IQmath格式进行定点运算。另外,注意矩阵中 √3/2 的精度,若使用近似值0.866,会导致αβ轴幅值不平衡,进而引起Park变换后的dq轴电流含有2次谐波。推荐使用 0.8660254037844386f 或查表法。

常见误区与总结复盘

在Clark变换的学习与工程应用中,以下误区最为常见:

误区类型 错误描述 正确做法
系数混淆 将等幅值系数2/3与等功率系数√(2/3)混用,导致幅值或功率计算错误 在代码注释中明确标注变换类型,并在PI参数整定时保持一致性
零轴忽略 在三相四线制或故障工况下忽略i0,导致控制精度下降 始终计算i0,并在软件中判断其是否超过阈值,用于故障检测
符号错误 矩阵中-1/2或-√3/2的符号写错,导致αβ轴相位反转 使用单位向量验证:输入ia=1, ib=0, ic=-1,应得到iα=1, iβ=0
定点化精度不足 使用16位整数存储变换结果,导致小电流时量化误差大 使用32位定点或浮点,或对ADC值先左移放大再运算

总结复盘:Clark变换虽然数学形式简单,但它是整个FOC链路中第一个可能引入系统性误差的环节。建议在代码中增加自检函数:输入一组已知的三相电流(如ia=1A, ib=-0.5A, ic=-0.5A),验证输出是否满足 iα = 1A, iβ = 0A。同时,在电机零速时注入直流电流,观察αβ轴电流是否与预期一致,可以快速定位采样通道错位、增益错误或符号反转等问题。掌握等幅值与等功率变换的本质区别,并根据系统需求灵活选择,是FOC工程师的基本功。