1 问题描述

(1)使用matlab程序编写LADRC控制系统

(2)针对一阶/二阶系统

(3)离散化方法

2 数值计算结果(一阶系统)

(1)G(s)=1.40.1s+1.

(1)跟踪正弦信号

(2)跟踪阶跃信号

3 计算程序(一阶系统)

function LADRC1()
%{
程序功能:
1、使用m语言描述LADRC的程序
2、一阶对象
%}
    %% 参数列表
    clear,clc,close all
    global beta_Wo beta_Wc z0 b0 N h
    t1=0;
    t2=5; %仿真时间
    h=0.001; %离散步长
    num=abs(t1-t2)/h ; %仿真时间节点数量
    t=t1: h: t2; %仿真时间节点    
    N=1; %系统阶数
    y0=0; %系统初值
    z0=zeros(1, N+1);
%     ref=sin(10*t);
    ref=5*ones(1,num+1);
    b0=14;
%     Wo=200;
%     Wc=50;
    Wo=100;
    Wc=20;
   
    
    %% LESO系数
    beta_Wo=zeros(N+1,1);
    for i=1 : N+1
        beta_Wo( i )=nchoosek(N+1, i)*( Wo^i );
    end
    
    %% LC系数
    beta_Wc=zeros(N,1);
    for i=1 : N
        beta_Wc( i )=nchoosek(N, N+1-i)*( Wc^(N+1-i) );
    end 
    
    %% 仿真开始
    y=zeros(num+1, 1); %系统输出值预设存储空间
    y(1)=y0;
    u=zeros(num+1,1); %系统控制量预设存储空间
    for j=1:num
        
        z=LESO(y(j), u(j), z0);
        z0=z; %存储当前节点的z,下一次迭代
        u(j+1)=LC(z, ref(j));
        y(j+1)=System(u(j), y(j) );
 
    
    end
    
    %% 绘制响应曲线
    figure
    plot(t, y, t ,ref, 'linewidth', 2)
    legend('y', 'ref')
    figure
    plot(t, u, 'linewidth', 2)
    legend('u')
    
end

%% 线性扩张状态观测器LESO
function z=LESO(y, u, z0)
    global beta_Wo h  N b0
    % z0表示上一个时间步长计算出来的z
    e=y-z0(1);
    z=zeros(N+1, 1) ;
    for i=1: N-1
        z(i)=z0(i)+h*( beta_Wo(i)*e+z0(i+1) ) ; %LESO微分方描述   
    end
    
    z(N)=z0(N)+h*( beta_Wo(N)*e +z0(N+1)+b0*u );
    z(N+1)=z0(N+1)+h*( beta_Wo(N+1)*e );
    
end

%% 线性反馈控制器LC
function u=LC(z, ref)
    global beta_Wc b0 N
    
    e=z(1)- ref;
    u0=e*beta_Wc(1)+z(end);
    for i=2 : N
        u0=u0+beta_Wc( i )*z(i) ;
    end
   
    u= -u0/b0 ;
    
end

% 一阶系统微分方程描述

function y=System(u, yk)
    global h
    y=yk+h*(-10*yk+14*u );

end
 

 

4 数值计算结果(二阶系统)

(2)G(s)=0.0330.9s2+s.

(1)正弦信号

(2)阶跃信号

5 计算程序(二阶系统)

function LADRC2()
%{
程序功能:
1、使用m语言描述LADRC的程序
2、二阶对象
%}
    %% 参数列表
    clear,clc,close all
    global beta_Wo beta_Wc z0 b0 N h
    t1=0;
    t2=5; %仿真时间
    h=0.001; %离散步长
    num=abs(t1-t2)/h ; %仿真时间节点数量
    t=t1: h: t2; %仿真时间节点
    
    N=2; %系统阶数
    y0=0; %系统初值
%     dy0=2; %导数初值
    z0=zeros(1, N+1);
%     ref=sin(10*t);
    ref=ones(1,num+1);
    b0=0.04; %和系统b近似
%     Wo=200;
%     Wc=50;
    Wo=100;
    Wc=20;
   
    
    %% LESO系数
    beta_Wo=zeros(N+1,1);
    for i=1 : N+1
        beta_Wo( i )=nchoosek(N+1, i)*( Wo^i );
    end
    
    %% LC系数
    beta_Wc=zeros(N,1);
    for i=1 : N
        beta_Wc( i )=nchoosek(N, N+1-i)*( Wc^(N+1-i) );
    end 
    
    %% 仿真开始
    y=zeros(num+1, 1); %系统输出值预设存储空间
%     dy=zeros(num+1, 1); %系统输出的导数预设存储空间
    y(1)=y0;
    y(2)=0;
    u=zeros(num+1,1); %系统控制量预设存储空间
    for j=1:num-1
        
        z=LESO(y(j), u(j), z0);
        z0=z; %存储当前节点的z,下一次迭代
        u(j+1)=LC(z, ref(j));
        y(j+2)=System(u(j+1), y(j), y(j+1));
    
    end
    
    %% 绘制响应曲线
    figure
    plot(t, y,'--',  t ,ref, 'linewidth', 2)
    legend('y', 'ref')
    figure
    plot(t, u, 'linewidth', 2)
    legend('u')
    figure 
    plot(t, y)

end

%% 线性扩张状态观测器LESO
function z=LESO(y, u, z0)
    global beta_Wo h  N b0
    % z0表示上一个时间步长计算出来的z
    e=y-z0(1);
    z=zeros(N+1, 1) ;
    for i=1: N-1
        z(i)=z0(i)+h*( beta_Wo(i)*e+z0(i+1) ) ; %LESO微分方描述   
    end
    
    z(N)=z0(N)+h*( beta_Wo(N)*e +z0(N+1)+b0*u );
    z(N+1)=z0(N+1)+h*( beta_Wo(N+1)*e );
    
end

%% 线性反馈控制器LC
function u=LC(z, ref)
    global beta_Wc b0 N
    
    e=z(1)- ref;
    u0=e*beta_Wc(1)+z(end);
    for i=2 : N
        u0=u0+beta_Wc( i )*z(i) ;
    end
   
    u= -u0/b0 ;
    
end

%% 一阶系统微分方程描述

% function y=System(u, yk)
%     global h
%     y=yk+h*(-10*yk+14*u );
% 
% end
%% 二阶系统微分方程描述

function y=System(u, yk, yk1)
    global h
 
    y=2*yk1-yk+1/0.9*h*(-yk1+yk)+0.033/0.9*u*h^2;

end

 

——2021.05.26——