1 问题描述

(1)时滞系统控制器设计;

(2)控制策略:将当前的控制量,延时一定时长后,再赋值给当前系统;

2 时滞算法步骤

(1)申请控制量 ux 存储空间

  假设延时时间为 τ ,计算步长为 h ,那么可得

(1)kn=τ/h+1.

(2)ux(i)=0,i=1,2,...,kn.

(2)控制器计算出此时控制量 u ,并赋值给 ux 最后一个元素

(3)ux(i)=ux(i+1),i=1,2,...,kn1.

(4)ux(kn)=u.

(3)被控系统当前所需的控制量取为 u(1)

(5)uin=u(1).

(4)重复步骤(2)(3)直到结束

3 使用Simulink中S函数实现时滞算法

function [sys,x0,str,ts]=mdlInitializeSizes(tau, h)

sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     =1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
%
% initialize the initial conditions
%
x0  =[];
%
% str is always an empty matrix
%
str = [];
%
% initialize the array of sample times
%
ts  = [0 1]; %固定步长,和simulink内部设置的固定步长保持一致

global kn ux
% h=0.1; % 迭代步长
% tau=1; %延迟时间
kn=floor( abs( tau/h ) )+1;
% 声明存储时滞控制量的空间
ux=zeros( kn, 1); %初始化


%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u,tau, h)
%% 时滞系统的延迟算法
global ux
    
%     global ux
    
%     u=[7,4,5,1,2,6,8,9,0,3, 7,4,5,1,2,6,8,9,0,3];
    
    ux=delay(ux, u)
    ux(1)

sys =ux(1);

%% 延迟算法
function ux=delay(ux, uin)
    global kn

    for i=1: kn-1
        ux(i)=ux(i+1);
    end
    ux(kn)=uin;

4 对时滞系统的控制方法

自抗扰控制技术:估计补偿不确定因素的控制技术
京东
¥39.10
去购买

(1)无视时滞法

将时滞算子近似为1,再利用时滞算法处理控制量;

(2)提高阶次法

将时滞算子近似为惯性环节

(6)eτs11+τs.

(3)输出预估法

(7)y0=eτsy=1Ts+1u.

(4)输入预估法

(8)U=eτsu.

5 数值仿真实验

(1)仿真模块

采用无视时滞法控制系统

(2)控制结果

6 使用PID控制器+延时处理算法

7 采用ADRC+延时处理算法

8 经验总结

(1)S函数初始化模块只执行一次,编写时滞算法时,将当前 ux 保存为全局变量;

(2)采用时滞算法,必须需要调整参数 ωc,ωo,b0 (增大);

——2021.06.11——