2、电机控制基础回顾:永磁同步电机(PMSM)数学模型,坐标变换理论(Clark/Park)

好,咱们正式开始第二讲。在做转矩脉动抑制之前,有些基础东西必须得捋清楚。我个人习惯,不管项目多急,先把数学模型和坐标变换吃透,后面调参才能心里有底。你想想看,如果连电机怎么转的、电流怎么分解的都搞不明白,谈何抑制脉动?

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

PMSM 这东西,说白了就是一个转子带着永磁体转,定子绕组通电产生旋转磁场,两者相互作用产生转矩。我在项目中遇到过不少新手,一上来就盯着 FOC 代码看,结果连反电动势和电感参数都搞混了。嗯,这里要注意,数学模型是后面所有控制策略的根基。

2.1.1 三相静止坐标系下的方程

先看最原始的三相形式。定子电压方程长这样:

u_a = R_s * i_a + d(ψ_a)/dt
u_b = R_s * i_b + d(ψ_b)/dt
u_c = R_s * i_c + d(ψ_c)/dt

其中 ψ_a、ψ_b、ψ_c 是三相磁链,包含两部分:

  • 定子电流产生的自感和互感磁链
  • 转子永磁体产生的反电动势磁链

转矩方程呢?电磁转矩 T_e 等于磁链和电流的叉积。但在三相坐标系下,这玩意儿耦合得厉害,你根本没法直观地控制。我早期做项目时,试过直接在三相系里调 PI,结果调得我怀疑人生——因为三相电流互相影响,调一个轴另外两个就跟着乱跳。

核心痛点:三相坐标系下,电机模型是时变的、强耦合的。电感矩阵里含有转子位置角 θ,每转一度,参数就变一次。这谁受得了?

2.1.2 为什么要做坐标变换?

说白了,我们想把那个「时变耦合」的烂摊子,变成一个「时不变解耦」的清爽模型。就像你处理一个多变量系统,最好的办法就是把它解耦成几个独立的单变量系统。

坐标变换的核心思想:把三相交流量,变成两相直流量。这样一来,控制问题就从「跟踪正弦波」变成了「跟踪直流给定」,PI 控制器就能轻松搞定。

2.2 Clark 变换(3s/2s 变换)

Clark 变换,就是把三相静止坐标系(a, b, c)映射到两相静止坐标系(α, β)。我习惯叫它「降维打击」——把三个轴变成两个轴,但信息不丢失。

2.2.1 变换公式

等幅值变换(最常用的一种):

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

或者写成矩阵形式:

[ i_α ]   [ 1      -1/2    -1/2   ] [ i_a ]
[ i_β ] = [ 0      √3/2   -√3/2  ] [ i_b ]
[ i_0 ]   [ 1/2    1/2     1/2    ] [ i_c ]

注意,这里有个零序分量 i_0。对于星形连接且中线不引出的电机,i_a + i_b + i_c = 0,所以 i_0 恒为 0,可以忽略。

我的小技巧:实际代码实现时,我通常只算 i_α 和 i_β,零序分量直接扔掉。但如果你做的是容错控制或者非对称故障分析,那零序分量就得捡回来。

2.2.2 变换后的效果

做完 Clark 变换,你得到的是两个正交的正弦波(i_α 和 i_β)。它们仍然随着转子旋转而变化,频率和三相电流一样。但好处是:从三个变量变成了两个变量,而且这两个变量是正交的,物理意义更清晰。

我曾经在一个水泵项目里,直接用 Clark 变换后的 αβ 电流做滞环控制,效果居然还行。但说实话,要想做高性能转矩控制,还得继续往下走。

2.3 Park 变换(2s/2r 变换)

Park 变换才是真正的「魔法」。它把两相静止坐标系(α, β)旋转到两相旋转坐标系(d, q),让坐标系跟着转子一起转。

2.3.1 变换公式

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

其中 θ 是转子电角度,由位置传感器(编码器或霍尔)提供。

反过来,逆 Park 变换(从 dq 回到 αβ)也很常用:

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

2.3.2 为什么 dq 坐标系这么好用?

做完 Park 变换后,奇迹发生了:

  • i_d(直轴电流):控制磁通。在表贴式 PMSM 中,通常让 i_d = 0,因为永磁体已经提供了主磁通。
  • i_q(交轴电流):控制转矩。转矩和 i_q 成正比,T_e = 1.5 * p * ψ_f * i_q(表贴式)。

你看,转矩控制变成了一个简单的比例关系!这就是为什么 FOC(磁场定向控制)能成为主流——你只需要控制 i_q 就能直接控制转矩,而 i_d 负责弱磁或效率优化。

关键理解:在 dq 坐标系下,电机模型变成了时不变的。电感 L_d 和 L_q 是常数(不考虑饱和时),反电动势项也变成了简单的 ω_e * ψ_f。这意味着你可以用经典的线性控制理论来设计控制器。

2.4 坐标变换的工程实现要点

理论讲完了,咱们聊聊实战中容易踩的坑。

2.4.1 角度对齐问题

Park 变换用的角度 θ,必须是转子磁极的实际位置。如果编码器安装有偏差,或者初始角没找对,那 dq 轴就歪了。我曾经在一个伺服项目里,因为编码器零位偏了 5 度,结果 i_d 和 i_q 串扰严重,转矩脉动大了 30%。

避坑指南:上电后一定要做转子初始位置检测。常用的方法有:

  • 注入高频信号法(无传感器场景)
  • 预定位法(给一个固定电压矢量,把转子拉到已知位置)
  • 编码器零位标定(有传感器场景,出厂前做一次)

我建议量产项目至少用两种方法互相校验,别省这一步。

2.4.2 变换系数的选择

Clark 变换有两种常见形式:等幅值变换和等功率变换。区别在于系数:

变换类型 Clark 系数 Park 系数 特点
等幅值 2/3 1 变换前后电流幅值不变,方便调试
等功率 √(2/3) √(2/3) 变换前后功率不变,理论推导常用

我个人习惯用等幅值变换,因为示波器上看电流波形时,幅值直接对应实际值,心里有数。但如果你在做功率计算或者效率分析,记得用等功率变换,或者手动补偿系数。

2.4.3 离散化实现

代码里做 Park 变换,需要实时计算 sin(θ) 和 cos(θ)。我建议用查表法配合线性插值,或者直接用 C 标准库的 sinf/cosf(如果 MCU 有 FPU)。

一个常见的优化技巧:

// 预计算 sin 和 cos,避免重复调用
float sin_theta = sinf(theta);
float cos_theta = cosf(theta);

// Park 变换
float id = ialpha * cos_theta + ibeta * sin_theta;
float iq = -ialpha * sin_theta + ibeta * cos_theta;

注意,theta 是电角度,不是机械角度。极对数 p 别忘了乘上去:θ_e = p * θ_m。

2.5 从数学模型到转矩脉动抑制的桥梁

好了,现在你有了 dq 坐标系下的电机模型。你会发现,转矩脉动的根源无非是:

  • i_q 的波动:电流环带宽不够,或者反电动势补偿不准
  • i_d 的耦合:如果 i_d 没控好,会通过交叉耦合影响 i_q
  • 谐波成分:逆变器死区、电机反电动势谐波,会在 dq 轴产生 6 次、12 次谐波

后面的章节,我们会针对这些问题逐个击破。但今天这一讲,你得把坐标变换刻在脑子里——它是所有高级控制算法的基石。

我的建议:如果你刚开始学 FOC,别急着调参数。先在仿真里把 Clark/Park 变换的波形看明白。给一个恒定的 i_q 给定,看 i_α 和 i_β 是不是正弦波?看 i_d 是不是稳在 0 附近?这些基本功扎实了,后面事半功倍。

下一讲,咱们聊聊电流环的 PI 参数整定,以及怎么用前馈补偿干掉反电动势扰动。到时候我会分享一个我调过的「从震荡到稳定」的真实案例,保证让你有收获。