当前位置:首页 » 《随便一记》 » 正文

模糊PI控制的Simulink仿真(保姆级别)

13 人参与  2023年05月03日 12:02  分类 : 《随便一记》  评论

点击全文阅读


前几天搜索模糊pi控制的相关仿真流程,发现csdn没有比较好的、完整的能跑出结果的模糊pid控制仿真模型。通过几天的学习和查阅文献,我现在将我仿真的步骤和出现的问题给大家分享一下,希望大家也一起交流一下自己的问题和心得。


首先我们要清晰的知道模糊pid的流程,这里简单和大家分享一下:

由上面的图我们可以知道,模糊pid需要确定隶属函数、控制规则,隶属函数是模糊化和反模糊化的关键。



接下来进入simulink模型搭建环节:

step1:在MATLAB命令行窗口中输入fuzzy——目的:打开模糊控制工具箱

输入命令后会弹出这样一个窗口

step2: 确定模糊控制量和模糊输出量

对于模糊pi控制,其结构框图如下:

 由此可知,我们要设置的模糊控制工具箱的输入既为e、ec、\Delta K_{p}\Delta K_{i}

        此处:e为实际值与给定值的差值。

                   ec为e的导数。

                   \Delta K_{p}为Kp的增量。

                    \Delta K_{i}为Ki的增量。

因此,我们在刚才打开的界面,点击左上角Add-Add variable-input增加一个输入,同理:Add-Add variable-output 增加一个输出。

 到这一步我们为了与实际相符,更改一下他们的名字,既分别点击每一个框框,更改Name:

 设置好就这样:

 step3:确定隶属函数(输入、输出都要)——目的:为了模糊化和去模糊化

我们知道,隶属函数是针对输入、输出的,所以我们要打开确定隶属函数窗口的方法也就是双击输入or输出,打开的界面如下:

 在这里,我们一般是用中间三角形的隶属函数,两边高斯型的隶属函数,对于这个框图,我们要了解这四个部分:

1)range

这个时设置输入、输出的边界,这里要根据你自己控制的策略去选择,这里我介绍我的设置方法,大家可以做一个例子。

在这里我首先定义,输入和输出的论域和隶属函数如下图:

 一共七个等级,论域是【-3,3】(这个要记住哦!!!!后面会用到)

2)Name

大家可能好奇,为啥name都要拉出来,没错,这里我们要严格按照matlab初始的时候给我们的顺序来从左到右定义我们的等级,这样子后面写模糊规则会方便很多。

3)type

在这里,我们就用三角形和高斯,也就是我下图圈出来的部分:

3)Parms 

 我们知道 等腰三角形定点,分别是与X轴的交点和最高点,输入的这三个数既为与X轴的交点和最高点的横坐标,如:

这四个部分确定好了之后,这里介绍一下高斯函数怎么确定,可能大家觉得三角形定点好确定,那高斯怎么确定呢?我的做法是先把他当作三角形输入,再改变数据类型。 

 最后确定好的隶属函数图就如下所示:

 同理,可以点击输入的另一个量和输出来输入相同的隶属函数。

step 4:确定模糊规则

这一部分就是要查文献啦,比如你研究的领域,肯定会有经验确定的模糊规则表,那我现在只说已经有了模糊控制表,要怎么表达到模糊工具箱。

双击中间这部分,就可以看到这样一个框图,里面的输入输出以及你定义每一个程度 

都可以在这里找到:

 那我们的控制规则,就是按照if(e is **)and(ec is **)then(d_Kp is **)(d_Ki is **)来书写的,具体方法就是如我现在写的第一条语句,就是点击下面这些再点击Add就可以显示在上面啦:

当然,比如你输错了或者错输,分别可以点击chang rule 和delete rule 。

遍历完所以的可能后,比如我现在是7个等级,那就是7*7=49种可能,也就是49条语句。

step5:在simulink实现模糊控制

首先我们键入以上数据后,右上角点击×,然后弹出save对话框,我们点yes,然后更改一下名字,方便后续simulink搭建:

 然后点击我们要进行模糊pi控制的simulink系统,对于模糊控制部分,我们最好建立一个子系统,这样美观:

 我们可以看到,差值进入模糊pi子系统后输出,这也另一个方面反应,其实我们的模糊pi实际上也是pi的功效,只不过是要确定更好的kp、ki参数。

模糊pi系统图如下:

 对此,我们分别来讲述它的设置与作用:

1)PI controller

这里我用的是离散系统,所以 sample time取-1,同时我们知道,pi参数我们是通过模糊控制得出的,所以选择source为external。

 2)Fuzzy Logic Controller

 对于这个模型,因为我们刚才已经用工具箱设置了,所以,这里仅更改fis name为刚刚设置的名字。

 3)saturation

这个模块一定要加,不然系统运行速度会因为成千上百条的警告而变得十分慢,而且会出不来效果,e和ec这里我都加了限幅模块,设置的上下限即为刚才隶属参数的论域。

4)zero order hold

这个模块我是看人家文献加的,离散的话可以加一下,效果可能会好点。

5)Kp、Ki计算

这个地方不要忘记,我们用模糊控制得出的是 \Delta K_{p}\Delta K_{i},所以在这之后,还要与我们通过经验调节的差不多的pi相加,才能得到真实的pi值。因为我之前设置好的pi差不多就是2.5和30,那我就在此基础上调节,用sum相加最后输入到picontroller就可以了。



以上就是整个pi系统的搭建,欢迎大家批评指正,也欢迎在评论区留言分享。


点击全文阅读


本文链接:http://zhangshiyu.com/post/60405.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1