专家PID控制.docx
- 文档编号:11162382
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:19
- 大小:191.51KB
专家PID控制.docx
《专家PID控制.docx》由会员分享,可在线阅读,更多相关《专家PID控制.docx(19页珍藏版)》请在冰豆网上搜索。
专家PID控制
实验一:
专家PID控制
一、实验题目:
一专家系统的传递函数为
。
采用专家PID控制,输入信号为阶跃信号,取采样时间为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)、分别表示前一个和前两个采样时刻的误差值,则有
根据误差及其变化,可设计专家PID控制器,该控制器可分为5种情况设计:
Ⅰ:
时,实施开环控制。
Ⅱ:
当
时由控制器实施较强控制作用,其输出可以为
当
时控制器实施一般的控制作用,其输出为
Ⅲ:
当
时,控制器输出不变。
Ⅳ:
当
时,实施较强控制作用,
当
时,实施较小控制作用,
Ⅴ:
当
时,此时加入积分,减小稳态误差。
式中,
—————误差e的第k个极值;
—-分别为第k次和第k-1次控制器输出;
=2——————增益放大系数,
;
=0.6—————增益抑制系数,
;
——设定的误差界限,
,
其中
可取0.8,0.4,0.2,0.01四值;
=0.001—————任意小正实数。
三、实验过程:
1、对传递函数
离散取样,选取采样时间间隔为1ms;
2、PID控制算法的关键问题是其三个参数Kp,Ti,Td的设定,选取初始值为:
kp=0.6;ki=0.03;kd=0.01;
3、取阶跃信号
;
4、写出线性模型及当前采样时刻的误差值:
5、循环第3和第4步;
6、通过Matlab仿真出专家PID控制的阶跃响应曲线图和误差响应曲线图。
四、实验结果:
图1阶跃响应曲线
图2误差响应曲线
附录:
仿真程序
%ExpertPIDController
clearall;
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.05
u(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)%Rule3
u(k)=u(k);
end
ifx
(1)*x
(2)<0&x
(2)*x2_1<0%Rule4
ifabs(x
(1))>=0.05
u(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
%Restrictingtheoutputofcontroller
ifu(k)>=10
u(k)=10;
end
ifu(k)<=-10
u(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);%CalculatingP
x2_1=x
(2);
x
(2)=(error(k)-error_1)/ts;%CalculatingD
x(3)=x(3)+error(k)*ts;%CalculatingI
error_1=error(k);
end
figure
(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');
%FuzzyTunningPIDControl
clearall;
closeall;
a=newfis('fuzzpid');
a=addvar(a,'input','e',[-3,3]);%Parametere
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]);%Parameterec
a=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]);
a=addvar(a,'output','kp',[-0.3,0.3]);%Parameterkp
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]);
a=addvar(a,'output','ki',[-0.06,0.06]);%Parameterki
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]);
a=addvar(a,'output','kd',[-3,3]);%Parameterkp
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;
end
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);%CalculatingP
x
(2)=error(k)-error_1;%CalculatingD
x(3)=x(3)+error(k);%CalculatingI
e_1=x
(1);
ec_1=x
(2);
error_2=error_1;
error_1=error(k);
end
showrule(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);
图2ki的隶属度函数曲线
图3kp的隶属度函数曲线
图4ec的隶属度函数曲线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专家 PID 控制