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

原文地址: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打包。

Simulink代码生成应用教程相关推荐

  1. Simulink代码生成: 延时模块及其代码

    Simulink代码生成: 延时模块及其代码_u013288925的博客-CSDN博客_simulink延时模块

  2. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  3. simulink快捷键_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  4. Simulink代码生成:目标硬件配置

    本文研究Simulink中关于目标硬件相关的配置. 文章目录 1 目标硬件的含义 2 Simulink中的硬件配置 3 代码中的位长度信息 4 总结 1 目标硬件的含义 不管运行什么软件,都是无法离开 ...

  5. Simulink代码生成:生成C++类

    博主最近在工作中用Simulink生成C++类的代码,因此将一些感悟记录下来.本文通过一个简单的例子研究Simulink生成C++类的代码以及一些相关配置. 文章目录 1 创建模型 2 C++类生成配 ...

  6. Simulink代码生成:生成ASAP2文件

    本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点. 文章目录 1 ASAP2文件 2 生成标定量.观测量的A2L文件 2.1 建模过程 2.2 配置界面 2.3 生成A2L文件 ...

  7. Simulink代码生成:Step函数接口配置

    本文研究Simulink生成代码时的step函数的名称和参数. 文章目录 1 问题引入 2 配置过程 3 代码生成 4 总结 1 问题引入 在之前的一篇博客<Simulink代码生成:Simul ...

  8. [FOC-Simulink]使用Simulink代码生成工具基于STM32开发板对永磁同步电机进行开环控制

    本文介绍使用Simulink代码生成功能在STM32开发板平台上运行永磁同步电机. 硬件基础: Nucleo-G431RB开发板 X-NUCLEO-IHM07M1驱动扩展板 57BLDC-24V-21 ...

  9. Simulink代码生成(二十二)——TSP开发之创建外部设备模块

    Simulink代码生成(二十二)--TSP开发之创建外部设备模块 文章目录 Simulink代码生成(二十二)--TSP开发之创建外部设备模块 一.C Mex Sfunction文件解读 一.C M ...

  10. Simulink代码生成(二)——代码生成时模型的配置方法及操作流程

    Simulink代码生成(二)--代码生成时模型的配置方法及操作流程 文章目录 Simulink代码生成(二)--代码生成时模型的配置方法及操作流程 一.模型 二.代码生成设置 1.步长选择 2.系统 ...

最新文章

  1. Jupyter Notebook显示图像
  2. linux sed 批量替换多个文件中的字符串
  3. Ubuntu 7.04 相关设置
  4. CSDN 插件限时内测,新用户抢永久免费去广告特权!
  5. WinDbg调试.NET程序入门
  6. U811.1接口EAI系列之一--通用把XML传送给EAI处理方法--PowerBuilder语言
  7. DBGrid 应用全书(一)
  8. 转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
  9. springboot 拦截器的坑 WebMvcConfigurationSupport 失效
  10. 数据分析数据挖掘(四)
  11. 牛皮啊!竟然可以为Dubbo接口生成文档了!
  12. c语言超时自动退出,Golang实现for循环运行超时后自动退出的方法
  13. 独奏骑士服务器维护,独奏骑士最强流派天赋加点攻略
  14. 《模拟电子技术》-童诗白
  15. 宇视监控摄像头使用什么工具批量修改IP地址
  16. PHP-laravel框架一1
  17. 转型实践|产品设计从青铜到王者—青铜篇
  18. python实现向qq邮箱发送邮件
  19. C | 运算符、表达式和语句
  20. android4.2 拦截power键,Android 屏蔽Power键 Home键

热门文章

  1. 毕业设计 STM32单片机的空气质量检测系统
  2. 使用Windows批处理文件递归删除当前路径下的指定文件夹
  3. 同义词挖掘的一些常用方法 及同义词替换程序
  4. 关于linux系统无法启动,提示Give root password for maintenace的解决办法
  5. Android 增强版百分比布局库 为了适配而扩展
  6. geek软件是干什么的_geektool--一款很geek的工具
  7. 高低压配电柜温度在线监测系统解决方案
  8. 矩阵乘法Java实现
  9. python爬取链家租房信息_爬取链家租房信息数据分析
  10. SpringMVC工作原理图