Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Simscape DC モーター制御の HDL 互換 Simulink モデルへの変換のトラブルシューティング

この例では、Simscape™ プラント モデルを変更して HDL Coder™ で HDL 互換の Simulink® モデルを生成する方法を示します。HDL コードはこの Simulink モデルから生成されます。

はじめに

Simscape プラント モデルは、Simscape HDL ワークフロー アドバイザーを使用して HDL 互換 Simulink モデルに変換されます。アドバイザーを実行するには、モデルの関数 sschdladvisor を実行します。

Simscape HDL ワークフロー アドバイザーは、HDL コードを生成する HDL 実装モデルを生成します。実装モデルを生成する前に、Simscape HDL ワークフロー アドバイザーを使用して、Simscape プラント モデルを実装モデルの生成用に構成します。詳細については、Simscape モデルの HDL コードの生成を参照してください。

Simscape プラント モデルは、Simscape HDL ワークフロー アドバイザーを使用した実装モデルの生成と互換性がない場合があります。HDL 互換性のために、Simscape プラント モデルを変更してから、Simscape HDL ワークフロー アドバイザーを実行します。この例では、DC モーター制御のプラント モデルを示します。モデルには、非線形 Friction ブロックが含まれています。この例のアプローチを使用すると、いくつかの非線形ブロックを含む Simscape モデルを HDL 互換 Simulink モデルに変換できます。

DC モーター制御モデル

DC モーター制御モデルは、Simscape で開発された物理モデルです。モデルは非線形要素を含む、実装モデルの生成用に変更しなければなりません。

open_system('ee_dc_motor_control')

DC Motor ブロックと Friction ブロックをサブシステム内に含め、モデルを ee_dc_motor_control_original という名前で保存します。

open_system('ee_dc_motor_control_original')
set_param('ee_dc_motor_control_original','SimulationCommand','Update')

DC モーター制御は、速度制御構造として使用されます。DC モーターに電力を供給するために、PWM 制御の 4 象限チョッパーが使用されます。DC モーターは、Rotational Electromechanical Converter、Resistor、Inductance、Friction ブロックおよび Inertia ブロックで構成されています。Control サブシステムには、外側の速度制御ループ、内側の電流制御ループ、および PWM 生成が含まれています。

sim('ee_dc_motor_control_original')
open_system('ee_dc_motor_control_original/Scope')

DC モーター モデルを HDL と互換させる

モデルを Simscape HDL ワークフロー アドバイザーでの変換に対応したモデルに変換するには、次のようにします。

1. モデルにある非線形コンポーネントや非線形ブロックを検出します。Simscape プラント モデルの非線形ブロックの有無を確認するには、次を入力します。

simscape.findNonlinearBlocks('ee_dc_motor_control_original')
Found network that contains nonlinear equations in the following blocks:
    {'ee_dc_motor_control_original/DC Motor/Friction'}

The number of linear or switched linear networks in the model is 0.
The number of nonlinear networks in the model is 1.

ans =

  1x1 cell array

    {'ee_dc_motor_control_original/DC Motor/Friction'}

Simscape プラント モデルには、非線形ブロックである Friction ブロックが含まれています。

2.HDL との互換性のため、モデルに非線形要素が含まれていてはなりません。モデルから Friction ブロックを削除します。

3.モデルのシミュレーションを高速にし、Simscape HDL ワークフロー アドバイザーで状態空間方程式を抽出するのにかかる時間を短縮するために、このモデルの停止時間を短くします。Simulink ツールストリップの [シミュレーション] タブで、[終了時間]1 に変更します。

変更を新しいモデルに ee_dc_motor_control_modified として保存します。

open_system('ee_dc_motor_control_modified')
set_param('ee_dc_motor_control_original','SimulationCommand','Update')

変更したモデルのシミュレーション結果を確認するには、次のコマンドを実行します。

sim('ee_dc_motor_control_modified')
open_system('ee_dc_motor_control_modified/Scope')

Simscape HDL ワークフロー アドバイザーの実行とシミュレーション結果の確認

Simscape HDL ワークフロー アドバイザーを開くには、モデルで sschdladvisor を実行します。

sschdladvisor('ee_dc_motor_control_modified')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(ee_dc_motor_control_modified)">ee_dc_motor_control_modified</a>
Updating Model Advisor cache...
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

実装モデルを生成するには、Simscape HDL ワークフロー アドバイザーで、すべてのタスクを既定の設定のままにして、タスクを実行します。[実装モデルを生成] タスクのリンクをクリックしてモデルを開きます。

実装モデルのシミュレーションと HDL コードの生成

モデルから HDL コをードを生成する前に、サンプル時間を変更して、モデルが HDL コード生成と互換性をもつように特定の設定を指定しなければなりません。変更したプラント モデルのサンプル時間は Ts で、モードを計算するソルバーの反復回数は 3 です。したがって、モデルのサンプル時間を変更しなければなりません。HDL 互換の設定を指定するには、次を行います。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスで、以下の操作を実行します。

  • [ソルバー] ペインで、[固定ステップ サイズ (基本サンプル時間)]Ts/3 に設定し、[各離散レートを個別のタスクとして扱う] を選択します。

  • [診断]、[サンプル時間] ペインで、[マルチタスク レート変換][シングルタスク レート変換]error に設定します。

  1. 下の図に示すように、実装モデルで Subsystem ブロック内に配置される Simscape モデルに Rate Transition ブロックを追加します。

モデルをシミュレートするには、このコマンドを実行し、Scope ブロックを開いて結果を確認します。

sim('gmStateSpaceHDL_ee_dc_motor_control_modifie')

変更した Simscape プラント モデルで生成された出力が、実装モデルで生成された出力と一致することがわかります。

HDL コードと検証モデルの生成

HDL コードを生成する前に、検証モデルの生成を有効にしておくことをお勧めします。検証モデルでは、コード生成後に生成されたモデルの出力と、変更された Simscape プラント モデルが比較されます。詳細については、生成されたモデルと検証モデルを参照してください。

検証モデルの生成設定を Simulink モデルに保存するには、次のコマンドを実行します。

hdlset_param('gmStateSpaceHDL_ee_dc_motor_control_modifie', 'GenerateValidationModel', 'on');

HDL コードを生成するには、次のコマンドを実行します。

makehdl('gmStateSpaceHDL_ee_dc_motor_control_modified/HDL Subsystem')

既定では、HDL Coder で VHDL コードが生成されます。Verilog コードを生成するには、次のコマンドを実行します。

makehdl('gmStateSpaceHDL_ee_dc_motor_control_modifie/HDL Subsystem', 'TargetLanguage', 'Verilog')

生成された HDL コードと検証モデルは hdlsrc ディレクトリに保存されます。生成されたコードは、HDL_Subsystem_tc.vhd として保存されます。検証モデル gm_gmStateSpaceHDL_ee_dc_motor_control_modifie_vnl.slx を実行してシミュレーション結果を検証することもできます。

参考

関数

関連するトピック