simulink生成C代码

  • 格式:doc
  • 大小:826.00 KB
  • 文档页数:10

MATLAB控制系统仿真与嵌入式系统算法设计(原创)

2009-01-22 13:25:25| 分类: 嵌入式系统与MATL|字号 订阅

摘 要: 在控制类产品设计中,从仿真到工程实现一直是工程师追求的目标,本文将用几个实列来讨论这一过程,因为相当一部分工程师对单片机系统、Keil比较熟练,因此我采用对项目Simulink建模仿真后,就如何生成C代码,然后配合Keil环境,从而以很小的工作代价把一些复杂的算法集成到单片机系统或嵌入式系统里运行,例子中包含有查询表、信号处理、模糊控制、神经网络、PID控制算法等。我将一个一个列子的来叙述.

关键词:模糊控制、查询表

1. 引 言

2. 在Simulink环境下把查询表转化为8051兼容C代码

在我的文章如何在MATLAB下把模糊推理系统转化为查询表(原创) 里,已获得一水位模糊控制系统的查询表模型名叫Fuzzylookup,样子如下:

图1-1模糊逻辑生成的查询表模型

2.1 设置Real-Time Workshop环境

点击Simulink\Tools\Real-Time Workshop\Options…,

图1-2 Real-Time Workshop 设置1

在上图的设置窗中,选择Real-Time Workshop项按上图设置,设置好后,选择Hardware Implement…,设置如下,点击Apply。

图1-3 Real-Time Workshop 设置2

选择Solver项,设置如下,点击Apply。

图1-4 Real-Time Workshop 设置3

1.2 生成8051兼容C代码并查看生成报告

点击Simulink\Tools\Real-Time Workshop\Build Model…,过几秒后,看到代码生成报告如下样子的界面:

图1-5 Real-Time Workshop 代码生成报告

1.3 把生成8051兼容C代码放入Keil环境里编译成51可执行的代码

在Keil下创建一个项目,命名为LookupTable.Uv2,把上一步生成的所有代码文件拷贝到与LookupTable.Uv2同一个目录下,这个例子中需要把rtlibsrc.h从MATLAB安装目录下搜查出来也考到这个目录下,然后在Keil环境内,打开LookupTable.Uv2项目,把以上文件全部添加到Source Group1内,样子如下:

图1-6 Real-Time Workshop生成的代码导入Keil里

1.4 稍修改生成的51代码和设置Keil环境为编译做准备.

修改代码和设置Keil环境的目的是让Keil能顺利编译文件,并能运行程序做测试,下面是代码修改的几个地方。

1. ert_main.c 内的主函数修改成如下样子:

图1-7 修改后的 main()

2. ert_main.c 内的rt_OneStep()修改成如下样子:

图1-8 修改后的 rt_OneStep()

3.修改Fuzzylookup.c里的fuzzylookup_step函数,程序里增添了两行代码:

fuzzylookup_U.In1=-0.92;

fuzzylookup_U.In2=-0.06;

模拟传感器器送入的信号,用于测试是否程序执行后是否查询表输出值是正确的,样子如下:

图1-9 修改后的 fuzzylookup_step(void)

4. keil环境设置,因为查询表格的尺寸较大,所以单片机存储器模式设置成下面的样子,Memory Model:Large:variables in XDATA。

图1-10单片机存储模式设置

5. 编译项目,编译后可以看到项目占用的资源情况,这里暂时不考虑代码优化问题。

图1-11 Keil编译结果

6. 执行程序测试。

图1-12 程序运行测试结果

7. 结论

以上的步骤就完成了一个MATALB下查询表转化为8051处理器可执行的代码.

SIMULINK里做嵌入式设计的流程(小结)

Simulink与嵌入式代码自动化生成

终于可以在实物上实践了各种控制算法了使用图像识别技术的水位模糊控制装置1(构思)