Main Content

Piecewise-Constant Resistor を線形スイッチド コンポーネントに置き換え

この例では、Piecewise-Constant Resistor (非線形コンポーネント) がある Simscape™ モデルを線形スイッチド モデルに変換し、Simscape ハードウェアインザループ (HIL) ワークフローとの互換性をもたせる方法を示します。

はじめに

Simscape HIL ワークフローでは、Simscape モデルを HDL コード生成と互換性がある機能的に等価な Simulink® モデルに変換することがサポートされます。この例のモデルは、イベント ベースの Piecewise-Constant Resistor を使用します。イベントは Simscape HIL ワークフローではサポートされていません。HDL コード生成と互換性をもつように、このような Simscape モデルを線形スイッチド モデルに変換できます。詳細については、Simscape モデルの HDL コードの生成を参照してください。

MATLAB® コマンド プロンプトから Simscape モデルを開きます。

NonlinearModel = 'sschdlexVariableResistorExample';
open_system(NonlinearModel)
set_param(NonlinearModel, 'SimulationCommand', 'update');

Simscape サブシステムを開きます。

open_system([NonlinearModel,'/Simscape Subsystem'])

このモデルは "負荷" 抵抗として動作する Piecewise-Constant Resistor が含まれる RLC 回路です。Piecewise-Constant Resistor では、電圧 $V$ と電流 $I$ の関係は $V=I*R$ であり、$R$ は物理量信号端子 $R$ で示される数値です。

抵抗の値が必ず正になるように、1e-6 未満の値はすべて 1e-6 に置き換えられます。この抵抗は、入力値と現在の抵抗値の差が設定された許容誤差を超える場合にのみ抵抗が変化するため区分的に一定です。したがって、連続的に変化する入力を抵抗の離散集合に変換します。

このモデルの Piecewise-Constant Resistor への信号は、t = 0.1 で 2 から 3 に変化するステップ関数であり、これによって負荷抵抗が 2 Ω から 3 Ω に切り替わります。

関数 sschdladvisor を使用して Simscape HDL ワークフロー アドバイザーを開きます。

sschdladvisor(NonlinearModel)

Simscape HDL ワークフロー アドバイザーで、[コード生成互換性][モデルの互換性のチェック] タスクを右クリックして [選択したタスクまで実行] を選択します。このタスクは、Piecewise-Constant Resistor があるため失敗します。

Piecewise-Constant Resistor をスイッチと定数抵抗に置き換え

このモデルを同等の線形スイッチド モデルに変換するには、Piecewise-Constant Resistor を目的のそれぞれの値に対応するスイッチと抵抗のセットに置き換えます。モデルの線形スイッチド バージョンを開きます。

SwitchedLinearModel = 'sschdlexVariableResistorSwitchedLinearExample';
open_system(SwitchedLinearModel)
set_param(SwitchedLinearModel, 'SimulationCommand', 'update');

このモデルは、Piecewise-Constant Resistor の代わりに目的のそれぞれの抵抗に対応する抵抗とスイッチを使用します。具体的には、2 Ω の抵抗と 3 Ω の抵抗を使用します。t = 0.1 でスイッチを閉じて開くと、モデルは負荷抵抗を 2 Ω から 3 Ω に変更します。

open_system([SwitchedLinearModel,'/Simscape Subsystem'])

スイッチの制御

スイッチの制御信号を開きます。

open_system([SwitchedLinearModel,'/Input'])

入力信号 V_switch には 2 つのステップ関数が含まれており、一方は t = 0.1 で 2 Ω の抵抗と直列のスイッチを開き、もう一方は同じ時点で 3 Ω の抵抗と直列のスイッチを閉じます。

HDL 実装モデルの生成

線形スイッチド モデルに対する既定の [ソルバー設定] の設定を使用します。

  • ソルバー タイプ: Backward Euler

  • サンプル時間: 1e-3

モデル ウィンドウで、モデル統計を表示できます。[デバッグ] タブを選択し、[Simscape]、[統計ビューアー] をクリックします。これにより、sschdlexVariableResistorExample モデルの [Simscape の統計] ウィンドウが開きます。

線形スイッチド モデルに対する Simscape HDL ワークフロー アドバイザーを開きます。

sschdladvisor(SwitchedLinearModel)

HDL 実装モデルを生成するには、[実装モデルの生成][実装モデルを生成] タスクを右クリックし、[選択したタスクまで実行] を選択します。

最後のタスクが成功すると、HDL 実装モデル gmStateSpaceHDL_sschdlexVariableResistorSwi へのリンクが作成されます。

このリンクをクリックして、生成された実装モデルを開きます。

右側のペインで、[離散方程式の抽出] タスクの出力には、Simscape ネットワークの状態、入力、出力、モード、および微分変数の数と、状態空間表現が表示されます。

HDL コードの生成

HDL コード生成用のモデル パラメーターを設定するには、関数 hdlsetup を実行します。

hdlsetup('gmStateSpaceHDL_sschdlexVariableResistorSwi')

HDL 実装モデルのパラメーターを保存します。

hdlsaveparams('gmStateSpaceHDL_sschdlexVariableResistorSwi')

リソース利用レポートの生成を有効にします。

hdlset_param('gmStateSpaceHDL_sschdlexVariableResistorSwi', 'ResourceReport', 'on')
hdlset_param('gmStateSpaceHDL_sschdlexVariableResistorSwi', 'MaskParameterAsGeneric', 'off');

実装モデルの HDL コードを生成します。

makehdl('gmStateSpaceHDL_sschdlexVariableResistorSwi/Simscape Subsystem/HDL Subsystem');

コードを生成すると、HDL Coder でコード生成レポートが作成されます。[高水準リソース レポート] のリソース利用レポートには、ターゲットの FPGA デバイス上で消費される可能性がある、加算器、乗算器、およびレジスタの数が示されています。

Piecewise-Constant Resistor をオンとオフで切り替わる抵抗に置き換えることで、モデルを Simscape から HDL へのワークフローと互換性がある形式に変更しています。

参考

関数

関連するトピック