Arduino无代码控制系统设计,使用Simulink完成(不定期更新)

Arduino无代码控制系统设计,使用Simulink完成(不定期更新)

前几天做完毕业设计,因为是和MATLAB有关的,正好之前是一个玩Arduino控制系统设计的小玩家,所以准备把这个东西整理一下发一发,个人玩Arduino也有三年多的时间,因为是使用simulink去实现控制,之前有学习过鸟哥的ESP8266的文章,是付费的,但是值得一看的。但是因为MATLAB对于8266的支持不太好,就使用Arduino的uno来写吧。现在在CSDN上也有很多关于Arduino和simulink的教程,但是大多是单篇的,只教你怎么连接到simulink上。我希望自己出一个完整点的教程,因为是第一次写这种系列教程博客,有不足之处请大家指出,我会尽快修改。

一.Arduino与Simulink

笔者是自动化专业出身,在正常的认知中,控制系统设计是使用的单片机,比如51单片机,stm32,或者是PLC,大型的控制系统使用DCS。那么这里面,到DCS控制系统中,其实已经很少用到代码了,大部分的常规PID,串级回路,以及简单的先进控制,比如模糊,史密斯预估这种控制方案,已经由DCS厂家为你做好了功能块了,使用的工程师只需要针对功能块的引脚进行操作就可以实现对控制系统的设计了,比如这样。
西门子PCS7的功能块图
这样的好处是加快控制系统的开发和投入生产。而在单片机领域,也有去代码化的设计方案出现。比如常见的STM32的cubemx,当然,它仅仅只限于单片机的引脚功能管理和时序设计。当然,matlab也是支持STM32的cubemx的,但是在线的调试功能做的还不如Arduino,所以我选择使用Arduino,可能未来我也会出一些stm32相关的文章。接下来就进行Arduino与Simulink 的环境的搭建

二.环境搭建

安装硬件支持包:我是新买的电脑,所以matlab的版本是2020a,各位选择的话,一定要选择14b之后的,如果配置吃得消,就选最新的把。
打开matlab>点击附加功能>获取硬件支持包,选择安装硬件支持包:Simulink Support Package for Arduino Hardware 。如图第三个安装包。在这里插入图片描述
因为美国网络问题可能出现各种安装错误的问题,这个不用我多说怎么解决了吧。
安装好后就可以开始使用了

三.Arduino与simulink的连接

在第一次使用Arduino与simulink的控制系统设计时,需要进行一些步骤的连接和参数的调整。首先打开matlab 2020a,因为我是新的本子,所以装的最新的,但是用起来也不是很习惯。第一次需要将matlab的当前文件夹换一下,我的默认是
C:\Program Files\Polyspace\R2020a\bin
但是在这个目录下,你会发现,使用simulink进行编译的时候会出现下面的错误

Your current working folder is: 
 C:\Program Files\Polyspace\R2020a\bin
Simulink does not permit you to modify the MATLAB installation area. 
Please change to a working folder that is not in the MATLAB
installation area and re-try the previous command.如下图

在这里插入图片描述
我是在桌面上新建一个文件夹使用的。
好的,接下来就是打开Simulink library browser进行代码块的拖拽了,在simulink library中找到 Simulink support package for Arduino Hardware,点击进入,在Common中找到digital output 块,如下图。
在这里插入图片描述
使用过arduino 的小伙伴都知道,Arduino 在13号引脚上,是自带一个LED灯的,所有的Arduino的课程的第一个都是blinker,就是闪烁的LED灯。选择这个块以后,将号码改成13号,或者自己搭建一个LED灯的电路,记得串联一个470Ω的电阻用来限流。
给这个块一个脉冲信号,使用Pulse Genarator块,在参数设置上,一共四个参数,从上到下,分别是1,3,50,0。一会解释。如图在这里插入图片描述
图片中的左侧脉冲的参数设置。在这里插入图片描述
第一个参数是脉冲的峰值大小,使用1就可以的。第二个是一个pwm的周期的时间。选择3s。第三个是脉宽的占空比,选择50%,这样的灯闪烁是亮灭时长对称的。
第四个是相位延迟,当数值为0的时候,刚开始的初始值为1,也就是一开始就发脉冲。 当设置为数值t的时候,此初始脉冲会相应的延迟时间t,可以使用默认的0。
到这里,所有的块的设置就完成了。接下来要对硬件的相关参数进行设置了
右击simulink空白处,点击configuration parameters进入下面的界面。

在这里插入图片描述
修改下面几个参数。在单片机的控制中,一般希望他的运行时间是无穷的。所以stop时间选择修改为inf。求解器solver要修改成discrete(no continuous states)。下一步修改Hardware Implementation 中的Hardware board选择Arduino uno。下面的host-board connection可能需要改成手动的,我以前的台式机就是识别不出来,有使用山寨的ch340的uno板子也可能识别不出来。这个推荐使用Atmega 64作为串口芯片的Arduino(国产的也就贵几块钱)。
在过去的版本中,可以使用normal,external的模式进行控制系统的运行。但是在2020版本的matllab已经找不到这几个选择了。只有部署到硬件,和正常的run。所谓的部署到硬件是直接让arduino自己运行,matlab直接将simulink生成的代码直接烧录到单片机中。另一种run,是simulink自动生成一段串口通讯的代码,实现实时的交互,可以在运行的过程中不断修改单片机的相关参数,比如led灯的脉宽改变亮度。但是同时,这样的操作会受限于串口通讯的带宽。根据《simulink与低成本硬件及机电一体化》这本书中说到的,在外部模式下运行,模型的最小运行步长是30ms,求解器的步长需要设置为50ms(matlab2013b)版本下。我在这里不推荐大家使用这样的方式,除非是做一些简单的实验课程。因为很多自动化的控制系统编码器,后者步进电机的控制采样时间可能需要至少2-5ms的时间。

四.运行结果

在2020版本中,如果使用外部模式,点击run,就可以运行。如图,串口的rx tx的灯一直在亮,表明数据不断通讯。

在这里插入图片描述
这张是部署到硬件,可以看到rx,tx的灯已经灭掉了。开始运行需要在菜单中选择
build,deploy&start这个选项。
在这里插入图片描述

五.小结

我暂时还没找到2020版本生成的c语言代码在哪里,这篇也写不下了,下次我找到了,给大家分析一下simulink生成的c语言代码的逻辑,也是有很大的不同的,虽然意义不太大。好了,到这里了,大家可以去尝试不用代码点亮自己的led灯了,下期各位是想看舵机控制还是单回路的pid控制呢,或者写一个简单的串口通信都可以。

  • 16
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Simulink是一个集成环境,主要用于建模、模拟和分析动态系统。它允许用户通过图形化界面构建复杂的系统模型,特别是对于需要仿真和控制系统的场景非常有用。Arduino是一种开源硬件平台,集成了微控制器,用于创建各种电子产品项目。 将SimulinkArduino连接起来进行信号处理的主要目标通常是为了实现自动化控制系统或数据采集系统。以下是如何使用Simulink控制Arduino进行信号处理的基本步骤: ### Simulink控制Arduino的基本步骤 #### 1. 设计Simulink模型 在Simulink设计信号处理算法或控制系统。这可能包括滤波器设计、PID控制、状态反馈等。你可以利用Simulink的丰富库来添加数学运算块、逻辑控制块、I/O接口块等元素。 #### 2. 使用MATLAB代码生成功能 Simulink提供了一种名为"生成代码"的功能,允许用户从Simulink模型自动生成可移植到Arduino的C语言代码。你需要将你的Simulink模型导出至MATLAB,然后使用MATLAB自带的“代码生成”工具包来转换你的模型逻辑成适用于Arduino的语言。 #### 3. 集成Arduino使用MATLAB的串行通信工具或者第三方软件如`Serial`库(通常包含在Arduino IDE中),在Arduino上配置串口接收和发送功能。这使得Arduino能够与计算机通信,接收来自Simulink的指令并将其应用于实际的电子设备或传感器数据。 #### 4. 测试与调试 在Arduino上烧录生成的代码,并通过串口观察运行结果。你可以使用Simulink的仿真功能来预先测试你的模型是否满足预期的行为。同时,结合Arduino IDE提供的调试工具,对实际设备进行现场调试。 ### 实现示例:温度控制应用 假设你想用Arduino来控制恒温加热设备,可以先在Simulink设计PID控制器来调节温度。这个PID控制器会根据输入的温度和设定的目标温度之间的差异,调整加热设备的工作强度。然后,生成适用于Arduino的C代码,上传到Arduino板上,通过Arduino的串口接收Simulink发送来的控制信号,实现自动温度控制。 ### 相关问题: 1. 如何选择合适的PID参数以获得稳定的温度控制? 2. 在Simulink中如何优化模型以减小计算时间和提高实时响应速度? 3. ArduinoSimulink之间数据传输的延迟如何影响最终的控制系统性能?
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左十七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值