目录
相应的下载链接为:下载链接
下载后文件的使用方法:B站视频
演示视频
友情提示:前面是理论讲解,想看仿真的同学可以直接跳过去
模糊PID控制
传统PID控制器自出现以来,凭借其结构简单、稳定性好、工作可靠、调整方便等优点成为工业控制主要技术。当被控对象的结构和参数具有一定的不确定性,无法对其建立精确的模型时,采用PID控制技术尤为方便。PID控制原理简单、易于实现,但是其参数整定异常麻烦。
模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。
1 、输入量的量化
输入数据都是精确的,要实现模糊算法需要现对其实现量化。所谓量化就是通过量化函数将输入量投射到一定的数字级别,一般都是相对于0对称的数字区间。具体投射到怎样的区间根据实际情况而定,因为这会直接影响到计算的精度。
2 、模糊化
模糊化是模糊算法非常重要的一步,首先确定对应各语言变量的模糊子集,然后根据量化的结果,我们就可以判断该输入所属的集合并计算出对应的隶属度。计算隶属度的方法有很多,最常用的是使用三角形隶属度函数或梯形隶属度函数等来计算获得。
3 、规则库
规则库是基于控制量的模糊化而的味道的,是实现模糊推理的基础,很大程度上依赖于经验来完成。规则库的表现形式可以有多种,具体实现的形式根据我们实现的方便。
4 、推理机
推理决策才是模糊控制的核心,它利用知识库中的信息和模糊运算方式,模拟人的推理决策的思想方法,在一定的输入条件下激活相应的控制规则给出适当的模糊控制输出。
5 、精确化
我们通过模糊推理,得到一系列的模糊表达,需要进行解模糊操作才能得到紧缺的数据。常用的解模糊方法有:
最大隶属度法——计算简单,适用于控制要求不高场合。
重心法——输出更平滑,但计算难度大
加权平均法——一般在工业上应用最广泛
6 、工程量化
系统控制输出是一个精确的数,但不是可以直接用于对象控制的物理量,所以在最后还要按照我们的需要进行转换。比如对应PID的参数则可进行必要的转换和修正在输出给PID控制器。
前面简单的描述了模糊算法的基本原理,接下来我们将讨论如何将其应用于PID控制当中。所谓模糊PID控制是以偏差e及偏差的变化ec为输入,利用模糊控制规则在线对PID参数进行调整,以满足不同的偏差e和偏差的增量ec对PID参数的不同要求。其结构图如下:
输入值的模糊化就是将用于计算的输入对应到标准化的数值区间,并根据量化结果和模糊化子集得到该输入对子集的隶属度。我们在使用偏差e和偏差增量ec作为输入实现控制参数调整则需要对e和ec进行模糊化。
首先,我们确定e和ec的模糊子集,对于PID控制我们选则:负大[NB]、负中[NM]、负小[NS]、零[ZO]、正小[PS]、正中[ PM]、正大[PB]等7个语言变量就能够有足够精度表达其模糊子集。所以我们定义e和ec的模糊子集均为{NB,NM,NS,ZO,PS,PM,PB}。
确定了模糊子集,我们怎么将e和ec的具体值和模糊集对应上呢?我们需要引入量化函数。要确定量化函数,我们先引入e和ec模糊集对应的论域,定义为{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5 ,6}。对于任何一个物理量测量信号都有一个量程范围,我们记为Vmax和Vmin,和自然在PID调节时设定值的范围预期相同,所以偏差e的范围就是Vmin-Vmax到Vmax-Vmin的范围内,而偏差的增量范围则是其两倍。这里我们采用线性方式量化,则其函数关系为:
2、建立模糊规则表
3、解模糊处理
对于求得的目标对象,我们还需要将其你模糊处理以使其与具体的物理量相对应。在模糊PID调解中,我们需要的是Kp,Ki和Kd,所以我们需要根据模糊推理的结果得到我们想要的Kp,Ki和Kd值。
我们前面设计了三角隶属度函数,并采用相同的量化目标即论域{-6,6},所以在某一时刻,输入输出所处的模糊变量的隶属度是相同的,基于这一基础,我们采用重心法计算各输出量的量化值。其公式如下:
其实因为我们采用的隶属度函数的特性,在任何方向的计算隶属度的和均为1,所以分母可以省略。于是每一个对象的计算实际上就是矩阵操作,公式如下:
如果使用的是量化值,则还需要转为实际值,关于这一点直接使用物理量值也是没问题的,怎么处理根据实际需要确定。得到增量后,我们也可以引入系数来放大和缩小Kp,Ki和Kd变化量,具体实现公式如下:
其中△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的论域为 [-50,50],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站视频
要是感觉有用的话,点个赞