1. FOC 基础回顾:矢量控制、坐标变换与 SVPWM
好,咱们正式开始。这一章我打算把 FOC 的核心骨架再过一遍。你可能会问:“都做位置环整定了,还讲基础?” 嗯,我自己的经验是,很多参数调不下去的问题,根子其实都在基础上。坐标变换算错了,SVPWM 占空比限幅没处理好,后面环怎么调都是白费力气。
所以这一章,咱们不赶进度。把矢量控制、Clark/Park 变换、SVPWM 这三个东西彻底理清楚。后面调位置环和速度环的时候,你心里才有底。
1.1 矢量控制——FOC 到底在控制什么?
FOC 的全称是 Field-Oriented Control,直译就是“磁场定向控制”。说白了,它的目标是把三相电机的定子电流,分解成两个独立的直流分量:一个负责产生转矩(交轴电流 Iq),一个负责产生磁场(直轴电流 Id)。
为什么要这么干?因为直流电机好控制啊。你给电枢加电压,它就转;你调励磁电流,它就改变磁场强度。FOC 的本质,就是让交流电机拥有直流电机的控制特性。
核心思想: 通过坐标变换,将三相静止坐标系下的交流量,变换到两相旋转坐标系下的直流量。然后对这两个直流量(Id, Iq)分别进行 PI 调节,最后再反变换回去生成三相 PWM 波。
我在项目里见过有人把 Id 直接设成 0,觉得反正不产生转矩。对于表贴式永磁同步电机(SPMSM),这么做问题不大。但对于内置式(IPMSM),最大转矩电流比(MTPA)控制就需要 Id 为负值。所以,别一刀切。
1.2 Clark 变换——从三相到两相
Clark 变换,就是把三相静止坐标系(A, B, C)下的电流,投影到两相静止坐标系(α, β)上。数学上很简单,就是一组线性变换。
公式如下(等幅值变换):
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
注意,这里我用了等幅值变换。还有一种等功率变换,系数不同。我个人习惯用等幅值,因为后面算 SVPWM 的时候,电压幅值直接对应母线电压,直观一些。
| 变换类型 | 变换矩阵系数 | 特点 |
|---|---|---|
| 等幅值变换 | 2/3 | 变换前后相电压幅值不变,SVPWM 计算方便 |
| 等功率变换 | √(2/3) | 变换前后功率不变,常用于功率分析 |
我的习惯: 在 GD32 的定点运算中,我通常把 √3 预计算成 Q15 格式的定点数,避免浮点运算带来的开销。Clark 变换本身没有角度参与,所以计算量很小,适合放在 PWM 中断的入口处执行。
1.3 Park 变换——从静止到旋转
Clark 变换之后,我们得到了 αβ 轴上的交流量。接下来,Park 变换负责把这些交流量,变成 dq 轴上的直流量。关键就在这里——它需要转子位置角 θ。
公式:
Id = Iα * cos(θ) + Iβ * sin(θ)
Iq = -Iα * sin(θ) + Iβ * cos(θ)
你看,Park 变换本质上就是一个旋转矩阵。θ 来自编码器或者霍尔传感器。如果 θ 不准,变换出来的 Id、Iq 就会有误差,转矩控制也就不准了。
避坑指南: 我曾经在一个项目里,因为编码器安装有偏心,导致 θ 有 5 度的偏差。结果 Iq 的 PI 输出一直在震荡,怎么调参数都没用。后来用示波器抓了角度和反电动势的相位关系,才发现是机械安装问题。所以,调环之前,先确认角度采样是准的。
1.4 SVPWM 调制策略——如何生成三相电压
经过 Park 反变换,我们得到了 αβ 轴上的电压指令 Uα、Uβ。SVPWM 的任务,就是根据这两个值,计算出三相逆变器六个开关管的导通时间,合成出期望的电压矢量。
SVPWM 的核心思想,是用八个基本电压矢量(六个非零矢量 + 两个零矢量)来合成任意方向的电压矢量。具体步骤:
- 扇区判断: 根据 Uα、Uβ 判断当前电压矢量落在哪个扇区。
- 作用时间计算: 计算相邻两个非零矢量和零矢量的作用时间 T1、T2、T0。
- 占空比分配: 将计算出的时间分配给三相桥臂的上下管。
- 死区补偿: 插入死区时间,防止上下管直通。
下面这张图,是 SVPWM 的完整流程,我把它画成了 SVG,方便你对照理解。
你看,整个流程是串行的。每一步都有对应的数学公式。在 GD32 上实现时,我建议把扇区判断和时间计算放在一个函数里,用查表法代替 if-else 判断,能省下不少 CPU 周期。
实现技巧: 在 GD32F303 上,我通常用 TIMER 的互补输出和死区插入功能。SVPWM 计算出的占空比直接写入 TIMER 的比较寄存器,硬件自动生成带死区的 PWM 波。这样,软件只需要关注占空比计算,死区时间由硬件保证。
1.5 本章小结
这一章,我们把 FOC 的三大基础模块过了一遍:
- 矢量控制: 把三相交流量变成两个直流量,分别控制。
- Clark/Park 变换: 坐标变换的数学工具,注意等幅值和等功率的区别。
- SVPWM: 用八个基本矢量合成任意电压矢量,注意扇区判断和死区插入。