2. 永磁同步电机(PMSM)基础:数学模型、坐标变换(Clark/Park)

好,咱们正式开始啃硬骨头了。这一章是后面所有无感启动算法的基础,说白了,你如果不懂PMSM的数学模型和坐标变换,后面那些观测器、估算器根本玩不转。我自己带新人时,发现很多人卡就卡在这里——公式看得懂,但不知道为什么这么干。

咱们换个思路,先搞清楚一个问题:为什么非要做坐标变换?

你想想看,电机里面三相电流是交流的,互相差120度,还在不停旋转。你让一个单片机去控制这种时变系统,难度很大。但如果我能把这三相交流量,变成两个直流量,一个控制磁通,一个控制转矩,那控制起来就跟调直流电机一样简单了。这就是坐标变换的终极目的。

2.1 PMSM的物理模型与基本假设

先看电机长什么样。永磁同步电机,转子是永磁体,定子有三相绕组。我给个简化模型:

PMSM 简化物理模型(2对极) 定子(三相绕组) N S 转子永磁体 A相 B相 C相 ω 气隙

做数学建模前,得先做点简化。不然模型太复杂,没法用。我一般跟团队说:先抓住主要矛盾,次要因素后面再补偿。

建模基本假设:

  • 忽略铁芯饱和(磁路是线性的)
  • 忽略涡流和磁滞损耗
  • 定子绕组三相对称,空间互差120°
  • 转子永磁体产生的气隙磁场为正弦分布
  • 忽略温度对参数的影响(这个后面再补偿)

2.2 三相静止坐标系下的数学模型

有了假设,咱们就能列方程了。PMSM在三相静止坐标系(ABC坐标系)下的电压方程长这样:

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 = L_aa * i_a + M_ab * i_b + M_ac * i_c + ψ_f * cos(θ_e)
ψ_b = M_ba * i_a + L_bb * i_b + M_bc * i_c + ψ_f * cos(θ_e - 120°)
ψ_c = M_ca * i_a + M_cb * i_b + L_cc * i_c + ψ_f * cos(θ_e + 120°)

看着就头疼,对吧?这里面L和M都是随转子位置变化的,是个时变系统。你让单片机实时算这玩意儿,算力根本扛不住。所以必须做坐标变换,把这些时变量变成常量。

我的经验:在实际项目中,我从来不会在代码里直接用ABC坐标系下的方程做控制。它只用来做仿真验证,或者推导变换矩阵。真正跑在MCU上的,都是DQ轴下的模型。

2.3 Clark变换:从ABC到αβ

Clark变换是第一步。它的目标是把三相(A、B、C)变成两相(α、β)。说白了,就是降维。

为什么能降?因为三相电流满足 i_a + i_b + i_c = 0(星形接法,中线不引出)。所以三个变量里只有两个是独立的。

变换公式如下(等幅值变换):

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 = 0,可以忽略。

避坑指南:我曾经在一个项目里吃过亏——Clark变换有两种常用形式:等幅值变换和等功率变换。两者的系数不同。如果你后面要做功率计算(比如效率分析),必须用等功率变换,否则算出来是错的。我那次就是仿真和实测对不上,查了两天才发现是变换系数没统一。

两种变换的系数对比如下:

变换类型 α轴系数 β轴系数 适用场景
等幅值变换 1 1/√3 电流环控制(最常用)
等功率变换 √(2/3) √(2/3) 功率计算、效率分析

2.4 Park变换:从αβ到DQ

Clark变换做完,我们得到了αβ坐标系下的两相交流量。但问题来了——它还是交流的,频率跟着电机转速变。PID控制器对交流信号的跟踪效果很差,会有稳态误差。

Park变换就是来解决这个问题的。它把静止的αβ坐标系,旋转到跟转子同步的DQ坐标系上。这样一来,基波分量就变成了直流量。

变换公式:

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

其中 θ_e 是转子电角度。这里有个关键点:θ_e 必须准确。如果角度有误差,DQ轴之间会耦合,控制性能直接拉胯。

物理意义:

  • d轴(直轴): 与转子磁极方向对齐,控制 i_d 就是控制励磁分量。对于表贴式PMSM,通常让 i_d = 0。
  • q轴(交轴): 与转子磁极方向垂直,控制 i_q 就是控制转矩。你踩油门,本质上就是在调 i_q。

2.5 DQ坐标系下的数学模型

经过Clark+Park变换,PMSM的数学模型终于变得清爽了:

u_d = R_s * i_d + L_d * di_d/dt - ω_e * L_q * i_q
u_q = R_s * i_q + L_q * di_q/dt + ω_e * (L_d * i_d + ψ_f)

电磁转矩方程:

T_e = 1.5 * p * [ψ_f * i_q + (L_d - L_q) * i_d * i_q]

看到没?所有时变系数都消失了。L_d和L_q变成了常数(对于凸极率低的电机,L_d ≈ L_q)。控制 i_d 和 i_q 就像控制两个独立的直流电机一样。

这里面有个细节值得注意:

  • 第一项 ψ_f * i_q:永磁转矩,是主要的转矩来源。
  • 第二项 (L_d - L_q) * i_d * i_q:磁阻转矩,只有凸极电机(L_d ≠ L_q)才有。内嵌式PMSM可以利用这个做弱磁控制,提升高速性能。

2.6 完整的坐标变换流程

我把整个流程串起来,画了张图,你一看就明白:

坐标变换完整流程 三相电流 i_a, i_b, i_c Clark变换 ABC → αβ Park变换 αβ → DQ DQ电流 i_d, i_q θ_e 转子位置 逆Park变换 DQ → αβ 逆Clark变换 αβ → ABC SVPWM调制

你看,整个流程是双向的:

  • 正向(采样→控制): 采集三相电流 → Clark变换 → Park变换 → 得到i_d、i_q → 送入PI控制器
  • 反向(控制→输出): PI输出u_d、u_q → 逆Park变换 → 逆Clark变换 → 得到三相占空比 → SVPWM输出

实现建议:我习惯在代码里把Clark和Park合并成一个函数,减少中间变量的存储。对于Cortex-M4以上的MCU,用浮点运算直接算,一个变换也就几十个周期。如果是M0这种低端芯片,可以用查表法做sin/cos,速度更快。

2.7 常见问题与避坑

做坐标变换时,有几个坑我踩过,分享给你:

问题 现象 原因 解决办法
电流采样时序不对 变换后i_d、i_q有高频噪声 采样点没在PWM中心对齐 用PWM中心触发ADC,保证采样时刻电流稳定
角度滞后 转矩波动,效率下降 角度更新频率低于电流环频率 角度插值,或提高角度采样率
变换系数不一致 仿真和实测对不上 Clark用了等幅值,逆变换用了等功率 正逆变换必须用同一套系数
零漂未校准 i_d有直流偏置 电流传感器零漂未消除 上电时做零漂校准,减去偏置值

特别提醒:无感启动时,初始位置角是未知的。如果你直接用错误的θ_e做Park变换,i_d和i_q会完全乱掉。这就是为什么无感启动需要专门的预定位或高频注入策略——先确定转子位置,再做坐标变换。这部分后面章节会详细讲。

嗯,这一章的内容就到这儿。数学公式不少,但核心思想其实很简单:把交流变直流,把时变变时不变。你把这个逻辑刻在脑子里,后面学观测器、学无感算法,就会觉得顺理成章。