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

文章目录

前言

基于嵌入式处理器仿真

使用方式

        第一步,硬件连接

        第二步,配置硬件资源

        第三步,配置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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线技术整合到主动噪声控制(ANC)增强噪声降低性能

主动噪声控制(ANC)已成为一种广泛使用的降噪技术。基本原理是通过产生与外界噪音相等的反向声波,将噪音中和,从而达到降噪的效果。ANC系统通常包括以下几个部分:参考麦克风、处理芯片、扬声器和误差麦克风。参考麦克风…

家政保洁服务小程序怎么做?家政公司快速搭建专属小程序

在数字化时代背景下,家政保洁服务行业也迎来了线上转型的新机遇。家政保洁服务小程序,作为一种新型的线上服务平台,不仅能够提升家政公司的服务效率,还能为顾客提供更加便捷的预约上门服务体验。那么家政保洁服务小程序怎么做呢&a…

从零开始搭建一个SpringBoot项目

目录 Spring BootSpring Boot 项目开发环境1、快速创建SpringBoot项目2、pom.xml 添加 Meavn 依赖3、配置application.yml4、验证数据库是否连接成功5、配置 Druid 数据源 Spring Boot 整合 MyBatis1、准备依赖2、application-dev.yml 配置3、启动类添加Mapper接口扫描器4、设置…

BWVS 靶场测试

一、PHP弱类型 is_numeric() 输入:127.0.0.1/BWVS/bug/php/code.php # 1、源代码分析 如果num不是数字,那么就输出num,同时如果num1,就输出flag。即num要是字符串又要是数字 # 2、函数分析: is_numeric()函数&…

《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 各种自动化框架都会有脚本录制功能, playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具,发展到每种浏览器都有对应的录制插件。今天我们…

牛客NC392 参加会议的最大数目【中等 贪心+小顶堆 Java/Go/PHP 力扣1353】

题目 题目链接: https://www.nowcoder.com/practice/4d3151698e33454f98bce1284e553651 https://leetcode.cn/problems/maximum-number-of-events-that-can-be-attended/description/ 思路 贪心优先级队列Java代码 import java.util.*;public class Solution {/**…

java面试高级篇(JVM、Mysql、Redis、Kafka)

文章目录 面试专题-java高级篇1. JVM有做过jvm的调优吗?常用的jvm参数调优有哪些?如果jvm持续一段时间频繁的发生Young GC (轻GC) 可能原因有哪些? 2. Mysql2.1. 基本功(见为知笔记)2.2. 什么是索引2.3. 索引的优劣势2.4. MySQL的索引结构2.4.1. B-Tree索引2.4.2. BTree索引…

外卖系统源码开发全攻略:外卖小程序与后台管理系统的设计与实现

今天,小编将详细介绍外卖系统源码的开发全攻略,从需求分析到设计与实现,为开发者提供全面指导。 一、需求分析 1.用户需求 用户是外卖系统的核心,需满足以下基本需求: -浏览菜单并下单 -实时追踪订单 -多种支付方…

每日一题——博弈论(枚举与暴力)

博弈论 题目描述 运行代码 #include<iostream> #include<vector> using namespace std; int main(){int n;cin >> n;vector<int> d(n,0);for(int i 0;i < n;i){cin >> d[i];}vector<int> in(1000,0);for(int k 1;k<3;k){for(int…

ESP32烧录AT固件并进行MQTT通讯

首先下载AT固件 发布的固件 - ESP32 - — ESP-AT 用户指南 latest 文档 下载烧录工具 下载指导 - ESP32 - — ESP-AT 用户指南 latest 文档 烧录后注意usb的串口是不能发AT指令的 需要用16和17脚 用AT指令确认OK后连WIFI ATCWMODE1 //设置客户端模式 ATCWLAP …

mysql误删后使用binlog恢复数据

1 预期效果 使用 binlog 恢复数据的预期效果是将误删的数据还原到误删之前的状态&#xff0c;以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录&#xff0c;可以重新执行误删操作之后的插入、更新或删除操作&#xff0c;从而恢复被误删的数据。 数据恢复&…

Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)

概述 现在&#xff0c;我们使用consul客户端的api来把GRPC服务实现注册到consul上&#xff0c;非Go-Micro的形式其实&#xff0c;consul官方提供了对应的接口调用来实现&#xff0c;golang中的consul/api包对其进行了封装我们使用consul/api来进行展示 目录结构 gitee.com/g…

springboot+mysql在线考试系统-计算机毕业设计源码82584

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对在线考试等问题&#xff0c;对如何通过计算…

Websocket助手

功能介绍 WS助手是WebSocket调试的开发工具&#xff0c;该客户端工具可以帮助开发人员快速连接到测试/生产环境&#xff0c;它可以帮助您监视和分析 Websocket 消息&#xff0c;并在开发过程中解决问题&#xff1b;可以模拟客户端实现与服务器的数据交互&#xff0c;并完成批量…

论文精读:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微软亚洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…

uniapp 对接 微信App/支付宝App 支付

相关文档&#xff1a;uni.requestPayment(OBJECT) | uni-app官网 示例代码&#xff1a; import qs from qsasync aliPay(){const { provider } await uni.getProvider({ service:payment })if(provider.includes(alipay)){uni.request({url:后端接口地址,data:{ //传参 },suc…

⌈ 传知代码 ⌋ 基于扩散模型的无载体图像隐写术

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出&#xff1a;一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景&#xff1a;防抖、节流 2.1防抖 举…

QGraphicsView实现简易地图16『爆炸效果』

前文链接&#xff1a;QGraphicsView实现简易地图15『测量面积』 一种简单的爆炸波扩散效果 动态演示效果&#xff1a; 静态展示图片&#xff1a; 核心代码&#xff1a; #pragma once #include "../AbstractGeoItem.h" #include "DataStruct/GeoData.h"…

sysbench压测mysql性能测试命令和报告

sysbench压测mysql性能测试命令和报告 一、安装sysbench工具二、创建测试数据库三、基于sysbench构造测试表和测试数据四、数据库性能测试1、数据库读写性能测试2、数据库读性能测试3、数据库删除性能测试4、数据库更新索引字段性能测5、数据库更新非索引字段性能测试6、数据库…