人在仿真软件

Simulink和基于模型的设计

为Arduino、Lego和其他目标创建驱动块

您可能知道,在一组受支持的目标硬件上运行Simulink模型是很容易的。自R2012a以来,这已经成为可能。

即使我们在每个新版本中为每个目标添加更多的目标并支持更多的特性,您仍然可能需要一个不包含在Simulink支持包中的驱动程序。如果您迫切需要硬件的驱动程序,您可以自己构建它。

让我们通过一个来自我参与的LEGO NXT项目的示例来了解它是如何工作的。

乐高光传感器

乐高NXT套件附带一个光传感器,包括一个可以打开或关闭的红色LED。在Simulink支持包中,您可以通过块对话框中的复选框参数来控制灯光。

LEGO Light Sensor驱动块的对话框

在我们的项目中,我们用这个传感器制作了一个直线跟随机器人。为了使我们的算法更健壮,我们认为在跟踪直线时打开和关闭灯,主动过滤环境光会很有趣。

步骤1:确定要为驱动程序块生成的代码

在Simulink的LEGO MINDSTORMS NXT Support中,您可以找到许多演示如何用c语言编程机器人的小示例C: \ MATLAB \ SupportPackages \ R2013a \ nxtOSEK \ samples_c.在其中一个例子中,我发现一个初始化机器人的函数是这样的:

用于用C编程NXT块的示例代码

这个函数ecrobot_set_light_sensor_active正是我需要从我的驱动程序块生成的。我还算出了一个对应的函数ecrobot_set_light_sensor_inactive我发现这些函数都声明在一个名为ecrobot_interface.h

步骤2 -创建S-Function

这里有两个选项来创建S-Function

步骤2 -选项1:S-Function构建块

我的同事詹坎发表了一篇很好的投稿MATLAB中央题为设备驱动程序演示如何使用s函数生成器块,以在模型中包含步骤1中找到的代码。

他的提交包含详细的程序和屏幕截图,以指导您一步一步地完成该过程。如果你害怕编写s函数,我建议使用他的s函数构建器技术。

步骤2 -选项2:写S-Function和TLC文件

如果你和我一样,想要了解点击时发生的魔力构建在S-Function Builder块中,第二个选项是为您准备的。

首先,我们需要意识到,除非对传感器/执行器与环境的交互进行建模,否则在仿真中,驱动块通常什么都不做。所有块都必须指定端口和参数的数量以及它们的尺寸,即使它们什么都不做。在我的例子中,我创建了一个s函数,它有一个维度为1的输入端口,用来指定灯应该是开还是关。这是s函数的全部代码。

s -功能来控制乐高光传感器的光

要指定为块生成的代码,需要使用目标语言编译器

具体地说,这意味着您需要为您的块编写一个TLC文件。为此,我建议从以下例子开始sfundemos

对于这个例子,我们需要TLC做两件事:告诉编译器includeecrobot_interface.h,叫ecrobot_set_light_sensor_active而且ecrobot_set_light_sensor_inactive.这就是它的样子。

TLC文件控制乐高光传感器的光

注意我用了BlockTypeSetup要包括头文件和输出定义块输出方法应该是什么。

现在轮到你了

下载这个乐高的例子或类似的Arduino目标的示例并开始创建您自己的驱动块!

如果您为Simulink目标硬件开发自定义驱动程序,请在上面共享它们MATLAB中央留下一个,让我们知道这里的评论

|

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。

Baidu
map