MATLAB/SIMULINK生成嵌入式代码的步骤

昨天参加了Mathworks公司在东南大学举办的关于MATLAB的培训,内容是关于MATLAB/SIMULINK的嵌入式代码生成以及物理建模,在这里把代码生成的步骤及一些相关内容总结一下。


嵌入式代码生成

嵌入式代码生成主要利用的是MATLAB中自带的MATLAB Coder模块,MATLAB Coder可以从MATLABcode产生可读且可移植的C/C++程序,支持多数MATLAB语言和工具箱,可以将产生的程序作为源程序、静态库或动态库集成到项目中,可在MATLAB环境中使用产生的程序来加快MATLAB代码的执行速度。

接下来就以一个非常简单的例子来举例说明嵌入式代码生成的步骤。

1.创建模型

          

这个模型很简单,输出Out1等两个输入信号Input1和Input2之和再乘以增益k(这里先用2代替),即:

                                                                                      z=(x+y)*k

其中,x和y在其他模块中定义,z和k在本模块中定义(这个影响后面数据管理中各个参数的属性,后面再说,现在不管)。

2.更改设置

上文提到代码生成利用的是MATLAB自带的MATLAB Coder模块,打开SIMULINK中的Configuraton Parameters模块

或者Ctrl+E可行。打开之后,

第一步:更改求解器设置

因为我们生成的代码是需要下载到单片机中的,而单片机中的计时是按照它的频率严格进行的,因此求解器中的求解步长要与单片机的步长一致,否则就会出错,所以这里将求解器类型改为定步长,离散,步长时间设置为0.01s(即10ms)。

第二步:Code Generation设置

将System target file一栏中默认的grt.tlc改为ert.lic,更改方式:可以直接将g改为e,也可以点击后面的Browse,然后选中ert.tlc(Embedded Coder),这一设置的目的在于生成的代码是嵌入式C代码,与grt.tlc相比,代码量小了很多,这一点对于单片机原本就不大的内存空间很有意义,有兴趣的可以自行比较一下。

这一步的目的在于可以在代码生成之后自动显示出来,不勾选的话无法直接看到代码。

第三步:代码生成

单击Build Model模块,或者Ctrl+B也行。

然后就可以看到生成的代码了。

红色方框圈出的就是我们想要实现的效果,但是可以看到这个公式和我们想要的还有一些距离,对,接下来要做的就是关键部分了。

3.数据管理

数据管理的方式有好几种,SIMULINK中使用的方法是:使用数据对象管理数据

在面向对象的编程模式下,有一个很重要的概念——,类是一种抽象,抽象出具有某一类事物具有共同属性的操作;还有一个概念——包,包可以把相关的类打包到一起,以便于管理;最后,就是对象,对象和类是对应存在的,对象是类的实体,而类是对象的抽象。

SIMULINK在进行数据管理的时候,提供了两个包供我们使用,分别是Simulink Package和Mpt Package,而我们要使用的就是Simulink Package。下面以Simulink Package简单介绍包、类、对象及对象的属性。

如上图所示,Simulink包中有Signal和Parameter两个类,Signal有Data Type、Data Storage Class、Dimensions等属性,而Parameter则有Data Type、Data Storage Class等属性。下图所示的即为Signal的属性图。

数据管理简单来说就是对上图中的各种属性进行管理,其中,最重要的就是数据类型(Data Type)和存储类(Storage Class)。数据类型很简单,而存储类比较麻烦,是影响数据存储的重要因素。模型中的信号,我们可能定义为全局变量,也可能定义为全局变量;模型中的参数,我们可以定义为常数型变量,也可以定义为宏定义。所有这些,都是通过对存储类进行管理进行实现的。

说了那么多,接下来就看看具体如何进行数据管理。

使用信号对象管理信号

第一步

在信号线上定义信号名。鼠标双击信号线,出现编辑框之后,写上信号线的名字x、y、z;

第二步

在Data Dictionary或Base Workspace里定义同名的信号对象(这里推荐使用Data Dictionary,因为数据字典会使用一个专门的文件进行信号的管理,下同)。在Model Explorer里,选中Data Dictionary或Base Workspace,然后添加三个Simulink Signal,并改名为x、y、z,设置x、y的Storage Class为ImportedExtern,将z 设置为ExportedGlobal;

然后点击左下角出现的方框

第三步

将信号对象和信号线关联起来。鼠标右键信号线,选择Properties,然后选中Singal name must resolve to Simulink signal,成功设置字之后信号名前面会出现一个蓝色的“E”。

使用参数对象管理参数

第一步

定义参数。双击增益模块gain,更改参数值为k;

第二步

定义参数对象。在Model Explorer里,选中Data Dictionary或Base Workspace,添加Simulink Parameter,改名为k,定义k的初始值为2,设置Storage Class为const Volatile。

至此,代码生成的步骤就结束了,再按Ctrl+B就可以生成想要得到的代码了。

  • 36
    点赞
  • 280
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嵌入式鲁棒控制系统设计使用Matlab / Simulink是一种集成开发环境(IDE),用于开发和设计嵌入式控制系统。Matlab是一个高级技术计算语言,可以进行数值计算、数据分析和可视化。Simulink是一个图形化建模工具,可以用来建立动态控制系统的模型。 嵌入式鲁棒控制系统设计是一种设计方法,旨在使控制系统对于模型不确定性和外部干扰具有鲁棒性。这种设计方法可以确保在面对模型参数变化、传感器误差或外部干扰时,系统仍可以稳定运行并实现预期的控制性能。 Matlab / Simulink提供了丰富的工具和函数,用于嵌入式鲁棒控制系统设计。它提供了许多用于建立系统模型、设计控制器和分析系统性能的工具。用户可以使用Simulink的图形化接口来建立系统模型,然后使用Matlab的编程能力来设计控制器和进行分析。 嵌入式鲁棒控制系统设计使用Matlab / Simulink的主要步骤包括: 1. 建立系统模型:使用Simulink的图形化界面来建立控制系统的模型。可以使用不同的控制器、传感器和执行器组件来模拟实际系统。 2. 设计控制器:使用Matlab的控制工具箱来设计控制器。可以使用各种经典和现代控制器设计方法,如PID控制、H∞控制和模糊控制等。 3. 优化控制器:使用Matlab的优化工具箱来优化控制器参数。可以使用优化算法来最小化控制系统的性能指标,如稳定裕度、上升时间和超调量等。 4. 分析系统性能:使用Matlab的分析工具来分析控制系统的性能。可以使用频域分析方法来评估系统的稳定性和鲁棒性能,并使用时域分析方法来评估系统的响应速度和抗干扰能力。 5. 代码生成和实现:使用Matlab代码生成工具箱将控制器代码生成嵌入式系统的可执行文件。可以将生成代码直接加载到目标硬件上,并进行实时控制。 总之,嵌入式鲁棒控制系统设计使用Matlab / Simulink是一种强大的工具,可以帮助工程师设计和实现高性能的嵌入式控制系统。无论是在机器人控制、自动驾驶系统还是工业自动化领域,都可以使用这些工具来实现精确控制和鲁棒性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值