观测器控制仿真案例详解(s-function函数)


控制理论–观测器设计

一、弹簧-质量-阻尼系统

弹簧-质量-阻尼系统

  • 系统参数: m = 1   , K = 1   , B = 0.5 m = 1\,, K = 1\,, B = 0.5 m=1,K=1,B=0.5
  • 状态变量: z 1 = x   (位置) ; z 2 = x ˙  (速度,不可测) z_1 = x \, \text{(位置)};\quad z_2 = \dot{x}\text{ (速度,不可测)} z1=x(位置);z2=x˙ (速度,不可测)
  • 输入: u = F (外力) u = F \quad \text{(外力)} u=F(外力)

1. 系统状态空间方程

[ z ˙ 1 z ˙ 2 ] = [ 0 1 − 1 − 0.5 ] [ z 1 z 2 ] + [ 0 1 ] u y = [ 1 0 ] [ z 1 z 2 ] = z 1 \begin{aligned} \begin{bmatrix} \dot{z}_1 \\ \dot{z}_2 \end{bmatrix} &= \begin{bmatrix} 0 & 1 \\ -1 & -0.5 \end{bmatrix} \begin{bmatrix} z_1 \\ z_2 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} u \\ y =& \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} z_1 \\ z_2 \end{bmatrix} = z_1 \end{aligned} [z˙1z˙2]y==[0110.5][z1z2]+[01]u[10][z1z2]=z1

2. 观测器状态空间方程

[ z ^ ˙ 1 z ^ ˙ 2 ] = [ − 2.5 1 0.25 − 0.5 ] [ z ^ 1 z ^ 2 ] + [ 0 1 ] u + [ 2.5 − 1.25 ] y \begin{aligned} \begin{bmatrix} \dot{\hat{z}}_1 \\ \dot{\hat{z}}_2 \end{bmatrix} &= \begin{bmatrix} -2.5 & 1 \\ 0.25 & -0.5 \end{bmatrix} \begin{bmatrix} \hat{z}_1 \\ \hat{z}_2 \end{bmatrix} + \begin{bmatrix} 0 \\ 1 \end{bmatrix} u + \begin{bmatrix} 2.5 \\ -1.25 \end{bmatrix} y \end{aligned} [z^˙1z^˙2]=[2.50.2510.5][z^1z^2]+[01]u+[2.51.25]y

二、仿真(Simulink s-function函数)

1. 搭建Simulink仿真模型

在这里插入图片描述

2. s-function函数代码

  • Mode_system.m
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;  %
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 3;  %z1,z2,y
sizes.NumInputs      = 1;  %u
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [0;1];
function sys=mdlDerivatives(t,x,u)
M = 1;
K = 1;
B = 0.5;
uc = u(1);
z1 = x(1);
z2 = x(2);
dz1 = z2;
dz2 = (-K/M) * z1-(B/M) * z2 + (1/M)*uc;
sys = [dz1;dz2];
function sys=mdlOutputs(t,x,u)
z1 = x(1);
y = z1;
sys = [y;x]; %sys = [z1,z2,y]
  • Observer.m
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2; %z1_hat,z2_hat
sizes.NumInputs      = 2; %u和y
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [0;0];
function sys=mdlDerivatives(t,x,u)
A = [-2.5,1;0.25,-0.5];
B = [0;1];
L = [2.5;-1.25];
z_hat = x; %z_hat = [z1_hat;z2_hat]; 
u_input = u(1); %输入1
y_meas = u(2);  %输入2
dz_hat = A * z_hat + B * u_input + L * y_meas;
sys = dz_hat;
function sys=mdlOutputs(t,x,u)
sys = x; %sys = [z1_hat; z2_hat];

3. 仿真效果

在这里插入图片描述

由图可知, z 1 , z 2 z1,z2 z1,z2 分别被 z ^ 1   , z ^ 2 \hat{z}_1\, , \hat{z}_2 z^1,z^2所观测,且效果不错。

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喵汪wow

您的支持是我更新创作的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值