第三节:电机模型基础——PMSM数学模型与坐标变换的HIL实现
各位同学,咱们今天聊聊永磁同步电机(PMSM)的数学模型。说实话,很多做HIL测试的工程师,一上来就急着搭模型、跑仿真,结果波形一塌糊涂,根本不知道问题出在哪。我当年也踩过这个坑——模型参数没搞对,Clark变换符号反了,折腾了两天才发现是坐标轴定义的问题。
所以这节课,咱们把基础打扎实。你想想看,HIL测试的核心是什么?就是用真实的控制器去驱动一个虚拟的电机。这个虚拟电机要是模型不准,那测试结果就是废纸一张。
3.1 PMSM的数学模型——别被公式吓到
永磁同步电机的数学模型,说白了就是三个方程:电压方程、磁链方程、转矩方程。咱们先看最常用的d-q轴模型。
电压方程:
ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)
这里有个细节我提醒一下:ωe是电角速度,不是机械角速度。我在项目中遇到过有人直接把电机转速代进去,结果算出来的反电动势差了极对数倍。嗯,这个坑很常见。
磁链方程:
ψd = Ld * id + ψf
ψq = Lq * iq
转矩方程:
Te = 1.5 * p * (ψd * iq - ψq * id)
= 1.5 * p * (ψf * iq + (Ld - Lq) * id * iq)
注意看,转矩由两部分组成:永磁转矩(ψf * iq)和磁阻转矩((Ld-Lq)*id*iq)。对于表贴式PMSM,Ld≈Lq,磁阻转矩基本为零。但内嵌式PMSM就不一样了,Ld明显小于Lq,这时候可以利用磁阻转矩来提高效率。我做过一个项目,通过优化id电流分配,把电机效率提升了3个百分点。
关键参数表:
| 符号 | 含义 | 单位 | 典型值范围 |
|---|---|---|---|
| Rs | 定子电阻 | Ω | 0.01~1 |
| Ld, Lq | d/q轴电感 | mH | 0.1~10 |
| ψf | 永磁体磁链 | Wb | 0.01~0.5 |
| p | 极对数 | - | 2~8 |
3.2 Clark变换与Park变换——坐标变换的本质
为什么要做坐标变换?说白了,就是把三相交流量变成两相直流量。这样PID控制器才好使。你想想看,如果直接控制三相正弦电流,那控制器得追着正弦波跑,稳态误差永远消不掉。
Clark变换(3相→2相静止坐标系):
[iα] [1 -1/2 -1/2 ] [ia]
[iβ] = [0 √3/2 -√3/2 ] [ib]
[ic]
这里用的是等幅值变换。我个人习惯用等幅值,因为这样变换前后电流幅值不变,调试时直观。也有用等功率变换的,但那个系数不同,注意别混用。
Park变换(静止→旋转坐标系):
[id] [cosθ sinθ] [iα]
[iq] = [-sinθ cosθ] [iβ]
θ是转子电角度。这个角度从哪里来?在HIL中,通常由电机模型内部的积分器给出。我见过有人直接用外部信号给角度,结果模型和控制器不同步,电流波形乱成一团。
我的经验:在HIL中实现坐标变换时,建议把Clark和Park分开写两个函数。这样调试时可以单独验证每一步。我曾经遇到一个问题,id和iq有直流偏置,查了半天发现是Clark变换的系数写错了。
3.3 HIL中的实现——代码怎么写
好了,理论讲完了,咱们看看在HIL平台上怎么实现。以下是一个典型的PMSM模型核心代码,用C语言风格写的:
// PMSM模型单步更新函数
void PMSM_Step(float ud, float uq, float dt, float wm,
float *id, float *iq, float *te, float *theta) {
// 电流微分方程(前向欧拉法)
float did_dt = (ud - Rs * (*id) + we * Lq * (*iq)) / Ld;
float diq_dt = (uq - Rs * (*iq) - we * (Ld * (*id) + psi_f)) / Lq;
// 更新电流
*id += did_dt * dt;
*iq += diq_dt * dt;
// 计算电磁转矩
*te = 1.5f * p * (psi_f * (*iq) + (Ld - Lq) * (*id) * (*iq));
// 更新电角度
float we = p * wm; // 电角速度
*theta += we * dt;
*theta = fmod(*theta, 2 * PI); // 限制在0~2π
}
注意几个关键点:
- 步长选择:dt一般取1~10μs。太大模型会发散,太小仿真速度跟不上。我一般取5μs,兼顾精度和实时性。
- 数值稳定性:前向欧拉法简单,但步长太大容易不稳定。如果发现电流振荡,试试减小步长,或者改用梯形法。
- 角度处理:一定要做模运算,否则角度会溢出。我见过有人忘了这步,跑了10分钟模型就崩了。
避坑指南:我曾经在HIL测试中遇到一个诡异问题——电机低速时转矩波动很大。查了两天,发现是角度更新时用了机械角速度,忘了乘极对数。嗯,这种低级错误,犯过一次就再也不会忘了。
3.4 反Park变换——把控制量送回三相
控制器输出的是ud、uq,但最终要加到三相绕组上。所以需要反Park变换和反Clark变换:
// 反Park变换
uα = ud * cosθ - uq * sinθ;
uβ = ud * sinθ + uq * cosθ;
// 反Clark变换(等幅值)
ua = uα;
ub = -0.5f * uα + 0.866f * uβ;
uc = -0.5f * uα - 0.866f * uβ;
这里有个细节:反Clark变换的系数要和正变换一致。如果你正变换用的是等幅值,反变换也要用等幅值。混用的话,电压幅值会差1.5倍。
3.5 模型验证——怎么知道模型对不对
模型搭好了,怎么验证?我一般做三个测试:
- 空载反电动势测试:给电机一个转速,看三相端电压是不是正弦波,幅值对不对。公式是E = ωe * ψf。
- 堵转测试:转子固定,给三相通直流电,看转矩是不是和电流成正比。这时候id=0,转矩只和iq有关。
- 阶跃响应测试:给一个iq阶跃,看电流响应时间常数是不是τ = Lq/Rs。
这三个测试都过了,模型基本就靠谱了。我有个习惯,每次换电机参数后,先跑一遍这三个测试,再开始正式的HIL测试。磨刀不误砍柴工嘛。
总结一下:
- PMSM模型的核心是d-q轴电压方程和转矩方程
- Clark/Park变换把三相交流变两相直流,方便控制
- HIL实现时注意步长、数值稳定性和角度处理
- 模型验证三步走:空载、堵转、阶跃响应
下节课咱们聊逆变器模型和PWM调制在HIL中的实现。到时候我会分享一个我踩过的坑——死区时间对电流波形的影响,那真是让人头大。咱们下次见。