資源簡介
用單神經元PID實現智能控制的一個MATLAB程序,程序可以直接運行。

代碼片段和文件信息
clear?all
close?all
ts=1;
sys=tf(-3.6642[10-39.5002]);
dsys=c2d(systs‘z‘);
[numden]=tfdata(dsys‘v‘);
x=[0?0?0]‘;
xiteP=11.78;
xiteI=0.2;
xiteD=0.7313;
wkp_1=0.1;
wki_1=0.1;
wkd_1=0.1;
error_1=0;
error_2=0;
y_1=0;y_2=0;y_3=0;
u_1=0;u_2=0;u_3=0;
ts=1;
for?k=1:1:5000
????time(k)=k*ts;
????rin(k)=1;
????yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
????error(k)=rin(k)-yout(k);
????wkp(k)=wkp_1+xiteP*u_1;
????wki(k)=wki_1+xiteI*u_1;
????wkd(k)=wkd_1+xiteD*u_1;
????K=-1;
????x(1)=error(k)-error_1;
????x(2)=error(k);
????x(3)=error(k)-2*error_1+error_2;
????wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k));
????w11(k)=wkp(k)/wadd(k);
????w22(k)=wki(k)/wadd(k);
????w33(k)=wkd(k)/wadd(k);
????w=[w11(k)?w22(k)?w33(k)];
????u(k)=u_1+K*w*x;
if?u(k)>10
???u(k)=10;
end
if?u(k)<-10
???u(k)=-10;?
end
error_2=error_1;
error_1=error(k);
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;?y_2=y_1;y_1=yout(k);
wkp_1=wkp(k);
wki_1=wki(k);
wkd_1=wkd(k);?
end
%figure(1);
%plot(timerin‘r‘timeyout‘b‘);
%figure(2);
%plot(timeerror‘r‘);
%figure(3);
plot(timeyout‘r‘);xlabel(‘time(s)‘);ylabel(‘rinyout‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1149??2011-04-14?11:48??SNPID.m
-----------?---------??----------?-----??----
?????????????????1149????????????????????1
評論
共有 條評論