2. FOC基础原理
磁场定向控制(Field Oriented Control,FOC)是现代永磁同步电机(PMSM)高性能驱动的主流方案。其核心思想是通过坐标变换,将定子三相交流电流解耦为相互正交的励磁分量和转矩分量,从而实现对电机磁链与转矩的独立控制,获得类似直流电机的控制体验。本章将深入剖析FOC的数学基础、两大核心坐标变换(Clark与Park)以及空间矢量调制(SVPWM)的底层原理,为后续基于STM32的工程实现打下坚实的理论根基。
上图展示了FOC控制的核心链路:三相电流经Clark变换得到αβ轴分量,再经Park变换得到旋转坐标系下的d/q轴分量;经过PI控制器调节后,通过反Park变换得到αβ轴电压指令,最终由SVPWM模块生成逆变器的开关信号。整个链路中,坐标变换的精度和SVPWM的调制质量直接决定了电机的运行性能。
2.1 FOC的数学基础:从三相到旋转坐标系的解耦逻辑
FOC的本质是数学上的坐标变换。三相交流电机中,定子绕组在空间上互差120°电角度,通入三相正弦电流后产生旋转磁场。然而,三相耦合的微分方程非常复杂,难以直接设计高性能控制器。FOC的思路是:通过数学变换,将三相静止坐标系下的交流量,转换为两相旋转坐标系下的直流量,从而将交流电机的控制问题简化为类似直流电机的控制问题。
在变换过程中,需要遵循两个基本原则:幅值不变原则和功率不变原则。幅值不变原则指变换前后电流矢量的幅值相等,便于直观分析;功率不变原则指变换前后电机的总功率相等,常用于推导电压和磁链的变换矩阵。STM32 FOC SDK默认采用幅值不变原则,这一点在编写变换代码时需要特别注意系数差异。
核心要点:FOC的数学基础是线性代数中的基变换。三相静止坐标系(abc)到两相静止坐标系(αβ)的变换矩阵为:
| iα | | 1 -1/2 -1/2 | | ia |
| iβ | = | 0 √3/2 -√3/2 | × | ib |
| ic |
该矩阵将三相电流投影到正交的αβ轴上,其中α轴与a相轴线重合,β轴超前α轴90°电角度。
2.2 Clark变换:三相静止到两相静止
Clark变换(又称3S/2S变换)将三相电流从abc坐标系转换到αβ坐标系。其物理意义是将三个互差120°的交流分量,等效为两个正交的交流分量。由于三相电流满足基尔霍夫电流定律(ia + ib + ic = 0),实际只需采样两相电流即可重构第三相电流,这为硬件设计节省了成本。
在STM32 FOC SDK中,Clark变换的典型实现代码如下:
// 输入:三相电流采样值(单位:A)
// 输出:αβ轴电流分量
void Clark_Transform(float ia, float ib, float ic, float *i_alpha, float *i_beta) {
*i_alpha = ia; // 幅值不变原则下,α轴与a轴重合
*i_beta = (ia + 2.0f * ib) / 1.7320508f; // 1/√3 系数
}
这里采用幅值不变原则,因此α轴分量直接等于a相电流,β轴分量需要乘以1/√3。如果采用功率不变原则,则两个分量都需要乘以√(2/3)的系数。工程中常见的错误是混淆两种原则,导致电流环PI参数计算出现偏差。
| 对比维度 | 幅值不变原则 | 功率不变原则 |
|---|---|---|
| 变换矩阵系数 | 2/3 | √(2/3) |
| 电流幅值 | 变换前后幅值相等 | 幅值变为原来的√(3/2)倍 |
| 功率计算 | 需额外乘以3/2 | 变换前后功率直接相等 |
| 工程应用 | STM32 SDK、TI SDK | 部分学术文献、某些专用IC |
2.3 Park变换:两相静止到两相旋转
Park变换(又称2S/2R变换)将αβ坐标系下的交流量,转换到随转子磁场同步旋转的d/q坐标系下。变换的关键是转子位置角θ(电角度),该角度通常由编码器或霍尔传感器提供。经过Park变换后,d轴分量代表励磁电流,q轴分量代表转矩电流,两者均为直流量,便于PI控制器实现无静差调节。
Park变换的数学表达式为:
| id | | cosθ sinθ | | iα |
| iq | = | -sinθ cosθ | × | iβ |
在STM32中,通常使用查找表或CORDIC算法计算三角函数值。对于高速电机,θ的更新频率必须足够高,否则会导致坐标变换滞后,影响控制性能。STM32 FOC SDK中,Park变换在定时器中断中执行,确保与PWM载波同步。
经验提醒:当电机低速运行时,反电动势较小,转子位置角θ的精度对控制性能影响显著。建议在低速段使用高频注入法或观测器估算θ,在高速段切换为反电动势法,以实现全速度范围的高精度控制。
2.4 SVPWM原理:空间矢量调制
SVPWM(Space Vector Pulse Width Modulation)是一种基于磁链圆轨迹的调制策略。与传统的SPWM(正弦脉宽调制)相比,SVPWM具有直流母线电压利用率高(提高约15%)、谐波含量低、易于数字化实现等优点。其核心思想是:将逆变器的8种开关状态(6个有效矢量+2个零矢量)映射到αβ平面,通过相邻有效矢量和零矢量的时间组合,合成任意方向和大小的电压矢量。
SVPWM的实现步骤分为四步:
- 扇区判断:根据Uα和Uβ的符号及大小关系,确定参考电压矢量所在的扇区(共6个扇区,每个60°)。
- 作用时间计算:计算相邻两个有效矢量的作用时间T1、T2以及零矢量作用时间T0。
- 矢量切换点确定:根据扇区号,计算三相PWM比较寄存器的切换点Ta、Tb、Tc。
- PWM生成:将切换点值写入STM32定时器的比较寄存器,生成互补PWM信号(含死区时间)。
扇区判断的简化逻辑如下:
// 根据Uα、Uβ判断扇区
if (Uβ > 0) {
if (Uα > 0) {
if (Uα > Uβ/1.732) sector = 1; else sector = 2;
} else {
if (-Uα > Uβ/1.732) sector = 3; else sector = 2;
}
} else {
// 类似逻辑判断扇区4、5、6
}
实际工程中,更常用的方法是计算三个参考量Uref1 = Uβ、Uref2 = (√3/2)Uα - (1/2)Uβ、Uref3 = -(√3/2)Uα - (1/2)Uβ,根据其正负组合直接查表得到扇区号,计算效率更高。
2.5 案例拆解:一台200W永磁同步电机的FOC调试
某工业伺服项目采用STM32G474驱动一台200W、额定转速3000rpm的PMSM,母线电压48V,额定电流5A。初始调试时,电机运行在1000rpm时出现明显振动和噪声,电流波形畸变严重。
关键数据采集:通过STM32的DAC输出观测iq电流波形,发现其存在明显的6次谐波分量;同时,编码器反馈的θ角在低速时抖动约±3°电角度。
分析判断过程:首先怀疑SVPWM扇区切换存在错误,导致电压矢量方向偏差。通过逻辑分析仪抓取PWM波形,确认扇区切换逻辑正确。随后检查Park变换中的θ角,发现编码器零位偏移未校准,导致d/q轴耦合,q轴电流波动。
实际操作步骤:
- 执行编码器零位校准:将电机开环拖动至a相轴线与d轴重合,记录编码器值作为零位偏移量。
- 在代码中补偿零位偏移:
theta_elec = theta_raw - zero_offset。 - 重新整定电流环PI参数:将带宽从500Hz提升至1kHz,相位裕度保持在45°以上。
结果对比:补偿后,q轴电流谐波从6次降为12次(主要为开关频率纹波),电机振动明显减小,噪声降低约8dB。进一步优化SVPWM的死区补偿后,电流THD从12%降至4.5%。
风险提示:在修改编码器零位偏移时,务必在电机断电状态下进行,并确保机械结构不会因转子自由转动而受损。此外,零位偏移值应存储在非易失性存储器中,避免每次上电重新校准。
2.6 常见误区与总结复盘
在FOC基础原理的学习和工程应用中,以下误区值得特别关注:
- 误区一:混淆Clark变换的系数。幅值不变与功率不变原则的矩阵系数不同,直接套用会导致电流环增益错误。建议在代码注释中明确标注所采用的原则。
- 误区二:忽略Park变换的角度补偿。如果θ角滞后于实际转子位置,会导致d/q轴解耦不彻底,产生转矩波动。应确保θ角的采样与电流采样同步。
- 误区三:SVPWM死区时间设置不当。死区时间过短会导致桥臂直通,过长则增加谐波。对于48V/5A系统,建议死区时间设为1-2μs,并配合死区补偿算法。
- 误区四:忽视直流母线电压波动。SVPWM的输出电压受母线电压影响,若母线电压波动较大,应加入前馈补偿,否则会导致电流环性能下降。