十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VCU模型开发流程

VCU模型开发流程 第一部分单片机C底层代码开发需要一块你准备开发成VCU的单片机开发板进行底层代码开发板验证VCU常用的模块有PWMGPIOCANADDAFLASH等根据自己的需求进行C代码验证在验证的过程中要有意识进行抽象你中期会将代码抽象成SFunction模块例如GPIO输入就要设置分组、上下拉、引脚号你在C代码中就要把这部分抽象成变量提前留好接口需要留出什么需要自己想好第二部分MATLAB模块的建立首先打开simulink选择建立一个空白library然后界面添加几个子系统如下所示将其分门别类归纳好让子系统显示成下图这样主要在ICON设置然后双击打开子系统在里面添加sfunction添加sfunction后会让你设置name和parameters其中mex能获取的参数就是parameters提供的name则是模块的名字该外形主要是通过mask里的ICON进行配置的模块相关东西全是通过MASK配置的外形显示ICON配置参数设置即下图这些参数Port Name下拉都有什么等通过parameters选项卡设置设置完这两部分一个模块就有雏形了其中Init选项卡可以进行参数校验比如是否超范围是否为空等等但此时还无法生成代码生成代码需要继续设置别的东西模块代码生成这部分看源码读文档模块 mex和TLC这三个名字一定要相同代码生成主要有以下两部分mex文件和tlc文件mex文件是通过matlab提供的Sfunction C模板通过mex命令生成的tlc文件其中的代码很大一部分就是你在第一步部分写的底层C代码MEX文件的作用是将模块的参数和tlc文件链接起来tlc文件是代码生成的关键文件MEX文件将模块设置的GPIOB GPIO_PIN_0等参数传递给TLC然后TLC生成GPIO_Init()和GPIO_Read()C模板功能及API的官方解释C模板下载地址sfuntmpl_basic.c和 sfuntmpl_doc.c建议这两个文件仔细看看这部分还是建议找个人家没编译成mex的C文件比对着help看API功能其中比较重要的有以下几个mdlInitializeSizes指定 中各种参数的大小SimStruct例如块的输出端口数。mdlInitializeSampleTimes指定模块的采样时间。mdlOutputs计算块的输出。mdlTerminate执行模拟结束时所需的任何操作。如果不需要任何操作则可以将此函数实现为存根。mdlRTW是提供给TLC的接口参数还有一个就是输出模块配置问题比如标定 接datatype 再接PWM期望是先标定再转换再输出但有可能是先输出再标定再转换即输入到输出滞后了一轮输出模块加上ssSetInputPortDirectFeedThrough可以解决TLC文件TLC文件介绍其中最重要的有%function Outputs(block, system) Output生成的代码要放到while里一般放执行代码例如GPIO_Read%function Start(block,system) Output生成的代码要放到while之前Start里面一般放Init相关代码例如GPIO_Init其中S-function的Block parameters里面的parameters是提供给mex文件的接口你如果建好了一个模块将其放入模型生成代码看看是否正确多试试你就会比较理解了模型配置模型设置里通用栏注意这里是模型不是模块了定步长离散系统代码生成栏ert.tlc只是设置当前选项卡有什么选项等等其中模型生成代码的整体逻辑(即main文件代码)主要是这里的tlc配置如果你只是测试模块功能这里可以不用管选项卡配置我觉得讲的比较好chhttty的博客博客1和博客2标定量和观测量模块这两个模块稍微有些特殊因为你可能需要把变量定义到sct划分的某个段例如标定量你可能需要设置成这种形式__attribute__((section(***))) const volatile uint8_t calibr 10;在TLC中配置不太现实这就需要你自定义Storage Class在标定量前加上__attribute__((section(***)))这部分自定义Storage Class可以参考chhttty大佬的博客这个大佬所有的博客都很有借鉴意义强烈推荐看看这两个模块基本可以总结为模块设置好变量名添加模块的时候调用脚本在matlab工作空间生成一个Storage Class变量然后再通过脚本与simulink里的变量进行关联这样就可以生成带前缀的变量脚本放置位置既然已经生成了标定量和观测量就要准备生成ASAP2文件了推荐大佬的博客由于上一步已经做了Storage Class了所以勾选ASAP2选项后就可以生成A2L文件了但生成的A2L的文件是最基础的无法直接给INCA使用所以需要自定义A2L文件自定义A2L文件主要参考Mathworks的官方文档和小拜大佬的博客我稍微说一说关键的函数首先是asap2userlib下的ASAP2UserFcnWriteHardwareInterface函数这个主要是将A2L文件静态的头放进去其次是ASAP2UserFcnWriteMeasurement这个是跟观测量相关需要修改的主要就是Interface其余的基本不用动多看看他写的注释asap2scalar、asap2lookup2d、asap2lookup1d这三个文件分别是标定量、一二维查表相关也基本不用动最后要将自己的asap2\user添加到路径里把官方的asap2\user文件夹优先级调低或者删除就可以按照你的asap2\user文件夹下的内容生成A2L文件一二维查表模块建议使用simulink的Subsystem封装一下simulink的Lookup模块然后使用标定模块给Lookup模块XY轴输入和Table数据主要靠M文件进行参数传递模型自定义代码生产位置参考赞哥的博客其中可以拷贝一份ert.tlc然后重命名为test.tlc然后找到ert_make_rtw_hook.m也拷贝一份重命名为test_make_rtw_hook.m然后在m文件里的before_make函数下执行mkdir和copyfile两个命令进行创建文件夹和拷贝.c.h文件这样就可以将文件放到指定位置了模型使用模型参数需要修改参考大佬模型配置Solver右侧Type选为Fixed-stepSolver选为discrete然后修改步长时间0.01或者0.001Code Generation把System target file选为ert.tlc生成C代码Code Generation把Generate code only勾选ReportCreate code generation report和Open report automatically建议勾选TemplatesGenerate an example main program勾选会生成ert_mainFile customization template是配置main文件生成的逻辑选择自己的tlc文件InterfaceRemove error status field in real-time model data structure可以勾选结语此处借STM32的模块和文件进行讲解这套流程适用于所有单片机NXP英飞凌等等我已经成功实现了一种单片机效果如果改好最后的这个example这个tlc就可以达到将固定几个文件粘贴到MDK工程里就直接编译下载就能实现目标功能。最好有一套现成的这样就可以互相对比改出自己的东西只是想试试simulink和单片机联调我建议用STM32他们得工具链cubemx搭配simulink确实好用比自己开发的强多了参考博客
返回列表