基于matlab的模糊PID控制仿真

  • Post author:
  • Post category:其他




注:1.本人小白,如有错误还请多多指教



一、实验设计对象描述及任务



系统描述

一个温室的室温控制目标是 25℃,温度控制误差范围是(-2℃ ,+2℃),误差的变化率是(-0.5℃ ,+0.5℃), T=10s 为控制周期。被控对象为二阶惯性系统,无时延。建立的对象模型如下:





G

(

s

)

=

K

(

T

1

s

)

(

T

2

s

+

1

)

G(s)=\frac{K}{(T_1s)(T_2s+1)}






G


(


s


)




=



















(



T










1


















s


)


(



T










2


















s




+




1


)














K
























其中 K 为系统增益,取值为学号最后两位为 10 ,k=10 ;T1=20 ;T2=58。



控制任务

设计一个模糊控制器,控制误差和误差变化率的模糊子集不小于5个。设计一个 PID 控制器(包含 P 或 PI 或 PD 或 PID),对相同被控对象进行控制。比较两种控制器的控制效果。



二、实验器材及实验环境

计算机、Matlab2016 以及 simulink



三、实验方案设计



PID控制设计



1、PID系统结构部框图

打开 simulink 界面,选择第一个空模板,进入操作界面,打开工具库,搜索需要的工具,选中拖动到空白界面中。根据工具名称,依次选取并连线。双击 Transfer Fcn 根据题目要求,设置传递函数参数如图所示。

传递函数为:





G

=

10

(

20

x

+

1

)

(

58

x

+

1

)

=

10

1160

x

2

+

78

x

+

1

G=\frac{10}{(20x+1)(58x+1)}=\frac{10}{1160x^2+78x+1}






G




=



















(


2


0


x




+




1


)


(


5


8


x




+




1


)














1


0






















=



















1


1


6


0



x










2











+




7


8


x




+




1














1


0

























pid仿真图:

pid仿真图

当 P 的参数为0.19,I 的参数为0.0032,D 的参数为1.9时 PID 曲线接近最好。



2、参数初值及调整

利用 matlab 自动调节 pid 参数,仿真图如下:

自动pid仿真图

双击 PID Controller 进入 PID 控制器属性设置界面,根据题目要求设置参数如图所示。

自动调节pid参数



模糊控制系统设计



1、输入模糊化

隶属度值法是将精确输入量对各语言值的隶属度值作为模糊化结果。因语言值的隶属函数可用离散域上的表格形式表示,也可用连续域上的解析表达式表示,所以这种模糊化方法相当于一个对应的查表或是函数计算过程。



2、隶属度函数设计

定义输入、输出模糊集。对误差 e 、误差变化 ec 及控制量 Kp 、Ki 、Kd 的模糊集及其论域定义如下:

NB 和 PB 采用 zmf 和 smf 隶属函数,其它均采用 trimf 隶属函数。e、ec、Kp、Ki 和 Kd 的模糊集均为:{NB,NM,NS,ZO,PS,PM,PB}

e 的论域为:{-2,-1.5,-1,-0.5,0,0.5,1,1.5,2}

ec 的论域为:{-0.5,-0.4,-0.3,-0.2,-0.1,0,0.1,0.2,0.3,0.4,-0.5}

Kp 的论域为:{-0.5,-0.4,-0.3,-0.2,-0.1,0,0.1,0.2,0.3,0.4,-0.5}

Ki 的论域为:{-0.1,-0.08,-0.06,-0.04,-0.02,0,0.02,0.04,0.06,0.08,0.1}

Kd 的论域为:{-2,-1.5,-1,-0.5,0,0.5,1,1.5,2}

对于第一步中的输入输出变量进行模糊化,各自形成模糊化集合;确定变量论域。误差 e 、误差变化ec及控制量 Kp 、Ki 、Kd 的模糊集和论域确定后,需要对模糊变量确定隶属函数,即对模糊变量赋值,确定论域内元素对模糊变量的隶属度。由系统输出的误差及误差的变化趋势来设计消除系统的误差的模糊控制规则。建立模糊控制表:


Kp的模糊规则表

e/Δkp/ec NB NM NS ZO PS PM PB
NB PB PB PM PM PS ZO ZO
NM PB PB PM PS PS ZO NS
NS PM PM PM PS ZO NS NS
ZO PM PM PS ZO NS NM NM
PS PS PS ZO NS NS NM NM
PM PS ZO NS NM NM NM NB
PB ZO ZO NM NM NM NB NB


Ki的模糊规则表

e/Δkp/ec NB NM NS ZO PS PM PB
NB NB NB NM NM NS ZO ZO
NM NB NB NM NS NS ZO ZO
NB NB NM NS NS ZO PS PS
ZO NM NM NS ZO PS PM PM
PS NM NS ZO PS PS PM PB
PM ZO ZO PS PS PM PB PB
PB ZO ZO PS PM PM PB PB


Kd的模糊规则表

e/Δkp/ec NB NM NS ZO PS PM PB
NB PS NS NB NB NB NM PS
NM PS NS NB NM NM NS ZO
NS ZO NS NM NM NS NS ZO
ZO ZO NS NS NS NS NS ZO
PS ZO ZO ZO ZO ZO ZO ZO
PM PB NS PS PS PS PS PB
PB PB PM PM PM PS PS PB



3、输出方法

采用 centroid 面积重心法进行反模糊化。为了获得准确的控制量,就要求模糊方法能够很好的表达输出隶属度函数的计算结果。重心法是取隶属度函数曲线与横坐标围成面积的重心,作为模糊推理的最终输出值,即:





v

0

=

v

v

μ

v

(

v

)

d

v

v

μ

v

(

v

)

d

v

v_0= \frac{∫_vv μ_v(v)dv}{∫_v μ_v(v)dv}







v










0




















=































v





















μ










v


















(


v


)


d


v


























v




















v



μ










v


















(


v


)


d


v

























对于具有 m 个输出量化级数的离散阈情况:





v

0

=

k

=

1

m

v

k

μ

v

(

v

k

)

k

=

1

m

μ

v

(

v

k

)

v_0= \frac{\sum^m_{k=1}v_k μ_v(v_k)}{\sum^m_{k=1}μ_v(v_k)}







v










0




















=
































k


=


1









m





















μ










v


















(



v










k


















)



























k


=


1









m





















v










k



















μ










v


















(



v










k


















)

























4、建立Matlab模糊系统

命令行输入 fuzzy,打开模糊规则编辑器。Edit → Add variables → Input ;Edit → Add variables → Output ;Edit → Add variables → Output 。单击选中,分别对 input1 、input2 、output1 、output2 、output3 进行隶属度编辑。对于输入进行命名,分别为误差 e 和误差变化率 ec 。输出分别命名为 Kp 、Ki 、Kd ,其他不变。

Add variables

添加隶属度函数(

隶属度函数中间范围较窄,两边较宽,以使误差较小时快速稳定

)(双击输入或输出框后出现如下图,edit/add mfs ,选择添加的个数即可)并设置相应参数。

e隶属度函数

e隶属度函数

Kp隶属度函数

Ki隶属度函数

Kd隶属度函数

根据规则表编辑规则(共49条)

规则表编辑

查看规则编辑器和曲面观测器(view/rules view/surface)

规则编辑器

pi

曲面观测器(Ki)

曲面观测器(Kd)

保存并导入到 workspace 。

导入到workspace(1)

导入到workspace(2)



5、模糊系统Matlab仿真

输入为终值为25的阶跃函数。

设置终值

在库里面找到 Fuzzy Logic Controlller 模块,添加 fuzzypidcyq 。

添加fuzzypidcyq

模糊 pid 仿真图:

模糊pid仿真图



实验结果对比



单位阶跃输入下模糊系统输出

单位阶跃输入下模糊系统输出



单位斜坡输入时模糊系统输出

单位斜坡输入时模糊系统输出



单位阶跃输入时PID输出

单位阶跃输入时PID输出



单位斜坡输入时PID输出

单位斜坡输入时PID输出



实验结果分析



两种控制器比较

由仿真结果可见两种控制器对系统的各项性能指标都有了改进,常规 PID 还是有超调量的,模糊控制器的超调量几乎为零。PID 控制在速度上优于模糊控制,并且稳态无波动。PID 控制器仿真稳定速度比模糊控制器快很多。这是因为常规 PID 控制算法计算量小,实时性也好。模糊控制的计算量大,具有较大的惯性和滞后性。



工程文件

链接:https://pan.baidu.com/s/1o1fOZd9x17yya7y5643PVg 
提取码:cyqy



版权声明:本文为weixin_47290262原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。