Matlab使用simulink设置PID记录

文章目录

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

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

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

2、从PID的原理搭建

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

这里搭建如下所示:
Matlab使用simulink设置PID记录_第21张图片
运用这一套我们也可以和上面一样来测试效果,基本上式一样的,这里就懒得截图了。

3、调节分析

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

Matlab使用simulink设置PID记录_第22张图片
三个环节的作用分别为:

  • 比例环节的作用

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官网也提到了这个包,需要的可以自行百度搜索下载;
Matlab使用simulink设置PID记录_第23张图片
下载完之后点击EXE安装即可,他会自动匹配到我们电脑安装matlab的位置,安装到那个路径下面的

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

2、串级PID生成测试

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

这里我搭建的模型如下
Matlab使用simulink设置PID记录_第40张图片
可以看到角度环输出作为了速度环的输入,同时反馈量有真实速度和真实角度两个变量,最终输出定义为PWM,我们再次生成代码,这样就把我们刚才搭建的模型整理出来了。

Matlab使用simulink设置PID记录_第41张图片

3、对于串级PID的理解

你可能感兴趣的:(日常生活技巧,matlab,stm32,ide)