Main Content

永久磁石同期機のベクトル制御

この例では、永久磁石同期機 (PMSM) のベクトル制御 (FOC) アルゴリズムを確認します。この制御アルゴリズムを閉ループ システム シミュレーションでテストしてから、制御アルゴリズムの HDL コードを生成します。また、調整可能なパラメーター データの指定方法と、対応する HDL 端子エンティティの生成方法も確認します。

はじめに

この例は分割されており、制御アルゴリズムのコードを生成できるほか、シミュレーション テスト ベンチを使用して制御アルゴリズムの動作を確認できるようになっています。シミュレーション テスト ベンチ モデル hdlcoderFocCurrentTestBench.slx を実行するには Simscape (TM) Electrical (TM) が必要ですが、制御アルゴリズム モデル hdlcoderFocCurrentFixptHdl.slx からのコード生成には必要ありません。

シミュレーションによる動作の確認

この例では、FOC を使用して相電流を調整し、電気機械のトルクを制御します。テスト ベンチをシミュレートしてシステムの動作を調査できます。シミュレーション中に、角速度負荷が突然変動すると、ソルバーによってゼロクロッシングに関連する警告が生成される場合があります。シミュレーション中はこのような警告を無効にできます。

hasSimPowerSystems = license ('test', 'Power_System_Blocks');
if hasSimPowerSystems
   open_system('hdlcoderFocCurrentTestBench')
   set_param('hdlcoderFocCurrentTestBench','IgnoredZcDiagnostic','none');
   sim('hdlcoderFocCurrentTestBench')
   set_param('hdlcoderFocCurrentTestBench','IgnoredZcDiagnostic','warn');
end

1 アンペアのステップ電流指令が要求され、負荷角速度がロックされた回転子 (0)、+100 ラジアン/秒、-100 ラジアン/秒の範囲で変動していることがスコープによって示されます。電流指令は、非突極 PMSM に対する無効電流指令を表します (コントローラーによって直流が 0 に調整されます)。このモーターとコントローラーの場合、電磁トルクがモーターの測定された無効電流に厳密に追従していることに注目してください。

プラント仕様の検査

Motor_And_Load サブシステムには、制御対象のコンポーネントの数学モデルが示されます。インバーターの平均モデルを使用して、角速度負荷に接続されている PMSM の定数パラメーター dq 電圧方程式モデルが駆動されます。

if hasSimPowerSystems
   open_system('hdlcoderFocCurrentTestBench/Motor_And_Load')
end

制御アルゴリズム仕様の検査

FOC 電流制御アルゴリズムは別のモデルで指定されています。制御アルゴリズムでは、Clarke 変換と Park 変換を使用して、機械の電気方程式が三相静止基準座標系から二相回転基準座標系に投影されます。これにより、時間と位置の依存関係が排除されるため、制御が簡略化されます。空間ベクトル変調により、コントローラーは、逆 Clarke 変換の正弦波出力のみを使用する場合よりも相間電圧を向上できます。

load_system('hdlcoderFocCurrentFixptHdl');
open_system('hdlcoderFocCurrentFixptHdl/FOC_Current_Control')

データ仕様の検査

コントローラーとプラント (つまりモーターと負荷) の両方が MATLAB ワークスペースのデータを参照します。データ定義ファイルはこのデータを作成し、自動的にシステム テスト ベンチ モデルの PreLoadFcn コールバック内で実行されます。

%edit('hdlcoderFocCurrentFixptHdlData.m')
%

このファイルを確認すると、パラメーター paramCurrentControlP および paramCurrentControlI が Simulink.Parameters として指定されており、そのストレージ クラスが ExportedGlobal に設定されていることがわかります。これにより、定数値ではなくこれらのパラメーターのエンティティ端子を生成するように HDL Coder に指示します。

制御アルゴリズムの HDL コードの生成

HDL コードを生成する前に、モデルが HDL コード生成に関する特定の重要な設定に従っていることを確認することが重要です。主要手順のいくつかを以下に示します。

  • DUT サブシステムの作成: HDL コード生成では、HDL コードを生成する DUT (テスト対象設計) サブシステムを常に作成することをお勧めします。このサブシステムは、HDL 最適化設定のためのプレースホルダーとなるなど、いくつかの目的を果たします。

  • HDL の設定: HDL コード生成の準備を完了するには、特定のソルバー設定とモデル設定を適用しなければなりません。これらすべての設定を処理するhdlsetupコマンドを HDL コード生成の前に実行しなければなりません。

  • サンプル時間のチェック: HDL 最適化を適用するには、すべてのブロックのサンプル時間が離散と推定されなければなりません。注意すべき主なブロック タイプは、既定で 'inf' サンプル時間を派生させる定数です。このようなブロックを見つけて、そのサンプル時間を明示的に -1 に設定すると、逆伝播された正しいサンプル時間が得られます。

% You can generate and review the HDL code for the controller.
makehdl('hdlcoderFocCurrentFixptHdl/FOC_Current_Control');
### Generating HDL for 'hdlcoderFocCurrentFixptHdl/FOC_Current_Control'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoderFocCurrentFixptHdl', { 'HDL Code Generation' } )">hdlcoderFocCurrentFixptHdl</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoderFocCurrentFixptHdl'.
### Begin compilation of the model 'hdlcoderFocCurrentFixptHdl'...
### Begin compilation of the model 'hdlcoderFocCurrentFixptHdl'...
### Working on the model 'hdlcoderFocCurrentFixptHdl'...
### Working on... <a href="matlab:configset.internal.open('hdlcoderFocCurrentFixptHdl', 'GenerateModel')">GenerateModel</a>
### Begin model generation 'gm_hdlcoderFocCurrentFixptHdl' ....
### Rendering DUT with optimization related changes (IO, Area, Pipelining)...
### Model generation complete.
### Generating new validation model: <a href="matlab:open_system('hdlsrc/hdlcoderFocCurrentFixptHdl/gm_hdlcoderFocCurrentFixptHdl_vnl')">gm_hdlcoderFocCurrentFixptHdl_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoderFocCurrentFixptHdl'.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Clarke_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Clarke_Transform.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control/D_Current_Control/Saturate_Output as hdlsrc/hdlcoderFocCurrentFixptHdl/Saturate_Output.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control/D_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/D_Current_Control.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/DQ_Current_Control.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Inverse_Clarke_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Inverse_Clarke_Transform.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Inverse_Park_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Inverse_Park_Transform.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Park_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Park_Transform.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Sine_Cosine/Sine_Cosine_LUT as hdlsrc/hdlcoderFocCurrentFixptHdl/Sine_Cosine_LUT.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Sine_Cosine as hdlsrc/hdlcoderFocCurrentFixptHdl/Sine_Cosine.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Space_Vector_Modulation as hdlsrc/hdlcoderFocCurrentFixptHdl/Space_Vector_Modulation.vhd.
### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control.vhd.
### Generating package file hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control_pkg.vhd.
### Code Generation for 'hdlcoderFocCurrentFixptHdl' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/home/amoses/Documents/MATLAB/ExampleManager/amoses.Bdoc23b.j2313133.field_example/hdlcoder-ex38994846/hdlsrc/hdlcoderFocCurrentFixptHdl/html/hdlcoderFocCurrentFixptHdl_codegen_rpt.html')">hdlcoderFocCurrentFixptHdl_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///home/amoses/Documents/MATLAB/ExampleManager/amoses.Bdoc23b.j2313133.field_example/hdlcoder-ex38994846/hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control_report.html
### HDL check for 'hdlcoderFocCurrentFixptHdl' complete with 0 errors, 1 warnings, and 0 messages.
### HDL code generation complete.

生成された hdlcoderFocCurrentFixptHdl.vhd ファイルで、エンティティに paramCurrentControlP および paramCurrentControlI の端子があることに注目してください。