第1章:FOC基本原理 — 从Clark变换到SVPWM
大家好,我是你们的老朋友。今天咱们聊聊FOC最核心的几个基础模块。说实话,我刚接触FOC那会儿,看到Clark、Park这些名字,第一反应是“这又是哪个数学家的游戏?”但真正做项目后才发现,这些变换其实就是把复杂问题简单化的工具。
1.1 Clark变换:把三相变两相
先说说Clark变换。它的任务很简单:把电机三相电流(Ia、Ib、Ic)变成两相静止坐标系下的电流(Iα、Iβ)。为什么要这么干?因为三相系统不好控制,两相系统好算。
公式长这样:
Iα = Ia
Iβ = (Ia + 2*Ib) / √3
嗯,这里要注意,实际工程中我们通常只采样两相电流(比如Ia和Ib),第三相Ic通过Ic = -Ia - Ib算出来。我在项目中遇到过采样电阻布局不合理导致Ic计算误差大的情况,后来把采样点挪到了靠近MOS管的位置才解决。
1.2 Park变换:把交流变直流
Park变换才是FOC的精髓。它把静止的αβ坐标系旋转到与转子磁场同步的dq坐标系。说白了,就是把正弦变化的交流量变成直流量。
公式:
Id = Iα * cos(θ) + Iβ * sin(θ)
Iq = -Iα * sin(θ) + Iβ * cos(θ)
这里的θ是转子电角度,需要从编码器或霍尔传感器获取。我个人习惯用磁编码器,精度高,但要注意安装时的偏心问题——我曾经因为编码器装歪了,导致角度误差5度,电机跑起来嗡嗡响。
为什么要变成直流量?因为直流量的PID控制比交流量简单太多了。你想想看,控制一个恒定值和控制一个正弦波,哪个容易?
1.3 SVPWM调制:让电压利用率更高
SVPWM(空间矢量脉宽调制)是FOC的“执行层”。它把dq坐标系下的电压指令,转换成六个MOS管的开关信号。
相比传统的SPWM,SVPWM的电压利用率能提高15%左右。什么意思?同样的母线电压,SVPWM能让电机跑得更快。我在做无人机电机驱动时,就靠这个多榨出了10%的转速。
SVPWM的核心是判断电压矢量所在的扇区,然后计算相邻两个基本矢量的作用时间。代码实现大概这样:
// 扇区判断
uint8_t sector = 0;
if (Vbeta > 0) sector |= 0x01;
if (Valpha * sqrt3 - Vbeta > 0) sector |= 0x02;
if (-Valpha * sqrt3 - Vbeta > 0) sector |= 0x04;
// 计算占空比
float T1, T2;
switch(sector) {
case 1: T1 = Tz * Vbeta; T2 = Tz * (Valpha * sqrt3/2 - Vbeta/2); break;
// ... 其他扇区类似
}
1.4 电流采样与重构
电流采样是FOC的“眼睛”。常用的方法有两种:
- 单电阻采样:成本低,但需要重构三相电流,算法复杂
- 双电阻采样:直接得到两相电流,第三相计算得到,我比较推荐
- 三电阻采样:精度最高,但成本也高
电流重构的关键是采样时刻。必须在PWM的中间时刻采样,因为这时电流最稳定。我曾经犯过一个低级错误:采样时刻没对准,结果电流波形全是毛刺,PID怎么调都调不好。后来用示波器一看,采样点正好在开关噪声最大的地方。
| 采样方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 单电阻 | 成本最低 | 算法复杂,低速性能差 | 低成本方案 |
| 双电阻 | 性价比高 | 需要两路ADC | 大多数工业应用 |
| 三电阻 | 精度最高 | 成本高,PCB面积大 | 高性能伺服 |
好了,这一章的内容就到这里。下一章咱们聊聊电流环的PID调参,那才是真正考验耐心的地方。记住,理论懂了只是开始,真正上手调的时候,你会发现每个电阻、每个电容都在跟你作对——但这就是工程师的乐趣,不是吗?