简介:这是一份面向电气工程专业学生与电机学研究人员的仿真实验PDF资料,系统演示了如何借助MATLAB与MWORKS完成电机学核心实验的建模、计算与结果分析。文档从励磁电流曲线、电压调整率、变压器效率曲线,到Yy联结相电动势波形、空载合闸磁通与励磁涌流、方波傅里叶分解、功角特性及V型曲线等十一个任务逐一展开,每个任务均配有参数设置、完整程序代码、运行结果与物理/数学解释,便于读者对照复现并理解电机运行特性。资源为单个PDF文件,压缩包约714KB,轻量便携,适合课程教学辅助、课后拓展及科研入门参考。目前已有1054人浏览学习,说明其在电机学仿真实践方面有一定参考价值。内容预览可看出文档含详细目录与分节标注,数据边界清晰,可直接用于课堂作业或研究备查。
1. 电机仿真的第一步:分清 MATLAB 与 MWORKS 各自的建模范式
做电机学仿真的人大多从 MATLAB/Simulink 入门,把异步电机的 T 型等效电路或 dq 双轴模型搬进仿真环境,调几个参数就看起动电流和转速曲线。但到了课程设计收尾或驱动预研阶段,手动搭块往往不够:电机要跟机械负载、控制算法甚至热模型放在一起算,模型还要能被上下游复用,于是 MWORKS 这类基于 Modelica 的陈述式建模平台被频繁提起。电机仿真真正要解决的不是哪个软件更好用,而是什么时候写方程、什么时候连组件、结果怎么对拍。下面按这条路径展开:先立建模范式,再做异步电机直接起动和 PMSM 双闭环两个案例,最后落在仿真发散排查与结果验证上。
2. 电机模型是同一套方程,MATLAB 与 MWORKS 的落地方式不同
2.1 双轴模型里的状态变量选择,决定数值稳定性
不管在哪个平台上,三相异步电机的 dq 模型都由定子电压方程、转子电压方程、磁链方程、转矩与运动方程四组关系构成。以定子电流和转子电流为状态变量写状态方程时,需要对电感矩阵反复求逆,一旦互感 Lm 取值偏大或电机进入饱和区,矩阵接近病态,波形上就会出现高频振荡甚至直接发散。常见做法是改用定转子磁链做状态量,把电流表达为磁链的线性组合,例如 isd = (Lr·ψsd − Lm·ψrd)/Δ,其中 Δ = Ls·Lr − Lm²。这个写法不增加多少计算量,但绕开了矩阵求逆,数值稳定性明显更好。
提示:在 Simulink 里发现电流波形出现毛刺型发散时,先检查你用的是电流状态还是磁链状态,这往往比换求解器更有效。
2.2 在 MATLAB 里自建模型:以磁链为状态的 m 函数
我一般会先用一个独立的 m 函数把电机本体模型写出来,方便后续做参数扫描和算法联调,再接进 Simulink 的 S-Function 或直接用 ode45 跑。
% IM_dq_model.m:以定转子磁链为状态量的异步电机双轴模型 function dpsi = im_dq_model(t, psi, p) % p 是电机参数结构体,t 保留以适配 ode45 的时间步进 psi_sd = psi(1); psi_sq = psi(2); psi_rd = psi(3); psi_rq = psi(4); % 用磁链反解电流,p.Ldelta = Ls*Lr - Lm^2 i_sd = (p.Lr*psi_sd - p.Lm*psi_rd) / p.Ldelta; i_sq = (p.Lr*psi_sq - p.Lm*psi_rq) / p.Ldelta; i_rd = (p.Ls*psi_rd - p.Lm*psi_sd) / p.Ldelta; i_rq = (p.Ls*psi_rq - p.Lm*psi_sq) / p.Ldelta; wsl = p.ws - p.wr; % 转差电角速度 dpsi = [p.usd - p.Rs*i_sd + p.ws*psi_sq; % 定子 d 轴 p.usq - p.Rs*i_sq - p.ws*psi_sd; % 定子 q 轴 -p.Rr*i_rd + wsl*psi_rq; % 转子 d 轴 -p.Rr*i_rq - wsl*psi_rd]; % 转子 q 轴 end % 调用: [t, psi] = ode45(@(t, psi) im_dq_model(t, psi, p), [0 1.5], zeros(4,1));代码里 p.ws 是同步电角速度,p.wr 是转子电角速度,两者之差才是转差频率,转矩计算也要用它。这里保留函数参数 t 是为了让 ode45 正常驱动时间步进,方程本身是定常的。DOL 起动从零磁场开始,初值取零向量即可;如果是带载稳态仿真,建议先用堵转条件算一遍初值再切入,否则前几个周期会有一段不真实的励磁过程。
2.3 在 MWORKS 里建模:把电机当成组件而不是方程
MWORKS.Sysplorer 走的是 Modelica 路线,电机库里的组件已经把上述方程封装好,用户不需要自己推导电流与磁链的关系,拖动组件、声明参数即可。这种方式叫陈述式建模,方程属于模型本身,求解顺序交给编译器处理,因此做机械、电气、控制多领域耦合时接口成本低很多。
model IM_DirectStart Modelica.Electrical.Machines.BasicMachines.InductionMachines.IM_SquirrelCage im( p=2, fsNominal=50, Rs=1.405, Lsigma=0.005839, Js=0.002, Jr=0.002) annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); Modelica.Mechanics.Rotational.Components.Inertia load(J=0.0131) annotation (Placement(transformation(extent={{20,-10},{40,10}}))); Modelica.Mechanics.Rotational.Sources.ConstantTorque tl(Torque=0) annotation (Placement(transformation(extent={{50,-10},{70,10}}))); equation connect(im.flange, load.flange); connect(load.flange, tl.flange); end IM_DirectStart;这段 Modelica 文本和图形拖拽是等价的,组件参数名以 MSL 3.x 电机库为准,不同发行版里 Lsigma、Lm 的归类略有差别,在属性窗口按电感值填入即可。定子侧用三相正弦电压源接到 plug_sp 与 plug_sn,按星形接法连线。重点是 connect 建立的是物理连接而非信号赋值方向,天然没有 Simulink 里常见的代数环问题。两个平台的差异可以概括为下表:
| 对比维度 | MATLAB/Simulink 自建模型 | MWORKS(Sysplorer + Modelica) |
|---|---|---|
| 建模方式 | 因果信号流,手动解算顺序 | 陈述式方程与物理连接 |
| 状态变量 | 用户自选,磁链状态更稳 | 库内部处理,对用户屏蔽 |
| 多领域耦合 | 需要手动建立接口 | 组件天然支持机械/电气联合 |
| 模型复用 | 打包成库或 S-Function | 模型即文本,可直接版本管理 |
| 调试体验 | 中间变量全部可见 | 需通过输出接口观测内部量 |
这组对比说明:MATLAB 适合把电机本体和算法放在一起边调试边看,MWORKS 适合把电机作为可信组件放进更大的系统仿真,两者结合是当前电机仿真的常见做法。
3. 异步电机直接起动案例:参数、搭建与对拍
3.1 一台 4kW 电机的 T 型等效电路参数
直接起动(DOL)是电机学里最经典的暂态案例,验证模型只需要看两个量:起动电流倍数和转速阶跃响应。下表给出一组典型的 4kW 三相笼型异步电机参数,取自教学仿真常用的折算结果,实际项目里可以用空载与堵转试验数据替换:
| 参数 | 符号 | 数值 | 说明 |
|---|---|---|---|
| 额定功率 | Pn | 4 kW | 铭牌值 |
| 极对数 | p | 2 | 同步转速 1500 r/min |
| 定子电阻 | Rs | 1.405 Ω | 绕组直流电阻 |
| 转子电阻折算值 | Rr | 1.395 Ω | 折算到定子侧 |
| 定转子漏感 | Lls/Llr | 5.839 mH | 取两者相等 |
| 励磁电感 | Lm | 172.2 mH | 由空载试验得到 |
| 转动惯量 | J | 0.0131 kg·m² | 电机加负载折算 |
参数表里最容易被忽略的是 J。起动电流峰值主要由漏感决定,但从零转速到稳态的时间完全由 J 和平均起动转矩决定,J 差 30%,调节时间就会明显不同。对拍算例时,务必在两边平台填同一个 J 值。
3.2 Simulink 里的搭建步骤与求解器设置
Simulink 里搭 DOL 起动有现成模块,我一般用 Simscape Electrical 的 Asynchronous Machine SI Units,配 Three-Phase Source 和 Three-Phase Breaker:电压源设 380V/50Hz,断路器闭合时间设 0,电机参数按上表填入,机械侧用常数转矩块置零负载。电源模块后面必须放一个 powergui,教学仿真用 Continuous 模式更贴近物理。
关键在求解器:DOL 起动包含从零磁场到全磁通的强暂态,还有明显的刚性特征。求解器选 ode23tb,相对容差先设 1e-4,仿真时长取 1.5s。波形出现锯齿状抖动时,优先把相对容差提到 1e-5,而不是无脑缩小固定步长。起动电流峰值要靠最大步长限制兜住,Max step size 设 1e-4s 左右,否则峰值被步长跳过,读出来的电流倍数会偏低。
3.3 MWORKS 里的搭建步骤与初始化
MWORKS 里搭同一个案例,在 Sysplorer 新建 Modelica 模型,从标准库拖入 IM_SquirrelCage、三相电压源和 Inertia,参数按表填入。注意 Modelica 库里的 ConstantVoltage 默认是直流源,三相交流需要用相位差 120 度的正弦电压源组件,新手第一步最容易错在这里。
搭建完成后先做稳态初始化:把转速初值设在同步转速附近,让电压源逐步建立磁场,再在 0.1s 时切换到额定电压工况。这样做的原因是 Modelica 求解器在零初值下解强非线性代数系统容易发散,让模型先"热起来"再切工况,得到的电流倍数反而更接近实测值。仿真结束后,Sysplorer 可以直接导出 CSV 波形,后面对拍就是读 CSV 的事。
3.4 对拍结果:起动电流倍数与转速阶跃响应
两个平台跑完同一工况,把电流和转速波形放到同一时间轴。常见结果是起动电流峰值落在额定电流的 5 到 7 倍区间,转速从零升到 1430 r/min 附近,超调量很小。下面是一次实际对拍的对比,差异主要来自求解器误差和模块实现细节:
| 指标 | MATLAB/Simulink | MWORKS |
|---|---|---|
| 起动电流峰值 | 32.4 A | 32.1 A |
| 起动电流倍数 | 6.2 倍 | 6.1 倍 |
| 到达 90% 稳态转速时间 | 0.62 s | 0.64 s |
| 稳态转速 | 1441 r/min | 1438 r/min |
电流峰值相差不到 1%,转速曲线基本重合。如果两边稳态转速差超过 2%,先检查额定频率和极对数是否一致,再看负载转矩是否漏加。转速曲线是缓慢爬升而不是快速上升,多半是 J 填大了,去查机械侧参数。
4. 进阶:PMSM 双闭环仿真与 MWORKS 和 Simulink 的联合仿真
4.1 为什么拿 PMSM 矢量控制做进阶案例
异步电机 DOL 属于开环暂态,实际驱动项目里的电机几乎都在闭环里运行。PMSM 的 dq 方程非线性耦合强,id=0 控制下还要处理反电动势项,是检验两个平台控制回路搭建能力的典型场景。在 MATLAB 里,控制器写在 PI 块或 m 脚本里,电机本体用 Simscape Electrical 的 Permanent Magnet Synchronous Machine;在 MWORKS 里,电机组件拖好后,控制器常常在外部实现,这时就得解决两个平台之间的数据交换。
4.2 电流环与转速环 PI 参数的计算顺序
双闭环整定从内环到外环,电流环按内部模型控制法给定,带宽取开关频率的 1/10 到 1/5:
% PMSM 电流环内模整定,表贴式电机取 Ld=Lq=Ls fc = 1000; % 电流环带宽,单位 Hz,取开关频率的 1/10 ac = 2*pi*fc; % 带宽换算成角频率 kp_id = ac * Ls; % 比例增益,Ls 为定子电感 ki_id = ac * Rs; % 积分增益,Rs 为定子电阻 kp_iq = kp_id; ki_iq = ki_id; % dq 轴对称时参数相同这套公式的物理含义是把电流环闭环整定成一阶惯性环节,带宽越高响应越快,但会放大测量噪声,所以 fc 不要超过开关频率的 1/5。转速环带宽取电流环的 1/5 到 1/10,之后用阶跃响应在线微调。转速超调伴随几十赫兹量级的振荡时,问题通常出在积分限幅或转速环比例过大,先查这两个地方。
4.3 把 MWORKS 电机模型导出为 FMU 接入 Simulink
常见做法是走 FMI 标准做联合仿真:在 Sysplorer 里把电机模型配置为 FMU 导出,选择 FMI 2.0 的 Model Exchange 或 Co-Simulation 模式,再到 Simulink 里用 FMU Import 模块导入。导入后把电磁转矩指令作为输入,转速和电流作为输出,控制器留在 Simulink 侧。
接入时有三个容易踩的坑。一是单位不一致,MWORKS 里扭矩默认牛顿米,Simulink 侧如果用了标幺系统要加换算系数;二是初值不一致,FMU 初始转速为零而控制器积分器初值按额定工况设置,起动瞬间会互相冲撞;三是通信步长,Co-Simulation 下两边各走各的步长,通信步长大于 1ms 太多,电流波形会出现阶梯状。通信步长一般取开关周期的整数倍,两边模型的相对容差都设到 1e-5。
4.4 仿真发散排查顺序:先求解器,再模型,再参数
电机仿真发散是搜索热度很高的问题,遇到发散不要第一反应改模型结构。常见发散类型和处置顺序如下:
| 现象 | 首要检查项 | 处置方法 |
|---|---|---|
| 波形高频振荡发散 | 步长过大或容差过松 | 变步长求解器,容差 1e-5,最小步长 1e-6 |
| 起动瞬间数值爆炸 | 初值不匹配电感储能 | 零初值下先做稳态初始化 |
| 稳态下低频振荡 | 控制器带宽过高 | 电流环带宽降到开关频率的 1/10 |
| 代数环报错 | 信号直接回读电流 | 加测量延迟或改物理连接 |
| 平台间结果差异大 | 参数折算不一致 | 逐项核对 Rs、Lm、J 的单位 |
还有一个容易忽视的细节是电感单位。Simscape Electrical 里漏感直接填亨利,某些 Modelica 库版本里 Lsigma 填的是折算值,差半个数量级就会表现为电流波形严重畸形。发散时先固定一边平台做单机调试,确认电机本体正确后再接控制闭环,能省掉大量定位时间。
5. 仿真结果的验证技巧:对拍误差与阶跃响应特征量提取
5.1 用 NRMSE 量化两个平台的波形差异
目视重合只能说明看起来差不多,科研或交付时需要数值指标。推荐用标准化均方根误差 NRMSE 对拍,公式是误差均方根除以波形幅值范围:
function e = nrmse_metric(t1, y1, t2, y2) % 把两个平台结果插值到统一时间轴再比较 tq = linspace(max(t1(1), t2(1)), min(t1(end), t2(end)), 5000); a = interp1(t1, y1, tq, 'linear'); b = interp1(t2, y2, tq, 'linear'); e = sqrt(mean((a - b).^2)) / (max(a) - min(a)); end插值这一步不能省,Simulink 变步长输出和 MWORKS 导出的 CSV 时间点几乎不可能对齐,直接逐点相减会得到虚高的误差。一般 NRMSE 小于 2% 就认为两个平台模型等价,剩余差异来自求解器和采样;大于 5% 时先查参数折算,再查初值处理。
5.2 从阶跃响应里自动读出超调量和调节时间
对比控制效果时手工读图容易受毛刺干扰,可以用 findpeaks 自动提取转速阶跃响应特征:
% 提取转速阶跃响应的超调量,n 为转速列向量 [peaks, locs] = findpeaks(n, 'MinPeakProminence', 5); n_end = n(end); overshoot = (peaks(1) - n_end) / n_end * 100; % 超调量百分比 idx_95 = find(n >= 0.95*n_end, 1); % 首次到达 95% 稳态点 settle_t = t(idx_95) - t(start_idx); % 调节时间MinPeakProminence 设成转速幅值的 1% 左右,可以滤掉求解器在开关时刻产生的数值毛刺。最后留一个具体技巧:把两边平台的同一指标放进对比表时,阶跃触发时间必须统一,比如都在 0.1s 施加转速阶跃,对比窗口取到稳定后至少一个机械周波以上,读出来的调节时间才有可比性。
本文还有配套的精品资源,点击获取