JAJU921 January   2024

 

  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 EnDat 2.2 インターフェイス
      2. 2.3.2 SDFM インターフェイス
      3. 2.3.3 EPWM インターフェイス
      4. 2.3.4 ICSS-PRU IEP
      5. 2.3.5 EtherCAT CiA402 速度制御
  9. 3システム設計
  10. 4ハードウェア、ソフトウェア、テスト要件、テスト結果
    1. 4.1 ハードウェア要件
    2. 4.2 ソフトウェア要件
    3. 4.3 テスト構成
    4. 4.4 テスト結果
  11. 5設計とドキュメントのサポート
    1. 5.1 デザイン ファイル
      1. 5.1.1 回路図
      2. 5.1.2 BOM (部品表)
    2. 5.2 ツールとソフトウェア
    3. 5.3 ドキュメントのサポート
    4. 5.4 サポート・リソース
    5. 5.5 商標
  12. 6著者について

システム設計

R5F_0_1 の初期化

モーター 1 の R5F_0_0 を初期化するには、次の手順に従います (single_chip_servo_remote_core_start)。

  1. GPIO ピンの方向と初期値 を設定 (init_gpio_state)
  2. EPWM ディスエーブル (enable_pwm_buffers)
  3. モーター 1 の EPWM 周波数と割り込みを設定 (init_pwms)
  4. EnDAT 2.2 モーター 1 の ICSSG0 PRU1 を設定 (チャネル 0、init_encoder)
    • ICSSG_SA_MX_REG レジスタで g_mux_en を 1 に設定 HW_WR_REG32((CSL_PRU_ICSSG0_PR1_CFG_SLV_BASE+0x40), (0x80))
    • レジスタ & イネーブル ICSSG EnDat PRU FW 割り込み
      • 割り込み番号: ICSSG_PRU_ENDAT_INT_NUM
      • コールバック関数:pruEncoderIrqHandler
    • EnDat 2.2 パラメータの設定
      • gEndat_multi_ch_mask = ENDAT_MULTI_CH0 | ENDAT_MULTI_CH2;
      • gEndat_is_multi_ch = CONFIG_ENDAT0_MODE & 1;
      • gEndat_is_load_share_mode = CONFIG_ENDAT0_MODE & 2;
    • ICSSG0 PRU1 を初期化 (EnDat_pruss_init)
    • エンコーダ ドライバ API を使用してエンコーダを初期化 (endat_init)
    • エンコーダ ドライバ API を使用してエンコーダを設定 (endat_config_multi_channel_mask)
    • ICSSG 周波数に基づいて遅延を構成
    • EnDat 2.2 PRU FW を ICSSG0 PRU1 にロードして実行 (endat_pruss_load_run_fw)
    • 5 秒のタイムアウトを指定して、ファームウェアからの初期化 ack を確認 (endat_wait_initialization)
    • 2.2 エンコーダのデフォルト周波数を 16 MHz に設定 (endat_init_clock)
    • 300MHz PRU で 16MHz が動作するように伝播遅延を設定 (endat_handle_prop_delay(priv, 265))
    • EnDat 2.2 FW に周期的なトリガを設定 (endat_config_periodic_trigger)
    • EnDat 2.2 FW 周期モードのパラメータを設定 (endat_config_periodic_mode)
      • チャネル 0 の IEP0 CMP3 イベント (PWM 周期の開始から 3000ns)
      • チャネル 2 の IEP0 CMP6 イベント (PWM 周期の開始から 3000ns)
    • EnData 2.2 データの受信を開始 (endat_handle_rx)
  5. モーター 1 の SDFM 用に ICSSG0 PRU0 を設定 (init_sddf)
    • IEP0 を初期化し、SYNC0 SD クロックを設定 (init_IEP0_SYNC)
    • ICSSG0 PRU0 の初期化 (initIcss)
    • ICSSG SDFM RTU FW 割り込みの登録とイネーブル
      • 割り込み番号:ICSSG_RTU_SDDF_INT_NUM
      • コールバック関数:rtuSddfIrqHandler
    • SDFM の RTU/PRU コアを初期化 (initPruSddf)
      • RTU サンプル ベース アドレス:gTestSdfmPrms.samplesBaseAddress
      • PRU サンプル ベース アドレス:gTestSdfmPrms.samplesBaseAddress+0x80
    • IEP0 を起動 (start_IEP0)
    • SW を強制的に EPWM0 に同期他の PWM は、ハードウェア同期デイジー チェーンを介して同期 (EPWM_tbTriggerSwSync)
    • EPWM 出力バッファのディスエーブル (enable_pwm_buffers)
  6. FOC のパラメーターを初期化 (init_pids)
  7. モーター 1 の EPWM 出力バッファをイネーブル (enable_pwm_buffers(TRUE))

R5F_0_1 の初期化

モーター 2 の R5F_0_1 を初期化するには、次の手順に従います (single_chip_servo_remote_core_start)。

  1. モーター 2 の EPWM 周波数と割り込み (init_pwms) のセットアップ
  2. モーター 2 の ICSSG EnDat PRU FW 割り込みを登録してイネーブル
    • 割り込み番号: ICSSG_PRU_ENDAT_INT_NUM+2
    • コールバック関数:pruEncoderIrqHandler2
  3. モーター 2 の ICSSG SDFM PRU FW 割り込みイネーブル & を登録
    • 割り込み番号: ICSSG_PRU_SDDF_INT_NUM
    • コールバック関数:pruSddfIrqHandler
  4. FOC のパラメーターを初期化 (init_pids)

割り込みのセットアップ

割り込みハンドラを設定するには、次の手順に従います。

EPWM 割り込み (50kHz)、ISR - App_epwmIntrISR (モーター 1) または App_epwmIntrISR2 (モーター 2)

  • EPWM 割り込みのクリア

SDFM 割り込み (50kHz)、ISR - rtuSddfIrqHandler (モーター 1) または pruSddfIrqHandler (モーター 2)

  • サンプル 8192 から 16384 の範囲で、SDFM チャネルのオフセットを計算します (0–2 または 3–5)。PRECOMPUTE_LEVEL == NO_PRECOMPUTE の場合、SDFM チャネル オフセットが FOC ループで使用されます。
  • サンプル 16384 で、位相 A、位相 B、位相 C の EPWM を書き込み、回転子を電気的 0 にロックし、SDFM 割り込みをディセーブル
  • ソースでの割り込みをクリア

EnDAT 2.2 割り込み (50kHz)、ISR – pruEncoderIrqHandler (モーター 1)

  1. ソースでの割り込みをクリア
  2. サンプル 0 - 8192 の場合は何もしていない
  3. サンプル 8193-16383 の場合:
    • 機械的および電気的角度オフセットの計算 (localEnDatGetSingleMulti)
  4. サンプル 16384 の場合:
    • 機械的および電気的角度オフセットの平均を求めます
    • すべての位相をオフ
    • 機械的および電気的角度オフセットを保存
  5. 16384 より後のサンプルの場合:
    • FOC ループを開始し、回転子のロックを解除
    • エンコーダから最新の機械的 θ と多回転位置を取得 (localEnDatGetSingleMulti)
    • 電気的な 0、4 ポールのペアから計算されたオフセットを使用
    • FOC ループを実行して空間ベクトルを計算
    • 次の CMPA 値を書き込みHW は EPWM0 を位相 C に、EPWM2 を位相 A に接続するので、cmp0 と cmp2 を交換します
    • EPWM0 は実際には EHRPWM2 を使用し、EPWM1 は EHRPWM1 を、EPWM2 は EHRPWM0 を使用
    • 詳細については、single_chip_servo_am243x-lp_r5fss0-0_nortos_ti-arm-clang の example_syscfg の EPWM 設定を参照してください。
      GUID-20231023-SS0I-LDSJ-JZMW-SN7KDMK62R36-low.png図 3-1 モーター 1 の EPWM 設定

EnDAT 2.2 割り込み (50kHz)、ISR – pruEncoderIrqHandler (モーター 2)

  • ソースでの割り込みをクリア
  • サンプル 0-8192 の場合は何もしない
  • サンプル 8193-16383 の場合:
    • 機械的および電気的角度オフセットの計算 (localEnDatGetSingleMulti)
  • サンプル 16384 の場合:
    • 機械的角度オフセットと電気的角度オフセットの平均を求めます。
    • すべての位相をオフ
    • 機械的および電気的角度オフセットを保存
  • 16384 より後のサンプルの場合:
    • FOC ループを開始し、回転子のロックを解除
    • エンコーダから最新の機械的 θ と複数回転位置を取得 (localEnDatGetSingleMulti)
    • 電気的な 0、4 ポールのペアから計算されたオフセットを使用します
    • FOC ループを実行して空間ベクトルを計算
    • 次の CMPA 値を書き込みます。HW は EPWM0 を位相 C に、EPWM5 を位相 A に接続するので、cmp0 と cmp2 を交換します
    • EPWM0 は実際には EHRPWM5 を使用し、EPWM1 は EHRPWM4 を使用し、EPWM2 は EHRPWM3 を使用
    • 詳細については、single_chip_servo_am243x-lp_r5fss0-1_nortos_ti-arm-clang の example_syscfg の EPWM 設定を参照してください。
      GUID-20231023-SS0I-QCCH-2Z63-KSKSFP5Z70N0-low.png図 3-2 モーター 2 の EPWM 設定