模糊自适应整定PID控制仿真实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;