跟踪微分器

1.非线性跟踪微分器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

function [sys,x0,str,ts]=TD(t,x,u,flag)
%输出变量的名称数目排列次序等用户切勿修改。
%前4个输入变量的名称排列次序用户切勿修改。
%缺省设置为4个输入变量,用户可以根据需要添加输入变量。
%--------------
%--------------
switch flag,
    case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
    %调用初始化子函数。缺省设置没有输入变量,用户可以根据需要添加输入变量。
    %--------------------------
case 1,
    sys=mdlDerivatives(t,x,u);
    %调用计算连续状态时间微分子函数。缺省设置只有3个输入变量,用户可以根据需要添加输入变量。
    %-------------------------
case 2,
    sys=mdlUpdate(t,x,u);
    %调用计算离散状态更新子函数。缺省设置只有3个输入变量,用户可以根据需要添加输入变量。
    %---------------------------
case 3,
    sys=mdlOutputs(t,x,u);
    %调用计算输出变量子函数。缺省设置只有3个输入变量,用户可以根据需要添加输入变量。
    %-------------------------
case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
    %调用计算下一个采样时间点子函数。
    %------------------------
case 9,
    sys=mdlTerminate(t,x,u);
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
    %调用结束仿真子函数。
    %--------------------------
end
%---------------------
%------------------------
function [sys,x0,str,ts]=mdlInitializeSizes
%初始化子函数。缺省设置没有输入变量,用户可以根据需要添加输入变量。
sizes=simsizes;
%调用simesizes函数,返回规范格式的sizes构架,这条指令用户切勿修改!!!
%----------------------
sizes.NumContStates=2;
%连续状态的数目,缺省值是0,用户可以根据需要修改。
%----------------------
sizes.NumDiscStates=0;
%离散状态的数目,缺省值是0,用户可以根据需要修改。
%-----------------
sizes.NumOutputs=2;
%输出变量的数目,缺省值是0,用户可以根据需要修改。
%---------------------
sizes.NumInputs=1;
%输入变量的数目,缺省值是0,用户可以根据需要修改。
%-----------------
sizes.DirFeedthrough=1;
%从输入变量到输出变量的直馈通道数目,缺省值是1,用户可以根据需要修改。
%-------------------------
sizes.NumSampleTimes=1; 
%采样时间的数目,缺省值是1,用户可以根据需要修改。
%--------------
sys =simsizes(sizes);
%初始化后的构架sizes经simesizes函数处理后赋给sys,这条指令用户切勿修改!!!
%-----------------
x0=[0;0];
%给系统状态变量赋初值,缺省值是[ ],用户可以根据需要修改。
%---------------
str=[];
%特殊变量保留,这条指令用户切勿修改!!!
%---------------
ts=[0 0];
%“二元对”,描写采样时间及偏移量,[0 0]是缺省值,适用于连续系统。
%---------------
%---------------
function sys=mdlDerivatives(t,x,u)
%计算连续状态对时间的微分子函数。缺省设置只有3个输入变量,用户可以根据需要修改。
%----------------
r = 20;
x1dot = x(2);
x2dot = -r*sign(x(1)-u+x(2)*abs(x(2))/(2*r));
sys=[x1dot;x2dot];
%连续状态对时间的微分表达式,赋给sys,缺省值是[ ],用户可以根据需要修改。
%----------------
%-----------------
function sys=mdlUpdate(t,x,u)
%计算离散状态更新子函数。缺省值只有3个输入变量,用户可以根据需要修改。
%---------------
sys=[];
%离散状态更新子函数,赋给sys. 缺省值是[ ],用户可以根据需要修改。
%-------------
%---------------
function sys=mdlOutputs(t,x,u)
%计算输出变量子函数。缺省值设置只有3个输入变量,永和可以根据需要修改。
%-----------
sys=[x(1);x(2)];
%输出变量表达式,赋给sys. 缺省值是[ ],用户可以根据需要修改。
%----------------------
%---------------------
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime=1;
sys=t+sampleTime;
%这两条指令用户不必修改。
%--------------
function sys=mdlTerminate(t,x,u)
sys=[];
%这条指令用户不必修改。
%-----------------------------

2.快速跟踪微分器的离散形式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当输入为 v(t)=sin(t)+0.01*n(t),取r=30;h=0.001;h0 = h时;
在这里插入图片描述

取h0=20*h时;
在这里插入图片描述

可以看出,h0的扩大可以起到很好的滤波作用,因此将h0乘坐跟踪微分器的滤波因子,因此当积分步长确定时可以增大h0来增强滤波效果。

3 跟踪微分器的作用

(1) PID是以误差的比例、积分、微分的加权和来形成反馈控制量的。然儿实际情况中常常由于没有适合的微分器,只能采用PI控制率,限制了PID的控制能力。
(2)PID是基于误差反馈来消除误差,但是直接取目标与实际行为之间的误差的话,常常会造成初始控制力太大从而造成超调。为了解决PID控制中快速性和超调之间的矛盾,可以事先安排一个过渡过程,让实际系统跟踪这个安排的过渡过程来达到控制目标。跟踪微分器可以用来安排过渡过程。
(3)可以用两个跟踪微分器来实现非线性PID控制。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值