2. FOC控制原理
磁场定向控制(Field Oriented Control,FOC)是现代永磁同步电机(PMSM)高性能驱动中最主流的控制策略。其核心思想是:通过数学坐标变换,将原本在静止三相坐标系下强耦合、非线性的交流电机模型,等效为旋转坐标系下相互解耦的直流电机模型,从而分别独立控制电机的励磁分量和转矩分量。对于基于GD32的嵌入式低成本实现而言,理解FOC的数学本质、坐标变换的物理意义、PI调节器的离散化设计以及SVPWM的扇区判断与矢量合成,是完成工程代码落地的前提。本章将围绕这四个核心模块展开,并结合GD32F303系列MCU的运算能力和外设资源,给出可直接指导编码的工程化解析。
上图展示了FOC控制的核心链路:从三相电流采样开始,经过Clark变换得到两相静止坐标系下的电流分量,再经过Park变换得到旋转坐标系下的直轴电流Id和交轴电流Iq。这两个电流分量分别对应电机的励磁磁场和转矩磁场,通过PI调节器进行闭环控制后,输出电压指令Vd*和Vq*,再经过反Park变换得到两相静止坐标系下的电压矢量,最终通过SVPWM调制生成六路PWM信号驱动三相逆变器。整个过程在GD32内部以中断服务函数的形式周期性执行,典型执行频率为10kHz~20kHz。
2.1 磁场定向控制的基本原理
FOC的核心思想是"解耦"。在三相静止坐标系下,PMSM的定子电流产生的磁动势与转子永磁体磁场之间存在复杂的耦合关系,转矩表达式为:Te = 1.5 * p * [ψf * iq + (Ld - Lq) * id * iq]。对于表贴式PMSM(Ld = Lq),转矩简化为Te = 1.5 * p * ψf * iq,此时转矩只与q轴电流成正比。这就是FOC的物理基础——通过坐标变换,将定子电流分解为产生磁场的id分量和产生转矩的iq分量,实现解耦控制。
FOC控制系统的整体架构包含三个闭环:电流内环(最快)、速度环(中等)、位置环(最慢)。电流环的带宽通常设计为1~2kHz,速度环带宽为50~200Hz,位置环带宽为5~20Hz。这种带宽分配保证了系统的稳定性和动态响应性能。
2.2 坐标变换:Clark变换与Park变换
坐标变换是FOC的数学桥梁,它将三相交流量转换为两相直流量,使得PI调节器可以对恒定信号进行无静差调节。
2.2.1 Clark变换(3s→2s)
Clark变换将三相静止坐标系(a-b-c)变换到两相静止坐标系(α-β)。等幅值变换的数学表达式为:
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
在工程实现中,为了简化计算,通常采用以下离散化形式:
Iα = Ia
Iβ = (Ia + 2*Ib) * 0.57735 // 1/√3 ≈ 0.57735
由于三相电流满足Ia + Ib + Ic = 0,因此只需要采样两相电流(通常采样Ia和Ib),第三相电流通过计算得到:Ic = -Ia - Ib。在GD32的ADC配置中,需要至少两个ADC通道同时采样,或者使用注入组实现同步采样。
| 变换类型 | 输入 | 输出 | 关键公式 | GD32实现要点 |
|---|---|---|---|---|
| Clark | Ia, Ib | Iα, Iβ | Iα=Ia; Iβ=(Ia+2Ib)/√3 | 使用浮点或Q15格式,注意1/√3的精度 |
| Park | Iα, Iβ, θe | Id, Iq | Id=Iαcosθ+Iβsinθ; Iq=-Iαsinθ+Iβcosθ | 查表法或Cordic算法计算sin/cos |
| 反Park | Vd*, Vq*, θe | Vα*, Vβ* | Vα=Vdcosθ-Vqsinθ; Vβ=Vdsinθ+Vqcosθ | 与Park共用sin/cos表 |
2.2.2 Park变换(2s→2r)
Park变换将两相静止坐标系变换到两相旋转坐标系(d-q),旋转角度为转子电角度θe。变换公式为:
Id = Iα * cos(θe) + Iβ * sin(θe)
Iq = -Iα * sin(θe) + Iβ * cos(θe)
在GD32实现中,sin/cos函数计算是主要耗时点。工程上常采用两种方案:一是查表法,将0~360°分为1024或2048个点,查表精度可达0.35°或0.18°;二是使用Cordic算法,GD32F303的硬件Cordic外设可以加速三角函数计算,但需要额外配置。对于低成本方案,推荐使用查表法,内存占用仅需4KB(2048点×2字节)。
2.3 PI调节器设计与离散化
PI调节器是FOC电流环的核心控制器。在旋转坐标系下,Id和Iq均为直流量,PI调节器可以实现无静差跟踪。电流环PI调节器的传递函数为:
G(s) = Kp + Ki/s
离散化方法采用后向欧拉法,得到增量式PI算法:
// 增量式PI
int32_t pi_controller(int32_t ref, int32_t fb, int32_t *integral, int32_t kp, int32_t ki, int32_t max_out)
{
int32_t err = ref - fb;
*integral += err;
// 抗积分饱和
if (*integral > max_out) *integral = max_out;
if (*integral < -max_out) *integral = -max_out;
int32_t out = kp * err + ki * (*integral);
// 输出限幅
if (out > max_out) out = max_out;
if (out < -max_out) out = -max_out;
return out;
}
PI参数的整定方法通常采用极点配置法。对于表贴式PMSM,电流环被控对象近似为一阶惯性环节,其传递函数为:G(s) = 1/(Ls + R),其中L为定子电感,R为定子电阻。通过零极点对消,令PI调节器的零点与被控对象的极点相等,即Ki/Kp = R/L,则闭环带宽为:BW = Kp/L。工程上,电流环带宽通常设定为1~2kHz,因此Kp = BW * L,Ki = Kp * R / L。
| 参数 | 物理意义 | 整定方法 | 典型值(GD32F303) |
|---|---|---|---|
| Kp | 比例增益,决定响应速度 | Kp = BW * L | 0.5~2.0(视电机参数) |
| Ki | 积分增益,消除稳态误差 | Ki = Kp * R / L | 50~200 |
| 积分限幅 | 防止积分饱和 | 取额定电压的80% | 0.8 * Vdc |
| 输出限幅 | 限制电压指令 | 受限于直流母线电压 | ±Vdc/√3 |
2.4 SVPWM调制原理与实现
SVPWM(空间矢量脉宽调制)是FOC的最终执行环节,它将电压指令Vα*、Vβ*转换为三相逆变器的开关信号。SVPWM的优点是直流母线电压利用率高(比SPWM高15.47%),且谐波含量低。
2.4.1 扇区判断
首先根据Vα、Vβ判断参考电压矢量所在的扇区。定义三个中间变量:
U1 = Vβ
U2 = (√3/2)*Vα - (1/2)*Vβ
U3 = -(√3/2)*Vα - (1/2)*Vβ
扇区号N = sign(U1) + 2*sign(U2) + 4*sign(U3),其中sign(x) = 1(x>0)或0(x≤0)。N值与扇区的对应关系为:N=1→扇区II,N=2→扇区VI,N=3→扇区I,N=4→扇区IV,N=5→扇区III,N=6→扇区V。
2.4.2 矢量作用时间计算
以扇区I为例,相邻基本矢量为U4(100)和U6(110),零矢量为U0(000)和U7(111)。作用时间计算如下:
X = (√3*Vβ*T) / Vdc
Y = (1.5*Vα + √3/2*Vβ) * T / Vdc
Z = (-1.5*Vα + √3/2*Vβ) * T / Vdc
各扇区的作用时间T1、T2查表得到,然后进行饱和限幅:若T1+T2 > T,则T1 = T1*T/(T1+T2),T2 = T2*T/(T1+T2)。零矢量时间T0 = T - T1 - T2。
2.4.3 占空比计算与PWM更新
采用七段式SVPWM,在一个PWM周期内,开关序列对称分布,以降低谐波。以扇区I为例,三相占空比为:
Ta = (T - T1 - T2) / 4
Tb = Ta + T1/2
Tc = Tb + T2/2
在GD32中,通过TIMER0的通道比较寄存器实现占空比更新。需要配置为中央对齐模式(向上/向下计数),并在周期中断中更新比较值。死区时间通过TIMER0的断路和死区寄存器(BDTR)配置,典型死区时间为1~2μs。
2.5 实战案例:基于GD32F303的FOC电流环调试
下面通过一个实际调试案例,展示FOC电流环从理论到落地的完整过程。
项目背景:某机器人关节模组采用GD32F303VET6作为主控,驱动一个表贴式PMSM(额定电压24V,额定电流2A,相电阻0.5Ω,相电感0.2mH,极对数4)。要求电流环带宽1kHz,电流采样频率20kHz。
初始现象:按照理论计算PI参数(Kp = BW * L = 1000 * 0.0002 = 0.2,Ki = Kp * R / L = 0.2 * 0.5 / 0.0002 = 500),上电后电机电流振荡严重,噪声大,无法稳定运行。
分析过程:通过逻辑分析仪抓取电流波形,发现电流在设定值附近以约2kHz频率振荡。进一步检查发现,电流采样时刻与PWM开关时刻未同步,导致采样噪声混叠。此外,PI参数中的Ki值过大,积分项在几个周期内就达到饱和。
解决步骤:
- 调整ADC采样时刻:将ADC注入组触发时刻设置为PWM计数器的峰值点(即占空比更新点),确保采样时刻远离开关噪声。
- 重新整定PI参数:将Kp调整为0.15,Ki调整为300,并增加积分限幅为0.5 * Vdc。
- 加入低通滤波器:在电流反馈通道加入一阶低通滤波器,截止频率5kHz,滤除高频噪声。
- 优化SVPWM死区补偿:在低电流区域加入死区补偿电压,补偿量为死区时间 * Vdc / T。
结果对比:调整后,电流环阶跃响应超调量从35%降至8%,调节时间从2ms缩短至0.8ms,稳态误差小于1%。电机运行噪声明显降低,温升从15℃降至8℃。
复盘经验:FOC调试中,电流采样质量往往比PI参数更关键。采样时刻、滤波、死区补偿等细节决定了系统的最终性能。建议在调试初期使用示波器观察电流波形,确认采样无异常后再进行参数整定。
2.6 常见误区与总结
- 误区一:认为PI参数越大越好。实际上,过大的Kp会导致电流环振荡,过大的Ki会导致积分饱和。正确的做法是根据电机参数和带宽要求计算初值,再通过实验微调。
- 误区二:忽略电流采样延时。从ADC采样到PWM更新存在一个控制周期的延时,这会在系统中引入相位滞后。对于高带宽应用,需要采用预测控制或Smith预估器进行补偿。
- 误区三:SVPWM扇区判断错误。扇区判断的边界条件(U1、U2、U3等于0时)需要特殊处理,否则会产生错误的开关序列。建议在代码中加入边界判断,当|U1|、|U2|、|U3|小于阈值时强制归零。
- 误区四:忽视死区时间的影响。死区时间会导致输出电压畸变,尤其在低速轻载时产生电流波形畸变和转矩脉动。需要根据实际死区时间进行补偿。