专家PID控制.docx
- 文档编号:6366266
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:11
- 大小:95.91KB
专家PID控制.docx
《专家PID控制.docx》由会员分享,可在线阅读,更多相关《专家PID控制.docx(11页珍藏版)》请在冰豆网上搜索。
专家PID控制
实验一:
专家PID控制
一、实验题目:
3500s)Gp(。
采用专家PID一专家系统的传递函数为控制,输入信21.5s50s号为阶跃信号,取采样时间为1ms,用MATLAB仿真,画出阶跃响应曲线和误差变化曲线。
二、实验分析:
1、PID控制算法分析
PID是比例(P)、积分(I)、微分(D)控制算法。
但并不是必须同时具备这三种算法,也可以是PD,PI,甚至只有P算法控制。
Kp,Ti,Td三个参数的设定是PID控制算法的关键问题。
一般说来编程时只能设定他们的大概数值,并在系统运行时通过反复调试来确定最佳值。
因此调试阶段程序须得能随时修改和记忆这三个参数。
PID控制算法是实际工业控制中应用最为广泛的控制算法。
它具有控制器设计简单、容易实现、控制效果好、鲁棒性强等特点,是迄今为止最稳定的控制方法。
它所涉及的参数物理意义明确,理论分析体系完整。
2、专家PID控制过程分析:
专家控制(ExpertControl)的实质是基于受控对象和控制规律的各种知识,并以智能的方式利用这些知识来设计控制器。
利用专家经验来设计PID参数便构成专家PID控制。
对于典型的二阶系统阶跃响应过程作如下分析,根据误差及其变化,可设计专家PID控制器,该控制器可分为五种情况进行设计。
令e(k)表示离散化的当前采样时刻的误差值,e(k-1)、e(k-2)、分别表示前一个和前两个采样时刻的误差值,则有
e(k)e(k)e(k1)e(k1)e(k1)e(k2)根据误差及其变化,可设计专家PID控制器,该控制器可分为5种情况设计:
e(k)M时,实施开环控制。
Ⅰ:
1e(k)e(k)0且e(k)M时由控制器实施较强控制作用,其输出可以为Ⅱ:
当
2)ke)
(2)(k)(e)(kek)(ku()uk1k()ek1kkekek1(2dip1.e(k)e(k)0且e(k)M时控制器实施一般的控制作用,其输出为当
2)2e(ke(k1)ke(k)ke(k)ku(k)u
(1)ke(k)e(k1)2dpiⅢ:
当时,控制器输出不变。
0k)e1)0或()0,e(k)e(ke(k)e(kⅣ:
当时,实施较强控制作用,Mk)0且e(1,e(k)e(k)ee(k)(k)02)kke
(1)ku(k)u(kmp1当时,实施较小控制作用,
M)且e(k))e(k10(e(k)ek)0,e(k2)ke()kk(k)u(k1um2pk)e(时,此时加入积
分,减小稳态误差。
Ⅴ:
当式中,—————误差e的第k个极值;)ke(m—-分别为第k次和第k-1次控制器输出;)1(),uku(k=2——————增益放大系数,;1kk11=0.6—————增益抑制系数,;10kk22——设定的误差界限,,MM,M0.05M2121其中可取0.8,0.4,0.2,0.01四值;M1=0.001—————任意小正实数。
三、实验过程:
3500)(sGp离散取样,选取采样时间间隔为1ms;1、对传递函数
250ss1.52、PID控制算法的关键问题是其三个参数Kp,Ti,Td的设定,选取初始值为:
kp=0.6;ki=0.03;kd=0.01;
3、取阶跃信号;1(k)rin4、写出线性模型及当前采样时刻的误差值:
y(k)den
(2)y(k1)den(3)y(k2)den(4)y(k3)num
(1)u(k)num
(2)u(k
1)num(3)u(k2)num(4)u(k3)e(k)rin(k)y(k)
5、循环第3和第4步;
6、通过Matlab仿真出专家PID控制的阶跃响应曲线图和误差响应曲线图。
四、实验结果:
图1阶跃响应曲线
误差响应曲线2图
附录:
仿真程序
%ExpertPIDControllerclearall;
closeall;
ts=0.001;
sys=tf(3.5e003,[1.5,50,0]);dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'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]';
x2_1=0;
kp=0.6;ki=0.03;kd=0.01;
error_1=0;
fork=1:
1:
500
time(k)=k*ts;
rin(k)=1.0;%TracingJieyueSignal
u(k)=kp*x
(1)+kd*x
(2)+ki*x(3);%PIDController
%Expertcontrolrule
ifabs(x
(1))>0.8%Rule1:
Unclosedcontrolfirstly
u(k)=0.45;
elseifabs(x
(1))>0.40
u(k)=0.40;
elseifabs(x
(1))>0.20
u(k)=0.12;
elseifabs(x
(1))>0.01
u(k)=0.10;
end
ifx
(1)*x
(2)>0|(x
(2)==0)%Rule2
ifabs(x
(1))>=0.05u(k)=u_1+2*kp*x
(1);
else
u(k)=u_1+0.4*kp*x
(1);
end
end
if(x
(1)*x
(2)<0&x
(2)*x2_1>0)|(x
(1)==0)%Rule3u(k)=u(k);
end
ifx
(1)*x
(2)<0&x
(2)*x2_1<0%Rule4
ifabs(x
(1))>=0.05u(k)=u_1+2*kp*error_1;
else
u(k)=u_1+0.6*kp*error_1;
end
end
ifabs(x
(1))<=0.001%Rule5:
IntegrationseparationPIcontrol
u(k)=0.5*x
(1)+0.010*x(3);
end%Restrictingtheoutputofcontrollerifu(k)>=10
u(k)=10;
endifu(k)<=-10u(k)=-10;
end
%Linearmodel
yout(k)=-den
(2)*y_1-den(3)*y_2+num
(1)*u(k)+num
(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);
%ReturnofPIDparameters%
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
x
(1)=error(k);%CalculatingPx2_1=x
(2);
x
(2)=(error(k)-error_1)/ts;%CalculatingDx(3)=x(3)+error(k)*ts;%CalculatingI
error_1=error(k);
endfigure
(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');figure
(2);
plot(time,rin-yout,'r');xlabel('time(s)');ylabel('error');
%FuzzyTunningPIDControlclearall;
closeall;
a=newfis('fuzzpid');
%Parametere
a=addvar(a,'input','e',[-3,3]);a=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);
a=addvar(a,'input','ec',[-3,3]);%Parametereca=addmf(a,'input',2,'NB','zmf',[-3,-1]);
a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);
%Parameterkpa=addvar(a,'output','kp',[-0.3,0.3]);
a=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);
%Parameterkia=addvar(a,'output','ki',[-0.06,0.06]);a=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]);a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);
%Parameterkpa=addvar(a,'output','kd',[-3,3]);a=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);
rulelist=[1171511;
1271311;
1362111;
1462111;
1553111;
1644211;
1744511;
2171511;
2271311;
2362111;
2453211;
2553211;
2644311;
2734411;
3161411;
3262311;
3363211;
3453211;
3544311;
3635311;
3735411;
4162411;
4262311;
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,'fuzzpid');
a=readfis('fuzzpid');
%PIDController
ts=0.001;
sys=tf(3500,[1.5,50,0]);
dsys=c2d(sys,ts,'tustin');
[num,den]=tfdata(dsys,'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]';
error_1=0;
e_1=0.0;
ec_1=0.0;
kp0=0.40;
kd0=1.0;
ki0=0.0;
fork=1:
1:
500
time(k)=k*ts;
rin(k)=1;
%UsingfuzzyinferencetotunningPID
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
ifu(k)>=10
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
endyout(k)=-den
(2)*y_1-den(3)*y_2+num
(1)*u(k)+num
(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);
%%%%%%%%%%%%%%ReturnofPIDparameters%%%%%%%%%%%%%%%u_3=u_2;
u_2=u_1;
u_1=u(k);
y_3=y_2;
y_2=y_1;
y_1=yout(k);
%CalculatingP
%CalculatingD
%CalculatingI
x
(1)=error(k);x
(2)=error(k)-error_1;x(3)=x(3)+error(k);
e_1=x
(1);ec_1=x
(2);
error_2=error_1;
error_1=error(k);
endshowrule(a)figure
(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');figure
(2);plot(time,error,'r');xlabel('time(s)');ylabel('error');figure(3);plot(time,u,'r');
xlabel('time(s)');ylabel('u');figure(4);plot(time,kp,'r');xlabel('time(s)');ylabel('kp');figure(5);plot(time,ki,'r');xlabel('time(s)');ylabel('ki');figure(6);plot(time,kd,'r');xlabel('time(s)');ylabel('kd');figure(7);plotmf(a,'input',1);figure(8);plotmf(a,'input',2);figure(9);plotmf(a,'output',1);figure(10);plotmf(a,'output',2);figure(11);plotmf(a,'output',3);plotfis(a);
time(s}
time(s)
1.4
I
-TII
III
1.2
≡*
1
•
-
0.8
■
■
n0.6
■
-
0.4
-
0.2
0
-0.2(
I
I
U∖
∖
IL
∖∖
⅝
-
1
]
∖
IIII
11I
0.05
0.10.150.20.250.30.350.40.450.5
time(s)
1.2
time(s)
的隶属度函数曲线ki2图
图3kp的隶属度函数曲线
图4ec的隶属度函数曲线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专家 PID 控制