为Arduino,Lego和其他目标创建驱动程序块
正如您所知,很容易在一组支持的目标硬件上运行Simulink模型。金宝app金宝app自R2012A以来,这是可能的。
即使我们在每个新版本中添加更多目标并支持每个目标的更多功能,仍然金宝app可能需要一个不包含在Simulink支持包中的驱动程序。金宝app如果您拼命需要用于硬件的驱动程序,您可以随时为自己构建。
让我们看看这是如何使用我工作的乐高NXT项目的示例。
乐高传感器
LEGO NXT套件带有一个光传感器,包括可打开或关闭的红色LED。在Simuli金宝appnk支持金宝app包中,您可以在块对话框中的复选框参数中控制灯。
对于我们的项目,我们使用该传感器进行机器人后的一行。为了使我们的算法更加强大,我们认为在跟踪线路时将光线打开和关闭灯光将是有趣的,以积极过滤出环境光。
第1步:确定要为驱动程序块生成的代码
在Simulink中的乐高思维剧系中的NXT支持中,您金宝app可以找到许多小示例,展示了金宝app机器人如何在C中编程。默认情况下,它们位于C:\ matlab金宝app \ 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函数构建器块
我的同事Giampiero Campa发表了非常好的提交Matlab Central.标题为设备驱动程序显示如何使用S函数建设者阻止包括在模型中的步骤1中找到的代码。
他的提交包含详细的过程和屏幕捕获,以逐步指导您的过程。如果您通过编写S函数而恐吓,我建议使用他的S函数构建器技术。
第2步 - 选项2:编写S函数和TLC文件
如果你像我一样,想知道当你点击时正在发生的魔力建造在S函数Builder块中,此第二选项适用于您。
首先,我们需要意识到,除非您将传感器/执行器与环境的交互模拟,在仿真中,驾驶块通常无关。所有块都必须指定端口和参数的数量,以及它们的尺寸,即使它们没有任何作用。在我的情况下,我创建了一个带有1个尺寸1的输入端口的S函数,以指定光应打开或关闭光。这是我的s函数的整个代码。
要指定为块生成的代码,您需要使用目标语言编译器。
具体地,这意味着您需要为块编写TLC文件。为此,我建议从例子开始sfundemos.。
对于这个例子,我们需要我们的TLC做两件事:告诉编译器包括Ecrobot_Interface.h.,并打电话ecrobot_set_light_sensor_active.和ecrobot_set_light_sensor_inactive.。这是它的样子。
注意我使用过blocktypesetup.包括标题文件,和输出要定义块输出方法应该是什么。
现在轮到你了
下载这一点乐高例子或类似的Arduino目标的示例并开始创建自己的驱动程序块!
如果为Simulink目标硬件开发自定义驱动程序,则共享它们金宝appMatlab Central.并让我们离开一个在这里评论。
注释
要发表评论,请点击这里登录您的MathWorks帐户或创建新的。