发动机转速模型线性化
此示例说明如何针对多种输出条件对发动机转速模型进行线性化。
发动机转速模型
打开模型。
mdl = 'scdspeed';
open_system(mdl)

对于此示例,您将从点火提前角和节气门开度输入到发动机转速输出求解线性模型。此操作针对以下三种转速条件进行:2000、3000 和 4000 rpm。
查找工作点
创建一个由三个工作点设定组成的数组。
opspec = operspec(mdl,[3 1]);
由于该 Simulink® 模型没有任何根级输入端口,因此 opspec 不包含任何输出设定。您可以使用 addoutputspec 函数为模型中的给定信号添加输出设定。
向 rad/s to rpm 模块的输出添加一个输出设定。
opspec = addoutputspec(opspec,'scdspeed/rad//s to rpm',1);
对于每个设定,指明输出值是已知的,并指定输出值。将已知的转速值设置为 2000、3000 和 4000 rpm。
opspec(1).Outputs.Known = 1; opspec(1).Outputs.y = 2000; opspec(2).Outputs.Known = 1; opspec(2).Outputs.y = 3000; opspec(3).Outputs.Known = 1; opspec(3).Outputs.y = 4000;
查看针对第三种工况的设定对象。
opspec(3)
ans =
Operating point specification for the Model scdspeed.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x Known SteadyState Min Max dxMin dxMax
___________ ___________ ___________ ___________ ___________ ___________ ___________
(1.) scdspeed/Throttle & Manifold/Intake Manifold/p0 = 0.543 bar
0.543 false true -Inf Inf -Inf Inf
(2.) scdspeed/Vehicle Dynamics/w = T//J w0 = 209 rad//s
209.48 false true -Inf Inf -Inf Inf
Inputs:
----------
u Known Min Max
_____ _____ _____ _____
(1.) scdspeed/Throttle perturbation
0 false -Inf Inf
Outputs:
----------
y Known Min Max Period PeriodicTolerance
_________________ _________________ _________________ _________________ _________________ _________________
(1.) scdspeed/rad//s to rpm
4000 true -Inf Inf -1 0.0001
使用 findop 函数搜索符合这些设定的运行点。
opt = findopOptions('DisplayReport','off'); op = findop(mdl,opspec,opt);
查看针对第三种工况所得到的工作点。
op(3)
ans =
Operating point for the Model scdspeed.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x
_______
(1.) scdspeed/Throttle & Manifold/Intake Manifold/p0 = 0.543 bar
0.4731
(2.) scdspeed/Vehicle Dynamics/w = T//J w0 = 209 rad//s
418.879
Inputs:
----------
u
______
(1.) scdspeed/Throttle perturbation
5.8292
模型线性化
要对模型进行线性化,请首先指定 throttle 模块和 Spark Advance 模块输出处的线性化输入点。
io(1) = linio('scdspeed/throttle (degrees)',1,'input'); io(2) = linio('scdspeed/Spark Advance',1,'input');
接下来,指定 rad/s to rpm 模块输出处的线性化输出点。
io(3) = linio('scdspeed/rad//s to rpm',1,'output');
针对每种工况对模型进行线性化。
sys = linearize(mdl,op,io);
绘制所得线性模型的波特幅值响应。
bodemag(sys)

关闭模型。
bdclose(mdl)
另请参阅
operspec | findop | linio | linearize