完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
◆Microsoft Windows XP SP3;
◆Matlab Version 7.5.0.342(R2007b); ◆Keil uVersion2V 2.30; ◆Proteus 7.1SP2。 先借助Matlab/RTW建立模型并生成RTW(Real-Time Workshop)代码(C语言),再使用Keil编译、调试Matlab生成的C语言代码,并且生成HEX文件。之后,利用Proteus观察代码生成的效果,以验证代码的正确性。基本流程如图1所示。 1 构建Simulink模型并生成RTW代码 以较为简单的模型为例,用2个开关同时控制一个报警灯模型。当开关1、2同时闭合时,报警灯亮,逻辑真值表如表1所列。在Simulink中构建对应模型,只有当开关1、2同时闭合时,报警灯才亮,故选择如下模型实现上述功能。模型连接如图2所示。 模型连接好之后,打开参数配置选项卡调整参数。具体修改项及其对应值如表2所列。 至此生成模型代码的前期准备已经完成,保存模型,取名Matlab_Test。下一步就是点击Real-Time Work-shop选项中的Build按钮,Matlab将自动生成模型代码。Matlab命令窗口中显示内容如下: 至此,模型的代码也生成成功。 |
|
|
|
◆Microsoft Windows XP SP3;
◆Matlab Version 7.5.0.342(R2007b); ◆Keil uVersion2V 2.30; ◆Proteus 7.1SP2。 先借助Matlab/RTW建立模型并生成RTW(Real-Time Workshop)代码(C语言),再使用Keil编译、调试Matlab生成的C语言代码,并且生成HEX文件。之后,利用Proteus观察代码生成的效果,以验证代码的正确性。基本流程如图1所示。 1 构建Simulink模型并生成RTW代码 以较为简单的模型为例,用2个开关同时控制一个报警灯模型。当开关1、2同时闭合时,报警灯亮,逻辑真值表如表1所列。在Simulink中构建对应模型,只有当开关1、2同时闭合时,报警灯才亮,故选择如下模型实现上述功能。模型连接如图2所示。 模型连接好之后,打开参数配置选项卡调整参数。具体修改项及其对应值如表2所列。 至此生成模型代码的前期准备已经完成,保存模型,取名Matlab_Test。下一步就是点击Real-Time Work-shop选项中的Build按钮,Matlab将自动生成模型代码。Matlab命令窗口中显示内容如下: 至此,模型的代码也生成成功。 |
|
|
|
2 RTW生成代码
2.1 RTW生成代码原理 RTW生成代码离不开TLC(Target Language Compiler,目标语言编辑器)。TLC在生成代码过程中的作用如图3所示。由图3可知,Simulink生成的模型经过TLC的编译能生成C语言的代码,供后续工作使用。 2.2 RTW生成代码 RTW生成的代码皆源于模板,本例中所选择的模板为Ert.tlc。下面介绍该算法所涉及的函数与数据结构。 用RTW自动生成的代码包含如下函数: ①Main,包含于ert_main.c文件中,是算法的主函数,由它调用其他函数。 ②Matlab_Test_initialize,包含于Matlab_Test.c文件中,由Main函数调用,用于初始化模型。 ③rt_OneStep,包含于ert_main.c文件中,是算法的最主要结构,由Main调用,同时也调用Matlab_Test_step函数用以完成模型具体的操作要求。 ④Matlab_Test_step,包含于Matlab_Test.c文件中,由rt_OneStep调用。在该函数中描述了具体模型的输入输出的关系。例如,本例中的输入输出关系被描述为“Matlab_Test_Y.Out1=Matlab_Test_U.In1+Matlab_Test_U.In2;”,即两个输入端口的输入值相加赋给输出端口的接收量。 用RTW自动生成的代码包含如下数据结构: ①Matlab_Test_U,用以存储输入信号量值。本例包含两个输入端口,调用形式为Matlab_Test_U.Inl。 ②Matlab_Test_Y,用以储存输出信号量值。本例包含一个输出端口,调用形式为Matlab_Test_Y.Out1。 3 Keil修改代码及Keil与Proteus的连接 3.1 Keil修改代码 新建工程,选择Atmel公司的AT89C51型号的CPU,将Matlab生成的*.c文件导入其中,本例中包括ert_main.c和Matlab_Test.c两个文件;将*.h文件放入工程所在文件夹下,本例中包括Matlab_Test.h、Matlab_Test_private.h、Matlab_Test_types.h和rtwtypes.h四个文件。 具体修改文件及相应函数情况如表3所列。 完成代码修改之后,建造目标。若暂且不管代码优化问题,则所需的HEX文件已经成功生成。 3.2 Keil与Proteus的连接 将安装文件夹Proteus\Model下的VDM51.dll文件复制到Keil\C51\INC文件夹下,用以实现两软件间的通信,并且在TOOLS.INI文件中加入VDM51.DLL文件的目录及描述,具体添加内容如图4所示。 至此,Keil与Proteus间的连接前期准备已经完成。下面开始Keil与Proteus联机调试:选择目标1的属性,弹出对话框,在调试选项卡中选择使用Proteus VSM Monitor-51,具体调节参数如图5所示。 Keil与Proteus的连接已经完成。 4 Proteus仿真 打开Proteus,新建一个工程,选择80C51,正确连接基本电路;选择P1.0引脚作为输出,P1.6、P1.7引脚作为输入,所连接的电路如图6所示。 单击Debug菜单,选择Use Remote Debug Monitor选项。然后,双击80C51器件,弹出器件编辑对话框,在Program File选项中选择Keil生成的HEX文件(本例中该文件名为Keil_Test.HEX),进行仿真。 5 结 论 实验证明,基于Matlab生成的代码具有较高的可靠性。 ①通过Proteus的仿真结果可以得出,由Matlab生成的代码同样具有正确性; ②由Matlab直接生成代码可以将设计人员从繁重的编写代码的工作中解脱出来,大大节省了开发时间,提高了开发效率; ③本文所述过程为嵌入式系统的开发与实时仿真的实现提供了参考,具有实际指导意义。 |
|
|
|
只有小组成员才能发言,加入小组>>
791 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2710 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1070浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 00:41 , Processed in 1.035021 second(s), Total 53, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号