Triggered Subsystem を使用したエンジン タイミングのモデル化
この例では、Triggered Subsystem を使用して 4 気筒火花点火内燃エンジンのスロットルからクランクシャフト出力までをモデル化する方法を示します。この例では、sldemo_engine
モデルは [1] に基づいています。
sldemo_engine
モデルは、Valve Timing
および Combustion
サブシステムで Triggered Subsystem ブロックを使用します。この例では、4 気筒すべてのタスクが、気筒ごとに 1 セットの 4 つのブロック セットではなく、1 つのブロック セットを使用して実装されています。
モデルを開きます。
open_system('sldemo_engine')
直列 4 気筒 4 ストローク エンジンでは、クランクシャフトが 180°回転すると、連続する各気筒の点火が分離されます。この分離は、各気筒が 1 クランク回転おきに点火することを意味します。このモデルでは、吸気、圧縮、燃焼、および排気の行程が同時に発生します (任意の時点で、1 つの気筒がそれぞれのフェーズにあります)。圧縮を考慮するために、各吸気充填量の燃焼は、吸気行程の最後から 180°のクランク回転分だけ遅延されます。
このモデルでは、Integrator ブロックは、Throttle and Manifold
サブシステム内にある Intake Manifold
ブロックで気筒の質量空気流量を蓄積します。Valve Timing
サブシステムは、特定の回転位置に対応するパルスを生成してクランク角度、空燃質量を管理し、Compression
サブシステムの実行をトリガーします。Compression
サブシステムは Unit Delay ブロックを使用して、吸気と各空燃充填量の燃焼間に 180°(1 イベント期間) の遅延を挿入します。
1 つの気筒について完全な 4 行程サイクルを考えてみましょう。以下に各行程の機能について説明します。
吸気行程 この行程中に、インテーク マニホールドが開き、混合気を吸入します。ピストンが上死点 (TDC) から下死点 (BDC) まで移動し、クランク シャフトが 180°回転します。このモデルでは、
Throttle and Manifold
サブシステム内のIntake Manifold
サブシステムがマニホールドからの質量流量を積分します。圧縮行程 この行程では、インテーク マニホールドが閉じ、クランク シャフトの 180°回転によって空燃充填量が圧縮されます。ピストンが BDC から TDC まで移動します。圧縮により、混合気の温度が上昇し、燃焼プロセスが促進されます。
燃焼行程 スパーク プラグが混合気に点火します。気筒内の混合気の燃焼によって圧力が生じ、ピストンが TDC から BDC に移動します。この行程中にクランク シャフトが 180°回転し、トルクが発生します。
排気行程 排気行程中、ピストンはクランク シャフトの 180°の回転によって BDC から TDC に移動します。ピストン ヘッドが TDC に達すると、エキゾースト マニホールドが開き、気筒から排気されます。このモデルでは、
Throttle and Manifold
サブシステム内の Integrator ブロックがリセットされ、この気筒の次の 4 行程 (720°) のサイクルに備えます。
Valve Timing
Valve Timing
サブシステムは、バルブのタイミング (開閉) を制御し、点火をトリガーし、エンジンのクランク シャフトの角度位置に基づいてクランク シャフト角度をリセットします。Valve Timing
サブシステムには、Reset Crank Angle on Rising Edge
と Reset Piston Air Mass on Falling Edge
という 2 つの Triggered Subsystem ブロックが含まれています。
Reset Piston Air Mass on Falling Edge
は、クランクシャフトが TDC から BDC に移動するときにトリガーされ、離散バルブ イベントを介して混合気をインテーク マニホールドから気筒に移動します。この移動プロセスは、吸気の流れ、トルクの発生および加速の連続時間プロセスと同時に発生します。
クランクシャフト角度が 180°を超えると Reset Crank Angle on Rising Edge
がトリガーされ、角度が 0°にリセットされます。
Compression
Compression
サブシステムは、圧縮行程中のエンジンのダイナミクスを表します。このサブシステムは、ブロックの Trigger 端子で正のトリガー値を受け取るとトリガーされます。Unit Delay ブロックで、積分器の状態をサンプリングします。この値、つまり蓄積された質量充填量は、燃焼中に使用するために Compression
サブシステムの出力で利用できます。
Throttle and Manifold
エンジンのスロットル本体は、Throttle and Manifold
サブシステムによってモデル化されます。
Throttle
Throttle
サブシステムは、スロットル プレート角度 ()、マニホールド圧 ()、および大気圧 () を入力として使用します。インテーク マニホールドでの混合気吸入率 () は、次の 2 つの関数の積として表すことができます。
スロットル プレート角度の経験的関数
気圧とマニホールド圧の関数
マニホールド圧が低い (真空度が高い) 場合、スロットル本体を通過する流速は音速であるため、スロットル角度の関数のみになります。このモデルでは、以下の圧縮性方程式で切り替え条件を使用して、こうした低圧挙動を考慮します。
方程式 1
上記の個々の方程式は、Fcn ブロックを使用して組み込まれます。Switch ブロックは、圧力比をその切り替えしきい値と比較することによって、流れが音速であるかどうかを判断します。音速域では、流速はスロットル位置のみの関数になります。流れの方向は、Sign ブロックで決定されているように、圧力の高い方から低い方へです。MinMax ブロックは圧力比が常に 1 以下になるようにします。
インテーク マニホールド
Throttle and Manifold
サブシステムには、Intake Manifold
サブシステムが含まれています。このサブシステムは、スロットル流量入力とエンジン速度 () を入力として使用します。インテーク マニホールドはマニホールド圧 () の微分方程式としてモデル化されます。入ってくる質量流量と出ていく質量流量の差は、時間に対する空気質量の正味の変化率を表しています。理想気体の法則によると、この量は、マニホールド圧の時間導関数に比例しています。
ただし、[1] のモデルとは異なり、このモデルには排気再循環 (EGR) が組み込まれていません。
方程式 2
モデルがマニホールドから気筒に送り込む混合気の質量流量は、次の経験式で記述されます。この質量流量 () は、マニホールド圧 () とエンジン速度 () の関数です。
方程式 3
気筒に送り込まれる合計混合気充填量を算出するために、シミュレーションでは、インテーク マニホールドからの質量流量を積分し、各吸気行程イベントの最後にこれをサンプリングします。このサンプリングにより、吸気行程後、圧縮前に各気筒内に存在する合計空気質量が算出されます。
Intake Manifold
サブシステムは、方程式 2 で表されたスロットル ダイナミクスをモデル化するために使用されます。方程式 2 の微分方程式はインテーク マニホールド圧をモデル化します。Simulink Function ブロックは、気筒への質量流量、つまり、マニホールド圧とエンジン速度の関数を計算します (方程式 3)。
燃焼
燃焼行程中にトルクが発生します。Combustio
n サブシステムは、方程式 4 で表された、4 つの変数を使用した燃焼プロセスおよびトルク発生をモデル化します。このモデルは Mux ブロックを使用してこれらの変数をベクトルにまとめ、方程式 を組み込んだ Fcn ブロックに入力を提供します。
方程式 4
Engine Dynamics
Engine Dynamics
サブシステムは、負荷トルク と発生トルク を使用して、エンジン速度 () とクランク角度を計算します。 は、Drag Torque
サブシステムでステップ関数を使用して計算されます。エンジン速度は方程式 を使用して計算されます。ここで、J はエンジン回転慣性モーメント です。
モデルのシミュレーションと結果の可視化
関数 plot
を使用してモデルのシミュレーションと結果の可視化を行います。
sim('sldemo_engine');
次の既定の入力値がシミュレーションで使用されます。
Simulink® は、シミュレートされたエンジン速度と、シミュレーションを駆動するスロットル コマンド、およびこれを妨げる負荷トルクを返します。
モデルはこのデータをベース ワークスペースの構造体 sldemo_engine_output
に記録します。
PlotHandle = plot(sldemo_engine_output.get('LoadTorque').Values.Time, ... sldemo_engine_output.get('LoadTorque').Values.Data, 'g', ... sldemo_engine_output.get('ThrottleAngle').Values.Time, ... sldemo_engine_output.get('ThrottleAngle').Values.Data, 'b' ); title('Open-Loop Simulation Inputs: Load Torque and Throttle Angle vs Time'); xlabel('Time (sec)'); ylabel('Engine Speed (rad/sec)'); set(gca,'Color','w','XGrid','On','XColor',[0 0 0],... 'YGrid','On','YColor',[0 0 0]); axis([0 10 5 30]); h= legend('Load Torque (Nm)','Throttle Angle (deg)','Location','northeast'); set(h,'TextColor','k','Color','none');
PlotHandle = plot(sldemo_engine_output.get('EngineSpeed').Values.Time, ... sldemo_engine_output.get('EngineSpeed').Values.Data,'g' ); title('Open-Loop Simulation Results: Engine Speed Control'); xlabel('Time (sec)'); ylabel('Engine Speed (rad/sec)'); set(gca,'Color','w','XGrid','On','XColor',[0 0 0],... 'YGrid','On','YColor',[0 0 0]); axis([0 10 1500 3500]); h = legend('Engine Speed (rpm)','Location','northeast'); set(h,'TextColor','k','Color','none');
参考
Triggered Subsystem | State Writer | State Reader | Integrator | Second-Order Integrator | Mux | Step
関連するトピック
参照
[1] Crossley, P. R., and J. A. Cook. “A Nonlinear Engine Model for Drivetrain System Development.” International Conference on Control 1991. Control ’91 1991, pp. 921–25 vol.2. IEEE Xplore, DOI.org (Crossref), https://ieeexplore.ieee.org/abstract/document/98573.
[2] The Simulink Model. Developed by Ken Butts, Ford Motor Company. Modified by Paul Barnard, Ted Liefeld and Stan Quinn, MathWorks®, 1994 — 7."
[3] Moskwa, John J., and J. Karl Hedrick. “Automotive Engine Modeling for Real Time Control Application.” 1987 American Control Conference, 1987, pp. 341–46. IEEE Xplore, DOIː 10.23919/ACC.1987.4789343.
[4] Powell, B. K., and J. A. Cook. “Nonlinear Low Frequency Phenomenological Engine Modeling and Analysis.” 1987 American control conference, 1987, pp. 332–40. IEEE Xplore, DOIː 10.23919/ACC.1987.4789342.
[5] Weeks, Robert W., and John J. Moskwa. “Automotive Engine Modeling for Real-Time Control Using MATLAB/SIMULINK.” SAE transactions, vol. 104, 1995, pp. 295–309. JSTOR, https://www.jstor.org/stable/44473229.