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

📄 复件shupidwcandcontrolpid.m

📁 单神经元PID控制的例子,用于伺服电机的调速
💻 M
字号:
clear all; 
close all; 
kp=0.30;
ki=0.00021;
kd=2.2;
error_1=0;
error_2=0;
y_1=0;
y_2=0;
u_1=0;
u_2=0;
ts=0.01024; 
for k=1:1:40
    time(k)=k*ts;  
    rin(k)=1; 
    yout(k)=1.8799*y_1-0.8799*y_2+1.0*0.06*u_1+1.0*0.05785*u_2; 
    error(k)=rin(k)-yout(k);  
    u(k)=u_1+kp*(error(k)-error_1)+ki*error(k)+kd*(error(k)-2*error_1+error_2);  
    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_2=u_1;u_1=u(k); 
    y_2=y_1;y_1=yout(k);
end
xc=[0,0,0]';
xiteP=20000;
xiteI=0.1; 
xiteD=170000.00; 
%Initilizing kp,ki and kd wkp_1=rand; wki_1=rand; wkd_1=rand; 
wkp_1=0.11;
wki_1=0.11; 
wkd_1=0.11;
error_1=0;
error_2=0; 
y_1=0;y_2=0;
u_1=0.00;u_2=0;
ts=0.01024; 
wx_1=0;
for k=1:1:40
    time(k)=k*ts;    
    rin(k)=1;                          
    %Tracing Step Signal 
    ym(k)=0;  
    if k==100000000    
        ym(k)=0.10;  
        %Disturbance 
    end
    youts(k)=1.8799*y_1-0.8799*y_2+1.0*0.06*u_1+1.0*0.05785*u_2;
    error(k)=rin(k)-youts(k); 
    wx=[wkp_1,wkd_1,wki_1]; 
    wx(k)=wx*xc; 
    b0(k)=sign((youts(k)-y_1)/(wx(k)-wx_1+0.00000000000001)); 
    K=4.0;   
    wkp(k)=wkp_1+xiteP*K*error(k)*(2*error(k)-error_1)*b0(k);
    wki(k)=wki_1+xiteI*K*error(k)*(2*error(k)-error_1)*b0(k);
    wkd(k)=wkd_1+xiteD*K*error(k)*(2*error(k)-error_1)*b0(k);       
    xc(1)=error(k)-error_1;               %P   
    xc(2)=error(k);       %I   
    xc(3)=error(k)-2*error_1+error_2;   %D  
    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*xc;  
       % Control law  
       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_2=u_1;u_1=u(k);   
       wkp_1=wkp(k); wkd_1=wkd(k); wki_1=wki(k);  wx_1=wx(k);
       y_2=y_1;y_1=youts(k); end 
    hold on
         plot(time,rin,'b',time,yout,'r');
         plot(time,youts,'-');
  hold off
   %xlabel('time(s)');ylabel('rin,yout');
   %figure(2); 
   %plot(time,u,'r'); xlabel('time(s)');ylabel('u'); 
   %figure(3);
  % subplot(311);
   %plot(time,wkp,'r'); xlabel('time(s)');ylabel('wkp'); 
   %subplot(312); 
   %plot(time,wki,'r'); xlabel('time(s)');ylabel('wki'); 
   %subplot(313); 
  % plot(time,wkd,'r'); xlabel('time(s)');ylabel('wkd'); 

⌨️ 快捷键说明

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