3. Simulink基础与电机模型搭建
各位同学好,我是你们的老朋友。今天咱们进入这门课的第一个实操环节——Simulink环境介绍和PMSM模型搭建。
说实话,我见过不少工程师,理论功底很扎实,但一打开Simulink就懵了。其实这玩意儿没那么玄乎,你把它当成一个搭积木的工具就行。今天我就带大家把这块积木搭起来。
3.1 Simulink环境介绍
Simulink是MATLAB家族里专门做动态系统仿真的工具。说白了,它就是个图形化的编程环境。你不需要写大段代码,拖拖拽拽就能把系统搭出来。
我个人习惯把Simulink界面分成三块:
- 模块库浏览器:左边这一栏,所有你能用的模块都在这里。电机控制常用的像PMSM模块、逆变器模块、PI控制器模块,都在Simscape Electrical里。
- 模型画布:中间这块大白板,就是你搭系统的地方。双击空白处可以直接搜索模块,这个快捷键我天天用。
- 仿真设置栏:顶部的工具栏,设置仿真时间、求解器类型这些参数。
我记得刚入行那会儿,有个老工程师跟我说:「Simulink里90%的报错都是求解器没选对。」这话一点不假。电机仿真一般用ode23t或者ode45,前者适合刚性系统,后者适合非刚性。PMSM模型我建议用ode23t,因为电机模型里时间常数差异很大,属于典型的刚性系统。
3.2 永磁同步电机(PMSM)数学模型
要搭模型,先得懂数学。PMSM的数学模型,说白了就是三个方程:电压方程、磁链方程、转矩方程。
电压方程(dq坐标系下):
ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)
这里ud、uq是d轴和q轴电压,Rs是定子电阻,Ld、Lq是d轴和q轴电感,ωe是电角速度,ψf是永磁体磁链。
你可能会问:「为什么非要用dq坐标系?」其实就是为了把交流量变成直流量,方便控制。三相交流电在静止坐标系下是正弦波,控制起来很麻烦。但转到旋转的dq坐标系下,就变成了直流分量,用PI控制器就能搞定。
磁链方程:
ψd = Ld * id + ψf
ψq = Lq * iq
转矩方程:
Te = 1.5 * p * (ψd * iq - ψq * id)
= 1.5 * p * (ψf * iq + (Ld - Lq) * id * iq)
这里p是极对数。注意看,转矩由两部分组成:ψf * iq是永磁转矩,(Ld - Lq) * id * iq是磁阻转矩。对于表贴式PMSM,Ld = Lq,磁阻转矩为零。对于内置式PMSM,Ld < Lq,可以利用磁阻转矩来提高效率。
iq产生脉动,齿槽转矩是电机结构本身带来的。后面几章我们会专门讲怎么抑制它们。
3.3 在Simulink中搭建PMSM模型
好,理论讲完了,咱们动手搭模型。我一般分三步走:
3.3.1 方法一:使用Simscape Electrical自带模块
这是最省事的办法。Simscape Electrical里有个现成的PMSM模块,参数填进去就能用。
操作路径:Simscape > Electrical > Specialized Power Systems > Electric Drives > Permanent Magnet Synchronous Motor
参数设置界面长这样:
| 参数名 | 典型值 | 说明 |
|---|---|---|
| Stator resistance (Rs) | 0.05 Ω | 定子电阻,越小效率越高 |
| Inductances (Ld, Lq) | 0.0008 H, 0.0008 H | 表贴式电机Ld=Lq |
| Flux linkage (ψf) | 0.175 Wb | 永磁体磁链 |
| Pole pairs (p) | 4 | 极对数 |
| Inertia (J) | 0.001 kg·m² | 转动惯量 |
ψf值跟实际电机对不上。所以,参数一定要从电机手册里查,或者用实验测。
3.3.2 方法二:基于数学方程手动搭建
如果你想深入理解电机内部机理,我建议自己搭一遍。用到的模块很简单:
- 积分器(Integrator):把微分方程变成积分形式
- 增益模块(Gain):乘以系数
- 加法器(Sum):加减运算
- 乘法器(Product):乘法运算
- 三角函数(Trigonometric Function):做坐标变换
具体搭建步骤:
- 先搭电压方程:用加法器和增益模块实现
ud和uq的计算 - 再搭电流方程:对电压方程积分得到
id和iq - 然后搭转矩方程:用乘法器和增益模块计算
Te - 最后搭机械方程:
Te - Tl = J * (dωm/dt),积分得到转速
我给你们看一段核心的代码实现,这是我在MATLAB Function里写的:
function [id, iq, Te, omega_m] = PMSM_model(ud, uq, Tl, omega_m_prev, id_prev, iq_prev)
% 参数定义
Rs = 0.05; % 定子电阻
Ld = 0.0008; % d轴电感
Lq = 0.0008; % q轴电感
psi_f = 0.175; % 永磁体磁链
p = 4; % 极对数
J = 0.001; % 转动惯量
B = 0.0001; % 阻尼系数
dt = 1e-6; % 仿真步长
% 电角速度
omega_e = p * omega_m_prev;
% 电流微分方程(欧拉法离散化)
did_dt = (ud - Rs * id_prev + omega_e * Lq * iq_prev) / Ld;
diq_dt = (uq - Rs * iq_prev - omega_e * (Ld * id_prev + psi_f)) / Lq;
id = id_prev + did_dt * dt;
iq = iq_prev + diq_dt * dt;
% 转矩计算
Te = 1.5 * p * (psi_f * iq + (Ld - Lq) * id * iq);
% 机械方程
domega_dt = (Te - Tl - B * omega_m_prev) / J;
omega_m = omega_m_prev + domega_dt * dt;
end
这段代码用的是欧拉法离散化,简单直观。实际项目中我更喜欢用四阶龙格-库塔法,精度更高。但教学嘛,先让大家看懂原理。
3.3.3 两种方法的对比
| 对比项 | 自带模块法 | 手动搭建法 |
|---|---|---|
| 搭建速度 | 快,5分钟搞定 | 慢,至少半小时 |
| 灵活性 | 低,只能改参数 | 高,可以加自定义逻辑 |
| 学习价值 | 低 | 高,能深入理解机理 |
| 仿真速度 | 快(优化过) | 取决于代码质量 |
我个人建议:初学者先用自带模块跑通整个系统,再回头用手动搭建法加深理解。两条腿走路,稳得很。
ωe * Lq * iq这个耦合项,结果仿真出来的电流波形完全不对。检查了两天才发现。所以,搭建完一定要跟自带模块的结果做对比验证。
3.4 模型验证
模型搭完了,怎么知道对不对?我一般做三个测试:
- 空载启动测试:给定一个阶跃转速指令,看电机能不能平稳启动。正常情况电流先冲上去,然后回落,转速慢慢上升。
- 负载突变测试:在稳态运行时突然加负载,看转速跌落多少、恢复多快。这个能检验模型的动态响应。
- 稳态精度测试:让电机恒速运行,看转速误差在多少以内。一般要求误差小于1%。
嗯,今天就先讲到这里。下一章咱们开始讲转矩波动的来源,以及怎么用Simulink分析它。大家回去先把PMSM模型搭起来,有问题随时问我。