赞
踩
见《【研发日记】Matlab/Simulink技能解锁(三)——在Stateflow编辑窗口Debug》
见《【研发日记】Matlab/Simulink技能解锁(四)——在Simulink Debugger窗口调试》
见《【研发日记】Matlab/Simulink技能解锁(五)——七个Simulink布线技巧》
见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》
见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》
使用Simulink开发嵌入式软件,Contrl Model在进行仿真运行时,最常规的方法是搭建一个被控Plane Model,来配合为嵌入式软件开发的Contrl Model,在Simulink编辑窗口就就能仿真运行。这种仿真方式是一种纯虚拟的仿真,Contrl Model和Plane Model运行的平台是工程师的Computer。其中最关键的工作是搭建Plane Model,Plane Model的质量直接影响Contrl Model仿真的效果。
一个高质量Plane Model的搭建往往对需要投入非常专业的技术人员,并且耗费大量的工作时间。即便如此,Contrl Model在Computer上运行和在MCU上运行仍然存在一些差别,Plane Model在Computer上运行和在真实世界里的表现也存在差异。这种大投入和不完美因素,很多开发团队经常是无法接受的。在这种纯虚拟仿真的基础上跨出一步后,诞生了分布式仿真。其在MBD工作流中的地位如下图所示:
分布式仿真,也称半实物仿真,Mathworks官方的说法是Connected I/O Simulation,顾名思义就是仿真模型的运行不全在Computer上。Contrl Model被分成两部分,纯算法的Model仍在Computer上运行,I/O之类的外设在外部MCU(I/O Server)上执行,Computer和外部MCU之间通过Serial协议进行连接。当仿真运行时,Model Block向IO Server发送命令和请求数据。Plane Model用真实世界中的物理实体替代,并受IO Server控制,整体框架示例如下:
第一步,硬件连接
将USB串口线的两头,分别连接在MCU板子和Computer之间,确保Computer的设备管理器中能出现对应的COM资源。
Tips:MCU板子上的一个SCI module将会被占用,所以不能跟其他应用冲突。
第二步,配置Serial协议
打开Simulink Configuration Parameters窗口,在Hardware Implementation一栏的Target hardware resources中找到Connected I/O分组,配置串口通信资源,示例如下:
Tips:上述分布式仿真,依赖于Simulink和MCU之间的Serial协议和传输接口,以及MCU中的IO Server引擎,所以需要Simulink和MCU两边厂家的共同支持,不是每款MCU都支持这项功能。
第三步,连接I/O
在Simulink的Hardware工具页中, 点击Run on Board下拉按钮, 然后点击Connected I/O (inputs/outputs mode)按钮,示例如下:
第四步,加载Contrl Model
Contrl Model按照正常的方式搭建,不用做特殊修改,示例如下:
第五步,运行仿真
在Simulink的Hardware工具页中,点击Run with I/O按钮,即可利用Dashboard、Dispiay、Data lable和Data Inspect等工具查看信号,示例如下:
也可以在MCU板子(例如电机控制器)上用探针检查信号,或者直接在被控实物(例如电机)上观察现象。示例如下:
1、Plane Model是真实世界中的物理实物,不存在仿真拟合偏差。
2、Contrl Model的算法仍在Computer上运行,可以非常方便地查看和分析数据。
3、Contrl Model不再MUC板子上运行,不需要编译生成嵌入式代码的环节,可以非常灵活地修改调整Contrl Model,加速仿真调试进程。
4、由于通信传输速率和数据量的限制,Simulink向MCU板子发送的指令,Simulink从MCU板子上获取的数据,都会有一定的时间开销,导致real time性能受到一定程度的限制。为保证系统整体的运行,Contrl Model的仿真步长和Sample time需要设置的稍长一些,至少要大于通信传输周期和MCU板子的响应周期。Contrl Model单个step的tasks量也要适当少一些,simulation pacing适当慢一些,确保MCU板子指定的时间内能够执行完。示例如下:
5、对于多内核的MCU,只支持第一个主核的应用,其他Core的使用会受限。
6、对于多时钟的MCU,只支持第一个timer0的应用,其他时钟源的使用会受限。
7、对于高速响应的硬件性能会受限,例如不支持ePWM模块中HRPWM(高分辨率PWM),不支持中断的使用。
以上就是本人在研发中使用Simulink仿真时,一些个人理解和分析的总结,主要介绍了分布式仿真的工作原理,展示了仿真运行的效果,并分析了这种仿真方式的特点和适用场景。
后续还会分享另外几个最近解锁的Matlab/Simulink新技能,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。
另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。
Mathworks Help - Connected IO Simulation
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。