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

📄 bppid.m

📁 pid控制
💻 M
字号:

clear all;
close all;
xite=0.25;        %学习速率
alfa=0.05;        %惯性系数
S=2;
In=4;
H=5;
Out=3;            %网络结构 
if S==1           %阶跃信号
    wi=0.5*rands(H,In);        %输入层到隐层的初始权值矩阵
    wi_1=wi;wi_2=wi;wi_3=wi;
    wo=0.5*rands(Out,H);       %隐层到输出层的初始权值矩阵
    wo_1=wo;wo_2=wo;wo_3=wo;
end
if S==2           %正弦信号
    wi=[-0.36147	-0.44189	0.2155	-0.41945
0.13983	0.37852	0.035828	-0.026001
0.11739	0.12104	0.44338	-0.30151
0.30037	0.13384	-0.2778	0.43651
-0.54994	-0.49957	0.078042	-0.34287
];
    wi_1=wi;wi_2=wi;wi_3=wi;
    wo=[0.24197	0.3467	0.064241	0.59534	0.04233
0.28165	0.82192	0.82043	0.83517	0.79164
0.83221	0.19652	0.55819	-0.13304	0.75463
];
    wo_1=wo;wo_2=wo;wo_3=wo;
end
%初始化
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1);         %隐层输出
I=Oh;                  %隐层输入
error_2=0;
error_1=0;
ts=0.01;           %采样周期
for k=1:1:600
    time(k)=k*ts;
    if S==1
        rin(k)=1.0;    %期望输出
    elseif S==2
        rin(k)=sin(1*2*pi*k*ts);
    end
    a(k)=1.2*(1-0.8*exp(-0.1*k));
    yout(k)=a(k)*y_1/(1+y_1^2)+u_1;      %被控系统数学模型
    error(k)=rin(k)-yout(k);
    xi=[rin(k),yout(k),error(k),1];
    x(1)=error(k)-error_1;
    x(2)=error(k);
    x(3)=error(k)-2*error_1+error_2;
    epid=[x(1);x(2);x(3)];
    I=xi*wi';          %隐层输入
    for j=1:1:H
        Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));   %隐层输出
    end
    K=wo*Oh;           %输出层输入(输出层无处理能力,输入即输出)
    for l=1:1:Out
        K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));                 %输出层输出,获得kp,ki,kd
    end
    kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
    Kpid=[kp(k),ki(k),kd(k)];
    du(k)=Kpid*epid;   %输入u的增量
    u(k)=u_1+du(k);    %更新输入u
    if u(k)>=10        %限制控制器输出
        u(k)=10;
    end
    if u(k)<=-10
        u(k)=-10;
    end
    dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001));           %??????????
    %输出层
    for j=1:1:Out
        dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
    end
    for l=1:1:Out
        delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
    end
    for l=1:1:Out
        for i=1:1:H
            d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
        end
    end
    wo=wo_1+d_wo+alfa*(wo_1-wo_2);
    %隐层
    for i=1:1:H
        dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
    end
    segma=delta3*wo;
    for i=1:1:H
        delta2(i)=dO(i)*segma(i);
    end
    d_wi=xite*delta2'*xi;
    wi=wi_1+d_wi+alfa*(wi_1-wi_2);
    %参数更新
    u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
    y_2=y_1;y_1=yout(k);
    wo_3=wo_2;
    wo_2=wo_1;
    wo_1=wo;
    wi_3=wi_2;
    wi_2=wi_1;
    wi_1=wi;
    error_2=error_1;
    error_1=error(k);
end
figure(1);
plot(time,rin,'r',time,yout,'b');
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);
subplot(311);
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
subplot(312);
plot(time,ki,'g');
xlabel('time(s)');ylabel('ki');
subplot(313);
plot(time,kp,'b');
xlabel('time(s)');ylabel('kd');

⌨️ 快捷键说明

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