一、前言

本文将使用自抗扰控制算法对一个用微分方程描述的二阶被控对象进行控制仿真,来验证自抗扰控制算法的控制效果。

二、被控对象描述

设某一二阶被控对象的微分方程可表示为[1]

[公式] (1)

式中, y 表示被控对象输出, u 表示被控对象输入(即控制器输出)。

接下来将其改写为二阶自抗扰控制算法的标准形式:

三、仿真模型搭建

  • 被控对象模型
图1 被控对象模型

图中MATLAB Function中的内容为:

function [f, x1_dot, x2_dot] = fcn(t, u, x2)

x1_dot = x2;
x2_dot = -25 * x2 + 33 * sin(pi*t) + 133 * u;
f = -25 * x2 + 33 * sin(pi*t);
end
  • ADRC控制器模型

本文使用的控制器模型是上一篇文章 自抗扰控制算法(二)— S-fuction实现 中用S-Function搭建的离散ADRC控制器,其结构如下图所示。

图3 二阶ADRC控制器Simulink模型

  • 参考输入

仿真中使用的参考输入为幅值为1的方波信号,如图4所示。

图4 参考信号

其模型搭建如下图所示(也可以选择使用Signal Generator或者MATLAB Function模块搭建):

图5 参考信号Simulink模型

四、仿真实验

  • 仿真参数设置

仿真时间设置为15 s,采样时间为1 ms,解算器为ode4(Runge-Kutta)。

  • 控制器参数设置
CtrlPara.T = 0.001;
CtrlPara.b = 133;

CtrlPara.TD.r0 = 10;
CtrlPara.TD.h0 = 0.001;

CtrlPara.NLSEF.beta1 = 5.5;
CtrlPara.NLSEF.beta2 = 0.2;
CtrlPara.NLSEF.a1 = 0.75;
CtrlPara.NLSEF.a2 = 1.5;
CtrlPara.NLSEF.delta = 0.02;

CtrlPara.ESO.beta01 = 100;
CtrlPara.ESO.beta02 = 300;
CtrlPara.ESO.beta03 = 1000;
CtrlPara.ESO.delta = 0.0025;
  • MATLAB/Simulink模型
图6 MATLAB/Simulink模型仿真图

五、仿真结果

图7 示波器1

图8 示波器2

图9 示波器3

图10 示波器4

六、结语

  1. 由于控制器参数并不是最优的,跟踪信号的效果并不理想。
  2. 设计ADRC控制器时只用到了被控对象的阶数和控制量增益 [公式] ,因此ADRC不依赖于被控对象的精确模型。
  3. 在不考虑噪声影响的前提下,ESO有良好的观测效果。
  4. 该模型已上传至链接:pan.baidu.com/s/1uf0XG6 提取码:kw9r
  5. 下一步还没想好写什么~

—— 2021.07.14

参考

  1. ^刘金琨. 先进PID控制MATLAB仿真[M]. 电子工业出版社, 2016.