Simulink代码生成应用教程

本文转载在我的微信公众号:古德曼汽车工业。公众号文章都会知识星球、知乎进行转载,请有兴趣的朋友可以关注我的微信公众号

原文地址:Simulink代码生成应用教程

上一期《Simulink代码生成基础体验教程》中介绍了如何使用Simulink生成代码,及生成代码的一些设置。阅读过上一期的朋友们想必对如何生成代码已经有了解,但很多人会问【思想】生成的代码如何使用?本期【思想】就给大家介绍一下如何将Simulink自动生成的代码移植到嵌入式开发环境。

控制器基础介绍

首先要搞清楚控制器底层驱动(BWS)的大致工作流程。本期不是专门讲底层如何设计,所以抛开Bootloader/标定等功能及其调度过程。由于每家公司的设计思路、芯片选择都不一样,所以只对通用部分的思路进行阐述。

控制器或控制单元本质就是一个简易的计算机,一样具有输入与输出功能。如图:输入信号类型有CAN/Lin/开关信号/ATD,输出信号类型有CAN/Lin/开关信号。每个零部件的控制器(xCU)都会有一个工作步长,简单的理解就是有个定时器。定时器控制每一次【输入-计算-输出】所间隔的时间。步长功能可通过单片机内部的定时器(模数递减器/实时定时器等)实现,在嵌入式开发环境中的【定时器中断函数】中实现。

例子介绍

本文为科普教学,为了避免涉及其他厂家的机密,【思想】在演示过程中使用的模型例子为前面一期《Simulink代码生成基础体验教程》中的Matlab模型。

模型有两个输入x,y,一个输出z。为了配合本期内容,单片机选用MC9S12XEP100并假设x、y通过控制器的CAN模块接收,计算得到的结果z通过控制器的CAN模块发送,k为标定量。

在开发环境中对申明In_X、In_Y、Celib_K、Out_Z对应x、y、z、k,所谓接口变量名称

在MC9S12XEP100的开发环境CodeWarrior5.2中,根据前一小节介绍的中断函数。其中ModelInput()对应【模型输入函数】作为模型变量的输入接口,ModelOuput()对应【模型输出函数】作为模型计算结果的输出接口,VcuApp_setp()对应的就是【Sinmulink模型代码】。

Simulink模型的修改

上面介绍完了底层驱动的接口部分,接着我们就需要对Simulink模型进行调整。

在Simulink的数据管理器中,创建与接口变量一致的信号名。这里需要特别注意是,信号类型一定要为Simulink.Signal,如果是一个map数组,这里要改为Simulink.Param。另外,数据存储类型从Auto切换到ImportedExtren,意为Simulink生成的代码不会重新申明变量,而是使用extren标志为外部引用变量。效果等等在生成后的代码中进行展示。当然也可以使用其他的数据存储类型,有兴趣的话大家可以都尝试下,看看哪个更加符合自身项目的需求。

完成信号创建之后会在Matlab的Workplace提示,注意将其保存为mat文件。每次打开模型进行代码生成时候都要加载mat中的信号信息。

对上一期的模型结构进行调整,使用DataStoreRead取代In模块,DataStoreWrite取代Out模块,使用Product模块替换Gain模块。由于我们底层定时器中断中Simulink模型接口函数名为VcuApp_step(),所以模型的文件名也更改为VcuApp.slx。

其余设置保存不变后点击生成代码,在VcuApp.c文件中VcuApp_step()函数的逻辑与模型一致,变量名也与底层接口变量一致。

VcuApp_Private.h中定义变量的代码前面都加了extren,表示引用了之前在底层驱动中定义的变量。

在CodeWarrior中创建一个RCP文件夹,把生成的C文件与h文件加入工程,注意ert_main.c这个文件不要加进来。保存工程后就能通过嵌入式环境编译二进制文件了。

总结

本次教程,介绍的是手工创建接口变量、Simulnk信号线等。在实际工程中,输入输出信号可能会有几十上百个。如果都用手工创建信号及移植代码,这工作量无疑是惊人的,而且整个过程容不得半点错误。因此实际工作中需要一些自动化的生成工具,直接把这部分繁琐的工作取代掉。以下是【思想】设计的一款根据通讯协议直接生成代码的工具原型,以后有时间再单独介绍该款工具。

另外,如果你使用过其他家的快速原型产品,例如华海科技、海博瑞德等,就可以直接在Simulink配置整个嵌入式工程,无需自己设计输入输出接口。后面【思想】会在《Sinmulink代码生成提高教程》中跟大家分享这方面的经验。

通过今天的教程,大家是否能够动手使用Simulink代码生成做个简单的控制器例子呢?虽然实际操作要比这个复杂的多,细节也存在区别,但是大体的思路是不会改变的。希望本文可以帮助到想学习这方面技能的朋友。请与【思想】联系获得本文Simulink例子文件。项目由Matlab2018打包。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值