MBDTとカスタム・コードを使用したS32K396用PMSMモータ制御アプリケーション
サンプルの設計には、XS32K396-BGA-DC EVBと3相PMSMプリドライバ・ボード(接続ケーブル付き)を使用しました。
MATLAB Simulinkベースのプロジェクト(s32k396_pmsm_mc_mbdt)は、モデルベース設計ツールボックス(MBDT) を使用して構築されており、S32K3xx用NXPモデルベース設計ツールボックス - バージョン 1.5.0またはそれ以降のリリースからダウンロードできます。
すべてのモデルのファイルとドキュメントについては、添付をご確認ください。
この記事は、S32K396 MCUをターゲットとしたPMSM制御アルゴリズムをSimulink ®環境内でどのように設計できるかを紹介し、デモを示すことを目的としています。この記事で紹介するデモは、S32K3xx用のNXP®モデルベース設計ツールボックス(MBDT)を使用して構築されていますが、ツールボックスの一部ではありません。したがって、MBDT開発環境での完全なテストは行っておらず、ツールボックス内で提供されるアプリケーションで必要となる確認と検証のプロセスも通過していません。この記事で紹介するデモは、MATLAB®およびSimulinkのエコシステムの機能を活用して、NXPのソフトウェアおよびハードウェア製品を使用し、モータ制御アルゴリズムを開発する方法の一例にすぎません。
S32K39は、最大320 MHzで動作するArm® Cortex®-M7ベースのマイクロコントローラーシリーズで、メインCPUをモーター制御タスクから解放するために設計された高度なモーター制御コプロセッサー(eTPU)と高分解能PWMを備えています。次世代のSiCトラクションインバーターの要件を満たし、高効率と低遅延機能を実現するために開発されました。また、S32K39は、車載インバータ、オンボード・チャージャー(OBC)、高性能バッテリ管理システム(BMS)などのアプリケーションに適しています。
NXPモデルベース設計ツールボックス(MBDT)は、MATLABとSimulinkのモデルベースの設計環境に接続して、NXPマイクロコントローラとプロセッサをベースにした実際のターゲット向けの複雑なアルゴリズムの確認、検証、ラピッド・プロトタイピングをサポートする包括的なツールを集約したものです。
MBDTは、Simulinkアプリケーション開発環境からのハードウェア・アクセスを実現するために、システムとペリフェラル・デバイスを制御するリアルタイム・ドライバ(RTD)との統合が可能です。オンボードのペリフェラル、ピン、クロックの構成は、ツールボックス内で提供されるNXPのS32設定ツールやEB Tresosなどの専用構成ツールとの統合機能によって実現されます。MBDTは、MCUのペリフェラルの機能を実装し、特定のドライバの機能に基づいてコードを生成するSimulinkブロックのライブラリを提供します。さらに、MBDTには、モータ制御アルゴリズムの開発を容易にするためのAMMCLIBライブラリが統合されています。MBDTは、ソフトウェア・イン・ザ・ループおよびプロセッサ・イン・ザ・ループ(SILおよびPIL)の開発ワークフローをサポートし、それぞれの開発ステップでの設計、確認、検証を可能にします。また、MBDTはSimulinkモデルからコードを自動生成して展開し、MCUを起動して複雑なアプリケーションを実行します。制御エンジニアや組み込み開発者は、プロジェクトのライフサイクルを短縮できます。
したがって、NXPのモデルベースデザインツールボックスを使用することで、MathWorks® 環境が提供する豊富なソリューションのエコシステムを活用し、ハードウェアに依存せずにモデル化、シミュレーション、検証できる複雑なアルゴリズムを、特定のNXPプラットフォームに対応するハードウェアに適合させることができます。
S32K39は、Arm Cortex-M7ベースのマイクロコントローラ・シリーズです。高度なモータ制御コプロセッサ(eTPU)と高分解能PWMを搭載し、最大320MHzで動作します。次世代のSiCトラクション・インバータの要件を満たし、高効率と低遅延機能を実現するために開発されました。また、S32K39は、車載インバータ、オンボード・チャージャー(OBC)、高性能バッテリー・マネジメント・システム(BMS)などのアプリケーションに適しています。
このデモの目的は、S32K396上でNXP MBDTを使用してモータ制御システムを構築するためのクイック・スタート・ガイドを提供することです。環境設定、モジュール構成、システム初期化、割込み構造、永久磁石同期モータ(PMSM)制御アルゴリズム、FreeMASTER構成が含まれています。
この実現方法の詳細を示したのが下の図です。この図では、S32K396 MCUの既存のハードウェアにPMSMアルゴリズムをマッピングしています。アプリ、アルゴリズム、データ処理のセクションは、Simulinkのライブラリ・ブロック、AMMCLibのブロック、および Simulinkのカスタム・コード機能を使用して実装し、eTPUへのアクセスと制御を扱うeTPUドライバを取り入れることができます。MBDTのセクションは、ツールボックスが提供するブロックで対応し、このようなアプリケーションで必要となるペリフェラルへのハードウェア・アクセスを確保します。MCU、モータ、回路のセクションは、設計に使用されるハードウェア要素を指します。
次の図は、S32K396でのPMSMモータ制御を開発するために使用されるソフトウェアとハードウェアのアプリケーション・マッピングを示しています。
図2.1 S32K396でのPMSMモータ制御の開発に使用されるソフトウェアとハードウェアのアプリケーション・マッピング
Simulinkモデルの中でこの図のようなモデリングを実現するために必要な要素の概要を示したのが次の図です。このシナリオで使用できるソフトウェア・コンポーネントと機能を表しています。これらの詳細については、以降のセクションで説明します。
図2.2 S32K396でのPMSMモータ制御をモデリングするためのソフトウェア・コンポーネント
このデモの目的は、S32K396上でNXP MBDTを使用してモータ制御システムを構築するためのクイック・スタート・ガイドを提供することです。環境設定、モジュール構成、システム初期化、割込み構造、永久磁石同期モータ(PMSM)制御アルゴリズム、FreeMASTER構成が含まれており、以下の機能を示しています。
以下は必要なハードウェアの一覧です。
注:デバッガーLauterbachはMBTDツールに統合されていません。それはコードをデバッグするための手段にすぎません。
セントラル・コントローラEVBボードが制御アルゴリズムを実行し、プリドライバがモータを駆動します。以下の手順に従ってハードウェア・デバイスを接続します。
図 2.3.1 ハードウェアセットアップ
プロジェクトのdocフォルダ内の S32K396_MBDT_BASED_MOTOR_CONTROL_Quick_Start_Guide_0_9_0.pdfを参照してください。
次の図は、メインのSimulinkモデルの概要を示しています。モータ制御アプリケーション・モデルは、初期化と割込みという構造になっています。
図3.1 Simulinkアプリケーションのトップ・モデル
下の図にあるように、Motor Controlサブシステム内では、ADCハードウェア・トリガは無効化され(ステップ1)、PMSM制御アルゴリズムの計算が終了するまで無効化の状態が続き(ステップ2)、計算の終了時に再有効化されます(ステップ3)。生成されたコードの優先順位は、それぞれのSimulinkブロックのプロパティの中にある「Priority」値で設定できます。
図 3.2モーター制御サブシステム
pmsm_mc_algoアルゴリズムはサブシステム参照モデルです。入力センサ信号を収集し、PMSM制御アルゴリズムを実行し、PWMを駆動して出力電圧を生成します。下の図はメイン・ブロックを示しています。
図3.3 PMSMモータ制御アルゴリズム
スタートアップ初期化は、初期化機能ブロックのサブシステムです。アプリケーション起動時にいくつかの基本機能を設定するために使用されます。
図4.1 サブシステムの初期化
この部分では、アナログ・データをキャプチャするためのBCTUモジュールとADCモジュールの設定と使用方法について説明します。BCTUは3相電流測定のために並列ADC変換をトリガーします。すべての測定が完了した後、BCTU FIFO通知を使用して、保存されたADCデータを読み取り、アプリケーションのメイン制御ループを呼び出して、さらなる処理を行います。
次の図は、BCTU FIFO通知コールバック機能の設定を示しています。ADCの結果の保存にはBCTU FIFO 1を使用します。ウォーターマーク値は、通知で設定された関数を呼び出すタイミングを決定します。また、設定でBCTU IRQの有効化が必要です。
図5.1.1 BCTUウォーターマーク通知設定
図5.1.2BCTUの割込み有効化
Simulinkモデルでは、BCTUに設定する通知はHardware Interrupt Callbackブロック内で選択します。これにより、変換終了割込みが発生したときに、接続された関数呼び出しサブシステムが実行されます。
図5.1.3割り込みコールバックサブシステム
このセクションでは、アナログ量の測定、すなわち3相電流とDCバス電圧の測定について説明します。BCTUはハードウェア・トリガを受信して、ADC測定(並列変換)を開始します。すべての結果がFIFOに格納されると、割込みによってメイン制御ループが呼び出されます。モータ制御のメイン・ループの呼び出しにはBCTU FIFO通知が使用されます。したがって、サンプリングが完了した後で結果を使用することになります。サンプリングした値を取得して処理に使用する方法はこのセクションで説明します。次の図は、電流と電圧を実際の物理的な値に変換するための手順と操作を示しています。BCTU FIFOから電流と電圧を取得して処理に使用するには、MBDTライブラリのAdcブロックを使用し、Adc_CtuReadFifoDataを選択します。
図5.2.1 物理値に変換されたデータの処理
現在、インバータ・アプリケーションではソフトウェア・リゾルバが広く使用されており、BOM(部品表)コストの削減に役立ちます。S32K39上のeTPUは、ソフトウェア・パッケージを通じてソフトウェア・リゾルバを実装する機能をお客様に提供しています。1つのeTPUチャネルを使用して、デューティ・サイクルが50%のPWM出力信号を生成し、外部ローパス・フィルタを通過させて、リゾルバ励起信号として使用できます。リゾルバ・ポジション・センサでは、この励起信号は実際のモータ角度のサインとコサインによって変調されます。フィードバックのサイン信号とコサイン信号はSDADCによってサンプリングされ、続くDSPによって処理されます。変換結果はDMAによってeTPU DATA RAMに転送できます。次に、eTPUはリゾルバ出力信号のデジタル・サンプルを処理し、FOCの位置と速度を出力できます。eTPUリゾルバの詳細については、AN13038を参照してください。
図6.1 eTPUリゾルバの図
今のところMBDTではeTPUリゾルバ・ブロックを利用できません。システム出力ブロックを利用して、リゾルバ・データを取得するためのカスタム・コードを挿入します。
リゾルバ・データの取得には、getMotorControlResolver(&mbd_ebt_DW_FOC_one.Resolver_SW)関数を使用します。
図6.1.1 eTPUにアクセスするためのSimulinkカスタム・コード
速度と角度はResolver Angleサブシステムから推定され、低速および高速制御ループに提供されます。最後に、推定された電気角度からサインとコサインの値が計算されます。
図6.1.2 速度と角度の計算
これはモーター制御アプリケーションモデルの重要な部分であり、各状態には関連する機能を処理するための専用ブロックがあります。
図7.1 モータ制御の状態の実装
ステートマシンブロックはモーター制御アプリケーションのワークフローを制御し、Stateflowを使用して設計されています。
図7.2 有限ステート・マシン
PWMの出力はEnable OutputsサブシステムとDisable Outputsサブシステムが制御します。これらは状態関数によって呼び出されます。これらのサブシステムでは、pwm_enable_output関数またはpwm_disable_output関数によって、PWM_enabledフラグとゲート・ドライバの出力ステータスが変更されます。
図8.1 Enable Outputsサブシステム
図8.2 Disable Outputsサブシステム
Update PWMサブシステムを使用して、制御ループからの出力に応じてPWMデューティ・サイクル値が生成されます。この値は最終的にFlexPWMペリフェラルに設定され、モータを駆動するためのPWM電圧が生成されます。FlexPWMは、ブリッジ向けの相補信号を生成するように構成されており、EBプロジェクトのリロード信号に従って同期的に更新されます。ここで必要なのは、モデル内のPwm関数にデューティ・サイクル値を渡すことだけです。
図8.3 PWMデューティ・サイクル値の計算
図8.4 PWM デューティ・サイクル値の更新
ボタンはモータの動作を制御するために使用されます。アルゴリズムはボードからボタンの値を読み取り、実行状態や速度を変更します。I/O値の読み取りには、MBDTライブラリのDioブロックが使用されます。ボタンのI/OポートはEBプロジェクトで設定されています。ボード上の2つのボタンは、モータの回転速度の増減に使用されます。また、2つを同時に押してフォルト情報を消去するためにも使用されます。1つのボタンはモータの起動または停止を制御します。次の図は、ボタン制御ロジックのサブシステムを示しています。
図9.1 ボタン制御ロジック
FreeMASTERは、組み込みソフトウェア・アプリケーションの実行時設定やチューニングを可能にする、使いやすいリアルタイム・デバッグ・モニタ兼データ可視化ツールです。このプロジェクトでFreeMASTERを有効にするには、まずインターフェースを構成する必要があります。
MBDTはFreeMASTERの構成をサポートするブロックを提供しています。このプロジェクトでは、GUIとボードの間のデータの伝送にはLPUART_0を使用します。次の図はMCAT GUIを示しています。このGUIは、パラメータ/変数の監視や、モータの状態の制御に使用できます。これは、プロジェクト・フォルダの「./mbd/FreeMASTER_control」内にあります。
図10.1 MCAT GUI
PILは確認と検証のステップです。このステップでは、開発した制御アルゴリズム用に生成されたコードがクロス・コンパイルされ、ターゲット・ハードウェアに展開されます。その後、プラント・モデルを含むホストPCで実行されるSimulinkアプリケーションからのテスト入力によって、処理が行われます。テスト入力は、シリアル通信を介してターゲットに送信されます。このシミュレーション・モードを有効にすることで、ユーザーは最終的なハードウェア設計のはるか前にプロセッサの性能をテストし、モデルと生成されたコードが数値的に同等であるかどうかを検証し、コード実行のプロファイリングを行うことができます。
こうしたことから、このモータ制御設計では、S32K396マイクロコントローラ上でモデル生成コードを検証するためのPILモデル(pil_model_ebt)も開発しました。PILトップ・モデルには、シミュレーション・モデルとハードウェア・モデルという2つの部分が含まれています。シミュレーション・モデルには、セクション11.1で示したような、実際のシステム(プリドライバとPMSM)のモデルが含まれています。ハードウェア・モデルには、以前紹介したアプリケーション(mbd_ebt.slx)と同じ制御アルゴリズムが含まれています。ハードウェア・モデルの部分では、コードが生成され、ビルドされ、実行ファイルがハードウェアに展開されます。入出力信号処理のブロックは、下のスクリーンショットに示すように、ハードウェア・コントローラで動作するコードに必要なテスト入力を生成します。
図 11.1 PIL トップモデル
PILトップ・モデルは、Simulink環境内でシミュレーション・モデルの部分を実行し、シリアル通信を通じてハードウェア・コントローラとの間で信号データを交換します。
シミュレーション・モデルは、Simscape™ Electrical™ブロックを使用して、プリドライバとPMSMのハードウェアをシミュレートします。
図 11.2.1 PIL ホストモデル
ハードウェア・モデルは、コードを生成してマイクロコントローラに展開する参照モデルです。ADC変換完了信号によって呼び出されます。
初期化プロセスでは、モデルはグローバル変数とドライバを初期化します。通常の動作プロセスでは、関数呼び出しが発生すると、モデルは入力信号の計算、ステート・マシンの実行、出力信号の生成を、サブシステム「pmsm_mc_algo」で定義された順序で行います。
図 11.3.1 PIL ターゲットモデル
NXPのMBDTでは、ハードウェア向けに最適化されたツールであるリアルタイム・ドライバ(RTD)、車載用演算/モータ制御ライブラリ(AMMCLib)、構成(S32設定ツールとEB Tresos)、ビルド・ツールを、Simulink環境で使用できます。
この記事では、モータ制御モデルの設計における構築と環境設定のプロセス、およびターゲット・ハードウェアに展開する前にPILシミュレーションを通じてモデルの確認と検証を行う方法について、例を挙げて説明しています。NXPのモデルベース設計ツールボックス、およびNXPが提供するソフトウェアを、MathWorksのツールや機能と組み合わせ、NXPのターゲット上で複雑な組み込み設計のラピッド・プロトタイピングを可能にする方法に重点を置いています。充実したMathWorksのエコシステムと組み合わせることで、ユーザーは複雑なアルゴリズムをモデル化し、NXPのマイクロコントローラとプロセッサ向けに最適化されたコードを生成して、高速で信頼性の高いプログラミング環境を実現できます。
このデモは、MBDTのエコシステムの中や、MBDTが提案するアプリケーション開発ワークフローの中で完全にはテストされていないことにご注意ください。ここで示した例は、現在MBDTでサポートされていないeTPUコプロセッサへのアクセスに関して、カスタム・コードの機能を使用していますし、MBDTのリリースおよびテストの対象になったものとは異なる特定のバージョンのRTDを使用しているからです。MBDT、チュートリアル、ウェビナー、その他のリソースの詳細については、MBDT コミュニティ・ページをご覧ください。
NXPが提供する開発エコシステムに関する追加情報については、NXP.comをご覧ください。