MATLAB模糊控制解析及simulink仿真示例(附fis代码和simulink仿真slx文件以及文件使用视频)

目录

模糊PID控制

模糊控制MATLAB仿真示例:


相应的下载链接为:下载链接

下载后文件的使用方法:B站视频

演示视频

友情提示:前面是理论讲解,想看仿真的同学可以直接跳过去

模糊PID控制

传统PID控制器自出现以来,凭借其结构简单、稳定性好、工作可靠、调整方便等优点成为工业控制主要技术。当被控对象的结构和参数具有一定的不确定性,无法对其建立精确的模型时,采用PID控制技术尤为方便。PID控制原理简单、易于实现,但是其参数整定异常麻烦。

模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。

、输入量的量化

  输入数据都是精确的,要实现模糊算法需要现对其实现量化。所谓量化就是通过量化函数将输入量投射到一定的数字级别,一般都是相对于0对称的数字区间。具体投射到怎样的区间根据实际情况而定,因为这会直接影响到计算的精度。

、模糊化

  模糊化是模糊算法非常重要的一步,首先确定对应各语言变量的模糊子集,然后根据量化的结果,我们就可以判断该输入所属的集合并计算出对应的隶属度。计算隶属度的方法有很多,最常用的是使用三角形隶属度函数或梯形隶属度函数等来计算获得。

、规则库

  规则库是基于控制量的模糊化而的味道的,是实现模糊推理的基础,很大程度上依赖于经验来完成。规则库的表现形式可以有多种,具体实现的形式根据我们实现的方便。

、推理机

  推理决策才是模糊控制的核心,它利用知识库中的信息和模糊运算方式,模拟人的推理决策的思想方法,在一定的输入条件下激活相应的控制规则给出适当的模糊控制输出。

、精确化

  我们通过模糊推理,得到一系列的模糊表达,需要进行解模糊操作才能得到紧缺的数据。常用的解模糊方法有:

最大隶属度法——计算简单,适用于控制要求不高场合。

重心法——输出更平滑,但计算难度大

加权平均法——一般在工业上应用最广泛

、工程量化

  系统控制输出是一个精确的数,但不是可以直接用于对象控制的物理量,所以在最后还要按照我们的需要进行转换。比如对应PID的参数则可进行必要的转换和修正在输出给PID控制器。

前面简单的描述了模糊算法的基本原理,接下来我们将讨论如何将其应用于PID控制当中。所谓模糊PID控制是以偏差e及偏差的变化ec为输入,利用模糊控制规则在线对PID参数进行调整,以满足不同的偏差e和偏差的增量ecPID参数的不同要求。其结构图如下:

输入值的模糊化就是将用于计算的输入对应到标准化的数值区间,并根据量化结果和模糊化子集得到该输入对子集的隶属度。我们在使用偏差e和偏差增量ec作为输入实现控制参数调整则需要对eec进行模糊化。

  首先,我们确定eec的模糊子集,对于PID控制我们选则:负大[NB]、负中[NM]、负小[NS]、零[ZO]、正小[PS]、正中[ PM]、正大[PB]7个语言变量就能够有足够精度表达其模糊子集。所以我们定义eec的模糊子集均为{NBNMNSZOPSPMPB}

  确定了模糊子集,我们怎么将eec的具体值和模糊集对应上呢?我们需要引入量化函数。要确定量化函数,我们先引入eec模糊集对应的论域,定义为{-6-5-4-3-2-1012345 6}。对于任何一个物理量测量信号都有一个量程范围,我们记为VmaxVmin,和自然在PID调节时设定值的范围预期相同,所以偏差e的范围就是Vmin-VmaxVmax-Vmin的范围内,而偏差的增量范围则是其两倍。这里我们采用线性方式量化,则其函数关系为:

2、建立模糊规则表

3、解模糊处理

对于求得的目标对象,我们还需要将其你模糊处理以使其与具体的物理量相对应。在模糊PID调解中,我们需要的是KpKiKd,所以我们需要根据模糊推理的结果得到我们想要的KpKiKd值。

  我们前面设计了三角隶属度函数,并采用相同的量化目标即论域{-66},所以在某一时刻,输入输出所处的模糊变量的隶属度是相同的,基于这一基础,我们采用重心法计算各输出量的量化值。其公式如下:

 其实因为我们采用的隶属度函数的特性,在任何方向的计算隶属度的和均为1,所以分母可以省略。于是每一个对象的计算实际上就是矩阵操作,公式如下:

  如果使用的是量化值,则还需要转为实际值,关于这一点直接使用物理量值也是没问题的,怎么处理根据实际需要确定。得到增量后,我们也可以引入系数来放大和缩小KpKiKd变化量,具体实现公式如下:

       其中△K为我们所计算得到的值,而α为系数,设定增量对最终值的影响。

模糊控制MATLAB仿真示例:

相应的下载链接为:下载链接

下载之后打开,里面会有final.slx simulink文件和FUZZY2.fis模糊控制的配置文件,这两个文件是为了实现:

       设计一个模糊控制系统控制一个加热炉的炉温,控制的目标是200℃,温度控制

误差的范围是(-100℃,100),误差的变化率是(-50/T 50/T),T=10s,为

控制周期,被控对象的数学模型为二阶惯性系统,传递函数如下:

𝐺(𝑠)=50(20𝑠+1)(2𝑠+1)G(s)=50/((20s+1)(2s+1))

       要求设计一个模糊控制器,控制误差和误差变化率的模糊自己不小于7个。控制量的模糊子集

也不少于7个。

建立的模糊控制表如下:

输入为实际输出与理论输出之差e和偏差变化率de。输出为炉温u。模糊控制器为两输入一输出

输入和输出均分为7个模糊子集,均为{NB,NM,NS,ZO,PS,PM,PB}e的论域为[-100 100]de的论域为  [-5050]u的论域为[-100 100]

利用MATLAB自带的fuzzy工具箱,在命令行输入fuzzy即可打开:

选择 file-import-from file,打开下载的FUZZY2.fis文件, 

得到

双击之后即可打开相应的详细的输入输出具体设置:

两侧采用高斯分布,中间采用三角形分布。

双击中间模块即可打开规则表:

具体信息如下:

[Input1]
Name='E'
Range=[-100 100]
NumMFs=7
MF1='NB':'gaussmf',[-20 -100]
MF2='NM':'trimf',[-100 -60 -20]
MF3='NS':'trimf',[-60 -30 0]
MF4='ZO':'trimf',[-20 0 20]
MF5='PS':'trimf',[0 30 60]
MF6='PM':'trimf',[20 60 100]
MF7='PB':'gaussmf',[20 100]

[Input2]
Name='DE'
Range=[-50 50]
NumMFs=7
MF1='NB':'gaussmf',[7.078 -50]
MF2='NM':'trimf',[-50 -30 -10]
MF3='NS':'trimf',[-30 -15 0]
MF4='ZO':'trimf',[-10 0 10]
MF5='PS':'trimf',[0 15 30]
MF6='PM':'trimf',[10 30 50]
MF7='PB':'gaussmf',[7 50]

[Output1]
Name='U'
Range=[-100 100]
NumMFs=7
MF1='NB':'gaussmf',[10 -100]
MF2='NM':'trimf',[-100 -66 -33]
MF3='NS':'trimf',[-60 -35 -10]
MF4='ZO':'trimf',[-20 0 20]
MF5='PS':'trimf',[10 35 60]
MF6='PM':'trimf',[33 66 100]
MF7='PB':'gaussmf',[-10 100]

一共两个输入,每个输入分七种情况,共7*7=49.

最后我们可以通过file-export-workspace导出到工作区,供后面的simulink调用

也可以通过FUZZY2=readfis('path')读取fis文件到工作区,path为fuzzy2.fis的路径,结果如下:

注:要保证名字为FUZZY2,因为simulink中的模糊控制器的模糊控制配置文件名设置的为FUZZY2,两个对应,当然也可以更改。

然后再双击final打开simulink模型,如下:

 具体的仿真设置如下:

然后双击示波器,点击上方的run按钮,即可运行得到:

蓝色线为要控制的目标,棕色线为干扰,可以看到在控制器的控制下,最后又回到了平衡。

相应的下载链接为:下载链接

下载后文件的使用方法:B站视频

要是感觉有用的话,点个赞

评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值