zhangzy 发表于 2016-3-7 15:23

simulink一维查表功能实现以及代码生成

说起来,在实现某个简单的功能的时候我通常使用代码,使用的模型还是偏少一些。喜欢写代码一方面是因为自己的惯性和习惯,另一方面确实是因为我对模型开发技术了解的不够透彻。   
看看现在汽车电子行业的开发模式,模型开发的优势确实是显而易见的,这也成了行业的主流模式。不过,如果让我自己说一下那些地方模型开发能够比写代码有优势,我自己还是觉得说不太清楚。   
自己的经验来说,模型开发的主要优势有三个:第一个是可以仿真,这在一定程度上提前了Bug的修复环节;第二个在于对人员的编程功底要求低;第三个是便于重用而且有很多现成的模块。   
我自己进行模型开发还是偏少,真正到了开发阶段的对比,我倒觉得代码的灵活度要好得多。不过,说到化繁为简的功能,有两个功能确实是让我印象深刻。其中一个我之前在我的博客中大致写了一下,是CAN通讯的收发功能,这个需要独立的license支持。另外一个则相对通用一些,那就是查表函数。   
从一个简单的一维查表说起吧!如果需要做三角函数的运算,直接通过级数等运算方式计算效率相对来说比较低。不过,在嵌入式中很多时候要求的是实时性跟准确性的一个杂合体,而当精度足够高的时候计算数值在一定程度上可以放宽一些。这样,查表就凸显的比较有用了。   
下面搭建一个简单的正弦查表函数,并进行代码生成。模型:file:///C:\Users\Administrator\AppData\Roaming\Tencent\QQ\Temp\TempPic\P87CMMS}`7OCR6]U1J9H]2J.tmp

上面是一个查表功能的实现,想让让代码能够做到如此清晰直观,那还是有很大的挑战度的。   
数据定义:输入的查表轴是之间等间距的256个点。表格则是根据前面的轴进行了正弦函数的精确计算,数据定义全都采用了浮点。跟手写代码相比,简单的不仅仅是查表的函数功能,数据表也比较容易实现,尤其是这种比较具有规律性的数据。通过MATLAB内置的linspace函数以及正弦函数就可以轻松实现数据定义。   
简单的配置后,使用Embeded Coder进行代码生成。略去查表函数不去看,直接看一下数据定义便可以体验出基于模型开发的一点优势了:
转自:http://blog.sina.com.cn/s/blog_627927570102w88q.html

页: [1]
查看完整版本: simulink一维查表功能实现以及代码生成