背景:FOC 主循环到底在控制什么
FOC(Field Oriented Control,磁场定向控制)表面上看是在给三相电机输出三路 PWM,但它真正控制的不是“某一相电压应该是多少”,而是电机内部的磁场方向和转矩分量。
三相电机里的电流天然是交流量:随着转子转动,Ia、Ib、Ic 会不断变化。如果直接在三相坐标下做 PID,控制器面对的是三个持续旋转的正弦量,调试和稳定性都会变得很困难。
FOC 的思路是先把三相电流变换到随转子同步旋转的 d-q 坐标系里。这样,原本旋转的交流量会被“解旋”成近似直流量:
Id:直轴电流,主要对应磁链 / 励磁方向;Iq:交轴电流,主要对应转矩方向。
把交流电机“看成”两个直流通道来控制,这是 FOC 最核心的理解入口。
一次高速中断里的总流程
在实际 MCU 程序中,FOC 主循环通常放在 PWM 或 ADC 触发的高速中断里执行,频率常见为 10kHz~20kHz。一次中断周期内,控制器要完成从采样、坐标变换、闭环调节到 PWM 更新的完整流水线。
一次 10kHz~20kHz 中断里的数据流水线
这条链路里,前半段是在“理解当前电机状态”,中间的 PI 是“决定此刻应该施加什么电压矢量”,后半段则是“把电压矢量翻译成 MOS 管的开关动作”。
第一步:采样与推导
一次控制周期首先要知道两件事:
- 转子当前转到哪里;
- 三相绕组里当前流过多大的电流。
转子位置一般来自编码器、霍尔传感器或无感估算器。程序先得到机械角度,再乘以电机极对数,换算成电角度 θ:
θe = p × θm
其中 θm 是机械角度,p 是极对数,θe 是电角度。电角度 θ 是后面 Park 变换和反 Park 变换的关键。没有它,控制器就不知道当前转子磁场的方向,也就无法把电流正确投影到 d-q 坐标系。
与此同时,ADC 通常采样两相电流,例如 Ia 和 Ib。在三相三线制电机中,三相电流满足:
Ia + Ib + Ic = 0
Ic = -(Ia + Ib)
到这里,FOC 已经拿到了本轮控制所需的原始反馈量:θ、Ia、Ib、Ic。
第二步:Clarke 变换
Clarke 变换把三相静止坐标系中的 Ia、Ib、Ic,转换成两相静止坐标系中的 Iα 和 Iβ。
这一步并没有让电流变成直流量。Iα 和 Iβ 仍然处在定子静止坐标系中,它们依然会随着电机旋转呈现交流变化。
Clarke 变换的意义是降维:三相电流在平衡条件下本来就只有两个自由度,因此可以用 α-β 平面上的一个电流矢量来表示。
第三步:Park 变换
Park 变换引入转子电角度 θ,把静止的 α-β 坐标系旋转到随转子同步转动的 d-q 坐标系。
abc 静止轴 → αβ 静止轴 → dq 旋转轴
从控制角度看,Park 变换是 FOC 的关键一步。它把原本在定子坐标系中旋转的电流矢量,转换成转子视角下的两个近似直流反馈量:
Id:沿着转子磁链方向的电流;Iq:垂直于磁链方向的电流,也就是主要产生转矩的分量。
对于常见表贴式 PMSM / BLDC,很多控制策略会令 Id_ref = 0,让电流尽量全部用于产生转矩;Iq_ref 则代表希望电机输出多大的转矩。
第四步:电流 PI 闭环
得到真实反馈 Id 和 Iq 后,FOC 就可以像控制直流量一样做闭环。
两个独立 PI 分别控制 d 轴和 q 轴
这里有两个独立的 PI 控制器:
- d 轴 PI:根据
Id_ref - Id计算Vd; - q 轴 PI:根据
Iq_ref - Iq计算Vq。
电流环的输出不是电流,而是电压。因为控制器能直接施加到电机绕组上的物理量是逆变桥合成出来的电压矢量;电流会在电机电感、电阻和反电动势共同作用下响应这个电压。
如果系统运行在转矩模式,Iq_ref 可以直接来自上位机或控制程序;如果系统运行在速度模式,速度 PID 的输出通常就是 Iq_ref。但无论 Iq_ref 从哪里来,高速 FOC 主循环里的核心闭环仍然是电流 PI。
第五步:反 Park 变换
PI 控制器算出的 Vd、Vq 还在随转子旋转的坐标系中,不能直接送给三相逆变桥。逆变桥固定在定子侧,它需要的是静止坐标系下的电压矢量。
因此下一步要做反 Park 变换:使用同一个电角度 θ,把 Vd、Vq 重新旋转回 α-β 坐标系,得到 Vα 和 Vβ。
可以把这一步理解为:控制器先在转子视角下想清楚“应该推哪个方向、推多大力”,然后再把这个指令翻译回定子绕组实际能执行的电压方向。
第六步:SVPWM 生成
Vα 和 Vβ 描述的是定子平面中的目标电压矢量。SVPWM(Space Vector PWM,空间矢量 PWM)的任务,就是把这个目标矢量转换成三相桥臂的占空比。
Vd/Vq → Vα/Vβ → 扇区与作用时间
在一个 PWM 周期内,SVPWM 通常会计算:
T1:第一个相邻有效矢量的作用时间;T2:第二个相邻有效矢量的作用时间;T0:零矢量的作用时间。
随后这些时间会被换算成三相占空比 Ta、Tb、Tc,再写入定时器比较寄存器。
第七步:驱动 MOS 管
SVPWM 得到的 Ta、Tb、Tc 最终会变成定时器的 CCR 值。定时器硬件根据这些比较值输出三路上桥臂 PWM,同时配合互补输出生成三路下桥臂 PWM。
占空比最终变成六路带死区的 MOS 管开关
死区时间用于避免同一桥臂上下管同时导通。逆变桥通过高速开关,把直流母线电压斩波成等效的三相交流电压,使三相绕组中形成接近正弦的电流。
当这个过程以 10kHz~20kHz 的频率不断重复时,电机看到的就是一个连续旋转的电压 / 电流矢量,转子也就能平滑跟随目标磁场旋转。
速度环在流程中的位置
双环控制并不是 FOC 主循环的全部,它更像是在电流环外面套了一层较慢的目标生成器。
速度环只是低频生成 Iq_ref,主循环仍是高速电流环
机械系统惯性大,速度变化慢,所以速度环不需要每个 PWM 周期都运行。它只需要周期性地根据速度误差算出新的 Iq_ref。
电流环则必须高速运行,因为电磁响应快,PWM 占空比也需要及时更新。因此,在速度模式下可以这样理解:
- 速度环决定“需要多大转矩”;
- 这个转矩需求表现为
Iq_ref; - FOC 主循环负责把
Iq_ref快速兑现成电压矢量和 PWM 开关动作。
结论
FOC 的完整主流程可以压缩成一句话:
采到三相电流和转子角度后,先通过 Clarke/Park 把电流变成转子坐标系下的
Id/Iq,再用电流 PI 算出Vd/Vq,经反 Park 变回Vα/Vβ,最后由 SVPWM 生成 PWM 占空比,驱动三相逆变桥产生旋转磁场。
再进一步简化,就是下面这条流水线:
Ia/Ib/Ic + θ → Iα/Iβ → Id/Iq → Vd/Vq → Vα/Vβ → Ta/Tb/Tc → 六路 PWM → 三相电流与旋转磁场
这就是 MCU 中一次 FOC 高速控制周期最核心的执行骨架。