Stateflow

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

解析と物理学

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

図 1: ドライブトレイン システムの一般的なブロック線図

スロットル開放は、エンジンへの入力の 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}$$

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

図 2: 変速スケジュール

モデル化

このモデルを開く開くには、MATLAB 端末に「sldemo_autotrans」と入力します。初期条件は、モデル ワークスペースで設定されます。

このモデルの最上位レベルのブロック線図を図 3 に示します。シミュレーションを実行するには、モデル ウィンドウでツール バーの [再生] ボタンを押します。このモデルは、MATLAB ワークスペースの sldemo_autotrans_output というデータ構造に関連データのログを作成することに注意してください。ログが作成された信号は青色のインジケーターをもちます (図 3 を参照)。シミュレーションを実行した後、データ構造のコンポーネントを表示するには、MATLAB コマンド ウィンドウで「sldemo_autotrans_output」と入力します。

図 3: モデル ダイアグラムとサンプル シミュレーションの結果 (追い越し運転)

モデル化

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

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

図 4: Engine サブシステム

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

図 5: Transmission サブシステム

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

図 6: Torque Converter サブシステム

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

表 1: 変速比

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

図 7: 変速比サブシステム

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

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

図 9: Vehicle サブシステム (マスク付き)

結果

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

図 10: エンジン トルク マップ

図 11: トルク コンバーター特性 (図 5 および方程式 2 を参照)

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

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

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

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

図 12: 追い越し運転シミュレーションの時刻歴

t=15 秒で、追い越し運転でよくあるように、ドライバーはスロットルを踏んで 100% にします。トランスミッションはサード ギアにダウンシフトし、エンジンは約 2600 RPM から約 3700 RPM に急増します。したがって、トランスミッションの機械利得と同様に、エンジン トルクは少し大きくなります。重いスロットル開放が継続することで、車両は約 100 mph まで加速してから、約 t = 21 秒でオーバードライブにシフトします。シミュレーションの残りの期間、車両は 4th ギアで走行します。ManeuversGUI ブロックをダブルクリックし、グラフィカル インターフェイスを使用してスロットルおよびブレーキ履歴を変更します。

モデルを閉じる

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

まとめ

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