一、FOC控制基础:从原理到实现
大家好,我是你们的老朋友。今天咱们来聊聊FOC控制的基础知识。说实话,我刚接触FOC那会儿,也被一堆变换公式搞得头大。但后来我发现,只要理解了核心思想,这些东西其实没那么可怕。
FOC,全称是磁场定向控制。说白了,就是让电机转得又稳又准,效率还高。我最早做电机控制时用的是方波驱动,电机嗡嗡响,噪音大,扭矩还抖。后来换成FOC,那感觉,就像从拖拉机换成了小轿车。
核心思想:FOC的本质是把交流电机模拟成直流电机来控制。通过坐标变换,把三相交流量变成两相直流量,然后像控制直流电机一样去控制转矩和磁通。
1.1 FOC的基本原理
FOC控制的核心,就是解耦。你想想看,交流电机的转矩和磁通是耦合在一起的,牵一发而动全身。FOC通过坐标变换,把它们解耦成独立的d轴和q轴分量。
d轴控制磁通,q轴控制转矩。这样,控制就变得简单了——想要大力矩?加大q轴电流就行。想要弱磁提速?减小d轴电流就行。
我在项目中遇到过一个问题:电机在高速运行时突然失步。查了半天,原来是d轴电流控制没跟上,磁通衰减了。后来加了前馈补偿,问题就解决了。
1.2 坐标变换:Clark变换与Park变换
坐标变换是FOC的数学基础。这里有两个关键变换:Clark变换和Park变换。
Clark变换(3相→2相)
Clark变换把三相静止坐标系(a, b, c)变换到两相静止坐标系(α, β)。公式如下:
// Clark变换
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
嗯,这里要注意,Clark变换是等幅值变换还是等功率变换?我建议你用等幅值变换,因为后续计算方便。等功率变换会多一个系数√(2/3),容易搞混。
我的经验:实际代码中,Clark变换可以写成查表形式,省去浮点运算。但前提是你的电流采样精度够高,否则查表误差会放大。
Park变换(2相旋转→2相静止)
Park变换把两相静止坐标系(α, β)变换到两相旋转坐标系(d, q)。公式:
// Park变换
Id = Iα * cos(θ) + Iβ * sin(θ)
Iq = -Iα * sin(θ) + Iβ * cos(θ)
这里的θ是转子位置角,通常由编码器或霍尔传感器提供。没有位置传感器?那就得用无传感器算法了,这个后面会讲。
我曾经犯过一个低级错误:Park变换的θ角没对齐,导致d轴和q轴电流控制反了。电机转是能转,但效率低得可怜,还发热严重。后来用示波器抓波形才发现问题。
1.3 SVPWM调制技术
SVPWM,空间矢量脉宽调制。这是FOC的最后一环,把d-q轴的电压指令变成实际的PWM波形。
SVPWM的核心思想是:用8个基本电压矢量(6个非零矢量+2个零矢量)来合成任意方向的电压矢量。你想想看,就像用不同颜色的颜料调出任意颜色一样。
SVPWM的实现步骤:
- 判断目标电压矢量所在的扇区
- 计算相邻两个基本矢量的作用时间
- 计算零矢量的作用时间
- 生成PWM比较值
扇区判断有个小技巧:直接用Uα和Uβ的符号就能判断。比如Uα>0且Uβ>0,就在扇区I。但要注意边界情况,我建议用查表法,更可靠。
// SVPWM扇区判断示例
if (Ubeta > 0) {
if (Ualpha > 0) sector = 1;
else sector = 2;
} else {
if (Ualpha > 0) sector = 6;
else sector = 5;
}
避坑指南:我曾经在SVPWM的过调制区吃过亏。当电压指令超过六边形边界时,必须做限幅处理,否则波形会畸变,电机噪音大。建议用最小相位误差限幅法,效果最好。
知识体系总览
下面这张图是我自己画的FOC知识体系结构图,帮你理清思路:
1.4 实际应用中的注意事项
理论讲完了,咱们聊聊实际干活时要注意的点。
| 模块 | 常见问题 | 我的建议 |
|---|---|---|
| Clark变换 | 电流采样噪声大 | 加低通滤波器,截止频率设为PWM频率的1/10 |
| Park变换 | 角度误差导致控制发散 | 编码器上电自检,校准零点偏移 |
| SVPWM | 过调制区波形畸变 | 用最小相位误差限幅,别用简单的截断 |
| PI控制器 | 积分饱和 | 加抗积分饱和逻辑,输出限幅前先限积分 |
一个小技巧:调试FOC时,先开环跑起来,确认坐标变换和SVPWM没问题,再切闭环。我每次都是这么干的,能省不少排查时间。
好了,这一章的内容就到这里。FOC的基础知识,说白了就是坐标变换加SVPWM。你只要把这两个东西吃透了,后面的控制环路设计就水到渠成。
公众号:蓝海资料掘金营,微信deep3321