模糊自适应整定PID控制仿真实验

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三模糊自适应整定PID控制仿真实验

一、实验目的

1.通过实验了解数字PID控制的原理

2.通过实验实现离散系统的数字 PID 控制仿真

3.通过实验了解模糊自适应整定PID控制的原理

4.通过实验实现模糊自适应整定PID控制仿真

5.通过实验进一步熟悉并掌握Matlab软件的使用方法

二、实验内容

1.针对给定离散系统的输入信号的位置响应,设计离散PID控制器,编制相应的仿真程序。2.若采样时间为1ms ,采用模糊PID控制进行阶跃响应,在第300个采样时间时控制器输出加1.0

的干扰,编制该模糊自适应整定PID系统的Matlab仿真程序

三、实验步骤

1.针对给定离散系统的阶跃信号、正弦信号和方波信号的位置响应,设计离散PID控制器,编制相应的仿真程序。

2.确定模糊自整定PID的算法基础

3.针对 kp, ki , kd 三个参数分别建立合适的模糊规则表

4.画出PID参数的在线自校正工作程序流程图

5.编制该模糊自适应整定PID系统的Matlab仿真程序

四、实验要求

1.设被控对象为:

采样时间为1ms,采用Z变换进行离散化,经过Z变换后的离散化对象为:

yout(k)=-den(2)yout(k-1)-den(3)yout(k-2)-den(4)yout(k-3)+num(2)u(k-1)

+num(3)u(k-2)+num(4)u(k-3)

针对离散系统的阶跃信号、正弦信号和方波信号的位置响应,设计离散PID控制器。其中,S为

信号选择变量,S=1时为阶跃跟踪,S=2时为方波跟踪,S=3时为正弦跟踪。

2.采样时间为1ms ,采用模糊PID控制进行阶跃响应,在第300个采样时间时控制器输出加1.0的干扰,编制炉温模糊控制系统的Matlab仿真程序

五﹑自适应模糊控制的规则

1﹑控制规则:

2.模糊控制器设计

确定为双输入,三输出结构

确定每个变量的论域,其中每个变量都有一个模糊子集来表示。

这个模糊子集中有3个模糊子集,分别是:N ,Z ,P 在编辑界面中,确定好每一个语言变量的范围,以及隶属函数的类型。

如下图所示:

输入模糊控制规则:

六﹑仿真结果

PID 控制器Kp 参数在控制过程中的变化曲线:

Ki参数:

Kd参数:

七﹑实验程序

(一)

%Fuzzy Tunning PID Control

Clear all;

Close all;

a=newfis('fuzzpid');

a=addvar(a,'input','e',[-1 1]);

a=addmf(a,'input','1','N','zmf',[-1,-1/3]);

a=addmf(a,'input','1','Z','trimf',[-2/3,0,2/3]); a=addmf(a,'input','1','P','smf',[1/3,1]);

a=addvar(a,'input','ec',[-1 1]);

a=addmf(a,'input','2','N','zmf',[-1,-1/3]);

a=addmf(a,'input','2','Z','trimf',[-2/3,0,2/3]); a=addmf(a,'input','2','P','smf',[1/3,1]);

a=addvar(a,'output','kp',[-10 10]);

a=addmf(a,'input','1','N','zmf',[-10,-3]);

a=addmf(a,'input','1','Z','trimf',[-5,0,5]);

a=addmf(a,'input','1','P','smf',[3,10]);

a=addvar(a,'output','ki',[-3 3]);

a=addmf(a,'output','2','N','zmf',[-3,-1]);

a=addmf(a,'output','2','Z','trimf',[-2,0,2]);

a=addmf(a,'output','2','P','smf',[1,3]);

a=addvar(a,'output','kd',[-5 5]);

a=addmf(a,'output','3','N','zmf',[-5,-1]);

a=addmf(a,'output','3','Z','trimf',[-3,0,3]);

a=addmf(a,'output','3','P','smf',[1,5]);

Rulelist=[1 1 1 1 1 1 1;

1 2 1 2 1 1 1;

1 2 2 1 2 1 1;

1 3 1

2 1 1 1;

1 3

2

3 2 1 1;

2 1 1 1 1 1 1;

2 2

3 3 1 1 1;

2 1 2 2

3 1 1;

2 3 2 1 3 1 1;

2 2

3 1 2 1 1;

3 1 2 1 1 1 1;

3 2 3 1 2 1 1;

3 1 2 1 2 1 1;

3 3 1 2 3 1 1;

3 2 3 1 2 1 1];

a=addrule(a,rulelist);

a=setfis(a,'DefuzzMethod','centroid'); writefis(a,'fuzzy');

a=readfis('fuzzpid');

figure(1);

Plotmf(a,'input',1);

figure(2);

Plotmf(a,'input',2);

figure(3);

Plotmf(a,'output',1);

figure(4);

Plotmf(a,'output',2);

figure(5);

Plotmf(a,'output',3);

figure(6);

Plotfis(a);

fuzzy fuzzpid;

showrule(a);

ruleview fuzzpid;

(二)

%Fuzzy PID Control

Clear all;

Close all;

Warning off;

a=readfis('fuzzpid');

t=0.001;

sys=tf(122,[1,26,0]);

dsys=c2d(sys,ts,'z');

[num,den]=tfdata(dsys,'v');

u-1=0;u-2=0;

y-1=0;y=2=0;

e-1=0;ec-1=0;ei=0;ed=0;

相关文档
最新文档