3、坐标变换:Clarke变换、Park变换及其逆变换的推导、物理意义与实现方法

无感FOC(Field-Oriented Control,磁场定向控制)的核心思想是:将定子三相电流这一组交流时变量,通过两次数学变换,等效为旋转坐标系下的两个直流量(励磁分量与转矩分量),从而将交流电机的控制问题转化为类似直流电机的控制问题。这两次变换正是Clarke变换(三相静止→两相静止)与Park变换(两相静止→两相旋转)。本章将从数学推导、物理意义、工程实现三个维度,彻底讲透这两组变换及其逆变换,并给出在MCU中落地时的数值处理要点。

FOC坐标变换链路与物理意义 三相静止 A-B-C 绕组 ia, ib, ic Clarke 两相静止 α-β 轴系 iα, iβ Park 两相旋转 d-q 轴系 id, iq 逆Park 逆Clarke 电流环控制链路(SVPWM输出前) id_ref, iq_ref → PI调节器 → 逆Park → 逆Clarke → SVPWM → 三相逆变桥 转子角度 θe 来自观测器/编码器 Park/逆Park 物理意义: • Clarke:将三相空间互差120°的交流量,映射到正交的α-β轴 • Park:将α-β交流量乘以旋转因子,变为d-q直流量 • 逆变换:将控制量从旋转坐标系还原为三相占空比

上图展示了FOC中坐标变换的完整链路。可以看到,Clarke变换将三相电流映射到α-β轴,Park变换再将α-β轴映射到d-q轴。而逆变换则用于将PI控制器输出的电压指令还原为三相占空比。下面我们逐一推导。

3.1 Clarke变换:从三相静止到两相静止

3.1.1 数学推导

设三相电流为 ia、ib、ic,且满足基尔霍夫电流定律:ia + ib + ic = 0(星形连接无中线)。Clarke变换的目标是找到一组正交坐标系(α-β),使得合成磁动势等效。采用等幅值变换(幅值不变,便于PI参数整定),变换矩阵为:

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

若三相平衡,则 ic = -ia - ib,代入后简化为:

iα = ia
iβ = (ia + 2*ib) / √3

这个简化形式在工程中极为常用,只需采样两相电流即可。注意:等幅值变换下,iα 的幅值与相电流峰值相等;而等功率变换(系数√(2/3))则用于功率计算场景。FOC电流环通常采用等幅值变换,因为PI调节器的输出限幅可以直接与SVPWM最大相电压对应。

3.1.2 物理意义

Clarke变换的物理本质是投影。它将三相绕组在空间上互差120°的磁动势,投影到两个正交轴上。α轴与A相绕组轴线重合,β轴超前α轴90°。变换后,iα、iβ仍然是交流量(随转子位置变化),但已经变成正交的两相,为后续Park变换提供了旋转坐标系的基础。

工程经验:在MCU实现时,建议使用Q15或Q24定点格式。例如,使用Q15格式时,1.0对应32768。Clarke变换中的系数1/√3 ≈ 0.57735,可预先计算为定点数18725(Q15)。避免在中断服务函数中做浮点除法,以降低CPU负载。

3.1.3 实现方法(C语言伪代码)

typedef struct {
    int16_t alpha;  // Q15格式
    int16_t beta;
} Clarke_Out;

Clarke_Out Clarke_Transform(int16_t ia, int16_t ib) {
    Clarke_Out out;
    int32_t temp;
    // iα = ia
    out.alpha = ia;
    // iβ = (ia + 2*ib) * 0.57735
    temp = (int32_t)ia + ((int32_t)ib << 1);  // ia + 2*ib
    temp = (temp * 18725) >> 15;              // 乘以1/√3
    out.beta = (int16_t)temp;
    return out;
}

注意:如果使用单电阻采样或双电阻采样,需要根据PWM占空比重构三相电流,此时Clarke变换的输入可能是重构后的电流值。另外,当电机处于高速弱磁区时,电流谐波增大,建议在Clarke变换前增加低通滤波器(截止频率设为开关频率的1/10~1/5)。

3.2 Park变换:从两相静止到两相旋转

3.2.1 数学推导

Park变换将α-β轴系旋转θe角度(θe为转子电角度),得到d-q轴系。d轴与转子磁极轴线重合,q轴超前d轴90°。变换矩阵为:

[ id ]   [ cosθe   sinθe ] [ iα ]
[ iq ] = [ -sinθe  cosθe ] [ iβ ]

逆Park变换(用于电压输出)为:

[ vα ]   [ cosθe   -sinθe ] [ vd ]
[ vβ ] = [ sinθe    cosθe ] [ vq ]

注意正负号:Park正变换中,id = iα·cosθ + iβ·sinθ;逆变换中,vα = vd·cosθ - vq·sinθ。符号错误会导致电流环发散,这是初学者最常见的错误之一。

3.2.2 物理意义

Park变换的物理本质是解耦。经过Park变换后,基波分量变为直流量:id 对应励磁分量(产生磁通),iq 对应转矩分量(产生转矩)。对于表贴式PMSM(Ld=Lq),电磁转矩 Te = 1.5·p·λf·iq,与id无关;对于内置式PMSM(Ld≠Lq),还存在磁阻转矩项 1.5·p·(Ld-Lq)·id·iq。因此,FOC的核心就是独立控制id和iq。

关键风险:Park变换依赖转子角度θe。在无感FOC中,θe来自滑模观测器或龙伯格观测器。如果观测器角度存在滞后或误差,会导致d-q轴耦合,表现为id、iq互相干扰,甚至引起电流环振荡。工程上,通常需要对θe做锁相环(PLL)滤波,并补偿数字控制带来的一拍延迟。

3.2.3 实现方法(查表法优化)

// 预计算正弦表,例如1024点,覆盖0~2π
#define SIN_TABLE_SIZE 1024
int16_t sin_table[SIN_TABLE_SIZE];

void Park_Transform(int16_t alpha, int16_t beta, int16_t theta_idx,
                    int16_t *id, int16_t *iq) {
    int16_t sin_t = sin_table[theta_idx];
    int16_t cos_t = sin_table[(theta_idx + SIN_TABLE_SIZE/4) % SIN_TABLE_SIZE];
    // id = α*cos + β*sin
    *id = (int16_t)(((int32_t)alpha * cos_t + (int32_t)beta * sin_t) >> 15);
    // iq = -α*sin + β*cos
    *iq = (int16_t)(((int32_t)beta * cos_t - (int32_t)alpha * sin_t) >> 15);
}

查表法将三角函数计算转换为内存访问,在Cortex-M4或RISC-V内核上可节省约200个时钟周期。若使用硬件CORDIC外设(如STM32G4系列),则可以直接调用硬件加速。

3.3 逆变换与SVPWM的衔接

电流环PI调节器输出 vd*、vq* 后,需要经过逆Park变换得到 vα*、vβ*,再经过逆Clarke变换得到三相电压指令 va*、vb*、vc*。但实际工程中,通常不显式计算逆Clarke,而是直接将 vα*、vβ* 送入SVPWM模块,由SVPWM直接计算三相占空比。这是因为SVPWM本身就是在α-β轴系下工作的,避免了不必要的往返变换。

变换名称输入输出关键系数典型应用
Clarke正变换ia, ib, iciα, iβ1, 1/√3电流采样后
Park正变换iα, iβ, θeid, iqcosθ, sinθ电流环反馈
逆Park变换vd, vq, θevα, vβcosθ, -sinθ电压指令输出
逆Clarke变换vα, vβva, vb, vc1, -1/2, √3/2直接PWM生成(较少用)

3.4 案例拆解:一个因坐标变换符号错误导致的电流环发散故障

背景:某量产项目(200W无刷直流电机,霍尔传感器启动,无感FOC高速运行)在低速(500rpm)调试时,电流环PI参数无论怎么调,iq反馈始终存在大幅振荡,且id偏置约0.5A。

初始现象:使用示波器观察相电流,发现电流波形存在明显的直流偏置和低频振荡(约20Hz)。读取MCU内部变量,发现id在-0.3A~0.8A之间波动,iq在±1.5A之间剧烈摆动。

分析过程:首先怀疑电流采样偏置,但校准后无效。随后检查角度反馈,使用编码器对比,发现观测器角度与实际角度偏差约15°电角度。进一步检查Park变换代码,发现逆Park变换中使用了正变换的符号:

// 错误代码:正变换符号用于逆变换
v_alpha = vd * cos_t - vq * sin_t;  // 应为 vd*cos - vq*sin
v_beta  = vd * sin_t + vq * cos_t;  // 应为 vd*sin + vq*cos

实际上,错误代码与正确代码在数学上等价于将vq的符号取反,导致q轴电压方向错误,电流环无法收敛。

解决步骤:1)修正逆Park变换符号;2)重新标定电流采样偏置;3)将PI参数恢复为初始值(Kp=0.5,Ki=0.01),逐步增大。修正后,id稳定在0A附近,iq响应平滑,电流环带宽达到800Hz。

复盘经验:坐标变换的符号错误在代码评审中极难发现,建议使用离线仿真数据验证:将一组已知的id、iq、θ输入逆变换,再输入正变换,检查输出是否等于原始值。在MATLAB/Simulink中搭建模型,或使用Python脚本生成测试向量,在PC上验证后再移植到MCU。

3.5 常见误区与工程建议

  • 误区1:等幅值与等功率变换混用。如果电流环用等幅值,而功率计算用等功率,会导致效率计算错误。建议全链路统一使用等幅值变换。
  • 误区2:忽略数字控制延迟。从采样到PWM更新存在一拍延迟(通常为PWM周期)。在高速电机(>10000rpm)中,这一拍延迟会导致角度滞后,需要做角度补偿:θcomp = θe + ωe·Ts。
  • 误区3:角度观测器带宽不足。无感FOC中,观测器角度滞后会直接映射为d-q轴耦合。建议观测器带宽设为电流环带宽的5~10倍。
  • 误区4:定点数溢出。在Q15格式下,两个Q15数相乘结果为Q30,需要右移15位。如果中间变量使用int16,极易溢出。务必使用int32中间变量。
总结:Clarke变换是“投影”,Park变换是“旋转”。掌握这两组变换的关键在于:1)理解等幅值与等功率变换的适用场景;2)牢记正逆变换的符号差异;3)在MCU中采用定点数查表法实现;4)务必进行离线仿真验证。下一章将介绍SVPWM的实现,届时会用到本章的逆变换输出vα、vβ。