3. FOC核心原理

FOC(Field-Oriented Control,磁场定向控制)之所以能成为永磁同步电机(PMSM)高性能控制的主流算法,其核心在于通过一系列坐标变换,将原本在静止三相坐标系下强耦合、非线性的交流电机数学模型,等效为旋转坐标系下解耦的直流电机模型。这一过程依赖三个关键数学工具:Clark变换(三相静止→两相静止)、Park变换(两相静止→两相旋转)以及反Park变换(两相旋转→两相静止)。理解这三个变换的数学推导与物理意义,是进行FOC算法移植与部署的基石。若变换矩阵系数错误或角度对齐偏差,将直接导致电流环失控、转矩脉动甚至系统过流。本章将逐一拆解其推导过程、工程实现要点及常见陷阱。

FOC坐标变换链路与物理意义 三相静止坐标系 ia, ib, ic (120°对称) 物理量:定子电流/电压 强耦合、时变、非线性 Clark T(3s→2s) 两相静止坐标系 iα, iβ (α-β轴正交) 仍为交流量,但维度降低 便于后续旋转坐标变换 Park T(2s→2r) 两相旋转坐标系 id, iq (d-q轴随转子旋转) 直流分量,实现解耦控制 id控制励磁,iq控制转矩 反Park (2r→2s) 用于SVPWM调制电压输出 物理意义映射 Clark变换 • 将三相不平衡系统映射为正交系统 • 等幅值变换:系数2/3 • 等功率变换:系数√(2/3) • 零序分量在无中线时忽略 Park变换 • 将交流量变为直流量 • 角度θ来自编码器/观测器 • d轴与转子磁极对齐 • 实现id/iq解耦控制 反Park变换 • 将旋转坐标指令还原为静止坐标 • 输出uα*, uβ*给SVPWM • 角度对齐错误会导致电压畸变 • 与Park变换共用同一角度θ

3.1 Clark变换:从三相到两相静止坐标系的数学推导

核心原理

Clark变换(又称3s/2s变换)的目标是将三相静止坐标系(a-b-c)下的物理量(电流、电压或磁链)映射到两相静止坐标系(α-β)下。三相绕组在空间上互差120°电角度,而α-β坐标系中α轴与a轴重合,β轴超前α轴90°。其物理本质是:三相绕组产生的合成磁动势(MMF)与两相正交绕组产生的合成磁动势完全等效。由于三相电流满足基尔霍夫电流定律(KCL),即 ia + ib + ic = 0(无中线星形连接),因此三相系统实际上只有两个独立变量,Clark变换正是利用这一约束条件实现降维。

数学推导基于磁动势等效原则。设三相绕组每相有效匝数为N3,两相绕组每相有效匝数为N2,根据变换前后总磁动势不变,可得矩阵关系:

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

其中i0为零序分量。若采用等幅值变换,取N3/N2 = 2/3,则变换矩阵为:

T_clark = (2/3) * [ 1   -1/2   -1/2 ]
                  [ 0   √3/2  -√3/2 ]

若采用等功率变换,取N3/N2 = √(2/3),则矩阵系数变为√(2/3)。工程中,FOC电流环通常采用等幅值变换,因为这样便于与SVPWM的电压限制(直流母线电压利用率)直接对应。

判断方法或操作流程

在实际工程部署中,Clark变换的代码实现需注意以下流程:

  1. 确认采样方式:通常采样两相电流(如ia、ib),第三相通过KCL计算得到 ic = -ia - ib。
  2. 选择变换系数:根据系统需求确定等幅值(2/3)或等功率(√(2/3))系数,并在代码中统一宏定义。
  3. 执行矩阵运算:在MCU/DSP中,为避免浮点运算开销,常采用Q格式定点数或直接使用浮点单元(FPU)。
  4. 验证零序分量:若电机为三角形连接或存在中线,需额外处理零序分量;常规星形无中线连接时,i0恒为0,可省略。
工程经验:在STM32或TMS320F28379D等MCU上实现时,建议将Clark变换写成内联函数或宏,避免函数调用开销。例如:
// 等幅值Clark变换,输入ia, ib,输出alpha, beta
#define CLARK_IA  (2.0f/3.0f)
void clark_transform(float ia, float ib, float *ialpha, float *ibeta) {
    *ialpha = CLARK_IA * (ia - 0.5f * ib - 0.5f * (-ia - ib));
    *ibeta  = CLARK_IA * (0.8660254f * ib - 0.8660254f * (-ia - ib));
    // 简化后:
    // *ialpha = ia;
    // *ibeta  = 0.57735027f * ia + 1.15470054f * ib;
}

案例拆解或实战场景

假设某PMSM额定电流5A,采用等幅值Clark变换。当电机运行在某一时刻,ADC采样得到 ia = 3.0A,ib = -1.5A,则 ic = -1.5A。代入变换矩阵:

iα = (2/3) * (3.0 - 0.5*(-1.5) - 0.5*(-1.5)) = (2/3) * (3.0 + 0.75 + 0.75) = (2/3) * 4.5 = 3.0A
iβ = (2/3) * (0 + 0.866*(-1.5) - 0.866*(-1.5)) = (2/3) * 0 = 0A

此时电流矢量完全落在α轴上,对应转子位置角为0°(电角度)。若在电机台架上用示波器同时观察iα和iβ,会看到两者均为正弦波,且iβ滞后iα 90°电角度。若发现iβ波形幅值异常或相位偏差,应首先检查电流采样通道的增益一致性。

常见误区或总结复盘

  • 误区1:系数混淆。等幅值与等功率变换的系数不同,若混用会导致电流环PI参数计算错误。建议在代码注释中明确标注。
  • 误区2:忽略零序分量。对于无中线系统,零序电流为0,但若因采样噪声或硬件不对称导致三相电流之和不等于0,直接使用KCL计算第三相会引入误差。
  • 误区3:角度对齐错误。Clark变换本身不涉及角度,但α轴与a轴的对齐方式(是否与A相绕组轴线重合)会影响后续Park变换的角度补偿。

3.2 Park变换:从静止到旋转坐标系的解耦核心

核心原理

Park变换(又称2s/2r变换)将α-β静止坐标系下的交流量变换到随转子磁极同步旋转的d-q坐标系下。d轴(直轴)与转子永磁体磁链方向对齐,q轴(交轴)超前d轴90°电角度。变换的核心是引入转子位置角θ(电角度),通过旋转变换将正弦量变为直流量。其数学表达式为:

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

物理意义在于:经过Park变换后,id为励磁电流分量,控制电机磁场强度;iq为转矩电流分量,控制电磁转矩。对于表贴式PMSM(SPMSM),通常控制id=0,此时电磁转矩与iq成正比,实现类似直流电机的控制特性。对于内置式PMSM(IPMSM),则需要利用磁阻转矩,通过id负向偏置实现最大转矩电流比(MTPA)控制。

判断方法或操作流程

Park变换的工程实现要点如下:

  1. 获取转子位置角θ:来自编码器(增量式/式)或无位置传感器观测器(滑模观测器、龙伯格观测器等)。θ必须是电角度,机械角度需乘以极对数。
  2. 计算三角函数:在MCU中可使用硬件CORDIC加速器(如STM32G4系列)或查表法。查表法需注意角度分辨率与内存占用平衡。
  3. 执行矩阵乘法:注意角度θ的零点校准。增量式编码器上电时需执行一次对齐(如给d轴注入直流电流使转子定位)。
  4. 滤波处理:若电流采样噪声较大,可在Park变换前对iα/iβ进行低通滤波,但需注意相位延迟补偿。
经验提醒:在FOC控制中,Park变换与反Park变换必须使用同一个θ角。若θ存在延迟或误差,会导致d-q轴耦合,表现为id和iq相互干扰,转矩波动增大。建议在中断服务函数(ISR)中先读取位置传感器,再执行电流采样和坐标变换,确保角度与电流时刻对齐。

案例拆解或实战场景

考虑一个极对数为4的PMSM,机械转速为750rpm,则电频率为 f = (750/60)*4 = 50Hz。假设在某时刻,转子电角度θ = 30°(π/6 rad),经Clark变换后得到 iα = 4.0A,iβ = 2.0A。则Park变换计算:

id = 4.0*cos30° + 2.0*sin30° = 4.0*0.866 + 2.0*0.5 = 3.464 + 1.0 = 4.464A
iq = -4.0*sin30° + 2.0*cos30° = -4.0*0.5 + 2.0*0.866 = -2.0 + 1.732 = -0.268A

若此时id=0控制策略生效,则说明角度或电流采样存在偏差。实际调试中,可通过旋变/编码器零位偏置补偿来消除该误差。具体做法:在电机空载且速度为零时,注入一个固定的q轴电压,观察电机是否转动;若不转,则微调编码器零位偏置,直至电机不转且id≈0。

常见误区或总结复盘

  • 误区1:角度单位混淆。三角函数计算需使用弧度制,而编码器计数通常为整数,需先转换为弧度。
  • 误区2:极对数遗漏。电角度 = 机械角度 × 极对数,若遗漏极对数,Park变换将完全失效。
  • 误区3:d-q轴方向定义。不同文献对d轴正方向定义可能不同(如指向磁极N极或S极),需与电机模型及SVPWM输出保持一致。

3.3 反Park变换:从旋转坐标回到静止坐标的电压重构

核心原理

反Park变换(又称2r/2s变换)是Park变换的逆运算,用于将电流环PI控制器输出的d-q轴电压指令(ud*、uq*)变换回α-β静止坐标系下的电压指令(uα*、uβ*),为后续SVPWM调制提供输入。其数学表达式为:

[uα*]   [ cosθ   -sinθ ] [ud*]
[uβ*] = [ sinθ    cosθ ] [uq*]

物理意义在于:将旋转坐标系中的电压矢量还原为静止坐标系中的等效电压矢量。由于SVPWM的扇区判断和矢量作用时间计算均在α-β坐标系下进行,因此反Park变换是连接电流环与调制环节的桥梁。值得注意的是,反Park变换的矩阵是Park变换矩阵的转置(也是其逆矩阵,因为旋转矩阵是正交矩阵),因此计算量相同。

判断方法或操作流程

反Park变换的工程实现与Park变换对称,但需注意以下差异:

  1. 输入来源:输入为电流环PI调节器的输出,通常经过限幅处理(如限制在直流母线电压的可用范围内)。
  2. 输出去向:输出uα*、uβ*直接送入SVPWM模块。若采用空间矢量调制,还需进行扇区判断和矢量作用时间计算。
  3. 过调制处理:当电压指令幅值超过逆变器最大输出电压(即六边形内切圆半径)时,需进行过调制处理,否则会产生波形畸变。
风险说明:反Park变换的角度θ若与当前转子实际位置不一致(例如因编码器延迟或滤波导致),会导致电压矢量方向错误,轻则电流波形畸变,重则引发过流故障。在高速运行场景下,角度延迟的影响尤为显著,需引入角度补偿(如根据转速预估角度超前量)。

案例拆解或实战场景

假设某FOC系统直流母线电压Udc = 300V,电流环输出 ud* = 10V,uq* = 100V,当前转子电角度θ = 60°(π/3 rad)。反Park变换计算:

uα* = 10*cos60° - 100*sin60° = 10*0.5 - 100*0.866 = 5 - 86.6 = -81.6V
uβ* = 10*sin60° + 100*cos60° = 10*0.866 + 100*0.5 = 8.66 + 50 = 58.66V

电压矢量幅值 = √(81.6² + 58.66²) ≈ 100.5V,未超过SVPWM线性调制区上限(Udc/√3 ≈ 173V),因此无需过调制。若uq*增大至200V,则电压矢量幅值约为200V,超过173V,此时需进行过调制处理,否则实际输出电压将低于指令值,导致电流环失控。

常见误区或总结复盘

  • 误区1:矩阵符号错误。反Park变换中sinθ的符号与Park变换相反,若写错会导致电压矢量旋转方向错误。
  • 误区2:限幅位置不当。限幅应在反Park变换之前(对ud*、uq*限幅)还是之后(对uα*、uβ*限幅)?工程上建议在d-q轴限幅,因为d-q轴限幅更直观地反映电压裕量。
  • 误区3:忽略死区补偿。反Park变换输出的电压指令是理想值,实际逆变器存在死区时间,会导致输出电压畸变,需在低速时进行死区补偿。

3.4 三种变换的协同工作与工程部署要点

核心原理

在完整的FOC控制链路中,三种变换按顺序协同工作:电流采样→Clark变换→Park变换→PI调节→反Park变换→SVPWM→逆变器→电机。其中Clark和Park构成电流反馈通路,反Park构成电压前向通路。整个链路的时序在PWM中断中同步执行,典型的中断频率为10kHz-20kHz。

判断方法或操作流程

在代码架构层面,建议将三种变换封装为独立的函数模块,便于移植和复用。以下是一个典型的FOC中断服务函数执行顺序:

void FOC_ISR(void) {
    // 1. 读取编码器角度θ(电角度)
    theta = get_electrical_angle();
    
    // 2. ADC采样相电流
    ia = adc_read(CH_A);
    ib = adc_read(CH_B);
    
    // 3. Clark变换
    clark_transform(ia, ib, &ialpha, &ibeta);
    
    // 4. Park变换
    park_transform(ialpha, ibeta, theta, &id, &iq);
    
    // 5. 电流PI调节(id_ref通常为0或MTPA给定)
    ud = pi_controller(id_ref, id, &pi_id);
    uq = pi_controller(iq_ref, iq, &pi_iq);
    
    // 6. 反Park变换
    inv_park_transform(ud, uq, theta, &ualpha, &ubeta);
    
    // 7. SVPWM调制
    svpwm(ualpha, ubeta, &ta, &tb, &tc);
    
    // 8. 更新PWM比较寄存器
    update_pwm_duty(ta, tb, tc);
}

案例拆解或实战场景

在某工业伺服驱动器项目中,客户反馈电机在低速(<100rpm)运行时有明显的转矩脉动。通过分析,发现以下问题:

  • 现象:id和iq波形在低速时存在明显的6次谐波脉动。
  • 根因分析:编码器为2500线增量式,经4倍频后为10000脉冲/转。在低速时,位置采样分辨率不足,导致θ角量化误差增大,进而引起Park变换角度抖动。
  • 解决方案:采用角度插值算法,在两次编码器脉冲之间通过速度估算进行线性插值,提高角度分辨率。同时,在Park变换前对θ进行低通滤波(截止频率为电流环带宽的1/10)。
  • 结果对比:优化后,id脉动从±0.3A降至±0.05A,转矩脉动明显改善,电机噪音降低3dB以上。

常见误区或总结复盘

变换类型输入输出关键参数常见错误
Clarkia, ib, iciα, iβ系数2/3或√(2/3)系数混淆、未处理零序
Parkiα, iβ, θid, iqθ为电角度极对数遗漏、角度单位错误
反Parkud*, uq*, θuα*, uβ*θ与Park一致sin符号错误、限幅位置不当

总结复盘:三种变换本质上是线性代数中的坐标旋转与投影,其工程实现的关键在于角度精度、系数一致性和时序同步。在移植FOC算法到新平台时,建议先用开环电压注入(不使能电流环)验证反Park变换和SVPWM的正确性,再逐步闭环调试。此外,利用MCU的硬件三角函数加速器(如STM32G4的CORDIC)可显著降低CPU负载,为更高开关频率留出余量。