经本人实际测试MATLAB/Simulink R2024b,曾遭遇因模型离散化步长与真实硬件时钟不同步而导致跑飞的情况。对于新手来说,沿着步骤逐一操作,便能够较为轻松地避开此类常见……
经本人实际测试MATLAB/Simulink R2024b,曾遭遇因模型离散化步长与真实硬件时钟不同步而导致跑飞的情况。对于新手来说,沿着步骤逐一操作,便能够较为轻松地避开此类常见问题。
第一步 打开Solver面板锁定固定步长0.001
供以参考的操作途径为:于Simulink模型的菜单栏里头去寻Simulation选项,接着从中找到Model Configuration Parameters选项,再之后在其中找到Solver选项。将Type选择为Fixed-step,把Solver选定为ode3 (Bogacki-Shuampine),于Fixed-step size处填写0.001。而此步长乃是针对电机控制以及车辆动力学模型所给出的最优推荐数值,其能够对精度与实时性予以兼顾协同,在运行HIL测试时极少出现丢帧现象。
提示状态导数不一致,出现了报错“An error occurred while running the simulation”。这是因为你运用了变步长求解器,然而模型当中存在连续积分模块。解决办法是,首先将所有连续积分模块右键点击,选择Replace With → Discrete-Time Integrator,接着把离散采样时间设置为0.001的整数倍。
第二步 手动映射HIL接口信号通道
操作的路径是:于Simulink模型当中,拖入HIL Receive模块以及HIL Transmit模块(此以Speedgoat Baseline 4作为示例),之后,双击用以打开Channel Mapping,将“PWM_In”绑定至物理通道AI0使其成为绑定关系,把“Motor_Current”绑定至AO0使得具备绑定连接,并且,将数据类型全部强制设定为single。
出现了“Data type mismatch in port”这样的报错。其原因是非常直接的:模型内部的double信号被给到了int16配置的板卡。解决办法是在报错的信号线中间放置一个Data Type Conversion模块 ,Output data type设置成single ,并且勾选Output minimum和maximum ,填入-1000和1000来防止溢出。
第三步 跑批量回归测试抓步长过小报错
操作的路径是,先将Simulink Test Manager打开,接着去新建测试用例,然后在Assessment那里把Log simulation output勾选上,再将Stop time设定为10.0,最后点击Run。
新手避坑
全程式处理步骤如下:第一,点击Pause以暂停仿真;第二,开启Pivot Table去找出呈现NaN的信号;第三,于该信号之后串联Saturation模块,将限幅设定为物理范围(像是电机转速±3000rpm这样的情况);第四,在Saturation的Output min/max处填入相同数值;第五,再次进行运行。
两种实操方案进行对比,方案一是固定着步长为0.001并且加上限幅,这种方案适合硬件在环实时测试,其能让控制器运行起来不会出现卡顿现象;方案二则是变步长auto再加上ode45,此方案适合离线算法验证,它的精度比较高,然而实时性却比较差。要是跑真实的ECU就选择方案一,若是单纯验证控制逻辑那就选择方案二。
留神,此方法不适用于强非线性冲击进程(像是齿轮撞击那般)的仿真测验。那般的场景需要将步长削减至0.0001乃至更低,然而实时性将会迅速下降,替代的方案是运用LMS AMESim专门去进行一维冲击仿真。你于运行电机或者车辆模型之际还遭遇过哪类怪异的不收敛情况?在评论区抛出来,我来帮你瞧瞧参数设定。
微信扫一扫
还没有评论呢,快来抢沙发~