JAJU922A October 2022 – February 2024
図 5-4 プロジェクト構造の概要プロジェクトの一般構造を図 5-4 に示します。プロジェクトがインポートされると、図 5-5 に示すように CCS 内に Project Explorer が表示されます。
コア アルゴリズム コードで構成される、デバイスに依存しないソリューション固有のファイルは、<solution>.c/h にあります。 たとえば、TTPPLPFC.c または CLLLC.hです。
基板固有およびデバイス固有のファイルは、<solution>_hal.c/h にあります。 このファイルは、ソリューションを実行するデバイス特定のドライバで構成されています。別の変調方式やデバイスを使用する場合、プロジェクト内のデバイス サポート ファイルを変更する以外に変更を加える必要があるのは、これらのファイルのみです。
<solution>-main.c ファイルは、プロジェクトのメイン フレームワークで構成されています。 このファイルは、システム フレームワークの作成に役立つボード ファイルとソリューション ファイルの呼び出し、割り込みサービス ルーチン (ISR)、低速なバックグラウンド タスクで構成されています。
このデザインには、obc_7_4kw、clllc、ttplpfc の 3 つの <solution> 名があります。 最大限の柔軟性を維持するために、CLLLC コード ベースと TTPPLPFC コード ベースをできるだけ独立させることにしました。一方で、obc_7_4kw ファイルは、TTPPFC や CLLLC に依存しない設定を含めるために必要な場所に追加されました。 これにより、エンド ユーザーは各段を独立して動作させ、必要に応じて最終設計に PFC 段または DCDC 段のさまざまなトポロジを簡単に組み込むことができます。
<solution>_settings.h ファイルには、どのラボをビルドするかなどのコード構成設定が含まれています。 一方、<solution>_user_settings.h には、ADC マッピングや GPIO などの #define マクロのような基板レベルの構成が含まれています。
solution.js ファイルには、各ラボの実行中に観測対象に関連する変数を入力するのに役立つスクリプト ファイルが含まれています。 これらのスクリプトを使用するには、スクリプト コンソール ([View] - [Scripting Console]) を開きます。solution.js ファイルの内容をスクリプト コンソールに貼り付け、[Enter] キーを押してください。これにより、後でデバッグに使用するための [Expressions] ウィンドウに入力されます。
ソリューション名は、ソリューションで使用されるすべての変数のモジュール名および定義としても使用されます。そのため、すべての変数および関数呼び出しの前に CLLLC 名が追加されます (CLLLC_vSecSensed_pu など)。この命名規則により、名前の競合を回避しながら、異なるソリューションを組み合わせることができます。
図 5-5 CLLLC プロジェクトの Project Explorer ビューOBC プロジェクトは、C28x コア と CLA コアの 2 つのコアで動作する 3 つの ISR (ISR1、ISR2、ISR3) で構成されています。ISR1 のトリガに ePWM、ISR2 のトリガに eCAP、ISR3 のトリガに ADC を使用することで、ISR の優先順位をハードウェアで完全に制御できます。表 5-4 に、各 ISR がどのように分割され、どのようなタスクが実行されるかを示します。
| ISR | トリガ ソース | C28x | CLA |
|---|---|---|---|
| ISR1 (120kHz) | ePWM | 該当なし | CLLLC PWM 値の更新 |
| ISR2 (120kHz) | eCAP | PFC 電流ループ | CLLLC 制御コード、ISR1 有効化 |
| ISR3 (10kHz) | ADC | PFC 電圧ループ、計測 | 該当なし |
ISR1 は、PWM 更新のために予約された最速かつネスト不可能な ISR で、すべて CLA で実行されます。ISR1 は、PRIM_LEG1_PWM_BASE → EPWM_INT_TBCTR_U_CMPC イベントでトリガされます。一般に、この割り込みは、PRIM_LEG1_PWM_BASE に対して考えられるすべての TBPRD レジスタ値よりも大きい値を CMPC に書き込むことによって無効にされます。これは、CLLLC_HAL_setupISR1Trigger 関数で行います。この ISR に関連する定義は以下のとおりです。
#define CLLLC_ISR1_PERIPHERAL_TRIG_BASE CLLLC_PRIM_LEG1_PWM_BASE
#define CLLLC_ISR1_TRIG INT_EPWM1
#define CLLLC_ISR1_PIE_GROUP INTERRUPT_ACK_GROUP3
#define CLLLC_ISR1_TRIG_CLA CLA_TRIGGER_EPWM1INTISR2 は両方のコアに分割されます。これにより、TTPLPFC と CLLLC のコードを簡単にモジュール化できます。C28x で実行される ISR2 と CLA で実行される ISR2 は、どちらも同じソースによってトリガされ、同時に動作します。C28x コアは TTPPLPFC に関連するタスクを実行し、CLA コアは CLLLC の実行に関連するタスクを実行します。
ISR2 は、ISR1 が必要なときに、CMPC への書き込みによって ISR1 をトリガするために有効な値を書き込む役割を担っています。(注:CMPC は、これを可能にするためにグローバル負荷メカニズムに接続されていません。また、CMPC のシャドウ負荷は無効にされています。)CMPC 値を調整して、ISR1 から目的のタイミングを得ることができます。ISR1 が有効になるたびに、2 回トリガされます。最初の ISR1 では、PWM レジスタが更新され、同期が有効になります。2 回目の ISR1 では、PWM 同期が無効にされ、CMPC は ISR1 が再度トリガされないような値に設定されます。分かりやすくするために、ソフトウェア構成図と構造には、最初にトリガされた ISR1 のみが示されています。
ISR2 は ISR2_FREQUENCY で定期的にトリガされます。予備の CAP モジュールを使用して、タイム ベースを生成し、割り込みをトリガします。予備の ePWM モジュールも同じタイム ベースで構成されており、ADC 変換のトリガに使用されます。ISR2 は、制御規則を実行し、PWM に必要なクロック ティックを計算する役割を担っています。シャドウ レジスタへの書き込みが完了すると、ISR2 は有効な値 (現在の TBPRD レジスタより小さい値) を CMPC レジスタに書き込むことで、ISR1 トリガを有効にします。ISR2 には、1 次側から 2 次側への電力フロー用と 2 次側から 1 次側への電力フロー用の ISR2_primToSecPowerFlow と ISR2_secToPrimPowerFlow の 2 つのバリエーションがあります。これは、さまざまな方向の電力フローを制御するときに CPU サイクルを最適化するために行われます。分かりやすくするために、各ラボではどちらも ISR2 と呼ばれています。タイミングによっては、ISR1 は、タイミングが非常に重要な更新の書き込みのために ISR2 をネストすることがあります。この ISR に関連する定義は以下のとおりです。
#define CLLLC_ISR2_ECAP_BASE ECAP1_BASE
#define CLLLC_ISR2_PWM_BASE EPWM5_BASE
#define CLLLC_ISR2_TRIG INT_ECAP1
#define CLLLC_ISR2_PIE_GROUP INTERRUPT_ACK_GROUP4#define CLLLC_ISR2_TRIG_CLA CLA_TRIGGER_ADCA2ISR3 はすべて C28x コアで実行され、ADCINT2 によってトリガされます。ADCINT2 は、CPU タイマを使用して開始される変換によって開始されます。TTPPLPFC の電圧ループの実行や、電流と電圧信号の移動平均を計算してノイズを除去するなどのハウスキーピング機能に使用されます。コマンド リファレンスのスルーレート機能を実行するのにも使用されます。
#define CLLLC_ISR3_TIMEBASE CLLLC_TASKC_CPUTIMER_BASE
#define CLLLC_ISR3_PERIPHERAL_TRIG_BASE ADCC_BASE
#define CLLLC_ISR3_TRIG INT_ADCC2#define CLLLC_ISR3_PIE_GROUP INTERRUPT_ACK_GROUP10これにより、割り込みを簡単にネストできます。図 5-6 は、3 つの割り込みのネストを示しています。この図は、開ループのシステムで、[Watch] ウィンドウを通して周期の変化が開始され、ISR1 トリガが 1 回だけ観測されたときのものです。閉ループのシステムの場合、周期はある制御 ISR サイクルから他の制御 ISR サイクルへとわずかに変化するだけであるため、ISR1 は繰り返しトリガされます。
図 5-6 3 階層にネストされた ISRさらに、CPU タイマは、低速なバックグラウンド タスクのトリガに使用されます (割り込み駆動ではなく、ポーリング)。
A タスクは、100Hz の TASKA_FREQ でトリガされます。SFRA GUI はこのレートで呼び出す必要があります。1 つのタスク A1 がこのレートで実行されます。
B タスクは、10Hz の TASKB_FREQ でトリガされます。これらは、一部の基本的な LED トグルや、タイミングが重要ではないステート マシンの項目に使用されます。3 つのタスク (B1、B2、B3) がこれによって処理されるため、それぞれの実行レートは 3.33Hz です。
#define TASKA_FREQ 100
#define TASKB_FREQ 10このリファレンス デザインのソフトウェアは、ソリューションごとに分けられたラボで構成されており、それぞれにインクリメンタル ビルド (INCR_BUILD) があります。これらのテストによって、システムの立ち上げや設計が簡略化されます。
ラボ 1:1 次側から 2 次側への電力フロー、PWM ドライバの開ループ チェック (基板に大電力が印加されていない状態)。セクション 5.2.2.1 を参照してください。
ラボ 2:1 次側から 2 次側への電力フロー、PWM ドライバおよび保護付き ADC の開ループ チェック (2 次側に抵抗性負荷が接続されている状態)。セクション 5.2.2.2 を参照してください。
ラボ 3:1 次側から 2 次側への電力フロー、閉電圧ループ チェック (2 次側に抵抗性負荷が接続されている状態)。セクション 5.2.2.3 を参照してください。
ラボ 4:1 次側から 2 次側への電力フロー、閉電流ループ チェック (2 次側に抵抗性負荷が接続されている状態)。セクション 5.2.2.4 を参照してください。
ラボ 5:1 次側から 2 次側への電力フロー、閉電流ループ チェック (2 次側で抵抗性負荷が電圧源と並列に接続されてバッテリ接続をエミュレートしている状態)。セクション 5.2.2.5 を参照してください。
これらの定義は settings.h ファイル内にあり、そのファイル内で直接変更できます。