⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap4_5.m

📁 经典PID控制教程
💻 M
字号:
%Single Neural Net PID Controller based on RBF Identification
clear all;close all;

Jp=0.0030;bp=0.067;
ts=0.001;

Gp=tf([1],[Jp,bp,0]);
Gpz=c2d(Gp,ts,'z');
[num,den]=tfdata(Gpz,'v');

h=zeros(6,1);
%w=rands(6,1);
w=[-0.5646;
    0.3937;
   -0.5556;
    0.3981;
    0.4495;
    0.2565];
w_1=w;w_2=w;w_3=w;

xite=0.40;
alfa=0.05;
belte=0.01;

x=[0,0,0]';

%c=0.1*ones(3,6);
%b=0.1*ones(6,1);
c=[-3.1829   -0.5211    7.1754   11.6631   -3.6992  -10.9150;
   -3.8909    2.3999    5.1730    8.5871  -11.3737   -7.0179;
   -4.2018    2.6742    5.1828    8.5238   -1.8936   -6.1845];
b=[ 5.3074;
    1.4771;
   26.4114;
   22.1716;
   52.9082;
    5.6906];
c_1=c;c_2=c_1;c_3=c_2;
b_1=b;b_2=b_1;b_3=b_2;

xc=[0,0,0]';
xitec=0.60;

kp=80;
kd=5;
ki=50;

wc=[kp,kd,ki];
wc_1=wc;wc_2=wc;wc_3=wc;

error_1=0;error_2=0;
y_1=0;y_2=0;
u_1=0;u_2=0;

ei=0;
c_size=size(c);

for k=1:1:1000
    time(k)=k*ts;
    rin(k)=0.50*sin(3*2*pi*k*ts);
    
S=2;    
if S==1    
   yrout(k)=1.0*rin(k);
end
if S==2    
	yrout(k)=0.2*y_1+0.6*rin(k); %Reference Model
end

%Linear model
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
   
for j=1:1:c_size(2),
    h(j)=exp(-norm(x-c_1(:,j))^2/(2*b_1(j)*b_1(j)));
end
    ymout(k)=w_1'*h;
    
id=abs(yout(k)-ymout(k));
if id>0.0001,
%-----------------Adjusting RBF parameters-----------------------%
   d_w=0*w;        % Defining matrix number of d_w equal to that of w
   for j=1:1:6
   d_w(j)=xite*(yout(k)-ymout(k))*h(j);
   end
   w=w_1+d_w+alfa*(w_1-w_2)+belte*(w_2-w_3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   d_b=0*b;
   for j=1:1:6
       d_b(j)=xite*(yout(k)-ymout(k))*w_1(j)*h(j)*(b_1(j)^-3)*norm(x-c_1(:,j))^2;
   end
   b=b_1+ d_b+alfa*(b_1-b_2)+belte*(b_2-b_3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   for j=1:1:6
     for i=1:1:3
         d_c(i,j)=xite*(yout(k)-ymout(k))*w_1(j)*h(j)*(x(i)-c_1(i,j))*(b_1(j)^-2);
     end
   end
   c=c_1+d_c+alfa*(c_1-c_2)+belte*(c_2-c_3);
end 
%%%%%%%%%%% Calculating Jacobian %%%%%%%%%%%%
dyu=0;
for j=1:1:c_size(2)
    dyu=dyu+w(j)*h(j)*(-x(1)+c(1,j))/b(j)^2;
end
dyout(k)=dyu;
%%%%%%Parameters Return%%%%%%%
error(k)=yrout(k)-yout(k);
xc(1)=error(k);
xc(2)=(error(k)-error_1)/ts;
ei=ei+error(k)*ts;
xc(3)=ei;
   
u(k)=wc*xc;  %Control law
if u(k)>10,
   u(k)=10;
end   
if u(k)<-10,
   u(k)=-10;
end   
  
d_wc=0*wc;      % Defining matrix number of d_w equal to that of w
for j=1:1:3
    d_wc(j)=xitec*error(k)*xc(j)*dyout(k);
end
wc=wc_1+d_wc+alfa*(wc_1-wc_2)+belte*(wc_2-wc_3);
   
error_2=error_1;error_1=error(k);
    
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
   
x(3)=y_2;
x(2)=y_1;
x(1)=u_1;
   
w_3=w_2;w_2=w_1;w_1=w;
c_3=c_2;c_2=c_1;c_1=c;
b_3=b_2;b_2=b_1;b_1=b;
wc_3=wc_2;wc_2=wc_1;wc_1=wc;
end
figure(1);
plot(time,yout,'r',time,ymout,'b');
xlabel('time(s)');ylabel('yout,ymout');
figure(2);
plot(time,dyout,'r');
xlabel('time(s)');ylabel('Jacobian value');
figure(3);
plot(time,yrout,'b',time,yout,'r');
xlabel('time(s)');ylabel('yrout,yout');
figure(4);
plot(time,yrout-yout,'r');
xlabel('time(s)');ylabel('control error');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -