JAJU919 December   2023

 

  1.   1
  2.   概要
  3.   リソース
  4.   特長
  5.   アプリケーション
  6.   6
  7. 1システムの説明
    1. 1.1 用語
    2. 1.2 主なシステム仕様
  8. 2システム概要
    1. 2.1 ブロック図
    2. 2.2 設計上の考慮事項
    3. 2.3 主な使用製品
      1. 2.3.1 TMS320F2800137
      2. 2.3.2 MSPM0G1507
      3. 2.3.3 TMP6131
      4. 2.3.4 UCC28881
      5. 2.3.5 TPS54202
      6. 2.3.6 TLV9062
      7. 2.3.7 TLV74033
    4. 2.4 システム設計理論
      1. 2.4.1 ハードウェア設計
        1. 2.4.1.1 モジュール形式の設計
        2. 2.4.1.2 高電圧降圧補助電源
        3. 2.4.1.3 DC リンク電圧検出
        4. 2.4.1.4 モーター相電圧のセンシング
        5. 2.4.1.5 モーター相電流のセンシング
        6. 2.4.1.6 外部過電流保護
        7. 2.4.1.7 TMS320F2800F137 の内部過電流保護
      2. 2.4.2 3 相 PMSM 駆動
        1. 2.4.2.1 PM 同期モーターのフィールド オリエンテッド コントロール
          1. 2.4.2.1.1 空間ベクトルの定義と投影
            1. 2.4.2.1.1.1 ( a 、   b ) ⇒ ( α 、 β ) クラーク変換
            2. 2.4.2.1.1.2 α 、 β ⇒ ( d 、   q ) パーク変換
          2. 2.4.2.1.2 AC モーターの FOC 基本方式
          3. 2.4.2.1.3 回転子フラックスの位置
        2. 2.4.2.2 PM 同期モーターのセンサレス制御
          1. 2.4.2.2.1 位相ロック ループを備えた拡張スライディング モード オブザーバ
            1. 2.4.2.2.1.1 IPMSM の数学モデルと FOC 構造
            2. 2.4.2.2.1.2 IPMSM 向け ESMO の設計
            3. 2.4.2.2.1.3 PLL による回転子位置および速度の推定
        3. 2.4.2.3 弱め界磁 (FW) および最大トルク / 電流 (MTPA) 制御
        4. 2.4.2.4 モーター駆動のハードウェア要件
          1. 2.4.2.4.1 モーター電流帰還
            1. 2.4.2.4.1.1 3 つのシャント電流センシング
            2. 2.4.2.4.1.2 1 つのシャント電流センシング
          2. 2.4.2.4.2 モーター電圧帰還
  9. 3ハードウェア、ソフトウェア、テスト要件、テスト結果
    1. 3.1 ハードウェアの概要
      1. 3.1.1 ハードウェア ボードの概要
      2. 3.1.2 テスト条件
      3. 3.1.3 ボードの検証に必要なテスト機器
    2. 3.2 GUI の概要
      1. 3.2.1 テスト設定
      2. 3.2.2 GUI ソフトウェアの概要
      3. 3.2.3 シリアル ポートの設定
      4. 3.2.4 モーターの識別
      5. 3.2.5 モーターの回転
      6. 3.2.6 モーターのフォルト ステータス
      7. 3.2.7 制御パラメータの調整
      8. 3.2.8 仮想オシロスコープ
    3. 3.3 C2000 ファームウェアの概要
      1. 3.3.1 ボード テストに必要なソフトウェアのダウンロードとインストール
      2. 3.3.2 CCS でのプロジェクトの開始
      3. 3.3.3 プロジェクト構造
      4. 3.3.4 テスト方法
        1. 3.3.4.1 ビルド レベル 1:CPU とボードの構成
          1. 3.3.4.1.1 CCS を起動し、プロジェクトを開く
          2. 3.3.4.1.2 プロジェクトのビルドとロード
          3. 3.3.4.1.3 デバッグ環境設定ウィンドウ
          4. 3.3.4.1.4 コードの実行
        2. 3.3.4.2 ビルド レベル 2:ADC 帰還を使用した開ループ チェック
          1. 3.3.4.2.1 CCS を起動し、プロジェクトを開く
          2. 3.3.4.2.2 プロジェクトのビルドとロード
          3. 3.3.4.2.3 デバッグ環境設定ウィンドウ
          4. 3.3.4.2.4 コードの実行
        3. 3.3.4.3 ビルド レベル 3:閉電流ループ チェック
          1. 3.3.4.3.1 CCS を起動し、プロジェクトを開く
          2. 3.3.4.3.2 プロジェクトのビルドとロード
          3. 3.3.4.3.3 デバッグ環境設定ウィンドウ
          4. 3.3.4.3.4 コードの実行
        4. 3.3.4.4 ビルド レベル 4:完全なモーター駆動制御
          1. 3.3.4.4.1 CCS を起動し、プロジェクトを開く
          2. 3.3.4.4.2 プロジェクトのビルドとロード
          3. 3.3.4.4.3 デバッグ環境設定ウィンドウ
          4. 3.3.4.4.4 コードの実行
          5. 3.3.4.4.5 モーター駆動 FOC パラメータの調整
          6. 3.3.4.4.6 弱め界磁および MTPA 制御パラメータの調整
          7. 3.3.4.4.7 電流センシング回路の調整
    4. 3.4 テスト結果
      1. 3.4.1 負荷および熱のテスト
      2. 3.4.2 外部コンパレータによる過電流保護
      3. 3.4.3 内部 CMPSS による過電流保護
    5. 3.5 新しいハードウェア ボードへのファームウェアの移行
      1. 3.5.1 PWM、CMPSS、ADC モジュールの構成
      2. 3.5.2 ハードウェア ボード パラメータの設定
      3. 3.5.3 フォルト保護パラメータの構成
      4. 3.5.4 モーターの電気的パラメータの設定
    6. 3.6 MSPM0 ファームウェアの概要
  10. 4設計とドキュメントのサポート
    1. 4.1 デザイン ファイル
      1. 4.1.1 回路図
      2. 4.1.2 部品表 (BOM)
      3. 4.1.3 PCB レイアウトに関する推奨事項
      4. 4.1.4 Altium プロジェクト
      5. 4.1.5 ガーバー ファイル
    2. 4.2 ソフトウェア ファイル
    3. 4.3 ドキュメントのサポート
    4. 4.4 サポート・リソース
    5. 4.5 商標
  11. 5著者について

PWM、CMPSS、ADC モジュールの構成

モーターを制御するためのアプリケーション パラメータは、ハードウェアに基づいて hal.h に #define として、PWM、CMPSS、ADC モジュールのベース アドレスを構成するように記述されます。 コンプレッサ モーターの PWM、CMPSS、ADC は、以下のコードで定義されています。

モーター駆動用の PWM と CMPSS のベースアドレスを構成してください。

// EPWM
#define MTR1_PWM_U_BASE         EPWM2_BASE
#define MTR1_PWM_V_BASE         EPWM3_BASE
#define MTR1_PWM_W_BASE         EPWM4_BASE

// CMPSS->Iu/Iv/Iw
#define MTR1_CMPSS_U_BASE       CMPSSLITE4_BASE
#define MTR1_CMPSS_V_BASE       CMPSSLITE2_BASE
#define MTR1_CMPSS_W_BASE       CMPSSLITE3_BASE

モーター駆動用の ADC のベースアドレスとチャネルを構成してください。

// Three shunts
// Using ADCA/ADCC for current sensing
#define MTR1_ADC_TRIGGER_SOC     ADC_TRIGGER_EPWM2_SOCA  // EPWM2_SOCA

#define MTR1_ADC_I_SAMPLEWINDOW     14
#define MTR1_ADC_V_SAMPLEWINDOW     20

#define MTR1_IU_ADC_BASE    ADCC_BASE       // ADCC-A7/C3*/CMP4  -SOC1
#define MTR1_IV_ADC_BASE    ADCA_BASE       // ADCA-A4*/C14/CMP2 -SOC2
#define MTR1_IW_ADC_BASE    ADCA_BASE       // ADCA-A0*/C15/CMP3 -SOC1

#define MTR1_IU_ADCRES_BASE     ADCCRESULT_BASE         // ADCC-A7/C3*
#define MTR1_IV_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A4*/C14
#define MTR1_IW_ADCRES_BASE     ADCARESULT_BASE         // ADCA-A0*/C15

#define MTR1_IU_ADC_CH_NUM      ADC_CH_ADCIN3           // ADCC-A7/C3*
#define MTR1_IV_ADC_CH_NUM      ADC_CH_ADCIN4           // ADCA-A4*/C14
#define MTR1_IW_ADC_CH_NUM      ADC_CH_ADCIN0           // ADCA-A0*/C15

#define MTR1_IU_ADC_SOC_NUM  ADC_SOC_NUMBER1  // ADCC-A7/C3*  -SOC1-PPB1
#define MTR1_IV_ADC_SOC_NUM  ADC_SOC_NUMBER2  // ADCA-A4*/C14 -SOC2-PPB2
#define MTR1_IW_ADC_SOC_NUM  ADC_SOC_NUMBER1  // ADCA-A0*/C15 -SOC1-PPB1

#define MTR1_IU_ADC_PPB_NUM  ADC_PPB_NUMBER1  // ADCC-A7/C3*  -SOC1-PPB1
#define MTR1_IV_ADC_PPB_NUM  ADC_PPB_NUMBER2  // ADCA-A4*/C14 -SOC2-PPB2
#define MTR1_IW_ADC_PPB_NUM  ADC_PPB_NUMBER1  // ADCA-A0*/C15 -SOC1-PPB1

モーター駆動制御用のペリフェラル割り込みを構成してください。

// Interrupt
#define MTR1_PWM_INT_BASE  MTR1_PWM_U_BASE       // EPWM1
#define MTR1_ADC_INT_BASE  ADCC_BASE             // ADCC-A11/C0*-SOC4
#define MTR1_ADC_INT_NUM   ADC_INT_NUMBER1       // ADCC_INT1   -SOC4
#define MTR1_ADC_INT_SOC   ADC_SOC_NUMBER4       // ADCC_INT1   -SOC4

#define MTR1_PIE_INT_NUM   INT_ADCC1             // ADCC_INT1   -SOC4
#define MTR1_CPU_INT_NUM   INTERRUPT_CPU_INT1    // ADCC_INT1-CPU_INT1
#define MTR1_INT_ACK_GROUP INTERRUPT_ACK_GROUP1  // ADCC_INT1-CPU_INT1

ハードウェアに基づいて hal.h に ADC ピンと CMPSS モジュール間の接続を構成してください。詳細については、『TMS320F280013x リアルタイム マイクロコントローラ テクニカル リファレンス マニュアル』の表、アナログ ピン、内部接続を参照してください。

// CMPSS->Iu/Iv/Iw
#define MTR1_CMPSS_U_BASE       CMPSSLITE4_BASE
#define MTR1_CMPSS_V_BASE       CMPSSLITE2_BASE
#define MTR1_CMPSS_W_BASE       CMPSSLITE3_BASE

#define MTR1_IU_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_4  // CMPSS4H-A7/C3*
#define MTR1_IU_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_4  // CMPSS4L-A7/C3*
#define MTR1_IV_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_2  // CMPSS2H-A4*/C14
#define MTR1_IV_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_2  // CMPSS2L-A4*/C14

#define MTR1_IW_CMPHP_SEL  ASYSCTL_CMPHPMUX_SELECT_3  // CMPSS3H-A0*/C15
#define MTR1_IW_CMPLP_SEL  ASYSCTL_CMPLPMUX_SELECT_3  // CMPSS3L-A0*/C15

#define MTR1_IU_CMPHP_MUX       1                     // CMPSS4H-A7/C3*
#define MTR1_IU_CMPLP_MUX       1                     // CMPSS4L-A7/C3*

#define MTR1_IV_CMPHP_MUX       0                     // CMPSS2H-A4*/C14
#define MTR1_IV_CMPLP_MUX       0                     // CMPSS2L-A4*/C14

#define MTR1_IW_CMPHP_MUX       2                     // CMPSS3H-A0*/C15
#define MTR1_IW_CMPLP_MUX       2                     // CMPSS3L-A0*/C15

ハードウェアに基づいて hal.h に EPWM と GPIO 出力に渡される CMPSS からのトリップ信号を構成してください。詳細については、『TMS320F280013x リアルタイム マイクロコントローラ テクニカル リファレンス マニュアル』の表、ePWM X-BAR MUX 構成表と表、OUTPUT X-BAR MUX 構成表を参照してください。

// XBAR-EPWM
#define MTR1_XBAR_TRIP_ADDRL    XBAR_O_TRIP8MUX0TO15CFG
#define MTR1_XBAR_TRIP_ADDRH    XBAR_O_TRIP8MUX16TO31CFG

#define MTR1_XBAR_INPUT1        XBAR_INPUT1
#define MTR1_TZ_OSHT1           EPWM_TZ_SIGNAL_OSHT1

#define MTR1_XBAR_TRIP          XBAR_TRIP8
#define MTR1_DCTRIPIN           EPWM_DC_COMBINATIONAL_TRIPIN8y

// XBAR-EPWM->Iu/Iv/Iw
#define MTR1_IU_XBAR_EPWM_MUX   XBAR_EPWM_MUX06_CMPSS4_CTRIPH_OR_L      // CMPSS4-HP&LP, A7/C3*
#define MTR1_IV_XBAR_EPWM_MUX   XBAR_EPWM_MUX02_CMPSS2_CTRIPH_OR_L      // CMPSS2-HP&LP, A4*/C14
#define MTR1_IW_XBAR_EPWM_MUX   XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L      // CMPSS3-HP&LP, A0*/C15

#define MTR1_IU_XBAR_MUX        XBAR_MUX06     // CMPSS4-HP&LP, A7/C3*
#define MTR1_IV_XBAR_MUX        XBAR_MUX02     // CMPSS2-HP&LP, A4*/C14
#define MTR1_IW_XBAR_MUX        XBAR_MUX04     // CMPSS3-HP&LP, A0*/C15

関連する ADC チャネルは、ピンがコンパレータ サブシステム (CMPSS) に内部接続されているモーター電流センシングに使用されます。以下のコードに示すように、hal.c ファイル の HAL_setupCMPSSs() 関数で CMPSS レジスタを構成してください。 3 つの CMPSS モジュールは、モーターの U 相、V 相、W 相に対する正負の過電流保護を実装するために使用されます。

void HAL_setupCMPSSsMTR(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;

#if defined(DMCPFC_REV3P2) || defined(DMCPFC_REV3P1)
#if !defined(MOTOR1_DCLINKSS) || !defined(MOTOR2_DCLINKSS)
    uint16_t cmpsaDACH;
#endif  // !(MOTOR1_DCLINKSS || MOTOR2_DCLINKSS)
    uint16_t cmpsaDACL;
    ... ...
#else   // !MOTOR1_DCLINKSS, Three-shunt
        cmpsaDACH = MTR1_CMPSS_DACH_VALUE;
        cmpsaDACL = MTR1_CMPSS_DACL_VALUE;

        ASysCtl_selectCMPHPMux(MTR1_IU_CMPHP_SEL, MTR1_IU_CMPHP_MUX);

        ASysCtl_selectCMPHPMux(MTR1_IV_CMPHP_SEL, MTR1_IV_CMPHP_MUX);

        ASysCtl_selectCMPLPMux(MTR1_IW_CMPLP_SEL, MTR1_IW_CMPLP_MUX);
    ... ...
    return;
} // end of HAL_setupCMPSSs() function

CMPSS で生成された信号は X-Bar に送られ、さまざまな独自の方法で信号を組み合わせて、IPM #Fault からの外部 TZ 信号を含む複数のソースからの独自のトリップ イベントにフラグを立て、フォルト保護を実装することができます。フォルトには、CMPSS からの過電流信号と、パワー モジュールからのフォルト インジケータ出力が含まれます。以下のコードに示すように、hal.c ファイルの HAL_setupMtrFaults() 関数で XBAR レジスタを構成してください。

void HAL_setupMtrFaults(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
    uint16_t cnt;

    // Configure TRIP 7 to OR the High and Low trips from both
    // comparator 5, 3 & 1, clear everything first
    EALLOW;
    HWREG(XBAR_EPWM_CFG_REG_BASE + MTR1_XBAR_TRIP_ADDRL) = 0;
    HWREG(XBAR_EPWM_CFG_REG_BASE + MTR1_XBAR_TRIP_ADDRH) = 0;
    EDIS;
    ... ...
        // What do we want the OST/CBC events to do?
        // TZA events can force EPWMxA
        // TZB events can force EPWMxB
        EPWM_setTripZoneAction(obj->pwmHandle[cnt],
                               EPWM_TZ_ACTION_EVENT_TZA,
                               EPWM_TZ_ACTION_LOW);

        EPWM_setTripZoneAction(obj->pwmHandle[cnt],
                               EPWM_TZ_ACTION_EVENT_TZB,
                               EPWM_TZ_ACTION_LOW);
    ... ...
    // Clear any spurious fault
    EPWM_clearTripZoneFlag(obj->pwmHandle[0], HAL_TZFLAG_INTERRUPT_ALL);
    EPWM_clearTripZoneFlag(obj->pwmHandle[1], HAL_TZFLAG_INTERRUPT_ALL);
    EPWM_clearTripZoneFlag(obj->pwmHandle[2], HAL_TZFLAG_INTERRUPT_ALL);

    return;
}

以下のコードに示すように、ハードウェアに基づいて hal.c ファイルの HAL_setupGPIOs() で GPIO を構成してください。

void HAL_setupGPIOs(HAL_Handle handle)
{
    ... ...
    // GPIO2->EPWM2A->M1_UH
    GPIO_setPinConfig(GPIO_2_EPWM2_A);
    GPIO_writePin(2, 0);
    GPIO_setDirectionMode(2, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(2, GPIO_PIN_TYPE_STD);

    // GPIO3->EPWM2B->M1_UL
    GPIO_setPinConfig(GPIO_3_EPWM2_B);
    GPIO_writePin(3, 0);
    GPIO_setDirectionMode(3, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(3, GPIO_PIN_TYPE_STD);
    ... ...
    return;
}  // end of HAL_setupGPIOs() function

使用するモーター制御用 CMPSS に応じて、構成コードは hal.h ファイルの HAL_enableMtrPWM() と HAL_clearMtrFaultStatus() で、以下の太字のように変更する必要があります。

static inline void HAL_enableMtrPWM(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;

    obj->flagEnablePWM = true;

#if defined(DMCPFC_REV3P2) || defined(DMCPFC_REV3P1)
    if(obj->motorNum == MTR_1)
    {
#if defined(MOTOR1_DCLINKSS)
        // Clear any comparator digital filter output latch
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[0]);
#else   // !MOTOR1_DCLINKSS
        // Clear any comparator digital filter output latch
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[0]);

        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[1]);

        CMPSS_clearFilterLatchLow(obj->cmpssHandle[2]);
    ... ...
    return;
} // end of HAL_enableMtrPWM() function
static inline void HAL_clearMtrFaultStatus(HAL_MTR_Handle handle)
{
    HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
    ... ...
#if defined(HVMTRPFC_REV1P1) || defined(WMINVBRD_REV1P0) || defined(TIDSMPFC_REV3P2)
    // Clear any comparator digital filter output latch
    CMPSS_clearFilterLatchHigh(obj->cmpssHandle[0]);
    CMPSS_clearFilterLatchLow(obj->cmpssHandle[0]);

    CMPSS_clearFilterLatchHigh(obj->cmpssHandle[1]);
    CMPSS_clearFilterLatchLow(obj->cmpssHandle[1]);

    CMPSS_clearFilterLatchHigh(obj->cmpssHandle[2]);
    CMPSS_clearFilterLatchLow(obj->cmpssHandle[2]);
    ... ...
    return;
} // end of HAL_clearMtrFaultStatus() function