VSC/SMC(七)——基于高增益观测器的滑模控制(含程序模型)

目录

前言

1.系统

2.观测器设计

3.控制器设计

4.MATLAB/Simulink仿真

4.1s函数编写被控对象

4.2Simulink模型

5结果分析

5.1出图结果

5.2结论

5.3调参


前言

将滑膜控制与状态观测器结合,可实现对速度信号的有效观测,从而实现无需速度测量的滑模控制。

图1 带状态观测器的闭环控制系统 

1.系统

以二阶系统为例:

θ'' = -a*θ'-b*θ+k*u

其中,θ未位置信号,θ‘即速度信号。

定义状态变量x = [x1 x2]' = [θ θ']',所以上述系统的状态方程形式为:

x1' = x2

x2' = -a*x2-b*x1+k*u

输出方程:

y = x1

2.观测器设计

(x1^)' = (θ^)' = x2^+(y-x1^)*(α1/ε)

(x2^)' = (θ^)'' = -a*x2^-b*x1^+k*u+(y-x1^)*(α2/ε^2)  (此加粗处书上漏了^)

其中,α1和α2为正实数,ε < 1。

①取h1 = α1/ε,h2 = (α2/ε^2),则观测器转化为:

x1^' = x2^+(y-x1^)*h1

x2' = -a*x2-b*x1+k*u+(y-x1^)*h2

②定义观测误差(x~) = x-x^,将系统状态空间方程代入到上述设计的观测器,可得:

(x1~) = -h1*(x1~)+(x2~)

(x2~) = -h2*(x1~)-a*(x2~)

y = x1

转化为状态空间形式,即

(x~)' = A*(x~)

其中,A = [-h1 1;-h2 -a],(x~) = [(x1~);(x2~)]。

③需要保证A为Hurwitz矩阵,即保证其特征根在复平面左侧;

求其特征方程|sI-A| = |s+h1 -1;h2 s+a| = 0,展开即s^2+(h1+a)*s+h2 = 0;

即转化为保证s^2+2*p*s+p^2为Hurwitz多项式,对应即h1+a = 2*p,h2 = p^2;

由s^2+2*p*s+p^2 = 0保证其特征根在复平面左侧得到p > 0,对应即h1+a > 0(这里我没看懂书上的理解,这是我自己的理解,Hurwitz多项式对应的就是保证特征根为负。而且经后面仿真也证实我的推断没错;而且h取值越大,超调量越大,但追踪所需时间越短),所以最终的h1和h2的取值关系为:

h1 > a

h2 = a^2

3.控制器设计

还是老“三部曲”(此处推导变量的标号可能很多,希望耐心推导):

(1)①定义滑膜面/滑膜函数:

s = c*e(个人认为滑模面项数 = 状态变量个数,欢迎指正)

其中c= [c1,1],e = [e1;e2] = [e;e'] = [θd - θ;θd' - θ'],并定义:

e = θd - θ,即e1 = θd - θ,e2 = e' = θd' - θ';

(e^) = θd - (θ^),即(e1^) = θd - (θ^)(e2^) = θd' - (θ^)';

(θ~) = θ - (θ^),(e~) = e - (e^),(s~) = s - (s^),再加前面定义的(x~) = x - (x^)。

②导数观测量为:

e' = θd - θ',即e1' = θd' - θ',e2' = e'' = θd'' - θ'';

(e^)' = θd' - (θ^)',即(e1^)' = θd' - (θ^)'(e2^)' = θd'' - (θ^)'';

(注意是(e^)'估计的导数值,而不是(e')^导数的估计值,这里书上感觉模棱两可,个人观点,欢迎批评指正),具体可以参阅以下文献:

基于高增益观测器的挖掘机工作装置滑模控制

(θ~)' = θ' - (θ^)',(e~)' = e' - (e^)',(s~)'  = s' - (s^)'。

③由于含观测器,所以滑模面应与观测误差e^有关,所以需引入中间滑模面

(s^) = c*e^

其中c= [c1,1],e^ = [e1;e2] = [e^;(e^)'] = [θd - (θ^);θd' - (θ^)']

(2)④先求滑模控制律的等效控制项ueq中间滑模面导数为(s^)' = c1*(e1^)'+(e2^)' = c1*(e2^)+(θd'' - (θ^)'')= c1*(e2^)+(-a*x2^-b*x1^+k*ueq)    (将前面的(θ^)''代入,代入时将(y-x1^)*h2丢掉),

得到ueq = (a*x2^+b*x1^+c1*(e2^))/ k = (a*(θ^)'+b*θ^+c1*(e2^))/ k   (加粗的^书上应该漏了)

⑤再求滑模控制律的鲁棒项usw ,usw 为满足滑模到达条件 s^(s^)' ≤ 0 的切换项,采用等速趋近律(s^)' = -η*sign(s^),所以鲁棒项为:

usw = η*sign(s^) / k

为了为消除抖振,将切换项 符号函数替换为 s^,所以usw = η*s^/k

所以基于高增益观测器的滑膜控制律为:

u = ueq+usw =(a*(θ^)'+b*θ^+c1*(e2^)+η*(s^))/ k,其中η > 0

(3)使用Lyapunov函数证明闭环系统稳定,V = 1/2*s^2,V' = 1/2*s*s'。(快考试了没时间,后面有时间补上)

4.MATLAB/Simulink仿真

取位置指令/理想信号θd = sin(t),扰动d  = sin(t)(书中没有扰动,这是我自己加上的)

4.1s函数编写被控对象

function [sys,x0,str,ts,simStateCompliance] = Plant(t,x,u,flag)

switch flag,
  case 0,
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 2,
    sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [0.2 0]';
str = [];
ts  = [0 0];

simStateCompliance = 'UnknownSimState';

function sys=mdlDerivatives(t,x,u)
theta = x(1);
dtheta = x(2);
d = u(1);%扰动
U = u(2);
a = 10;b = 1;k = 1;%系统参数
ddtheta = -a*dtheta-b*theta+k*U+d; 
sys = [dtheta;ddtheta];

function sys=mdlUpdate(t,x,u)

sys = [];

function sys=mdlOutputs(t,x,u)

sys = x;

function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 1;    %  Example, set the next hit to be one second later.
sys = t + sampleTime;

function sys=mdlTerminate(t,x,u)

sys = [];

4.2Simulink模型

图2 基于高增益观测器的鲁棒滑膜控制Simulink模型 

5结果分析

5.1出图结果

图3 角度θ与理想位置信号θd对比 

图4  角速度θ与理想速度信号θd'对比 

图5 θ和(θ^)输出角度和观测角度对比 

图6 θ'和(θ^)'输出角速度和观测角速度对比 

图7 观测误差e^ 

图8 观测误差变化率(e^ )'

图9 角度追踪误差e

图10 角度追踪误差e 

图11  控制输出u

5.2结论

①对于观测器的设计,可以从图5、6看出在0.5s内便能观测吻合,也可以从图7、8看出误差基本稳定在1%,证明该高增益观测器设计的合理性;

②对于控制器的设计,可以从图3、4看出在1s内便能快速追踪理想位置信号,也可以从从图9、10看出追踪误差有微笑的波动,证明了该基于观测器的滑膜控制器鲁棒性。

5.3调参

①书上在推理中有许多小标错误,虽然在本例中最后对仿真影响不大,但是需要注意。

②书上推理中写的控制器参数c = 5和η = 1.5并不能使系统实现好的追踪效果,需要调整为c = 10和η = 50(但是它的程序中又写的是c = 10和η = 50),η越大,最终误差越快趋于0,而且随η的增大波动也减小,但控制器所需输出越大。

③设计观测器时,满足使矩阵A为Hurwitz多项式,我的理解和书上有些偏差,其中观测器的调节参数h越大,则观测时的误差趋于0所需时间越小,而且随h的增大波动也减小,但是超调量增大。

所以,调参时需要对控制器及观测器的性能进行折中。

如果有帮助,麻烦帮忙点个赞是我最大的分享动力,非常感谢!

注:仅为便利自己学习,错误在所难免,如有侵权,请联系删除,有兴趣的学者可以参考学习交流,谢谢!

参考资料:

《基于高增益观测器的挖掘机工作装置滑模控制---徐国胜等》

  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
赫尔维茨判据(Hurst criterion)是一种用于判断时间序列是否具有自相关性的统计方法。在MATLAB中,可以使用以下步骤来实现赫尔维茨判据: 1. 导入数据:首先,将时间序列数据导入MATLAB环境中。可以使用MATLAB的数据导入功能,如`readtable`或`csvread`函数,将数据从文件中读取到MATLAB中。 2. 计算累积离差平方和(CSS):使用MATLAB的累积和函数`cumsum`计算时间序列的累积和。然后,计算每个时间点的离差(当前值减去均值)并求平方,再对这些平方值进行累积求和。 3. 计算赫尔维茨统计量:根据赫尔维茨判据的公式,计算赫尔维茨统计量。赫尔维茨统计量可以通过将CSS除以时间序列长度的平方根得到。 4. 判断自相关性:根据赫尔维茨统计量的大小,可以判断时间序列是否具有自相关性。一般来说,如果赫尔维茨统计量大于某个阈值(例如3),则认为时间序列具有自相关性。 下面是一个MATLAB代码示例,演示了如何实现赫尔维茨判据: ```matlab % 导入时间序列数据 data = readtable('data.csv'); % 假设数据保存在data.csv文件中 % 提取时间序列数据 ts = data.TimeSeries; % 计算累积离差平方和(CSS) css = cumsum((ts - mean(ts)).^2); % 计算赫尔维茨统计量 hurst_statistic = css(end) / sqrt(length(ts)); % 判断自相关性 threshold = 3; % 自定义阈值 if hurst_statistic > threshold disp('时间序列具有自相关性'); else disp('时间序列不具有自相关性'); end ``` 希望以上代码能够帮助你实现赫尔维茨判据。如果有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. 邹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值