模糊控制PID设计大作业文档格式.docx
《模糊控制PID设计大作业文档格式.docx》由会员分享,可在线阅读,更多相关《模糊控制PID设计大作业文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
将系统误差e和误差变化ec变化范围定义为模糊集上的论域,即e,ec={-3,-2,-1,0,1,2,3},其模糊子集为e,ec={NB,NM,NS,ZO,PS,PM,PB},子集中元素分别代表负大,负中,负小,零,正小,正中,正大。
应用模糊合成推理设计PID参数的整定算法。
第k个采样时间的整定为
Kp(k)=kp0+Δkp(k)
Ki(k)=ki0+Δki(k)
Kd(k)=kd0+Δkd(k)
在线运行过程中,控制系统通过对模糊逻辑规则的结果处理、查表和运算,完成对PID参数的在线自校正。
其工作流程图如下图所示。
图1误差的隶属函数
图2误差变化率的隶属函数
图3kp的隶属函数
图4ki的隶属函数
图5kd的隶属函数
图6模糊系统fuzzpid.fis的结构
图7模糊推理系统的动态仿真环境
在程序PID_b.m中,利用所设计的模糊系统fuzzpid.fis进行PID控制参数的整定,并利用模糊PID控制进行阶跃响应,在第300个采样时间时控制器输出端加上1.0的干扰,响应结果及PID控制参数的自适应变化如图8到13所示。
图8模糊PID控制阶跃响应
图9模糊PID控制误差响应
图10控制器输入u
图11kp的自适应调整
图12ki的自适应调整
图13kd的自适应调整
在对三阶线性系统的控制中,利用稳定边界法进行参数整定的经典PID控制的超调量比模糊PID控制的超调量要大,但模糊PID控制存在一定的稳态误差。
模糊控制用模糊集合和模糊概念描述过程系统的动态特性,根据模糊集和模糊逻辑来做出控制决策,它在解决复杂控制问题方面有很大的潜力,可以动态地适应外界环境的变化。
附录1模糊系统设计程序PID_a
%FuzzyTurnningPIDControl
clearall;
closeall;
a=newfis('
fuzzpid'
);
a=addvar(a,'
input'
'
e'
[-3,3]);
a=addmf(a,'
1,'
NB'
zmf'
[-3,-1]);
NM'
trimf'
[-3,-2,0]);
NS'
[-3,-1,0]);
Z'
[-2,0,2]);
PS'
[-1,1,3]);
PM'
[0,2,3]);
PB'
smf'
[1,3]);
ec'
2,'
output'
kp'
[-0.3,0.3]);
[-0.3,-0.1]);
[-0.3,-0.2,0]);
[-0.3,-0.1,0]);
[-0.2,0,0.2]);
[-0.1,0.1,0.3]);
[0,0.2,0.3]);
[0.1,0.3]);
ki'
[-0.06,0.06]);
[-0.06,-0.02]);
[-0.06,-0.04,0]);
[-0.06,-0.02,0.02]);
[-0.04,0,0.04]);
[-0.02,0.02,0.06]);
[0,0.04,0.06]);
[0.02,0.06]);
kd'
3,'
rulelist=[1171511;
1231311;
1362111;
1462111;
1553111;
1644211;
1744511;
2171511;
2271311;
2362111;
2453211;
2553211;
2644311;
2734411;
3161411;
3262311;
3363211;
3453211;
3544311;
3635311;
3735411;
4162411;
4262411;
4353311;
4444311;
4535311;
4626311;
4726411;
5152411;
5253411;
5344411;
5435411;
5535411;
5626411;
5727411;
6154711;
6244511;
6335511;
6425511;
6526511;
6627511;
6717711;
7144711;
7244611;
7325611;
7426611;
7526511;
7617511;
7717711];
a=addrule(a,rulelist);
a=setfis(a,'
DefuzzMethod'
centroid'
writefis(a,'
a=readfis('
figure
(1);
plotmf(a,'
1);
figure
(2);
2);
figure(3);
figure(4);
figure(5);
3);
figure(6);
plotfis(a);
fuzzyfuzzpid;
showrule(a);
ruleviewfuzzpid;
附录2模糊控制程序PID_b
%FuzzyPIDControl
a=readfis('
ts=0.001;
sys=tf(4.23,[1,1.64,8.46]);
days=c2d(sys,ts,'
tustin'
[num,den]=tfdata(days,'
v'
u_1=0.0;
u_2=0.0;
u_3=0.0;
y_1=0;
y_2=0;
y_3=0;
x=[0,0,0]'
;
e_1=0;
ec_1=0;
kp0=0.40;
kd0=1.0;
ki0=0.0;
fork=1:
1:
3000;
time(k)=k*ts;
r(k)=1.0;
%UsingfuzzyinferencetotuningPID
k_pid=evalfis([e_1,ec_1],a);
kp(k)=kp0+k_pid
(1);
ki(k)=ki0+k_pid
(2);
kd(k)=kd0+k_pid(3);
u(k)=kp(k)*x
(1)+kd(k)*x
(2)+ki(k)*x(3);
ifk==300%addingdisturbance(1.0vattime0.3s)
u(k)=u(k)+1.0;
end
y(k)=-den
(2)*y_1-den(3)*y_2-den(4)*y_3+num
(1)*u(k)+num
(2)*u_1+num(3)*u_2+num(4)*u_3;
e(k)=r(k)-y(k);
%%%%%%%%%%%%%%ReturnofPIDparameters%%%%%%%%%%%%%
u_3=u_2;
u_2=u_1;
u_1=u(k);
y_3=y_2;
y_2-y_1;
y_1=y(k);
x
(1)=e(k);
%CalculatingP
x
(2)=e(k)-e_1;
%CalculatingD
x(3)=x(3)+e(k)*ts%CalculatingI
ec_1=x
(2);
e_2=e_1;
e_1=e(k);
plot(time,r,'
b'
time,y,'
r'
xlabel('
time(s)'
ylabel('
rin,yout'
plot(time,e,'
error'
plot(time,u,'
u'
plot(time,kp,'
plot(time,ki,'
plot(time,kd,'