在MATLAB/Simulink 2023b中跑电机控制仿真,是由我实际测试的,期间踩过无数次坑,这些坑包括结果曲线莫名跳变,以及输出值与理论值对不上。
第一步 锁定仿真结果异常的波形段
将Scope窗口打开,通过按下快捷键Ctrl + T启动数据游标测量。把光标朝着跳变最为激烈的区间拖动,使用右键选择“Export to Workspace”,把这一段波形单独导出。随后在MATLAB命令行输入plot(tout, yout),对局部波形进行放大观察。这一步的关键在于:不能聚焦于整条曲线,需要定睛在异常波形出现的起始点。
【新手避坑】:在导出数据时,要是出现提示“Variable not found”这种情况,其原因在于Scope属性当中, “Save data to workspace”此项默认状态是处于关闭的。要去打开Scope参数窗口,在“Logging”选项卡那里勾选“Log data to workspace”,变量名最好设定为yout,如此一来对于后续的分析会更为便利有效。
第二步 对比两组边界参数下的输出变化
在此给出一组两种实操计划,其一计划为方案A应用默认的ode45变步长求解器,其二计划是方案B改换为固定步长1e – 5的ode4求解器。方案A的仿真速度比较快捷,只是当遭遇系统刚性突变时步长会自动跳起有变化,便于在波形上产生毛刺;方案B的步长处于固定状态,导致波形更为平滑,然而仿真时长却是方案A的5倍还要更多。
场景取舍的逻辑清晰明了,若旨在验证控制算法逻辑的正确与否,那就选用方案A迅速达成;要是为了剖析高频振荡或者信号稳定性,那就必定得采用方案B。将两种方案运行得出的结果叠加至一张张图当中对其对比,运用hold on命令绘制出对比线,哪一个节点的波形开始展现出分岔现象时,这一节点便是存在问题的所在之处。
新手要避开这样的坑,有不少新手在把步长改成1 e – 5之后,仿真就跑不完了,会卡在99%的进度。这是为何,是因为你把“仿真时间”设得过于长了,举个例子,设置了10秒仿真时间,步长是1 e – 5就意味着需要跑100万步才行。那正确的做法是什么,是只去对异常区间仿真,要把Start time和Stop time压缩到0.1秒以内。
第三步 整肃模型中的数据传递链路
利用Simulink的“Model Advisor”工具,在“By Task”下挑选“Check signal resolution”。运行一回检查,着重察看是否存在代数环以及信号数据类型不匹配的情况。代数环会导致结果出现虚假振荡,数据类型不匹配会引发隐式转换丢失精度。
这里给出一个至关重要的参数最优推荐数值:将所有浮点信号的数据类型统一设定为single,不要在模型当中混合使用double和single,道理非常简单: double精度高然而运算量巨大,single在绝大多数工业级仿真场景下精度绝对够用,并且能够避免隐式转换所带来的并非预期的截断误差。
【新手避坑】:当运作Model Advisor期间要是弹出“无法开展分析”这种的提示,那是源于模型存在尚未连接好的端口。先把模型开启,接着通过按下Ctrl + Shift + E来打开“Model Explorer”,在“Signals”这个页面标签下面寻找到全部的“Unconnected line”,然后使用右键点击再选择敲击“Delete”将其清理到干干净净,之后再去运行一回就可以。
遇到报错怎么破
很常见的高频报错是“Derivative of state ‘1’ in block ‘xxx’ is infinite”,这意味着模型里存在无限大直线斜率,即信号于某个瞬间产生阶跃变化,然而求解器没办法处理这种突变。
完整的解决流程是这样的:先在Simulink的模型当中,运用“Saturation”模块来对输入信号的上下限进行钳制操作,就如同把电机转矩限定在正负500Nm的范围内;再在出现跳变情况的信号线上串联一个“Rate Limiter”模块,将其变化率控制在1000每秒内;再者,把求解器由ode45转换为ode23t,因为这个求解器对于刚性系统而言更为友好。当这三步操作一同都做完时,如果不出意外,达到百分之九十九的无限斜率报错事宜应该能够得已解决。
这套方法于完整流程控制系统的时域仿真分析而言其适用性突显,然而,针对纯电磁场有限元仿真所产生的结果以及热力学稳态仿真所生成的结果,是不存在适用性的。要是当下你所执行的为场仿真,像ANSYS Maxwell或者COMSOL这样的,那么建议你转换方式,采用网格质量检查以及收敛性判据分析。










