1. FOC控制基础:从电机模型到矢量控制的数学原理

各位同学,咱们开始第一讲。FOC,也就是磁场定向控制,说白了就是让电机转得又稳又准。我刚开始接触这玩意儿的时候,也觉得数学公式一堆,挺唬人的。但实际做项目多了你会发现,核心就那么几个变换,搞懂了,后面调电流环就是水到渠成的事。

这一章,咱们先把底层的电机模型和坐标变换讲透。你想想看,如果连电机怎么产生力矩都不清楚,那后面的PI参数整定、电流环优化,基本就是瞎调。

1.1 永磁同步电机的数学模型

咱们课程用的是表贴式永磁同步电机(SPMSM)。这种电机转子是永磁体,定子有三相绕组。通入三相交流电,定子产生旋转磁场,拉着转子转。

先看电压方程。在三相静止坐标系下,每一相的电压由电阻压降和电感压降组成,还有反电动势。公式长这样:

u_a = R_s * i_a + L_s * di_a/dt + e_a
u_b = R_s * i_b + L_s * di_b/dt + e_b
u_c = R_s * i_c + L_s * di_c/dt + e_c

其中 e_a、e_b、e_c 是反电动势,跟转子位置和转速有关。这里有个坑——三相之间还有互感,而且转子位置一变,电感也在变。直接在这套坐标系下算力矩,非常麻烦。

核心问题:三相静止坐标系下,电机模型是时变的、强耦合的。没法直接像控制直流电机那样,独立控制力矩和磁通。

那怎么办?换个坐标系看问题。这就是FOC的精髓——坐标变换。

1.2 Clark变换:三相变两相

Clark变换,也叫3s/2s变换。它的目标是把三相静止坐标系(a, b, c)投影到两相静止坐标系(α, β)上。α轴跟a轴重合,β轴超前α轴90度。

变换公式很简单:

i_α = i_a
i_β = (i_a + 2*i_b) / √3

如果三相电流平衡(i_a + i_b + i_c = 0),还可以简化成:

i_α = i_a
i_β = (i_a + 2*i_b) / √3

嗯,这里要注意。实际项目中,ADC采样回来的电流往往有偏置。我遇到过好几次,因为采样电阻的温漂导致Clark变换后的i_α、i_β有直流偏置,结果电机低速抖得厉害。后来加了软件高通滤波才解决。

我的经验:做Clark变换前,务必确认三相电流的零序分量已经滤除。否则变换后的αβ分量会包含直流偏置,导致后续Park变换出来的Id、Iq不准。

1.3 Park变换:静止变旋转

Clark变换只是把三相变成两相,但信号还是交流的。要让它变成直流,就得用Park变换。Park变换把αβ坐标系旋转到与转子同步的dq坐标系上。

变换公式:

i_d = i_α * cos(θ) + i_β * sin(θ)
i_q = -i_α * sin(θ) + i_β * cos(θ)

这里的θ是转子电角度,由编码器或霍尔传感器提供。变换之后,i_d是直轴电流,i_q是交轴电流。对于表贴式电机,力矩只跟i_q成正比:

T_e = 1.5 * p * ψ_f * i_q

你看,力矩控制变成了控制i_q这一个直流分量。这就是FOC为什么叫“磁场定向”——我们把磁场方向定在了d轴上,然后只控制q轴电流就能控制力矩。

避坑指南:我曾经在一个项目里,编码器安装有0.5度的机械偏差,换算成电角度偏差更大。结果Park变换后的i_d、i_q有高频纹波,电流环带宽怎么提都提不上去。后来用自整定补偿了角度偏移,问题才解决。所以,角度精度直接影响FOC性能。

1.4 坐标变换的完整流程

把Clark和Park串起来,就是FOC的电流采样链路:

  1. ADC采样三相电流 i_a、i_b、i_c
  2. Clark变换得到 i_α、i_β
  3. 读取转子电角度 θ
  4. Park变换得到 i_d、i_q
  5. i_d、i_q 送入PI控制器
  6. PI输出经过反Park变换得到 v_α、v_β
  7. SVPWM生成三相占空比

整个过程在中断里完成,GD32的FOC库通常把电流环频率设在10kHz-20kHz。我建议新手先从10kHz开始,等PI调稳了再往上提。

关键点:整个FOC的核心,就是通过坐标变换,把交流电机控制问题,变成了直流电机控制问题。你只需要调好d轴和q轴的两个PI环,就能独立控制磁通和力矩。

1.5 知识结构图

下面这张图,把FOC的坐标变换链路画清楚了。建议你保存下来,后面调参的时候对照着看。

FOC坐标变换链路 三相电流 i_a, i_b, i_c Clark变换 αβ坐标系 i_α, i_β Park变换 dq坐标系 i_d, i_q 转子角度 θ (电角度) 变换说明 • Clark变换:三相静止 → 两相静止,消除一相自由度 • Park变换:两相静止 → 两相旋转,把交流变直流 • 最终效果:i_d控制磁通,i_q控制力矩,互不干扰 • 角度精度直接影响Park变换质量,编码器校准很关键

1.6 变换前后的对比

为了让你更直观地理解坐标变换带来的好处,我整理了一个对比表:

对比项 三相静止坐标系 dq旋转坐标系
电流波形 正弦交流 直流(稳态时)
力矩控制 复杂,需同时控制三相 简单,只控制i_q
磁通控制 与力矩耦合 独立控制i_d
PI调节器 难以设计,带宽受限 标准PI即可,带宽高
工程实现 几乎不用 FOC标准做法

你看,从交流到直流,从耦合到解耦,这就是FOC的魔法所在。

1.7 工程实现要点

最后,聊几个实际部署时要注意的点:

  • 电流采样时序:GD32的ADC触发要跟PWM同步,一般在PWM载波的中点或边沿采样。我习惯在PWM中心对齐模式下,在计数器归零时触发ADC,这时候相电流最稳定。
  • 角度获取:用编码器的话,注意电角度 = 机械角度 * 极对数。霍尔传感器需要做角度插值,否则低速时角度跳变会导致电流抖动。
  • 变换精度:Clark和Park变换涉及三角函数和开方运算。GD32有硬件浮点单元(FPU),直接用float算就行。如果资源紧张,可以查表或CORDIC算法。
  • 反Park变换:PI输出的是v_d、v_q,要经过反Park变换得到v_α、v_β,再送入SVPWM模块。公式跟Park变换一样,只是把sin和cos的符号反过来。

我的建议:刚开始做FOC时,先用仿真工具(比如MATLAB/Simulink)把坐标变换搭一遍,输入三相正弦波,看输出的i_d、i_q是不是直流。这一步能帮你快速验证变换代码的正确性。

好了,这一章的内容就到这里。坐标变换是FOC的基石,后面的电流环、速度环、位置环,全是在这个基础上搭建的。把Clark和Park吃透,后面的路就好走了。