エンジン速度モデルの線形化
この例では、エンジン速度モデルを複数の出力条件で線形化する方法を示します。
エンジン速度モデル
モデルを開きます。
mdl = 'scdspeed';
open_system(mdl)
この例では、点火進角とスロットル角の入力から、出力のエンジン速度までの線形モデルを求めます。これを 3 つの速度の条件で行います。2000 rpm、3000 rpm、および 4000 rpm です。
操作点の検出
3 つの操作点の仕様の配列を作成します。
opspec = operspec(mdl,[3 1]);
この Simulink® モデルにはルートレベルの入力端子がないため、opspec
に出力仕様は含まれません。関数 addoutputspec
を使用して、モデル内の任意の信号の出力仕様を追加できます。
rad/s to rpm ブロックの出力に出力仕様を追加します。
opspec = addoutputspec(opspec,'scdspeed/rad//s to rpm',1);
それぞれの仕様で、出力値が既知であることを示し、出力値を指定します。既知の速度値を 2000 rpm、3000 rpm、および 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;
3 つ目の操作条件の仕様オブジェクトを表示します。
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 _____ _____ _____ _____ (1.) scdspeed/rad//s to rpm 4000 true -Inf Inf
関数 findop
を使用して、これらの仕様を満たす操作点を求めます。
opt = findopOptions('DisplayReport','off'); op = findop(mdl,opspec,opt);
3 つ目の操作条件に対する結果の操作点を表示します。
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