Main Content

PMSM のセンサーレス ベクトル制御

この例では、三相永久磁石同期モーター (PMSM) の速度を制御するためのベクトル制御 (FOC) 手法を実装します。FOC の詳細については、ベクトル制御 (FOC)を参照してください。

この例ではセンサーレス位置推定手法を使用します。この例で使用する FOC アルゴリズムでは、スライディング モード オブサーバー、磁束オブザーバー、または拡張 EMF オブザーバーのいずれかを選択して位置フィードバックを推定できます。

Sliding Mode Observer (SMO) ブロックは、測定位置と推定位置の間の誤差に対する滑り運動を生成します。このブロックによる推定値は測定位置に厳密に比例します。このブロックは、固定子の電圧 $({V_\alpha },{V_\beta })$ と電流 $({I_\alpha },{I_\beta })$ を入力として使用してモーター モデルの起電力 (EMF) を推定します。さらに、その EMF を使用して回転子位置と回転子速度を推定します。

Flux Observer ブロックは、同じ入力 $({V_\alpha },{V_\beta },{I_\alpha },{I_\beta })$ を使用して固定子磁束、生成トルク、回転子位置を推定します。

Extended EMF Observer ブロックは、静止 α-β 基準座標系における測定された電圧と電流から PMSM の機械的速度に加えて電気的位置 ${\theta _e}$ (または $\sin {\theta _e}$$\cos {\theta _e}$) を計算します。

検出される回転子位置が必ず正確になるように、モーター ブロックの固定子相抵抗パラメーターと Sliding Mode Observer、Flux Observer、および Extended EMF Observer の各ブロックの固定子抵抗パラメーターにインバーター ボードの抵抗値を追加します。

磁束オブザーバーを使用する場合、この例で PMSM とブラシレス DC (BLDC) モーターの両方を駆動できます。

センサーレス オブザーバーおよびアルゴリズムには、ベース速度を超えるモーターの動作に関して既知の制限があります。センサーレスの例はベース速度までの動作にのみ使用することをお勧めします。

開ループから閉ループへの制御の遷移

閉ループの速度制御を使用してモーターを駆動するには、リアルタイムのモーター位置の正確な推定が必要になります。この例ではセンサーレス オブザーバーを位置測定に使用します。ただし、磁束オブザーバー、スライディング モード オブサーバー、拡張 EMF オブザーバーなどのセンサーレス位置オブザーバーは、回転子位置を正しく推定するためにモーターの電流と電圧の測定可能な値を必要とします。センサーレス位置推定に必要な電流と電圧を生成するには、開ループ制御を使用してモーターを駆動する必要があります。センサーレス オブザーバーで回転子位置が正しく推定されたら、開ループから閉ループへの制御の遷移が可能です。

ただし、この遷移を正しく完了するのは難しいことがあります。モーターのダイナミクスにより、正確な PI コントロール ゲインや他のパラメーターを特定するのが困難な場合があるためです。この例では、この遷移を滑らかに実現するための簡略化された方法を示します。この方法には次の 3 つの段階があります。

  • 開ループ制御を使用してモーターを始動および駆動する。

  • 開ループ上限速度値を使用して閉ループに切り替える。

  • 閉ループ制御を使用して特定の指令速度に追従する。

段階 1: 開ループ制御を使用してモーターを始動および駆動する

この例では、開ループ制御を使用してモーターを始動および駆動します。開ループ制御を使用したモーターの駆動は、"d" 軸電圧 ("Vd") と開ループ上限速度のパラメーターに依存します。この例で使用している "Vd" の既定値は、慣性が高いモーターや摩擦が高いモーターには十分でないことがあります。そのため、"Vd" の下限を上げることをお勧めします。"Vd" の下限を上げるとモーター電流やモータ温度が上昇するため、"Vd" の下限は少しずつ上げることを推奨します。"Vd" の下限を変更するには、変数 MIN_OL_VD_LIMIT (例に関連付けられているモデル初期化スクリプト mcb_pmsm_foc_sensorless_f28069MLaunchPad_datascript または mcb_pmsm_foc_sensorless_f28379d_datascript で使用可能) を使用します。

センサーレス オブザーバーによる回転子位置の追跡が開始されたら、段階 2 に進みます。

段階 2: 開ループ上限速度値を使用して閉ループに切り替える

この段階では、"Vd" に対応する最小電流値 ("Id") を使用してセンサーレス オブザーバーで回転子位置が正しく推定されるかどうかを検証できます。

  • この段階では、まず開ループ上限速度値 (モデル初期化スクリプトで使用可能な変数 MAX_OL_POS_SPD または MAX_OL_NEG_SPD で定義) を使用してモーターを駆動します。

メモ: この例では、MAX_OL_POS_SPDMAX_OL_NEG_SPD の値を調整することで、回転子位置を正しく推定するための十分な電流 ("Id") が確実に生成されるようにすることができます。

  • リアルタイムの回転子位置の値がセンサーレス オブザーバーで正しく計算されているかどうかを確認します。

  • この例では、その後に "d" 軸電流 ("Id")、"q" 軸電流 ("Iq")、および速度の PI コントローラーを初期化して閉ループ ベクトル制御 (FOC) を有効にします。PI コントローラーの初期変数値 ("Iq""Vd"、および "Vq") がモデル初期化スクリプトで設定されていることを確認してください。

この例では、"Iq""Vd"、および "Vq" の既定の初期値をサブシステム State Machine Handler/Compute Control-loop Initial Values を使用して計算します。また、PI 制御ループ内で使用可能な計算された初期値も使用します。

この例では、"Id""Iq"、および速度の PI コントローラーを初めて有効にしたときは、コントローラーの初期値は変わりません。これらの 3 つの PI 制御ループ内で使用可能な積分器は、初期値 ${y_0} = {y_{t - 1}} - {K_p} \times error$ (ここで、${y_{t - 1}}$ は前の値、${K_p}$ はコントローラー ゲイン) を使用します。

  • この例では、次に Stateflow を使用して電流 Id を現在の測定値からゼロまで徐々に下げていきます。

メモ: 閉ループへの遷移後は、回転子位置 (センサーレス オブザーバーで推定)、指令 "Id" 電流 (ゼロに設定)、および指令 "Iq" 電流 (速度制御ループから取得) を直接使用できます。ただし、この方法を使用すると電流が過渡状態になり、センサーレス位置推定器の出力が歪みます。電流の遷移が滑らかになるように、この例では電流 "Id" をゼロまで下げていきます。"Id" 電流を下げるために Stateflow で実行されるレートは、モデル初期化スクリプトで使用可能な変数 RAMP_STEP_SIZE を使用して設定できます。

段階 3: 閉ループ制御を使用して特定の指令速度に追従する

この例では "Id" をゼロまで下げた後、この段階に進み、FOC アルゴリズムを使用して閉ループの特定の指令速度に追従してモーターを駆動します。

メモ: Stateflow では、モーターの方向を変えるために、モーター速度を現在の閉ループ速度から開ループ上限速度に変更して開ループ モードに遷移します。その後、開ループ動作の間にモーターの方向を変更し、再び閉ループ制御に戻って指令速度に追従します。モーターのダイナミクスにかかる追加の時間を使用して、Stateflow で遅延に対応するための調整を加えることができます。

モデル

この例には次のモデルが含まれています。

これらのモデルはシミュレーションとコード生成の両方に使用できます。

それぞれのハードウェア構成に使用できるモデルの名前については、「コードの生成とターゲット ハードウェアへのモデルの展開」セクションの「必要なハードウェア」のトピックを参照してください。

必要な MathWorks 製品

モデルをシミュレートする場合:

1. 対象のモデル: "mcb_pmsm_foc_sensorless_f28069MLaunchPad"

  • Motor Control Blockset™

  • Fixed-Point Designer™

  • Stateflow® (モデル例を変更する場合のみ必要)

2. 対象のモデル: "mcb_pmsm_foc_sensorless_f28379d"

  • Motor Control Blockset™

  • Stateflow (モデル例を変更する場合のみ必要)

コードを生成してモデルを展開する場合:

1. 対象のモデル: "mcb_pmsm_foc_sensorless_f28069MLaunchPad"

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™

  • Stateflow (モデル例を変更する場合のみ必要)

2. 対象のモデル: "mcb_pmsm_foc_sensorless_f28379d"

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™ (コード生成を最適化する場合のみ必要)

  • Stateflow (モデル例を変更する場合のみ必要)

前提条件

1. モーター パラメーターを取得します。Simulink® モデルには既定のモーター パラメーターが設定されており、それらをモーターのデータシートまたは他のソースから得られる値に置き換えることができます。

ただし、モーター制御ハードウェアがある場合は、使用するモーターのパラメーターを Motor Control Blockset のパラメーター推定ツールを使用して推定できます。手順については、Estimate PMSM Parameters Using Recommended Hardwareを参照してください。

パラメーター推定ツールは、推定されたモーター パラメーターで "motorParam" 変数 (MATLAB® ワークスペース内) を更新します。

2. モーター パラメーターをデータシートまたは他のソースから取得する場合は、Simulink® モデルに関連付けられたモデル初期化スクリプトでモーターのパラメーターとインバーターのパラメーターを更新します。手順については、Estimate Control Gains and Use Utility Functionsを参照してください。

パラメーター推定ツールを使用する場合は、インバーターのパラメーターは更新してかまいませんが、モーターのパラメーターはモデル初期化スクリプトで更新しないでください。モーターのパラメーターは、更新された "motorParam" ワークスペース変数からスクリプトで自動的に抽出されます。

Sliding Mode Observer でパラメーター推定ツールを使用して推定されたモーターのパラメーターを使用する場合は、Sliding Mode Observer でパラメーターの調整が必要になります。

モデルのシミュレーション

この例はシミュレーションをサポートしています。次の手順に従ってモデルをシミュレートします。

1. この例に含まれているターゲット モデルを開きます。

2. [Position Estimator] ボタンを使用して、次のいずれかのセンサーレス位置推定手法を選択します。

3. モデルをシミュレートするには、[シミュレーション] タブの [実行] をクリックします。

4. シミュレーション結果を表示して解析するには、[シミュレーション] タブの [データ インスペクター] をクリックします。

コードの生成とターゲット ハードウェアへのモデルの展開

このセクションでは、コードを生成し、ターゲット ハードウェアで FOC アルゴリズムを実行する手順を示します。

この例ではホストとターゲット モデルを使用します。ホスト モデルはコントローラー ハードウェア ボードへのユーザー インターフェイスです。ホスト モデルはホスト コンピューターで実行できます。ホスト モデルを使用するための前提条件として、コントローラー ハードウェア ボードにターゲット モデルを展開します。ホスト モデルは、シリアル通信を使用してターゲット Simulink® モデルに指令を送り、閉ループ制御でモーターを駆動します。

必要なハードウェア

この例では、次のハードウェア構成をサポートしています。ターゲット モデルの名前を使用して、MATLAB® コマンド プロンプトから対応するハードウェア構成のモデルを開くこともできます。

上記のハードウェア構成に関連する接続については、LAUNCHXL-F28069M and LAUNCHXL-F28379D Configurationsを参照してください。

コードの生成とターゲット ハードウェアでのモデルの実行

1. ターゲット モデルをシミュレートし、シミュレーション結果を確認します。

2. ハードウェアの接続を完了します。

3. アナログ デジタル コンバーター (ADC) または電流のオフセット値がモデルで自動的に計算されます。この機能を無効にするには (既定では有効)、モデル初期化スクリプトで変数 inverter.ADCOffsetCalibEnable の値を 0 に更新します。

あるいは、ADC のオフセット値を計算し、モデル初期化スクリプトで値を手動で更新できます。手順については、開ループ制御での三相 AC モーターの駆動と ADC オフセットのキャリブレーションを参照してください。

4. 使用するハードウェア構成のターゲット モデルを開きます。モデルの既定のハードウェア構成設定を変更する場合は、モデル コンフィギュレーション パラメーターを参照してください。

5. LAUNCHXL-F28379D の CPU2 にサンプル プログラムを読み込み、CPU2 が CPU1 用のボード周辺装置を使用するように誤って構成されていないことを確認します。たとえば、CPU2 の青色 LED を GPIO31 を使用して作動するプログラム (c28379D_cpu2_blink.slx) を読み込みます。サンプル プログラムまたはモデルの詳細については、Getting Started with Texas Instruments C2000 Microcontroller Blockset (C2000 Microcontroller Blockset)の「Task 2 - Create, Configure and Run the Model for TI Delfino F28379D LaunchPad (Dual Core)」セクションを参照してください。

6. [Position Estimator] ボタンを使用して、センサーレス位置推定手法を選択します。

7. [ハードウェア] タブの [ビルド、展開、起動] をクリックして、ハードウェアにターゲット モデルを展開します。

8. ターゲット モデルで host model のハイパーリンクをクリックして、関連付けられているホスト モデルを開きます。

ホストとターゲット モデルの間のシリアル通信の詳細については、Host-Target Communicationを参照してください。

9. ターゲット モデルに関連付けられているモデル初期化スクリプトで、変数 target.comport を使用して通信ポートを指定します。この例では、この変数を使用して、ホスト モデルで使用可能な Host Serial Setup、Host Serial Receive、および Host Serial Transmit の各ブロックの [Port] パラメーターを更新します。

10. ホスト モデルで指令速度の値を更新します。

メモ:

  • 必要な指令速度でモーターを駆動 (Sliding Mode Observer、Flux Observer、または Extended EMF Observer のいずれかを使用) する前に、開ループ制御を使用して 0.1 x pmsm.N_base の速度でモーターの運転を開始します。その後、速度を 0.25 x pmsm.N_base に上げて閉ループ制御に遷移します (ここで、pmsm.N_base はモーターのベース速度の MATLAB ワークスペース変数です)。

  • 加速度や減速度が高いと、センサーレス位置計算に影響することがあります。

11. [シミュレーション] タブの [実行] をクリックして、ホスト モデルを実行します。

12. モーターの始動と停止のスイッチをオンの位置に切り替えて、開ループ条件でモーターの運転を開始します (既定ではベース速度の 10% でモーターが回転します)。

メモ: モーターを (この例を使用して) 開ループ条件で長時間駆動しないでください。モーターから高電流が流れて過熱状態になることがあります。

開ループ制御は、ベース速度の 10% 以下の指令速度でモーターを駆動するように設計してあります。

この例をハードウェアで実行するときに低い指令速度を使用すると、既知の問題により、PMSM が低い指令速度に追従しないことがあります。

13. モーターの指令速度をベース速度の 10% を超える値に上げて、制御を開ループから閉ループに切り替えます。

メモ: モーターの回転方向を変えるには、モーターの指令速度をベース速度の 10% よりも小さい値に下げます。これにより、モーターが開ループ条件に戻ります。回転方向は変更しますが、指令速度の振幅は一定のままにします。その後、閉ループ条件に遷移します。

14. ホスト モデルの時間スコープで RX サブシステムからのデバッグ信号を観測します。

メモ:

  • 指令速度や指令トルクが高いと、Sliding Mode Observer ブロックの性能に影響することがあります。

  • F28379D ベースのコントローラーを使用している場合、監視するデバッグ信号を選択することもできます。

その他の試行

SoC Blockset™ を使用して、ADC-PWM 同期、コントローラーの応答、およびさまざまな PWM 設定の調査に関連する課題に対処するセンサーレス閉ループ モーター制御アプリケーションを実装できます。詳細については、Integrate MCU Scheduling and Peripherals in Motor Control Applicationを参照してください。

さらに、SoC Blockset™ を使用して、複数のプロセッサ コアを利用して設計のモジュール化、コントローラーの性能の改善、およびその他の設計目標を達成するセンサーレス リアルタイム モーター制御アプリケーションを開発できます。詳細については、Partition Motor Control for Multiprocessor MCUsを参照してください。