STM32G4xx ベースのプロセッサを使用したホール センサーによる PMSM のベクトル制御
この例では、三相永久磁石同期モーター (PMSM) の速度を制御するためのベクトル制御 (FOC) 手法を実装します。この FOC アルゴリズムには回転子の位置フィードバックが必要であり、それをホール センサーで取得します。
閉ループ FOC アルゴリズムを使用して三相 PMSM の速度とトルクが制御されます。
この例では、Embedded Coder® Support Package for STMicroelectronics® STM32 Processors の STM32G4xx ベースの周辺装置ブロックと Motor Control Blockset™ の MCB ライブラリ ブロックを使用します。
ホール センサーを使用して回転子の位置を測定します。ホール効果センサーは、適用される磁場の強さに基づいて出力電圧を変えます。
PMSM は電気的に 120 度ずつ離れた 3 つのホール センサーで構成されています。この設定の PMSM では、6 つの有効なバイナリ状態の組み合わせ (たとえば 001、010、011、100、101、110) を提供できます。
センサーは 60 度の倍数で回転子の角度位置を提供し、コントローラーはそれを使用して角速度を計算します。
その後、コントローラーは角速度を使用して回転子の正確な角度位置を計算できます。
必要なハードウェア
この例では次のハードウェアが必要です。
Nucleo-STM32G431RB ボード。
X-NUCLEO-IHM07M1 または X-NUCLEO-IHM16M1 ドライバー拡張ボード。
BLY172S-24V-4000 - ブラシレス DC モーター
ハードウェアの接続
X-Nucleo-IHM16M1 インバーター ボードの接続を次に示します。
利用可能なモデル
この例には次のモデルが含まれています。
ターゲット モデルはコード生成とシミュレーションの両方に使用できます。
ホスト モデルはシミュレーションとして実行され、モーターを制御するためにターゲット ハードウェアと通信します。Simulink モデルは open_system
コマンドを使用して開くことができます。以下に例を示します。
open_system('STM32_HallFOC_Target');
前提条件
モデルをハードウェアに展開する前に、次のタスクを完了します。
STM32MotorControlData スクリプトでターゲット ハードウェア デバイスの COM ポートを更新します。このスクリプトには、[Edit hardware parameters] ボタンからアクセスできます。
モーター パラメーターを取得します。既定のモーター パラメーターが設定されており、それらをモーターのデータシートまたは他のソースから得られる値に置き換えることができます。ただし、モーター制御ハードウェアがある場合は、使用するモーターのパラメーターを Motor Control Blockset のパラメーター推定ツールを使用して推定できます。詳細については、Estimate PMSM Parameters Using Custom Hardware (Motor Control Blockset)を参照してください。
モーター パラメーターをデータシートまたは他のソースから取得する場合は、Simulink® モデルに関連付けられたモデル初期化スクリプトでモーターのパラメーターとインバーターのパラメーターを更新します。このスクリプトに迅速にアクセスするには、モデルで [Edit motor and algorithm parameters] ボタンをクリックします。
モデル初期化スクリプトでホールのオフセット値を更新します。ホールのオフセットが不明な場合は、まずホール オフセット計算モデルを実行します。キャリブレーションの完了後に、計算されたオフセットがホスト モデルで表示されます。計算された値をスクリプトの
pmsm.PositionOffset
変数で更新する必要があります。詳細については、Hall Offset Calibration for PMSM with STM32 Processorsを参照してください。
次のコマンドを使用してオフセット計算ターゲット モデルを開くことができます。
open_system('STM32_HallOffset_Target');
モデルの構成
1. STM32_HallFOC_Target モデルを開きます。このモデルは "STM32G4 xx ベース" のハードウェア用に構成されています。
2. 他の STM32 ベースのボードでモデルを実行するには、まず "Ctrl+E" を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。次に、[ハードウェア実行]、[ハードウェア ボード] に移動して、必要なハードウェア ボードを選択します。
3. [ビルド オプション] に移動し、[参照] をクリックして STM32CubeMX プロジェクト ファイルを選択します。
周辺装置の構成
STM32CubeMX の構成
ADC の構成
ADC インジェクト グループ変換がタイマー 1 の更新イベントに基づいて開始されるように ADC と PWM の同期が行われます。
ADC は、インジェクト変換からの電流と電圧のフィードバック、およびレギュラー変換からの Vdc を読み取るように構成されています。
PWM の構成
PWM 周波数と PWM チャネルが構成されています。
Timer1
は、ADC を PWM と同期するための更新イベントを生成するように構成されています。この同期は適切なタイミングで電流フィードバックを読み取るうえで重要です。反復カウンターは、更新イベントが周期ごとに必ず 1 回発生するように 1 に設定されています。
カウンターの周期は、STM32MotorControlData スクリプトの
PWM_Frequency
変数に提供される値に基づいて、モデル内の周辺装置ブロックを使用して更新されます。
ホール センサー インターフェイス
Timer2
は [XOR ON/Hall Sensor Mode] で構成されています。このタイマーにより、ホールの状態の遷移時間に関する情報が得られます。この目的には 32 ビット タイマーを使用するのが理想的です。16 ビット タイマーはホールの遷移が発生する前にオーバーフローする可能性があるためです。その結果、取得データが不正確になります。これは、モーターが低い速度で動作しているときに顕著になります。
GPIO ピンとのインターフェイスに使用するピンについて、出力速度が高くなるように構成します。
シリアル構成
ホストとターゲットのシリアル通信には LPUART モジュールを使用します。STM32CubeMX で設定されているボー レートが STM32MotorControlData.m
スクリプトの target.SCI_baud_rate
変数と一致していることを確認します。
周辺装置ブロックの構成
ブロックをダブルクリックしてブロック パラメーターの構成を開きます。この例を別のハードウェア ボードで実行する場合は、指定されたパラメーターの値が同じであることを確認してください。
Analog to Digital Converter ブロックの構成
この例のアルゴリズムでは非同期スケジューリングを使用しています。パルス幅変調 (PWM) ブロックによって ADC 変換がトリガーされます。ADC 変換の終了時に、FOC アルゴリズムをトリガーする割り込みがポストされます。
PWM Output ブロックの構成
タイマーのカウンターがオーバーフローしたときにイベントを更新するために、[Set the repetition counter after counter is enabled] パラメーターを選択します。
Timer Capture ブロックの構成
このアルゴリズムでは、ホール センサーとのインターフェイスに Timer2
を使用します。ホールの状態に変化が生じると、キャプチャ コンペア 1 割り込みが生成されます。遷移時のタイマーのカウントがタイマー 2 のキャプチャ コンペア 1 レジスタに格納されます。キャプチャ コンペア 1 割り込みが有効になっていることを確認してください。
UART/USART Read ブロックと UART/USART Write ブロックの構成
ホスト モデルとの通信用に LPUART1 モジュールが構成されています。別の USART モジュール (シリアル通信用の外部 FTDI など) を使用する場合は、モデル内の USART ブロックを適宜更新します。
STM32CubeMX のボー レートを STM32MotorControlData.m
スクリプトで設定します。COM ポートも更新します。以下に例を示します。
モデルのシミュレーション
この例はシミュレーションをサポートしています。次の手順に従ってモデルをシミュレートします。
1. この例に含まれている STM32_HallFOC_Target を開きます。
2. モデルをシミュレートするには、[シミュレーション] タブの [実行] をクリックします。
3. シミュレーション結果を表示して解析するには、[シミュレーション] タブの [データ インスペクター] をクリックします。
コードを生成し、ターゲット ハードウェアに展開して実行
このセクションでは、コードを生成し、ターゲット ハードウェアで FOC アルゴリズムを実行する手順を示します。
この例ではホストとターゲット モデルを使用します。ホスト モデルはコントローラー ハードウェア ボードへのユーザー インターフェイスです。ホスト モデルはホスト コンピューターで実行できます。ホスト モデルを使用するための前提条件として、コントローラー ハードウェア ボードにターゲット モデルを展開します。ホスト モデルは、シリアル通信を使用してターゲット Simulink® モデルに指令を送り、閉ループ制御でモーターを駆動します。
コードの生成とターゲット ハードウェアでのモデルの実行
モデルをシミュレートし、シミュレーション結果を確認します。
ハードウェアの接続を完了します。
モーターのパラメーターとホールのオフセット値が更新されていることを確認します。詳細については、Hall Offset Calibration for PMSM with STM32 Processorsを参照してください。
アナログ デジタル コンバーター (ADC) または電流のオフセット値がモデルで自動的に計算されます。この機能を無効にするには (既定では有効)、モデル初期化スクリプトで
inverter.ADCOffsetCalibEnable
変数の値を 0 に更新します。あるいは、ADC のオフセット値を計算し、モデル初期化スクリプトで値を手動で更新できます。手順については、STM32 プロセッサ ベースのボードを使用した三相 AC モーターの開ループ制御を参照してください。ターゲット モデルを開いて目的のインバーター ボードを選択します。
[ハードウェア] タブの [ビルド、展開、起動] をクリックして、モデルをハードウェアに展開します。
ターゲット モデルで、ホスト モデルのボタンをクリックしてホスト モデルを開きます。
ホスト モデルとターゲット モデルの間のシリアル通信の詳細については、Host-Target Communication を参照してください。
8. ターゲット モデルに関連付けられているモデル初期化スクリプトで、変数 "target.comport" を使用して通信ポートを指定します。この例では、この変数を使用して、ホスト モデルで使用可能な Host Serial Setup、Host Serial Receive、および Host Serial Transmit の各ブロックの [Port] パラメーターを更新します。
9. ホスト モデルで指令速度の値を更新します。
10. [シミュレーション] タブの [実行] をクリックして、ホスト モデルを実行します。
11. "モーターの始動と停止のスイッチ" を "オン" の位置に切り替えて、モーターの運転を開始します。
メモ: この例をハードウェアで実行するときに低い指令速度を使用すると、既知の問題により、PMSM が低い指令速度に追従しないことがあります。
12. ホスト モデルの時間スコープで RX サブシステムからのデバッグ信号を観測します。