专家PID控制.docx

上传人:b****3 文档编号:5400961 上传时间:2023-05-08 格式:DOCX 页数:19 大小:191.51KB
下载 相关 举报
专家PID控制.docx_第1页
第1页 / 共19页
专家PID控制.docx_第2页
第2页 / 共19页
专家PID控制.docx_第3页
第3页 / 共19页
专家PID控制.docx_第4页
第4页 / 共19页
专家PID控制.docx_第5页
第5页 / 共19页
专家PID控制.docx_第6页
第6页 / 共19页
专家PID控制.docx_第7页
第7页 / 共19页
专家PID控制.docx_第8页
第8页 / 共19页
专家PID控制.docx_第9页
第9页 / 共19页
专家PID控制.docx_第10页
第10页 / 共19页
专家PID控制.docx_第11页
第11页 / 共19页
专家PID控制.docx_第12页
第12页 / 共19页
专家PID控制.docx_第13页
第13页 / 共19页
专家PID控制.docx_第14页
第14页 / 共19页
专家PID控制.docx_第15页
第15页 / 共19页
专家PID控制.docx_第16页
第16页 / 共19页
专家PID控制.docx_第17页
第17页 / 共19页
专家PID控制.docx_第18页
第18页 / 共19页
专家PID控制.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

专家PID控制.docx

《专家PID控制.docx》由会员分享,可在线阅读,更多相关《专家PID控制.docx(19页珍藏版)》请在冰点文库上搜索。

专家PID控制.docx

专家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的隶属度函数曲线

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2