ZHCUBQ4 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_0 初始化

使用以下步骤初始化电机 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 秒 (endat_wait_initialization)
    • 将 2.2 编码器的默认频率设置为 16MHz (endat_init_clock)
    • 设置传播延迟,使 16MHz 在 300MHz PRU 下有效 (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)
    • 为 EPWM0 强制 SW 同步。其他 PWM 通过硬件同步菊花链进行同步 (EPWM_tbTriggerSwSync)
    • 禁用 EPWM 输出缓冲器 (enable_pwm_buffers)
  6. 初始化 FOC 的参数 (init_pids)
  7. 为电机 1 启用 EPWM 输出缓冲器 (enable_pwm_buffers(TRUE))

R5F_0_0 初始化

使用以下步骤初始化电机 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 时,在 FOC 环路中使用 SDFM 通道偏移
  • 在样本 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 值。交换 cmp0 和 cmp2,因为硬件将 EPWM0 连接到 C 相,将 EPWM2 连接到 A 相
    • EPWM0 实际上使用 EHRPWM2;EPWM1 使用 EHRPWM1,EPWM2 使用 EHRPWM0
    • 有关详细信息,请参阅 single_chip_servo_am243x-lp_r5fss0-0_nortos_ti-arm-clang 中 example_syscfg 内的 EPWM 设置
      TIDEP-01032 电机 1 的 EPWM 设置图 3-1 电机 1 的 EPWM 设置

EnDAT 2.2 中断 (50kHz),ISR — pruEncoderIrqHandler(适用于电机 2)

  • 清除源上的中断
  • 对于样本 0–8192,不执行任何操作
  • 对于样本 8193–16383:
    • 计算机械和电角偏移 (localEnDatGetSingleMulti)
  • 对于样本 16384:
    • 找出机械和电角偏移量的平均值
    • 关闭所有相
    • 保存机械和电角度偏移
  • 对于 16384 之后的样本:
    • 启动 FOC 环路并解锁转子
    • 从编码器获取最新的机械 θ 和多圈位置 (localEnDatGetSingleMulti)
    • 使用计算得出的相对于电气 0、4 极对的偏移
    • 运行 FOC 环路以计算空间矢量
    • 写入接下来的 CMPA 值。交换 cmp0 和 cmp2,因为硬件将 EPWM0 连接到 C 相,将 EPWM5 连接到 A 相
    • EPWM0 实际上使用 EHRPWM5;EPWM1 使用 EHRPWM4,EPWM2 使用 EHRPWM3
    • 有关详细信息、请参阅 single_chip_servo_am243x-lp_r5fss0-1_nortos_ti-arm-clang 中 example_syscfg 内的 EPWM 设置
      TIDEP-01032 电机 2 的 EPWM 设置图 3-2 电机 2 的 EPWM 设置