对于模糊控制的原理,我不是很清楚,也没有这个心情去搞清楚,感觉知道大概怎么用就可以了。Matlab中集成了模糊控制工具箱,可以使用图像界面进行模糊控制器的设计,极大的简化了设计过程。下面介绍利用模糊工具箱进行控制系统设计的过程。
在matlab的主窗口中输入fuzzy即可调出模糊工具箱界面,退出界面的时候会提示保存,保存格式为fis,如果我们将文件保存为njust.fis,那么下次使用这个文件的时候在主窗口中输入fuzzy
njust即可。
模糊控制器的建立过程如下:(1)设定误差E、误差变化率EC和控制量U的论域为,一般为[-6
6]。(2)设定E、EC、U的模糊集。一般可设为{NB、NM、NS、ZO、PS、PM、PB}。(3)设定隶属度函数。有高斯型隶属度函数、三角型隶属度函数等。(4)设定模糊控制规则。常用的模糊控制规则如图1所示,当然可以根据特定的控制对象和要求进行相应的调整。
http://s7/middle/4b013fb1n8e139003e9f6&690
图1 常用模糊控制规则
http://s8/middle/4b013fb1n8e13a7cae487&690
图2 添加变量
点击Edit->Add
Variable即可进行变量的添加,在右下方可以进行名称的修改,左下方是与或运算方式、去模糊化方式等的选择,一般可以使用默认方式即可。
http://s8/middle/4b013fb1n8e13b0f16647&690
图3 添加论域与隶属度函数
双击图2中左右两侧的矩形图像即可进行论域与隶属度函数编辑,点击Edit->Add MFs即可进行隶属度函数的添加,右下方可以选择隶属度函数类型,左下方可以修改论域以及显示范围。
http://s8/middle/4b013fb1n8e13b795c6e7&690
图4 添加控制规则
双击图2中中间的矩形图像即可进行模糊控制规则的编辑,根据if e or(and) ec then
u的形式进行添加规则,可以修改规则权重。点击下方的Add rule和Delete
rule即可进行规则添加和删除。至此完成模糊控制器的搭建。
使用菜单栏中的View->Rules即可观察设计规则,如图5所示。拖动输入变量中间的竖直线,可以看到控制量的变化情况。
http://s5/middle/4b013fb1n8e13bd751594&690
图5 观察设计规则
使用菜单栏中的View->Surface即可观察输入变量输出变量的三维曲面,如图6所示。
http://s7/middle/4b013fb1n8e13c2651106&690
图6 输入输出曲面
模糊控制系统的框图如图7所示,其中虚线内即为建立好的模糊控制器。图8为在matlab中建立的某模糊控制系统实例。其中的fuzzy logic controller模块在simulink中的Fuzzy Logic Toolbox内,若是找不到的话可以使用搜索功能即可。若我们保存的模糊控制器文件为njust.fis,那么双击图8中的模糊控制器模块,输入njust即可。一般来说这个模糊控制器模块是两输入一输出的,所在输入前要添加一个向量组合工具mux。
http://s4/middle/4b013fb1n8e13c8df7383&690
图7 模糊控制系统结构框图
http://s7/middle/4b013fb1n8e13cf0485f6&690
图8 matlab模糊控制系统实例
我们看到图7中有Ke、Kec和Ku三个权系数,查阅文献可知ke和kec对系统的动态性能影响较大,它们的大小意味着对输入误差和误差变化的不同加权程度,ke变大缩短上升时间,但是增大系统超调;kec变大减小系统超调,但是响应速率变慢。输出比例因子ku也影响模糊控制系统的性能,ku过小,系统的动态响应过程变长,ku过大会导致系统震荡。综合调整以上三个因子,获得所需要的控制性能。当然它们有一定的计算方法,没有深入研究过,不过所谓的计算方法好像也是存在问题的。这里特别要注意的是饱和模块的上下限就是我们设定的论域范围。
最后进行模糊控制系统仿真的时候有两点需要注意:一是仿真算法的设置。如果使用默认的算法,会发现速度很慢,几乎没有进度,需要在Simulation->Configuration
Parameters中对取消过零点的限制。如图9所示。
http://s7/middle/4b013fb1n8e13d50cfcd6&690
图9 仿真算法的修改
另外需要注意的一点是模糊控制器的加载。看到论坛上很多人问为什么会报错,很大程度上原因是因为模糊控制文件fis没有加载到空间中。在主窗口中调出所保存的fis文件,进行File->Export->To
Workspace即可。
当然了,也可以使用文件形式进行模糊控制器的设计,这里不讨论了,很多参考书上都有相应的函数介绍或者程序。