单片机学习小组
直播中

二霸

11年用户 633经验值
私信 关注

如何去实现一种基于Simulink的Arduino无代码控制系统设计呢

怎样去搭建Arduino与Simulink的环境呢?
如何去实现一种基于Simulink的Arduino无代码控制系统设计呢?

回帖(1)

曾佳宁

2022-1-24 13:58:28
Arduino无代码控制系统设计,使用Simulink完成(不定期更新)

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

笔者是自动化专业出身,在正常的认知中,控制系统设计是使用的单片机,比如51单片机,stm32,或者是PLC,大型的控制系统使用DCS。那么这里面,到DCS控制系统中,其实已经很少用到代码了,大部分的常规PID,串级回路,以及简单的先进控制,比如模糊,史密斯预估这种控制方案,已经由DCS厂家为你做好了功能块了,使用的工程师只需要针对功能块的引脚进行操作就可以实现对控制系统的设计了,比如这样。

这样的好处是加快控制系统的开发和投入生产。而在单片机领域,也有去代码化的设计方案出现。比如常见的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 FilesPolyspaceR2020abin
但是在这个目录下,你会发现,使用simulink进行编译的时候会出现下面的错误
Your current working folder is:  C:Program FilesPolyspaceR2020abinSimulink does not permit you to modify the MATLAB installation area. Please change to a working folder that is not in the MATLABinstallation 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控制呢,或者写一个简单的串口通信都可以。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分