软件集成:Simulink与Arduino联合开发

本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个Arduino路径中去编译软件。最后将软件下载到Arduino Uno中,通过串口输出Simulink计算的结果。

阅读本文需要有一定的Arduino IDE开发调试经验和Simulink代码生成经验。关于Simulink代码生成可以参考博主的专栏《Simulink代码生成》。部分内容参照上一篇博客《集成与验证:Simulink与STM32联合开发》,本文就不再赘述。

1 问题引入

在上一篇博客《集成与验证:Simulink与STM32联合开发》中,成功地将Simulink生成出地代码加入到STM32工程中编译,并通过下载到STM32F407中验证了方案的正确性。

对于创客朋友们来说,还有一个常用的硬件就是知名的Arduino。Arduino的封装程度很高,并且有自己的一个专门的IDE供开发。但是Arduino的并成语言是C++,和STM32有些区别。所以本文会研究通过同样的方案、同样的Simulink模型生成C++的代码,并放在Arduino中运行。
在这里插入图片描述

2 集成方案

本文的集成方案与《集成与验证:Simulink与STM32联合开发》相同,只不过主函数变成了main.ino文件。所以集成方案参照《集成与验证:Simulink与STM32联合开发》的第2章即可。

3 建模与编程过程

3.1 Simulink模型搭建

模型的搭建、Storage Class的建配置与《集成与验证:Simulink与STM32联合开发》的第3.1章相同。

3.2 代码生成配置

搭建好模型,配置好信号线的Storage Class后,进行代码生成配置。这里和STM32的配置略有不同。

1)打开Simulink配置,配置离散求解器、代码生成的目标文件,以及目标硬件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的目标文件还是ert.tlc,但是语言要选为C++。目标硬件要配置为AVR。

2)点击左侧的Interface,把Code Interface packaging选为Nonreusable function。默认的选项是C++ Class,会生成C++类的接口,不支持一部分Storage Class。Nonreusable function生成的代码就会和C代码差不多了。
在这里插入图片描述
3)Ctrl + B生成代码后会发现生成了一个demo.cpp的C++源文件,而不是demo.c的C源文件。
在这里插入图片描述
内容基本上和C源文件一样,这里就不再解析代码内容。

3.3 Arduino项目搭建

1)新建一个空白的Arduino项目main.ino,将如下代码拷贝进去。

#include "demo.h"

float Demo_Input;     //在main.ino文件中定义全局变量Demo_Input

void setup() {
  // put your setup code here, to run once:
  Demo_Input = 0;       //初始化Demo_Input为0
  demo_initialize();    //demo模型的初始化函数
  Serial.begin(9600);   //串口初始化
}

void loop() {
  // put your main code here, to run repeatedly:
  Demo_Input = Demo_Input + 1;   //Demo_Input每个循环加1
  demo_step();                   //执行模型的step函数,给Demo_Output赋值为Demo_Input的两倍
  Serial.print(Demo_Input);      //打印输入变量和输出变量
  Serial.print(";");
  Serial.print(Demo_Output);
  Serial.println(";");
  delay(1000);                   //延时1s
}

整体代码的思路和博客《集成与验证:Simulink与STM32联合开发》的第3.4章相似。

2)将Simulink生成的源文件和头文件拷贝到main.ino目录下。
在这里插入图片描述
在Arduino开发中,只要把源文件和头文件放在项目目录里,就可以调用到了,不需要像STM32的环境中那样配置一番。

3.4 串口打印、验证结果

通过Arduino IDE编译、上传,再通过串口打印可以得出Demo_Input和Demo_Output全局变量的数值。
在这里插入图片描述
从图中可以看出,串口打印的输入每隔1秒钟会加1,输出一直是输入的2倍。从而验证了模型的2倍增益效果已经体现在Arduino项目中了。

4 总结

通过Simulink生成适用Arduino的代码其实也比较简单,主要是注意配置C++以及目标硬件即可。

>>返回个人博客总目录

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值