Matlab使用simulink设置PID记录

news/2024/7/16 8:03:51 标签: matlab, stm32, ide

文章目录

    • 1、使用simulink搭建PID框架
      • 1、使用官方PID框架
      • 2、从PID的原理搭建
      • 3、调节分析
    • 2、simulink联合cubumx生成代码
      • 1、单级PID生成测试
      • 2、串级PID生成测试
      • 3、对于串级PID的理解

最近正好做我旁边的兄弟一直在做simulink仿真飞行器的设计,我一时兴起,就也想来试试看看会有什么效果,于是决定来上手摸一摸看看咋样,使用之后感觉simulink的功能还是很强大的,可以作为一个不错的学习了解的工具。

下面就来记录下我的整个过程,同时本文多有参考,非常感谢各位大佬提供的参考!

1、使用simulink搭建PID框架

1、使用官方PID框架

这里我使用的平台为MATLAB2017b,个人觉得只要版本高于或者等于这个就可以了。

首先还是我们启动下simulink
在这里插入图片描述
这里新建一个空的模版工程,这里我看我隔壁同学是全中文版的,属实要舒服不少,我这里碰到不知道的还要翻译,有点难受
在这里插入图片描述
刚进来我们可以先就是设置下我们的仿真环境,点击设置就可以看到了
在这里插入图片描述
修改为指定补步长并且离散,这里的时间步长我们可以适当设置,比如我这里设置为1ms,他这里单位都是秒,一般我们做一下控制的时候也都是ms级别的,考虑到我们电脑性能这么优秀,所以完全设置为1ms就OK了
在这里插入图片描述
下面就是托块了,也是非常方便的,就是在库里面掉一些东西来用,当然我们这里就不需要调用了,直接双击就可以了
在这里插入图片描述
当然想要看的更详细还是调出来看看到底是什么情况的好
在这里插入图片描述
所以我们这里要调用PID,也只需要直接输入即可
在这里插入图片描述
这样我们就可以凑齐我们这个函数需要的所有部分了,如下所示,从左到右分别是:输入,加法,PID计算,传递函数,最后是显示器。
在这里插入图片描述
这里我想大部分的应该都了解,唯独差异就在传递函数上面,那么什么是传递函数呢,这个样子的传递函数又是什么意思呢,我查看了matlab的官方文档,(网址:https://ww2.mathworks.cn/help/simulink/slref/transferfcn.html)解释如下:

在这里插入图片描述
可以看出这个函数还是比较复杂的,咱也不管那么多了,这里只是使用,他这里是给线性系统使用的,因此我们这里使用这个问题应该不大,然后就是这个函数的修改,我们可以双击查看这个函数,可以看到他将系数用数组的形式表示了出来,我们也只需要修改这个数组即可改变这个传递函数了
在这里插入图片描述
比如我将其修改为如下形式
在这里插入图片描述
这样我们就知道如何修改这些参数了,下面我为了比较方便将这个系统改为复制为三项
在这里插入图片描述
但是这样还不够,因为控制系统都是有延迟的,所以为了逼近真实的控制系统我们在这里也加入延时的模块,如下所示:
在这里插入图片描述
这里我设置延时时间为1ms
在这里插入图片描述
同时为了看到纯P调节的效果,我们这里在设置下不同的PID参数,这里三个参数分别设置为5,20,以及80,
在这里插入图片描述
点击运行我们可以看到结果如下所示:可以看到红线表示的,就是第三个PID已经出现了超调的现象,同时也是最快的一个接近目标的,但是他仍存在误差

在这里插入图片描述
为了能更好的看到净差,我们这里加一个单一的信号看看
在这里插入图片描述
再次运行可以看到结果如下,可以看到,即使是KP给了一个很大的值之后仍是存在这一个很小的净差
在这里插入图片描述
因此我们下面就可以来修改净差,将PID参数添加I的参数,这里我设置I为5,KP=20,效果如下,可以看到净差消除(绿线)
在这里插入图片描述
然后我们将I进一步增大,就可以看大I造成的系统震荡了
在这里插入图片描述
当然D具有超纤预测的功能,可以减小这个震荡,这里我就不一一截图了,感兴趣的可以自己尝试。

2、从PID的原理搭建

我们都知道PID是由比例,积分,微分三个环节构成的,因此根据这个理论环节就可以搭建起来PID,包括我们平时在控制电机的时候也可以就是用这样方法来配置PID(就是代码离散化PID的参数)

这里搭建如下所示:
在这里插入图片描述
运用这一套我们也可以和上面一样来测试效果,基本上式一样的,这里就懒得截图了。

3、调节分析

这里还是记录下PID的调试经验以及经验上的总结吧,PID控制器的框图如下所示:

在这里插入图片描述
三个环节的作用分别为:

  • 比例环节的作用

1、对偏差量e(t)瞬间作出反应,只与当前的偏差有关,产生相应的控制量u(t)。

2、控制作用的强弱取决于比例系数Kp ,Kp越大,作用越强,过程越快,静态偏差也就越小,但是Kp越大,也越容易产生振荡,增加系统的超调量,系统的稳定性会变差。

  • 积分环节的作用

1、只要偏差e(t)存在,积分作用就会就不断的增加(条件是控制器没有饱和),偏差e(t)就不断减小,当偏差e(t)=0时,积分控制作用才会停止。

2、积分控制会降低系统的响应速度,积分作用太强会增加系统的超调量,系统的稳定性会变差。

  • 微分环节的作用

1、微分环节可以根据偏差e(t)的变化趋势(变化速度)预先给出纠正作用,能在偏差变大之前进行修正。

2、有助于减小超调量,克服振荡,使系统趋于稳定,它加快了系统的跟踪速度,减少调节时间。

3、微分作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分,或在微分之前先对输入信号进行滤波

上面是教科书的理解,但实际情况下我看来,积分是会加速相应的,这里加速响应是更快的接近目标,因为单纯靠增大P去让系统更快的接近目标效果不明显,但是I具有明显的效果,但是I稍微偏大就容易造成超调,导致系统反复震荡,所以其实I是个很复杂的参数!

2、simulink联合cubumx生成代码

1、单级PID生成测试

这里我们首先要安装一个包,我这里用的包名称为:STM32MatTarget 4.4.2 setup.zip,这里我看ST官网也提到了这个包,需要的可以自行百度搜索下载;
在这里插入图片描述
下载完之后点击EXE安装即可,他会自动匹配到我们电脑安装matlab的位置,安装到那个路径下面的

下一步我们就可以导入包进行测试了,输入如下命令,然后选择添加并包含子文件夹
在这里插入图片描述
将我们的包的位置导入即可,我这里的路径如下,仅供参考
在这里插入图片描述
下面我们就可以打开cubemx创建一个空的工程了,什么都不需要配置(当然也可以什么都配置),这个不影响,之后在生成即可,这里我选的编译器是KEIL的编译器
在这里插入图片描述
下面就还是输入simulink了,首先还是参数配置
在这里插入图片描述
这里我们再生成代码这里要做一下选择,选择成stm32
在这里插入图片描述
选择cubemx的路径,会自动匹配电脑上的cubemx路径位置
在这里插入图片描述
这里我们输入stm32,就可以看到stm32的配置了
在这里插入图片描述
之后双击就可以选择我们刚才选择的IOC文件了
在这里插入图片描述
这样我们就可以看到我们配置的芯片型号如下,还是比较正常的
在这里插入图片描述
之后我们就可以按照上面的方法来配置PID控制器了,搭建的框图如下所示:
在这里插入图片描述
这里我们跟之前的PID的框图不一样,我们稍微做下修改
在这里插入图片描述
之后我们就可以按下CTRL+B进行构建了,构建完成之后我们再次双击我们的STM32的图标,在里面打开IOC,我们在ioc再次生成一次代码即可
在这里插入图片描述
点击生成:
在这里插入图片描述
这样我们打开Keil就可以看到我们多出了文件夹
在这里插入图片描述
打开就可以看到我们的PID函数了
在这里插入图片描述
打开.h文件可以看到我们定义的参数结构体
在这里插入图片描述
我们也可以编译下,这里我编译也是OK的。

2、串级PID生成测试

那么下面我们就来尝试下搭建一个串级PID,就以角度和速度这个比较常见的电机模型来说吧。

这里我搭建的模型如下
在这里插入图片描述
可以看到角度环输出作为了速度环的输入,同时反馈量有真实速度和真实角度两个变量,最终输出定义为PWM,我们再次生成代码,这样就把我们刚才搭建的模型整理出来了。

在这里插入图片描述

3、对于串级PID的理解


http://www.niftyadmin.cn/n/980123.html

相关文章

1130 N的阶乘的长度 V2(斯特林近似)

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入N求N的阶乘的10进制表示的长度。例如6! 720,长度为3。 Input 第1行:一个数T,表示后面用作输入测试的数的数量。(…

stm32外设笔记-freertos配置(三)

文章目录1、任务通知2、消息队列打印串口数据3、打印任务执行情况1、打印任务占用的内存2、打印任务对cpu的利用率前面的提到了关于FreeRtos的任务的挂起与恢复,消息队列,软件定时器等内容,今天就继续介绍其他几个参数吧! 1、任务…

用树莓派实现RGB LED的颜色控制——C语言版本号

用树莓派实现RGB LED的颜色控制 RGB色彩模式是工业界的一种颜色标准。是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红、绿、蓝三个通道的颜色。这个标准差点儿包含了人类视力所能感知的全部颜色…

51Nod-1100 斜率最大

1100 斜率最大 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (…

OLED多级菜单记录

文章目录1、按键驱动1、硬件连接2、引脚功能配置3、程序设置2、oled驱动3、菜单移植1、菜单的思路2、菜单程序设计作为一个成熟的项目,就必然不会只有一个方面的特点了,这里一般我们可能需要系统来进行调度,然后给一些可视化的UI,…

编码电机PID调试(速度环|位置环|跟随)

文章目录1、编码电机认识2、上位机波形显示1、功能介绍2、协议说明3、速度环调试验证4、位置环调试验证5、实现跟随效果前面的文章中有讲过编码电机串级PID相关的知识,以及一些PID的调试经验,这里我最近正好又把电机摸了一遍,同时将波形的工具…

51Nod-1240 莫比乌斯函数(质因子个数)

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出。梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的…

dij算法

给出一个图&#xff0c;起始点是1&#xff0c;结束点是N&#xff0c;边是双向的。求点1到点N的最短距离。 #include<iostream> #include<queue> using namespace std; typedef pair<int ,int> P; const int INF1<<29; int n,m; int _map[500][500]; i…