创建Arduino的,乐高,和其他目标的驱动程序块
正如你可能知道,很容易在一组支持的目标硬件上运行Simulink模型。万博1manbetx万博1manbetx自R2012a这已经成为可能。
即使我们对于每一个新版本的每个目标添加更多的目标和支持更多的功能万博1manbetx,它仍然是可能的,你需要的是不包括在Simulink支持包驱动程序。万博1manbetx如果你迫切需要一个驱动程序为您的硬件,你总是可以建立它自己。
让我们来看看这个作品使用来自LEGO NXT的项目,我的例子是如何工作的。
乐高光传感器
乐高NXT套件附带一个光传感器,包括一个红色LED,可以打开或关闭。在Simuli万博1manbet万博1manbetxxnk支持包中,你可以通过方块对话框中的复选框参数来控制灯光。
对于我们的项目,我们使用这种传感器,使机器人下面一条线。为了使我们的算法更稳健,我们认为这将是有趣的打开和关闭指示灯同时跟踪线,积极滤除环境光。
您的驱动程序块时产生确定代码:第1步
在Simulink的LEGO MINDSTORMS N万博1manbetxXT支持中,您可以找到许多万博1manbetx小示例,展示了如何用c编程机器人C:\ MATLAB万博1manbetx \ SupportPackages \ R2013a \ nxtOSEK \ samples_c.在其中一个例子中,我发现一个初始化机器人的函数如下:
功能ecrobot_set_light_sensor_active正是我需要从我的驱动程序块生成的。我还算出了一个对应的函数ecrobot_set_light_sensor_inactive存在于关灯,我发现,这些功能是在一个名为文件中声明ecrobot_interface.h.
步骤2 - 创建S-功能
在这里,你有2个选项来创建S-功能
第2步 - 选项1:S-功能生成器块
我的同事詹皮耶罗坎帕出版了一本很不错的提交上MATLAB中央题为设备驱动程序展示了如何使用S-Function Builder中块包含在模型中第1步中找到的代码。
他的提交包含详细的程序和屏幕截图,以指导您逐步通过过程。如果你害怕写s函数,我推荐使用他的s函数构建器技术。
步骤2 -选项2:写入S-Function和TLC文件
如果你像我一样,想要理解当你点击时发生的魔法建造在S-Function Builder块中,第二个选项是为您准备的。
首先,我们需要认识到,除非建模传感器/驱动器与环境的交互,在模拟中,驱动块通常什么都不做。所有块必须指定端口和参数的数量以及它们的尺寸,即使它们什么都不做。在我的例子中,我创建了一个具有一维1的输入端口的s函数,以指定灯是开还是关。这是我的s函数的全部代码。
要指定为块生成的代码,需要使用目标语言编译器.
具体来说,这意味着您需要为您的块编写一个TLC文件。为此,我建议从下面的例子开始sfundemos.
对于这个例子,我们需要TLC做两件事:告诉编译器包含ecrobot_interface.h和呼叫ecrobot_set_light_sensor_active和ecrobot_set_light_sensor_inactive.这是它的样子。
注意我用了BlockTypeSetup要包含头文件,和输出来定义块输出方法应该是什么。
现在轮到你了
下载这个LEGO例子或类似的Arduino目标的示例并开始创建自己的驱动程序块!
如果您制定了Simulink的目标硬件定制驱动器,它们的份额万博1manbetxMATLAB中央让我们知道通过留下这里的评论.
- 类别:
- 代码生成,
- S-functions
注释
要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。