作业3
1.问题描述
2.分析
a.模糊控制器的结构
输入为实际输出与理论输出之差e和偏差变化率de。输出为炉温u。模糊控制器为两输入一输出。
b.定义输入、输出模糊集
输入和输出均分为7个模糊子集,均为{NB,NM,NS,ZO,PS,PM,PB}。e的论域为[-100 100],de的论域为[-55],u的论域为[-100 100]。
c.输入输出隶属函数
NB和PB均采用gaussmf(高斯)隶属函数,其它均采用trimf(三角)隶属函数
d.建立模糊控制规则表(共有49条规则)
de e | NB | NM | NS | ZO | PS | PM | PB |
NB | NB | NB | NM | NM | NS | NS | ZO |
NM | NB | NM | NM | NS | NS | ZO | PS |
NS | NM | NM | NS | NS | ZO | PS | PS |
ZO | NM | NS | NS | ZO | PS | PS | PM |
PS | NS | NS | ZO | PS | PS | PM | PM |
PM | NS | ZO | PS | PS | PM | PM | PB |
PB | ZO | PS | PS | PM | PM | PB | PB |
e.反模糊化
采用centroid面积重心法进行反模糊化。
3.建立Matlab模糊系统
a.打开FIS编辑器,(在Commond Window 输入fuzzy或在“应用程序”中点击“fuzzy logic designer"),建立双输入单输出模糊系统(edit/add variable/input),并根据分析的内容确定相应参数(名字在name框里键入,范围要双击对应输入输出,然后在range框键入)
b.添加隶属度函数(隶属度函数中间范围较窄,两边较宽,以使误差较小时快速稳定)(双击输入或输出框后出现如下图,edit/add mfs,选择添加的个数即可)并设置相应参数
c.根据规则表编辑规则
d.查看规则编辑器和曲面观测器(view/rules view/surface)
e.保存并导入到workspace(file/export/to file to workspace或者在命令行窗口键入:文件名=readfis('文件名.fis'),回车)
4.Matlab仿真
a.仿真结构图:
输入为终值为200的阶跃函数(saturation的范围及对应e,de,u的范围,fuzzy logic controller的参数为文件名)。如下图:
各参数配置(simulation/model configuration parameters)尤其是zero-crossing control,严重影响仿真速度甚至效果
b.仿真结果
全局图
局部放大图
c.后发现Saturation模块可去掉,仿真结果几乎相同。可见,一旦设定输入输出论域,模糊控制器的输入输出会自动约束到相应范围,如下图:
d.仿真结果为:
全局图
局部放大图
e.结果分析
由图看出,150s时才趋于稳定,存在稳态误差,并在稳态值附近有细小震荡。这是因为设计的模糊控制器相当于PD控制器,PD控制器本身存在稳态误差,模糊控制属于离散控制,所以会有波动。
5.PID控制器
a.仿真结构图
不断调整PID各参数,发现P=1.2、I=0.01、D=1时效果较好,如下图所示:
b.仿真结果
全局图
局部放大图
e.结果分析
由图可知,PID控制器稳定速度很快,约5秒就稳定了,并且稳定后无波动。
6.比较分析:
由运行结果可知,PID控制在速度上优于模糊控制,并且稳态无波动。PID控制器仿真稳定速度比模糊控制器快很多。这是因为常规PID 控制算法计算量小,实时性也好。模糊控制的计算量大,具有较大的惯性和滞后性。