1. FOC控制基础:永磁同步电机数学模型、Clark变换与Park变换原理、SVPWM基本原理

各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在电机控制领域摸爬滚打了十几年的工程师。

第一节课,咱们不急着上代码,也不急着调参数。先把地基打牢。FOC(磁场定向控制)这东西,说白了就是一套“让电机听话”的数学魔术。你理解了背后的物理和数学,后面调SVPWM、整PI参数,才能做到心中有数,而不是瞎蒙。

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

先聊聊PMSM。我刚开始做电机驱动时,总觉得数学模型太抽象,什么电压方程、磁链方程,看着就头疼。后来踩过几次坑才明白——模型就是电机的“性格说明书”。

PMSM的定子跟普通电机差不多,但转子上贴了永磁体。这就带来了一个关键特性:转子磁场是固定的,不会像异步电机那样需要励磁电流。所以PMSM天生效率高、功率密度大,但也娇气——控制不好就容易失步、抖动。

咱们直接看最常用的 d-q 轴数学模型(在同步旋转坐标系下):

电压方程:
ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)

转矩方程:
Te = 1.5 * p * [ψf * iq + (Ld - Lq) * id * iq]

这里有几个关键点,我当年就吃过亏:

  • Rs:定子电阻。温度一变,它也跟着变。我遇到过冬天调试好的参数,夏天电机就嗡嗡响,查了半天发现是Rs变了。
  • Ld、Lq:d轴和q轴电感。表贴式电机Ld≈Lq,内嵌式电机Ld<Lq。这个差异直接决定了你是否能用“磁阻转矩”。
  • ψf:永磁体磁链。这是电机的“底牌”,温度越高它越小,高温下转矩会下降。
核心结论:FOC的本质,就是通过控制id和iq,间接控制转矩Te。id负责励磁(PMSM通常id=0控制),iq负责出力。

1.2 Clark变换与Park变换

为什么要做坐标变换?你想想看,电机里流的是三相交流电,但我们要控制的是转矩。转矩跟转子位置直接相关。把三相静止坐标系下的东西,转到跟转子一起转的d-q坐标系下,控制就变成了直流电机那样——简单、直观。

Clark变换(3相 → 2相静止)

把三相电流ia、ib、ic,投影到α-β两相静止坐标系上。公式很简单:

iα = ia
iβ = (ia + 2*ib) / √3

嗯,这里要注意,实际代码里为了归一化,通常会乘以系数。我个人习惯用等幅值变换,这样调试时数值更直观。

Park变换(静止 → 旋转)

把α-β坐标系下的值,旋转到与转子磁极对齐的d-q坐标系下。旋转角度就是转子位置角θ:

id = iα * cosθ + iβ * sinθ
iq = -iα * sinθ + iβ * cosθ

反过来,从d-q变回α-β叫反Park变换,SVPWM里要用到。

我的经验:调试时,先单独验证Clark和Park变换的代码。给一组已知的三相电流,手动算一遍期望的id/iq,再跟程序输出对比。这一步能筛掉90%的坐标变换bug。

为什么要有这两个变换?说白了,就是让控制环路能“看到”转子位置。没有Park变换,你根本不知道当前电流是产生转矩还是产生励磁。

1.3 SVPWM基本原理

SVPWM,空间矢量脉宽调制。这是FOC的“执行器”。前面算出了想要的电压矢量(ud、uq),怎么让三相逆变器输出这个电压?SVPWM就是干这个的。

它的核心思想:用8个基本电压矢量(6个非零矢量 + 2个零矢量),通过合成的方式,逼近任意方向、任意大小的电压矢量。

我画了一张图,帮你理解这8个矢量和扇区的关系:

SVPWM 基本电压矢量与扇区分布 扇区Ⅰ 扇区Ⅱ 扇区Ⅲ 扇区Ⅳ 扇区Ⅴ 扇区Ⅵ U₁(100) U₂(110) U₃(010) U₄(011) U₅(001) U₆(101) U₀(000) / U₇(111) 说明:6个非零矢量将平面分为6个扇区(Ⅰ~Ⅵ)。 任意目标电压矢量由所在扇区相邻的两个非零矢量 + 零矢量合成。

SVPWM的合成过程,我总结为三步:

  1. 判断扇区:根据Uα、Uβ的大小关系,确定目标矢量落在哪个扇区。
  2. 计算作用时间:算出相邻两个非零矢量(Tx、Ty)和零矢量(T0)各自该作用多久。
  3. 生成PWM占空比:根据Tx、Ty、T0,算出三相桥臂的导通时间,输出PWM波。
避坑指南:我曾经在GD32上实现SVPWM时,犯过一个低级错误——扇区判断的边界条件没处理好。当Uα=0或Uβ=0时,判断逻辑会进入死区,导致电机在过零点剧烈抖动。解决办法是给扇区判断加一个很小的滞回区间(比如±0.001)。

最后,我把FOC控制的核心流程整理成一张表,方便你对照:

步骤 输入 处理 输出
1. 电流采样 ia, ib, ic ADC采集,低通滤波 三相电流值
2. Clark变换 ia, ib 3相→2相静止 iα, iβ
3. Park变换 iα, iβ, θ 静止→旋转 id, iq
4. PI调节 id_ref, iq_ref, id, iq 电流环PI控制 ud, uq
5. 反Park变换 ud, uq, θ 旋转→静止 uα, uβ
6. SVPWM uα, uβ 扇区判断+时间计算 三相PWM占空比

嗯,这一章的内容就到这里。数学公式看着多,但真正写代码时,你会发现每一步都是固定的套路。后面几章,我们会把这些公式一行一行敲进GD32里,再配上示波器看波形——那才是真正有意思的部分。