Simulink 中建立微分方程

近日使用 Simulink-Carsim 联合仿真做横摆力矩控制,因为用到了一个滑模观测器对车辆侧偏角进行观测,需要在 simulink 中搭建一个微分方程模块,长期使用脚本编程,不太习惯复杂冗长的 s-function,于是使用 matlab function 搭建微分方程模块。
首先给出滑模观测器(Sliding Mode Observer SMO)的表达式:
{ β ^ ˙ = A 11 β ^ + A 12 γ ^ + B 1 u + k 1 k 2 sign ⁡ ( γ ~ ) + k 3 a ~ y γ ^ ˙ = A 21 β ^ + A 22 γ ^ + B 2 u + k 1 sign ⁡ ( γ ~ ) + k 4 a ~ y a ^ y = C 21 β ^ + C 22 γ ^ + E 2 u \left\{\begin{array}{l} \dot{\hat{\beta}}=A_{11} \hat{\beta}+A_{12} \hat{\gamma}+B_{1} u+k_{1} k_{2} \operatorname{sign}(\tilde{\gamma})+k_{3} \tilde{a}_{y} \\ \dot{\hat{\gamma}}=A_{21} \hat{\beta}+A_{22} \hat{\gamma}+B_{2} u+k_{1} \operatorname{sign}(\tilde{\gamma})+k_{4} \tilde{a}_{y} \\ \hat{a}_{y}=C_{21} \hat{\beta}+C_{22} \hat{\gamma}+E_{2} u \end{array}\right. β^˙=A11β^+A12γ^+B1u+k1k2sign(γ~)+k3a~yγ^˙=A21β^+A22γ^+B2u+k1sign(γ~)+k4a~ya^y=C21β^+C22γ^+E2u

公式具体系数按下不表,读者可以参考 Active Front Steering-based Electronic Stability Control for Steer-by-Wire Vehicles via Terminal Sliding Mode and Extreme Learning Machine
simulink 设置为 ode3 求解器,固定步长 0.001 s 0.001s 0.001s,搭建 simulink 模块如下图所示:
SMO Simulink Module
主要的思路是使用一个 Memory 模块来记录系统变量前一时刻值,需要注意的是,每个 Memory 都需要填入初始值后使用。

具体函数 matlab function 定义如下:

function [betahat,rhat,ayhat]   = fcn(beta,deltaf,r,ay,betahat,rhat,ayhat)
% This is the function of SMO
% Xhat    the inner variable for SMO
% ay      the lateral acceleration
% r       the yaw rate γ
% beta    the vehicle slideslip angle
% deltaf   the driver's steer command
% ayhat   the observed value for ay
% rhat the observerd value for γ
% betahat the observerd value for β

% hu 2020-11-13
% hu 2020-11-14 tested a set of parameters

%--- Vehicle contants give here ---

lf = 1.016;
lr = 1.562;
Cf = 57000; 
Cr = 68000;
m  = 1274;
Vx = 15;
Iz = 1523;

A11 = -2 * (Cf + Cr) / (m * Vx);
A12 = 2 * (Cr * lr - Cf * lf) / (m * Vx^2) - 1;
A21 = 2 * (Cr * lr - Cf * lf) / Iz;
A22 = -2 * (lf^2 * Cf + lr^2 * Cr) / (Iz * Vx);
B1  = 2 * Cf / (m * Vx);
B2  = 2 * lf * Cf / Iz;
C21 = Vx * A11;
C22 = Vx * (A12 + 1);
E2  = Vx * B1;
h   = .001;

k1 = 7; 
k2 = .4; 
k3 = .3; 
k4 = 10;

delta = .1; % boundary layer .3
sat   = @(s)(s >= delta) * sign(s) + (s < delta) * (s / delta);  % sat function def.

u       = deltaf;
e       = [beta - betahat;r - rhat;ay - ayhat];

%--- Main loop ---
betahatdot = A11 * betahat + A12 * rhat + B1 * u + k1 * k2 * sat(e(2)) + k3 * e(3);
betahat    = betahat + betahatdot * h;
rhatdot    = A21 * betahat + A22 * rhat + B2 * u + k1 * sat(e(2)) + k4 * e(3);
rhat       = rhat + rhatdot * h;
ayhat      = C21 * betahat + C22 * rhat + E2 * u;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值