Main Content

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

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

この例では、モーター制御アルゴリズムから C コードを生成し、コンパイルした動作と実行時間を確認するための基本ワークフローと主要な API に示します。プロセッサインザループ (PIL) シミュレーションを使用して、C コードをモーター ハードウェアとやりとりする組み込みソフトウェアに統合したときに予期したとおりに動作することを確認します。このワークフローでは特定のプロセッサ向けのモーター制御アプリケーションを使用しますが、このワークフローは他のアプリケーションおよびプロセッサにも適用できます。

例では、永久磁石同期機のベクトル制御アルゴリズムを使用します。この制御テクニックは、ハイブリッド電気自動車向けのモーター駆動システム、製造機器、産業オートメーションに共通しています。

概要

この例では、制御アルゴリズム モデルから C コードを生成して検証します。これをモーター ハードウェアとのインターフェイスに必要な追加の組み込みソフトウェアに統合できます。

シミュレーション環境を使用して、閉ループ モーター制御システムの動作をモデル化し、検証します。制御システムの動作が仕様に従った状態になったら、コントローラー モデルから C コードを生成します。コードを検査した後、その機能的動作と実行時間をプロセッサインザループ (PIL) テストを使用して評価します。

PIL テストを容易にするため、コントローラー モデルを実行してリファレンス出力を確立するためのテスト信号を選択します。シリアル接続で開発用コンピューター上の Simulink® と通信する Texas Instruments™ F28335 プロセッサの PIL 実装の例を確認します。このサンプルを開始点として、独自のプロセッサ向けに PIL 実装を作成します。実行時間を測定し、組み込みプロセッサ上で実行するコードの実行動作をシミュレーション リファレンス出力に照らして検証するには、コントローラー モデルを PIL モードで実行します。

組み込みプロセッサへの最終実装では、生成されたコントローラー C コードを、周辺装置や割り込みなど、モーター ハードウェアとのインターフェイスに必要な追加の組み込みソフトウェアと統合します。

メモ:

  • 「システム シミュレーションによる動作の確認」のセクションでは、システム シミュレーションに Simscape™ Electrical™ が必要です。その他のタスクでは不要です。

  • Texas Instruments F28335 PIL 実装は参考のために示した方法で、他のプロセッサにも適用できます。ただし、この実装を直接使用するには、Texas Instruments の追加のサポート ファイル、コンパイラ、ツールが必要になります。詳細については、この例の「PIL 実装の作成と Simulink での登録」を参照してください。参考用の PIL 実装に Embedded Coder® の Texas Instruments C2000™ 組み込みターゲット機能は不要ですが、C2000 ユーザーにはアドオン エクスプローラーを使用して Texas Instruments C2000 サポート パッケージをインストールすることをお勧めします。

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

このセクションでは、コントローラーを閉ループ システム シミュレーションで検証します。

システム モデル テスト ベンチは、テスト入力、組み込みプロセッサ、電力用電子部品、モーター ハードウェア、可視化で構成されています。システム モデルを使用してコントローラーを実行し、予期された動作を調査できます。次のコマンドを使用してモデルを実行して、記録された信号をプロットできます。

open_system('PMSMSystem');
out_system = sim('PMSMSystem');
pmsmfoc_plotsignals(out_system.logsout);

プロットは、motor_on 信号が true になるまでモーターが定常状態であることを示します。既知の位置が検出されるまでモーターは開ループで回転します。これはエンコーダー インデックス パルスで示されます。コントローラーは閉ループ動作に遷移し、モーターは定常状態の速度に達します。

モデル アーキテクチャの検査

このセクションでは、データの指定方法、コントローラーがテスト ベンチから区分される方法、コントローラーのスケジュール方法など、モデル アーキテクチャを説明します。このアーキテクチャでは、システム シミュレーション、アルゴリズム コード生成、PIL テストを使用します。

データ定義ファイルはシミュレーションとコード生成に必要な MATLAB® データを作成します。システム テスト ベンチ モデルの PreLoadFcn コールバックにより、データ定義ファイルが自動的に実行されます。

edit('pmsmfoc_data.m')

システム テスト ベンチ モデル内で、組み込みプロセッサは周辺装置とコントローラー ソフトウェアの組み合わせとしてモデル化されます。

open_system('PMSMSystem/Embedded Processor');

コントローラー ソフトウェアは分離したモデルとして指定されます。このモデル内で、Mode_Scheduler サブシステムは Stateflow® を使用して Motor_Control アルゴリズムの各種動作モードをスケジュールします。

open_system('PMSMController');

Motor_Control サブシステム内で、センサー信号はエンジニアリング ユニットに変換され、コア コントローラー アルゴリズムに渡されます。コントローラー アルゴリズムは電圧を計算します。電圧はドライバー信号に変換されます。

open_system('PMSMController/Motor_Control');

第一制御則は、ベクトル コントローラーです。コントローラーには、速度を制御する遅いレートの外部ループと、電流を制御する速いレートの内部ループがあります。

open_system('PMSMController/Motor_Control/Field_Oriented_Controller');

Velocity Controller 外部ループは、Current Control ループ時間の倍数として実行されます。これらのサンプル時間を指定する MATLAB 変数を表示できます。

fprintf('High rate sample time = %f seconds\n', ctrlConst.TsHi)
fprintf('Low rate sample time  = %f seconds\n', ctrlConst.TsLo)
High rate sample time = 0.000040 seconds
Low rate sample time  = 0.005000 seconds

コントローラー アルゴリズムの最高レートは 25 kHz です。

fprintf('High rate frequency = %5.0f Hz\n', 1/ctrlConst.TsHi)
High rate frequency = 25000 Hz

組み込みアプリケーションに統合するコントローラー C コードの生成

このセクションでは、コントローラーの C コード関数を生成して、可視化して検査します。

統合を簡単にするため、コントローラー モデルをシングルタスク モードで設定し、生成されたコードを 1 つの関数呼び出しで呼び出せるようにします。この関数は、遅いレートと速いレートを処理します。生成されたコントローラー関数は、速いレートのサンプル時間で実行されなければなりません。

関数プロトタイプはモデル コンフィギュレーション パラメーターで指定され、入力ポートおよび出力ポートは引数として渡されます。コントローラー アルゴリズムの関数仕様を表示できます。

mdlFcn = RTW.getFunctionSpecification('PMSMController');
disp(mdlFcn.getPreview('init'))
disp(mdlFcn.getPreview('step'))
Controller_Init ( )
error = Controller ( motor_on, command_type, current_request, * sensors, * pwm_compare )

生成されたコードのグローバル構造体を使用して、ベクトル コントローラーの比例ゲインおよび積分ゲインにアクセスできます。グローバル構造体はデータ定義ファイルで指定されます。

disp(ctrlParams.Value)
disp(ctrlParams.CoderInfo)
                            Current_P: 10
                            Current_I: 10000
                           Velocity_P: 0.0050
                           Velocity_I: 0.0150
                           Position_P: 0.1000
                           Position_I: 0.6000
                  StartupAcceleration: 1
                       StartupCurrent: 0.2000
                   RampToStopVelocity: 20
             AdcZeroOffsetDriverUnits: 2.2522e+03
                 AdcDriverUnitsToAmps: 0.0049
    EncoderToMechanicalZeroOffsetRads: 0
                        PmsmPolePairs: 4

Simulink.CoderInfo
    StorageClass: 'ExportedGlobal'
      Identifier: ''
       Alignment: -1

モデルから C コードを生成します。

slbuild('PMSMController');
### Starting build procedure for: PMSMController
### Successful completion of build procedure for: PMSMController

Build Summary

Top model targets built:

Model           Action                        Rebuild Reason                                    
================================================================================================
PMSMController  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 29.573s

生成されたレポートを使用して、生成された C コード ファイルを検証し、正しいステップおよび初期化関数が生成されていることを確認します。また、パラメーター構造体がグローバル変数として作成されていることを確認します。

コントローラー モデルのリファレンス動作の指定

このセクションでは、テスト入力とリファレンス出力を指定して、動作を検証し、PIL テスト中の実行時間をプロファイルします。

コントローラー モデルのローカル コピーを作成し、コントローラー内で異なるモードを実行する一連のテスト入力信号を読み込みます。コントローラー モデルを構成して、記録された信号を入力ポートに付加します。次に、コントローラー モデルを実行し、出力ポート信号をワークスペースに記録します。

リファレンス動作とテスト環境を指定するコントローラー モデルのコンフィギュレーション パラメーターは、以下に示すように変更されます。コントローラー モデルの設計を指定し、量産コードを生成するブロックおよびパラメーターは、変更されません。ただし、インストールしたコントローラー モデルを一切変更しないようにするため、モデルを保存して名前を PMSMControllerLocal.slx に変更します。

save_system('PMSMController','PMSMControllerLocal.slx')
close_system('PMSMSystem',0);
close_system('PMSMController',0);

実行時間をプロファイルするため、コントローラー内の該当するパスを実行する一連のテスト入力を選択します。このテスト入力とリファレンス出力を獲得する 1 つの方法は、システム シミュレーション モデルからログに記録することです。

in.motor_on      = out_system.logsout.getElement('motor_on').Values;
in.command_type  = out_system.logsout.getElement('command_type').Values;
in.command_value = out_system.logsout.getElement('command_value').Values;
in.sensors       = out_system.logsout.getElement('sensors').Values;
disp(in)
         motor_on: [1×1 timeseries]
     command_type: [1×1 timeseries]
    command_value: [1×1 timeseries]
          sensors: [1×1 struct]

信号を入力ポートに付加し、その信号をコントローラー モデルにインポートして、システム モデルとは独立して直接実行されるようにすることができます。このアプローチの利点は、コントローラー モデルをスタンドアロンのコンポーネントとしてテストと検証を行い、再利用とその他のシステム モデルまたは閉ループ テスト ベンチとの統合を可能にできることです。コントローラー モデルをテスト用に詳細化または準備するには、そのコンフィギュレーション パラメーターを変更して入力信号とログ信号を MATLAB ワークスペースに付加します。[コンフィギュレーション パラメーター] ダイアログ ボックスを使用するか、次に示すようにプログラムにより、変更を加えることができます。

set_param('PMSMControllerLocal',...
    'LoadExternalInput', 'on',...
    'ExternalInput', 'in.motor_on, in.command_type, in.command_value, in.sensors',...
    'StopTime','0.06',...
    'ZeroInternalMemoryAtStartup','on',...
    'SimulationMode', 'normal')
save_system('PMSMControllerLocal.slx')

コントローラー モデルを実行して、PWM Compare 出力ポートと関連付けられた信号をプロットできるようになります。

out = sim('PMSMControllerLocal');
controller_mode = out.logsout.getElement('controller_mode').Values;
pwm_compare_ref = out.logsout.getElement('pwm_compare').Values;
pmsmfoc_plotpwmcompare(controller_mode, pwm_compare_ref)

ログに記録された出力を、PIL テストのリファレンス動作として使用します。

プロットには、各タイム ステップでのコントローラーのモードについての情報が注釈として付けられます。このモード情報は、実行プロファイリング情報を解釈する際に役に立ちます。

PIL 実装の作成

このセクションでは、PIL 実装の例を使用して学びます。Embedded Coder の必要なヘルプ ドキュメンテーションを確認することから始めます。次に、PIL 実装の例をローカル フォルダーにコピーして、実装を Simulink で登録します。PIL 実装の開発に使用したアプローチを確認して、関連するファイルを調査して追加の情報を得ます。Spectrum Digital Inc. eZdsp F28335 ボードと Code Composer v4 およびシリアル接続を使用している場合、PIL 実装がコントローラー モデルと動作するように構成できます。別のプロセッサを使用している場合は、PIL 実装を実装用の開始点として使用できます。

カスタム PIL 実装の作成の基礎は、Create PIL Target Connectivity Configuration for Simulinkに記載されています。rtiostream API の使用の概念に習熟して、PIL テスト中に Simulink (ホスト側) と組み込みプロセッサ (ターゲット側) との通信を利用します。Embedded Coder は、既定の TCP/IP 実装のホスト側ドライバー (Simulink でサポートされるすべてのプラットフォーム用) と、シリアル通信用の Windows® 専用バージョンのドライバーを提供することに注意してください。makefile を使用して、生成されたコードをビルドします。テンプレート makefile のカスタマイズを参照してください。PIL 実装を作成するには、ターゲット側通信ドライバーの作成、生成されたコードをビルドするための makefile の作成、ビルドした実行可能ファイルのダウンロードと実行の自動化など、組み込み環境でいくつかのタスクを実行する必要があります。

このアプローチを使用して作成された PIL 実装は、Spectrum Digital Inc. eZdsp F28335 ボード用に利用できます。実装には、次のターゲット接続 API コンポーネントが含まれます。

  • ホスト側通信 - ホスト側の接続ドライバーは、シリアル通信を使用するように設定されます。

  • ターゲット側通信 - ターゲット側通信は、手書きの関数 rtiostream のシリアル実装と、タイマー アクセス関数を使用して達成されます。

  • ビルド プロセス - makefile ベースのアプローチを使用して、実行可能なアプリケーションを作成します。

  • 起動ツール - 実行可能ファイルのダウンロードと実行は、Code Composer Studio™ v4 (CCSv4) の Debug Server Scripting (DSS) ユーティリティを使用して行われます。

PIL 実行は 3 段階で再帰的に開発されています。PIL 実装を開発する際は、同様のアプローチを使用できます。

ステージ 1: CCSv4 でシリアル通信アプリケーションを作成する

  • CCSv4 をインストールして、F28335 eZdsp ボードと接続できることを確認します。

  • シリアル データを送受信する組み込みアプリケーションを作成します。

  • 開発用コンピューターと組み込みアプリケーション間でシリアル通信をテストします。

  • コンパイラ、リンカー、アーカイバーのコマンドとオプションを特定して、makefile を使用してアプリケーションをビルドします。

  • DSS ユーティリティを使用して、Windows コマンド プロンプトからアプリケーションをダウンロードして実行します。

ステージ 2: 組み込みシリアル rtiostream を実装してテストし、MATLAB で自動化を開始する

  • シリアル アプリケーションを拡張して、データのエコーに rtiostream API 関数を実装します。rtIOStreamOpen を作成して、シリアル ポートの設定などの汎用ボード初期化を実行します。

  • 関数 rtiostream_wrapper を使用して、MATLAB から組み込みプロセッサとのシリアル データの送受信を検証します。

  • DSS ユーティリティを呼び出すシステム コマンドを使用して、MATLAB からアプリケーションをダウンロードして実行します。

ステージ 3: Simulink との接続構成を実装してテストする

  • 接続構成クラスを作成して、ホスト側シリアル通信を構成し、ビルド プロセスに含める必要がある rtiostream アプリケーションのターゲット側コード ファイルを指定し、プロファイリング データの収集に使用されるタイマーへのアクセス方法を指定し、組み込みアプリケーションを起動する DSS ユーティリティの呼び出しを統合します。

  • コンパイラ、リンカー、アーカイバーのコマンドとオプションを指定する、ツール仕様 makefile (target_tools.mk) を作成します。この makefile はテンプレート makefile (target_tools.mk) に含まれています。

  • target_tools.mk を含むテンプレート makefile (ec_target.tmf) を作成します。

  • インストールに依存するパラメーターを特定して、MATLAB 基本設定として保存します。

  • PIL 実装が有効な場合を指定する Simulink カスタマイズ ファイルを作成します。

PIL 実装に関連付けられたファイルは Embedded Coder に付属していますが、MATLAB パスにはありません。ファイルを確認するため、これをローカル フォルダーにコピーできます。フォルダーを MATLAB パスに追加して Simulink カスタマイズを更新することで、PIL 実装を登録できます。

addpath(genpath(fullfile('.','examplePilF28335')))
sl_refresh_customizations

MATLAB 基本設定を使用して、パス情報とホスト シリアル COM ポート番号を指定します。PIL 実装を直接使用している場合、これらの基本設定をコンフィギュレーションに適切に指定しなければなりません。

setpref('examplePilF28335','examplePilF28335Dir', fullfile('.','examplePilF28335'));
setpref('examplePilF28335','CCSRootDir',          'C:\Program Files\Texas Instruments\ccsv4');
setpref('examplePilF28335','TI_F28xxx_SysSWDir',  'C:\Program Files\Texas Instruments\TI_F28xxx_SysSW');
setpref('examplePilF28335','targetConfigFile',    fullfile('.','examplePilF28335','f28335_ezdsp.ccxml'));
setpref('examplePilF28335','baudRate',            115200);
setpref('examplePilF28335','cpuClockRateMHz',     150);
setpref('examplePilF28335','boardConfigPLL',      10);
setpref('examplePilF28335','COMPort',             'COM4');

TI_F28xxx_SysSWDir 基本設定は Texas Instruments が指定する "C2000 Experimenter Kit Application Software" (sprc675.zip) 内のフォルダーを参照することに注意してください。これらのファイルは Embedded Coder には付属していません。

PIL 実装を使用する準備ができました。

PIL テスト向けのコントローラー モデルの準備

PIL 実装の登録に使用したカスタマイズ ファイルを確認して、PIL 実装を使用するようにモデルのコンフィギュレーション パラメーターを設定し、コントローラー出力と実行プロファイリング データのログ記録を有効にします。

PIL シミュレーションを開始する場合、Simulink は登録済み PIL 実装が有効かどうかを確認します。カスタマイズ ファイルは、有効な PIL 実装に対応するコンフィギュレーション パラメーターを指定します。次のコマンドを呼び出して、実装のカスタマイズ ファイルを確認できます。

edit(fullfile('.','examplePilF28335','sl_customization.m'));

このファイルは、PIL 実装を使用するために必要なハードウェア デバイスとテンプレート makefile の設定を指定することに注意してください。コントローラー モデルのコンフィギュレーション パラメーターを、設定に一致するように変更できます。[コンフィギュレーション パラメーター] ダイアログ ボックスを使用するか、次に示すようにプログラムにより、変更を加えることができます。

set_param('PMSMControllerLocal',...
       'ProdHWDeviceType', 'Texas Instruments->C2000',...
       'TemplateMakefile', 'ec_target.tmf',...
       'GenCodeOnly', 'off',...
       'SimulationMode', 'processor-in-the-loop (pil)')

PIL シミュレーションの場合、コード実行プロファイリングを有効にし、変数 executionProfile に実行時間メトリクスを記録します。

set_param('PMSMControllerLocal',...
    'CodeExecutionProfiling', 'on',...
    'CodeExecutionProfileVariable','executionProfile',...
    'CodeProfilingSaveOptions','AllData');
save_system('PMSMControllerLocal.slx')

これで、コントローラー モデルの PIL シミュレーションを実行できるようになりました。

生成したコードの動作と実行時間のテスト

このセクションでは、コントローラー モデルを PIL モードで実行して、動作と実行プロファイリングの結果を確認します。コンパイルされたコントローラー コードの動作がリファレンス シミュレーション動作と一致することを検証し、コードの実行がタイミング要件を満たすことを確認します。

モデルを実行して PIL シミュレーションの結果をプロットできます。モデルをはじめて実行するとき、Embedded Coder はアルゴリズムのコードを生成し、アルゴリズム コードをシリアル通信インターフェイス コードとリンクし、組み込みアプリケーションをビルドして、アプリケーションをボードにダウンロードし、ターゲット上のシミュレーションを開始します。以降の PIL シミュレーション中は、コードはモデルが変更されたときのみ再生成されることに注意してください。シリアル通信インターフェイスに関連するオーバーヘッドにより、PIL シミュレーションはノーマル モードのシミュレーションより低速で実行されることがあります。

以下の MATLAB コマンドは、ハードウェアとの接続が必要で、前述の組み込み開発ツールを使用するため、意図的にコメントアウトされています。ハードウェアが接続され、組み込み開発ツールがインストールされている場合は、コメントを解除してこれらの行を実行してモデルを実行し、結果をプロットして、動作がノーマル モードのシミュレーションと数値が等しいことを確認します。それ以外の場合は、この節の先を確認しながら PIL 実行分析オプションを理解します。

% UNCOMMENT THE BELOW LINES TO RUN THE SIMULATION AND PLOT THE RESULTS
% if exist('slprj','dir'), rmdir('slprj','s'); end
% out = sim('PMSMControllerLocal')
% pwm_compare_pil = out.logsout.getElement('pwm_compare').Values;
% pmsmfoc_plotpwmcompare_pil(controller_mode, pwm_compare_pil, executionProfile)

上部プロットはコントローラーの出力、PWM Compare です。PIL シミュレーションの出力は、「コントローラー モデルのリファレンス動作の確立」のセクションで示したノーマル モード シミュレーションの出力と似ています。数値が等しいことを確認するには、ノーマル モード シミュレーションの出力を PIL シミュレーションの出力から差し引きます。

% UNCOMMENT THE BELOW LINE TO VERIFY NUMERIC EQUIVALENCE OF THE OUTPUTS
% pilErrorWithRespectToReference = sum(abs(pwm_compare_pil.Data - pwm_compare_pil.Data))
pilErrorWithRespectToReference =
   0     0     0

下部プロットは、各シミュレーション タイム ステップでのコントローラー モデルの実行時間の量です。"スタンバイ" 状態は最も時間がかかりません。コントローラーがマルチレートでシングル タスクであるため、実行時間中に小さい周期的なスパイクが発生します。周期的なスパイクは、基本レートと 5 ミリ秒レートのコードを同じタスクで実行するために必要な時間に対応します。

コントローラーは組み込みプロセッサで 25 kHz で実行されなければならないため、アルゴリズムは 40 マイクロ秒内で実行を完了しなければなりません (その他のコードが要求する追加の時間を差し引きます。最終アプリケーションでも実行される場合があります)。プロファイル結果は、アルゴリズムは組み込み環境のこのコンフィギュレーションに割り当てられた時間内に実行されることを示します。

生成されたコードは検証され、数値が等しい結果が得られ、テスト ケースの実行タイミング要件を満たします。

close_system('PMSMControllerLocal',0);
close_system('power_utile',0);

PIL 実装に使用された MATLAB 基本設定は MATLAB セッション間で維持されます。基本設定を削除するには、次のコマンドを実行します。

rmpref('examplePilF28335');
rmexamplePilF28335hooks();

まとめ

この例では、永久磁石同期機のベクトル制御アルゴリズムを使用して、システム レベルのシミュレーションとアルゴリズム コード生成を使用してコントローラー アルゴリズムの機能的動作を確認する方法を説明しました。また、この例では、組み込みプロセッサのターゲット統合、機能テスト、実行プロファイリングの一般的なアプローチについても説明しました。アルゴリズムが正しく動作するようになったら、コントローラー モデルからコードを生成し、ターゲット プロセッサでコードをテストおよびプロファイルできます。今後のテストのため、検証済みのアルゴリズム コードを、モーター ハードウェアとインターフェイスする組み込みソフトウェアと統合できます。

関連するトピック