【研发日记】Matlab/Simulink技能解锁(九)——基于嵌入式处理器仿真

Mr.Cssust 2024-06-12 08:35:05 阅读 90

文章目录

前言

基于嵌入式处理器仿真

使用方式

        第一步,硬件连接

        第二步,配置硬件资源

        第三步,配置XCP协议

        第四步,加载Contrl Model

        第五步,运行仿真

        第六步,仿真报告

分析和应用

总结

参考资料


前言

        见《【研发日记】Matlab/Simulink技能解锁(四)——在Simulink Debugger窗口调试》

        见《【研发日记】Matlab/Simulink技能解锁(五)——七个Simulink布线技巧》

        见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》

        见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》

        见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真》

基于嵌入式处理器仿真

        基于外部ECU嵌入式处理器仿真,也称在线调试,Mathworks官方的说法是External Mode Simulation,顾名思义就是仿真模型的运行不在Computer上,而是在外部的ECU板子上。外部ECU板子通过物理连接,直接控制真实世界中的物理实体。Contrl Model作为一个整体被编译生成嵌入式代码,在外部ECU板子上执行。仅留下Dashboard、Dispiay、Data lable和Data Inspect等这些交互类的Block仍在Computer上运行。Computer和外部ECU之间通过XCP协议进行实时的数据交换。基于外部ECU仿真的整体框架示例如下:

使用方式

        第一步,硬件连接

        将CAN接口卡的两头,分别连接在ECU板子和Computer之间。在Computer上安装CAN卡的驱动程序,确保Computer的设备管理器中能出现对应的CAN卡硬件资源,示例如下:

        Tips:在Simulink中可以调用的CAN卡,官方说法是有很多家。但是目前仅有Vector一家适配的比较完善,常见的型号是CANcaseXL、VN1610、VN1630、VN1640等。

        第二步,配置硬件资源

        在Vector Hardware Config窗口中,添加一个Matlab应用,示例如下:

        打开Simulink Configuration Parameters窗口,在Hardware Implementation一栏的Target hardware resources中找到eCAN分组,配置CAN通信资源,示例如下:

        Tips:建立连接后,ECU板子上的这个CAN module将会被占用,所以不能跟其他功能的应用冲突。

        第三步,配置XCP协议

        打开Simulink Configuration Parameters窗口,在Hardware Implementation一栏的Target hardware resources中找到External mode分组,配置XCP通信协议,示例如下:

        Tip1:上述基于外部ECU仿真,依赖于Simulink和ECU之间的XCP协议和传输接口,以及ECU嵌入式处理器的数据交换引擎,所以需要Simulink和MCU嵌入式处理器两边厂家的共同支持,不是每款嵌入式处理器都支持这项功能。

        Tip2:XCP协议,实际上上汽车行业标定领域的一种协议栈,除了可以基于CAN网络之外,还可以基于其他的Serial通信网络,比如LIN、Ethernet等。

        第四步,加载Contrl Model

        Contrl Model按照正常的方式搭建后,对于将要作为标定参数用的变量,还需要做一些特殊处理。因为标定参数是存储在全局内存中的一个可调的全局变量,是要在算法执行的过程中更改存储值的。示例如下:

1、在Simulink的建模选项卡上,点击模型数据编辑器,然后点击检查参数选项卡。2、在模型中,点击 Gain 模块 G1,模型数据编辑器突出显示与模块的增益参数对应的行。3、在模型数据编辑器的值列,将增益值从 2 更改为 myGainParam。4、在 myGainParam 旁边,点击操作按钮(含三个纵点),然后选择创建。5、在“创建新数据”模块对话框中,将值设置为 Simulink.Parameter(2)。点击创建,Simulink.Parameter 对象 myGainParam 在模型工作区中存储参数值 2。6、在 myGainParam 对话框的代码生成选项卡上,点击在 Coder App 中配置。7、在代码映射编辑器中,将 myGainParam 的存储类设置为 ExportedGlobal。此存储类使参数对象在生成的代码中显示为可调全局变量。

        如果是新建的模型,可以直接设置好标定参数的属性,示例如下:

stepSize = Simulink.Parameter;stepSize.DataType = 'uint8';stepSize.CoderInfo.StorageClass = 'ExportedGlobal';stepSize.Value = 1;

        第五步,运行仿真

        在Simulink的Hardware工具页中,点击Monitor & Tune按钮,即可利用Dashboard、Dispiay、Data lable和Data Inspect等工具查看信号,在ECU板子(例如电机控制器)上用探针检查信号,或者直接在被控实物(例如电机)上观察现象。示例如下:

        也可以在Contrl Model执行过程中调整标定参数的值,以确定最佳参数值。示例如下:

        Tips:这种基于外部ECU仿真的模式,不光可以在Simulink上查看信号和调整标定参数,也可以使用第三方的标定工具,例如CANape。

        第六步,仿真报告

        基于外部ECU仿真,还可以查看程序执行的报告。首先在Simulink Configuration Parameters窗口中配置好验证项,示例如下:

        仿真运行之后,就会出一个程序执行报告,示例如下:

https://ww2.mathworks.cn/help/examples/c2b/win64/xxc2000_alldata_report.PNG

分析和应用

        1、由于Contrl Model是生成嵌入式代码后直接在ECU板子上运行的,所以Real Time性能非常好。

        2、对于高速响应的硬件性能也不再受到限制,可以支持中断功能。

        3、Computer和外部ECU之间的数据交换,信号的个数和交换的周期有限,官方提示理想性能下,数据获取频率不要超过10kHz。

        Tips:不同的Serial通信网络,数据交换的性能也同,主要取决于他们的通信波特率。示例:如果我们需要以10kHz的速率传输20 bytes的数据,那么20 bytes * 10,000Hz = 200,000 bytes/s,200,000 bytes/s * 10 bits/byte = 2,000,000 bits/s,那么波特率至少就得是2 Mbps。

        4、Computer和外部ECU之间的数据交换,信号数据类型最大支持single型,不支持double型。

总结

        以上就是本人在研发中使用Simulink仿真时,一些个人理解和分析的总结,主要介绍了基于嵌入式处理器仿真的工作原理,展示了仿真运行的效果,并分析了这种仿真方式的特点和适用场景。

        后续还会分享另外几个最近解锁的Matlab/Simulink新技能,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。

参考资料

Mathworks Help - Signal Monitoring and Parameter Tuning


        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。