Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

オートマチック トランスミッション コントローラーのモデル化

この例では、Simulink® を使用して自動車ドライブトレインをモデル化する方法を説明します。Stateflow® は、トランスミッション制御ロジックの表現を使って Simulink モデルを拡張します。Simulink は、動的なシステムとプロセスのモデル化およびシミュレーションのための強力な環境を提供します。ただ、多くのシステムでは、モードの変更や新しいゲイン スケジュールの呼び出しなどを行う監視機能は、発生し得るイベントや経時的に発生する条件に対応しなければなりません。そのため、この環境では、こうした複数のモードや展開し続ける条件を管理できる言語が必要となります。次の例で Stateflow は、オートマチック トランスミッションでのギア選択機能を実行することによって、こうした能力での強みを示しています。この機能は、Simulink ブロック線図に Stateflow ブロックを組み込むことによって、自然で直観的な方法によりドライブトレイン ダイナミクスと結合されます。

解析と物理学

以下の図は、一般的な自動車ドライブトレインにおける出力の流れを示しています。非線形常微分方程式でエンジン、4 速オートマチック トランスミッション、および車両をモデル化します。この例で説明するモデルは、モジュール式の Simulink サブシステムとしてこの図のブロックを直接実装します。一方、トランスミッション制御ユニット (TCU) でのロジックおよび決定は、適切に定式化された方程式には適していません。TCU がより適しているのは Stateflow 表現です。Stateflow は、システム内の重要な関係に対応するイベントを監視し、そうしたイベントが発生すると適切なアクションを実行します。

スロットル開放は、エンジンへの入力の 1 つです。エンジンはトルク コンバーターのインペラーに接続されており、これにより、エンジンはトランスミッションに接続されます (方程式 1 を参照)。

方程式 1

$$I_{ei} \dot{N}_e = T_e -T_i $$

$$ N_e = \mbox{ engine speed (RPM)}$$

$$I_{ei} = \mbox{ moment of inertia of the engine and the impeller}$$

$$T_e, T_i = \mbox{ engine and impeller torque}$$

トルク コンバーターの入出力特性は、エンジン回転数とタービン回転数の関数として表すことができます。この例では、出力の流れの方向は常にインペラーからタービンに向かうものと仮定されます (方程式 2 を参照)。

方程式 2

$$T_i = \frac{N_e^2}{K^2}$$

$$K= f_2 \frac{N_{in}}{N_e} = \mbox{ K-factor (capacity)}$$

$$N_{in} = \mbox{ speed of turbine (torque converter output) = transmission input speed (RPM)}$$

$$R_{TQ} = f_3 \frac{N_{in}}{N_e} = \mbox{ torque ratio}$$

トランスミッション モデルは、変速時間が短いと仮定して、静ギア比によって実装されます (方程式 3 を参照)。

方程式 3

$$R_{TR} = f_4(gear) = \mbox{ transmission ratio}$$

$$T_{out} = R_{TR} T_{in}$$

$$N_{in} = R_{TR} N_{out}$$

$$T_{in}, T_{out} = \mbox{ transmission input and output torques}$$

$$N_{in}, N_{out} = \mbox{ transmission input and output speed (RPM)}$$

最終駆動、慣性、および動的に変化する負荷が車両運動を構成します (方程式 4 を参照)。

方程式 4

$$ I_v \dot{N}_w = R_{fd}(T_{out}-T_{load})$$

$$I_v = \mbox{ vehicle inertia}$$

$$N_w = \mbox{ wheel speed (RPM)}$$

$$R_{fd} = \mbox{ final drive ratio}$$

$$T_{load} = f_5(N_w) = \mbox{ load torque}$$

負荷トルクには、走行負荷とブレーキ トルクの両方が含まれます。走行負荷は、摩擦損失と空力的損失の和です (方程式 5 を参照)。

方程式 5

$$ T_{load} = sgn(mph) (R_{load0} + R_{load2} mph^2 + T_{brake}) $$

$$ R_{load0}, R_{load2} = \mbox{ friction and aerodynamic drag coefficients} $$

$$ T_{load}, T_{brake} = \mbox{ load and brake torques} $$

$$ mph = \mbox{ vehicle linear velocity}$$

モデルは、以下の図に示すスケジュールに従って、トランスミッションの変速点をプログラムします。特定のギアにおける特定のスロットルについて、アップシフトが発生する一意の車両速度が存在します。シミュレーションはダウンシフトについても同様に動作します。

モデル化

モデルを開くと、初期条件がモデル ワークスペースで設定されます。

モデルの最上位レベルのブロック線図を以下の図に示します。シミュレーションを実行するには、[シミュレーション] タブで [実行] をクリックします。このモデルは、MATLAB ワークスペースの sldemo_autotrans_output というデータ構造体内に関連データのログを作成することに注意してください。ログに記録された信号には青いインジケーターが付きます。シミュレーションを実行した後、データ構造体のコンポーネントを表示するには、MATLAB コマンド ウィンドウで「sldemo_autotrans_output」と入力します。サブシステム アイコンと信号線上に単位が表示される点にも注意してください。

モデル化

上に示す Simulink モデルは、エンジン、トランスミッション、および車両を表すモジュールと、変速比を制御するための追加の変速ロジック ブロックで構成されています。モデルへのユーザー入力は、スロットル (パーセント単位で指定) とブレーキ トルク (フィートポンド単位で指定) という形式です。ユーザーは ManeuversGUI インターフェイスを使用してスロットルとブレーキ トルクを入力します。

Engine サブシステムは、スロットルおよびエンジン回転数に対してエンジン トルクを内挿する 2 次元テーブルで構成されています。以下の図は、複合 Engine サブシステムを示しています。モデル内でこのサブシステムをダブルクリックすると、構造が表示されます。

以下の図に示すように、TorqueConverter ブロックと TransmissionRatio ブロックにより Transmission サブシステムが構成されます。モデル ウィンドウで Transmission サブシステムをダブルクリッすると、コンポーネントが表示されます。

TorqueConverter はマスク サブシステムであり、方程式 2 を実装します。このサブシステムを開くには、右クリックし、ドロップダウン メニューから [マスク][マスク内を表示] を選択します。マスクには、回転数比 (Nin/Ne) のベクトルと、K ファクター (f2) およびトルク比 (f3) のベクトルが必要です。以下の図に、TorqueConverter サブシステムの実装を示します。

変速比ブロックは、表 1 に示す比率を決定し、方程式 3 に示すように、トランスミッションの出力トルクおよび入力回転数を計算します。下の図に、このトルクと回転数の比を実現するサブシステムのブロック線図を示します。

表 1: 変速比

gear     Rtr = Nin/Ne
 1         2.393
 2         1.450
 3         1.000
 4         0.677

ShiftLogic とラベルの付いた Stateflow ブロックは、トランスミッションのギア選択を実装します。モデル ウィンドウで ShiftLogic をダブルクリックすると、Stateflow のブロック線図が開きます。モデル エクスプローラーを利用して、入力をスロットルおよび車両速度として、また出力を望ましいギア番号として定義します。点線で囲まれた 2 つの AND ステートは、ギア ステートと、ギア選択プロセスのステートを追跡します。チャート全体が離散時間システムとして実行され、40 ミリ秒ごとにサンプリングされます。以下に示す Stateflow ブロック線図は、このブロックの機能を図示しています。

シミュレーション中に変速ロジックの動作を観察するには、Stateflow デバッガーでアニメーションを有効にします。selection_state (常にアクティブ) が、まず、関数 during で示される計算を実行します。モデルは、アップシフトおよびダウンシフトの速度しきい値を、ギアとスロットルの瞬時値の関数として計算します。steady_state においてモデルはこれらの値を現在の車両速度と比較し、変速が必要かどうかを判定します。必要な場合は、確認ステートの 1 つ (upshifting または downshifting) に入り、エントリ時間が記録されます。

確認ステートにいる間に両速度が変速条件を満たさなくなった場合、モデルは変速を無視して steady_state に戻ります。これにより、ノイズ条件による不要な変速が回避されます。TWAIT 刻みの間、変速条件が有効なままである場合、モデルは下のジャンクションを経由して遷移し、現在のギアに応じて変速イベントの 1 つをブロードキャストします。その後、モデルは中央のジャンクションのいずれかを経由して遷移した後に steady_state を再度アクティブにします。gear_selection ステートにブロードキャストされる変速イベントは、適切な新しいギアへの遷移をアクティブにします。

たとえば、車両が 25% のスロットルで、セカンド ギアで走行している場合、ステート secondgear_state 内でアクティブになり、steady_stateselection_state 内でアクティブになります。後者の関数 during により、車両が 30 mph を超えるとアップシフトの発生が必要になることがわかります。これが真になった瞬間、モデルは upshifting ステートに入ります。このステートで、車両速度が TWAIT 刻みの間 30 mph を上回ったままである場合、モデルは右下のジャンクションに至る遷移条件を満たします。また、ここから steady_state に至る遷移に対する条件 [|gear == 2|] も満たしているため、モデルは upshifting から steady_state への全体的な遷移を実行し、遷移アクションとしてイベント UP をブロードキャストします。その結果、gear_state においてセカンドからサードへの遷移がなされ、これによって変速ロジックが完了します。

Vehicle サブシステムは、方程式 4 と方程式 5 に従い、正味トルクを使用して加速度を計算し、これを積分して車両速度を計算します。Vehicle サブシステムはマスクされています。Vehicle ブロックの構造を確認するには、これを右クリックし、ドロップダウン メニューから [マスク][マスク内を表示] を選択します。マスク メニューに入力されているパラメーターは、最終駆動比、摩擦抵抗と空力抵抗の多項式係数、車輪半径、車両慣性、および初期トランスミッション出力回転数です。

結果

シミュレーションで使用されるエンジン トルク マップとトルク コンバーター特性を以下に示します。

FactorK (2 番目の行)、および TorqueRatio (3 番目の行) 対 SpeedRatio (最初の行) を取得します。

最初のシミュレーション (追い越し運転) は、表 2 で与えられているスロットル スケジュールを使用します (このデータは線形内挿されます)。

表 2: 最初のシミュレーション用のスロットル スケジュール (追い越し運転)

Time (sec)    Throttle (%)
  0             60
 14.9           40
 15            100
100              0
200              0

最初の列は時間に対応し、2 番目の列はパーセント単位のスロットル開放に対応します。このケースでは、ブレーキはかけられません (ブレーキ トルクが 0)。車両速度は 0 から、エンジン回転数は 1000 RPM から開始します。以下の図に、既定パラメーターを使用した、ベースライン結果のプロットを示します。t=0 でドライバーがペダルを踏みスロットルを 60% にすると、エンジンは即座に応答して回転数を 2 倍超にします。これにより、トルク コンバーター全体に低い回転数比が発生し、したがって、大きいトルク比が発生します。車両は迅速に加速し (タイヤのスリップはモデル化されません)、エンジンと車両の両方が約 t = 2 sec まで速度を上げ、この時点で 1 から 2 へのアップシフトが発生します。エンジン回転数は特徴的な急降下の後、加速を再開します。2 から 3 および 3 から 4 へのアップシフトは、それぞれ約 4 秒および 8 秒で発生します。車両の慣性が大きいため、車両速度ははるかに滑らかなままであることに注意してください。

t=15sec で、ドライバーはスロットル 100% まで踏み込みます。これは追い越し運転でよくある動作です。トランスミッションはサード ギアにダウンシフトし、エンジン回転数は約 2600 RPM から約 3700 RPM へと跳ね上がります。したがってエンジン トルクは、トランスミッションの機械効率と共に少し大きくなります。スロットル開放が継続することで、車両は約 100 mph まで加速してから、約 t = 21 sec でオーバードライブにシフトします。シミュレーションの残りの期間、車両は 4 速で走行します。ManeuversGUI ブロックをダブルクリックし、グラフィカル インターフェイスを使用してスロットルとブレーキの履歴を変更します。

複数のシナリオを実行してカバレッジを収集

モデルをすべてのシナリオで実行しながらカバレッジを収集できます。sldemo_autotrans のすべてのシナリオを実行するための保存された設計検討を確認するには、sldemo_autotrans の [複数のシミュレーション] パネルで sldemo_autotrans_design_study.mldatx を開きます。

設計検討が開いたら、モデルの設定でモデル カバレッジと累積収集を有効にします。

set_param('sldemo_autotrans', 'CovEnable', 'on');

set_param('sldemo_autotrans', 'CovEnableCumulative', 'on');

これを設定したら、Simulink ツールストリップの [シミュレーション] タブにある [Run All (Coverage)] ボタンをクリックします。次に、設計ケースのモデル カバレッジをチェックします。

モデルを閉じる

モデルを閉じ、生成されたデータをクリアします。

まとめ

この基本システムは、たとえば、エンジンやトランスミッションをより複雑なモデルで置き換えるなどにより、モジュール方式で簡単に拡張できます。段階的な改良によってこの構造内に大規模なシステムを構築できます。Stateflow の制御ロジックを Simulink の信号処理とシームレスに統合することにより、効率的で、視覚的に直観的なモデルの作成が可能になります。

関連するトピック