This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2634:ePWM2同步输入同步输出选项。 需要如何配置它?

Guru**** 633805 points
Other Parts Discussed in Thread: SYSCONFIG, TMDSHSECDOCK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126075/am2634-epwm2-sync-in-sync-out-option-how-does-it-need-to-be-configured

器件型号:AM2634
主题中讨论的其他器件:SysConfigTMDSHSECDOCK

您好!

对于 ADC、我必须使用三种不同的采样频率、分别为 fs1 (200kHz)、fs2 (50kHz)和 fs3 (1KHz)。 频率必须彼此具有固定的相位关系、以确保我始终获得所有 SOC 的等距和采样 I DO 配置所有 ADC 的 I use。 下面的示波器截图是从控制卡获取的。 在此示例中、我使用 ePWM0为 ADC 的 SOCA 触发器和 SOCB 触发器创建两个触发器。 源是完全相同的 ePWMx。 但是、对于 SOCB-Trigger、我将触发器数除以4、得到 fs2等于50 KHz。

问:如何通过组合另一个 ePWM 单元(例如 ePWM1)使 FS3 (1KHz)? 我尝试将 ePWM0与 ePWM1同步。 但到目前为止还没有运气。 此外、很难验证、因为此时在控制卡上、我只能探测 GPIO-Pin R3。 在示波器屏幕截图上、fs1以蓝色显示。

示波器屏幕截图上的图例如下:

-通道1 (黄色)是来自函数发生器的10KHz 正弦波

-通道2 (洋红色)是控制卡上的 DAC 输出(每个 DMA 通道)由在 ADC0通道0上采集的样本每 fs2 (50kHz)加速

-通道3 (蓝色)是 SOCA 触发器、引出至控制卡上的引脚 R3。

我们可以看到、正如我们预期的那样、两个触发器(fs1和 fs2)是相位对齐的。 现在、一个好主意和一点帮助也需要使 FS3相位对齐。 请提供任何帮助。
Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我将对此进行研究、并很快与您联系。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、您好!

    [引用 userid="3843" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126075/am2634-epwm2-sync-in-sync-out-option-how-does-it-need-to-be-configured ]I 尝试将 ePWM0与 ePWM1同步。 但到目前为止还没有运气。 [/报价]

    有关 ePWM 同步的详细信息、请参阅 AM263x TRM (https://www.ti.com/lit/pdf/spruj17):)

    • 7.4.5.5.3.3时基计数器同步
    • 7.4.5.5.3.4 ePWM 同步选择

    MCU+SDK 提供了使用 SysConfig 或 API 函数配置 EPWM 同步的方法。

    在 SysConfig ePWM 配置中、请参阅以下 ePWM 时基选项:

    • 同步输入脉冲源
    • 同步输出脉冲
    • 同步后的计数器模式
    • 启用相移负载
    • 相移值

    有关 SDK API 函数、请参阅:

    [引用 userid="3843" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126075/am2634-epwm2-sync-in-sync-out-option-how-does-it-need-to-be-configured ]现在也需要一些帮助来使 FS3相位对齐。 [/报价]

    我看不到使用 ePWM 同步和 SOCA/B 实现这一目标的简单方法

    如果 ePWMx 与 EPWM0同步、它将在 SyncI 事件上将 TBPHS 加载到 TBCTR 中。 这会将 ePWMx 周期与 EPWM0周期关联。 因此、ePWMx 周期内的任何事件都不能用于生成 SOCA/B、其频率为 EPWM0 SOCA 的1/20。

    ePWMx SOCA 输出生成可被预分频多达15个(请见 TRM、《ePWM 事件触发子模块的操作概述》、7.4.5.11.1)、但是这对于 EPWM0 SOCA 的1/200不足以进行分频。

    我已将一些在这些主题上拥有更多专业知识的同事圈出来、以防他们有更多想法。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    一个简单的示例显示了 ePWM 单元之间的同步输入同步输出选项的工作方式会有所帮助。 我确实检查了"ti_drivers_open_close"部分中生成的代码。 我使用 ePWM1作为 FS3 1KHz 信号。 我想使用该事件重新同步生成200kHz SOCA 信号和50kHz SOCB 信号的 ePWM0。

    根据 TRM 第409页的图7-109、这应该可以正常工作。 生成的 c 代码执行以下操作:

    (笑声) ePWM1...

    ePWM_enableSyncOutPulseSource (CONFIG_EPWM1_BASE_ADDR、ePWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);

    ePWM0...

    ePWM_setSyncInPulseSource (CONFIG_EPWM0_BASE_ADDR、ePWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);

    此外、我还将所有 SOCx 映射到输出引脚 GPIO-Pin-R3、以便对"触发器"进行示波器探测。 但是、我会感觉 ePWM0没有同步输入功能、这与 TRM 中图7-109所示的方式是相同的。

    CH1 (绿色)是1KHz 输入正弦波3Vpp

    CH2 (洋红色)是 DAC 输出。 ADC0每4个200kHz SOCA 触发一次、从而产生一个50KHz 的触发信号。 与之前一样、来自 ePWM0的这两个触发器是相位对齐的。

    CH3 (蓝色)显示200KHz 触发器。 从 ePWM1发出的1KHz 信号在2个连续的200kHz 触发器之间突然出现。 但它没有影响。 我所期望的是根据 TRM 中的图7-109重新加载。

    对此有任何意见吗? 是否有一个使用 AM2634-CC 来演示同步输入同步输出功能的示例?

    谢谢

    Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Markus、

    感谢您在这里的耐心等待。 我相信 AM263x 器件中不提供同步输入到同步输出连接选项。 我正在我们的设计和软件专家中进行循环、以确认并决定是否有其他方法可用于同步这3个 ePWM 信号。

    我还想让您知道与 AM263x 控制卡兼容的 TMDSHSECDOCK。 控制卡集线站提供对其余大部分引脚的访问、包括额外的 GPIO 信号。

    https://www.ti.com/tool/TMDSHSECDOCK

    此致、

    Zackary Fleenor

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zackary、

    我会有与 Markus 相同的问题、您能否确认 AM263x 器件上确实没有此问题?

    谢谢你。

    BR、Nicolas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、Nicolas、

    我有几个解决此问题的解决方案。 今天稍后我将分享详细信息。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、您好!

    很抱歉耽误你的回答。

    我有一个示例、其中提供了您针对用例所描述的行为:频率为 fs1 (200kHz)、频率为 fs2 (50kHz)的同步 ADC SOC 事件和具有固定相位关系的 FS3 (1kHz)。

    此示例使用 AM263x MCU+SDK 08.03.01.06并在 AM263x CC (https://www.ti.com/tool/TMDSCNCD263)+ HSECDOCK (https://www.ti.com/tool/TMDSHSECDOCK)上运行。

    此示例是 SDK ePWM HR 占空比示例的修改版本: https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/08_03_01_06/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_EPWM_HR_DUTY_CYCLE.html

    首先、我想说、可以通过控制 SS XBAR 将 ePWM SOCA 和 SOCB 信号路由到可以在 HSECDOCK 上观察到的引脚。  我使用这些 XBAR 连接将以下信号路由到 AM263x 引脚和 HSECDOCK:

    • OUTPUTXBAR1:EPWM0_SOCA
    • OUTPUTXBAR2:EPWM0_SOCB
    • OUTPUTXBAR3:EPWM1_SOCA

    虽然我在这个示例中不使用这个 XBAR 配置、但是也可以通过控制 SS XBAR 路由 ePWM SYNCO 信号。  例如、EPWM1 SYNCOUT 信号可使用 XBAR 进行路由、如下所示:

    • ePWM_SYNCOUT_XBAR_0:EPWM1_SYNCOUT
    • OUTPUTXBAR4:ePWM_SYNCOUT_XBAR0

    该示例涉及通过写入 CONTROLSS_CTRL_ePWM_CLKSYNC 来同时启用 EPWM0和 EPWM1 TBCTR。  该寄存器包含每个 EPWM 实例的 ETPWM 时钟同步、其中每个位的位置对应一个 EPWM 实例。  如果两个 EPWM 的 TBCTR 同时启用、则 ePWM TBCTR 相位对齐。  因此、来自每个 ePWM 的 SOC 信号也会对齐。

    下面是 EPWM0/1 SOC 信号的逻辑分析仪捕获、其所需频率处于不同的缩放级别。

    EPWM0 SOCA、SOCB 和 EPWM1 SOCA 信号保持同步、从 EPWM0 SOCA/SOCB 的上升沿和 EPWM1 SOCA 的上升沿算起、延迟仅为20 ns。

    我在下面的 zip 文件中附加了完整的 CCS 项目和源代码。  

    该示例有一些注意事项:

    1) 1)写入 CONTROLSS_CTRL_ePWM_CLKSYNC

    • 当 SysConfig 中启用 EPWM0和 EPWM1时、生成的 SysConfig 代码会分别为每个 ePWM 启用 TBCTR。  请参阅 ti_drivers_config.c:System_init()。  由于我们希望写入 CONTROLSS_CTRL_EPWM_CLKSYNC 一次、因此我们需要注释掉 SysConfig 用于生成 System_init ()的模板代码中对 SOC_setEpwmTbClk ()的调用。 模板代码包含在文件中 source\drivers\.meta\ePWM\template\ePWM_init.c.xdt。 我在下面附上了一个更新文件的示例。

    /* finally we initialize all peripheral drivers */
    /* EPWM */
    {
        /* Enable time base clock for the selected ePWM */
        SOC_setEpwmTbClk(0, TRUE);
        SOC_setEpwmGroup(0, 0);
        SOC_setEpwmTbClk(1, TRUE);
        SOC_setEpwmGroup(1, 0);
    }              
    

    • 我向 ePWM_hr_Duty_cycle_main ()添加了代码、以写入 CONTROLSS_CTRL_ePWM_CLKSYNC:
      • 函数开始:写入0
      • 在 while ()循环之前:写入0x3以启用 EPWM0和 EPWM1。

    2) 2)控制 SS OUTPUTXBAR 配置

    AM263x MCU+SDK 08.03 (MCUSDK-7342)中存在一个错误、该错误仅允许从 SysConfig 配置单个 OUTPUTXBAR。  我使用 SysConfig 配置了 OUTPUTXBAR1、但为了配置 OUTPUTXBAR2、3、4 (和关联的引脚多路复用器)、我必须向 EPWM_hr_Duty_cycle_main ()添加代码。  此错误将在 SDK 版本08.04中修复。

    我正在研究另一个使用 EPWM1 SYNCO 到 EPWM0 SYNCI 机制的示例。 我计划尽快完成、并在完成后与您分享。

    此致、
    弗兰克

    /cfs-file/__key/communityserver-discussions-components-files/908/epwm_5F00_hr_5F00_duty_5F00_cycle_5F00_sync0_5F00_am263x_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    /cfs-file/__key/communityserver-discussions-components-files/908/epwm_5F00_init.c.xdt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    这听起来不错。 我将在我的设置中进行设置、并告诉您结果。

    BR

    Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、您好!

    我有第二个使用 ePWM SYNCO - SYNCI 功能的示例。 该示例提供了您针对用例所描述的行为。 该示例使用与第一个示例相同的硬件和 SDK。

    这是 ePWM 配置的简要概述。

    EPWM0

    • 频率:200kHz
    • 向上/向下计数模式
    • 同步后向上计数
    • 启用相移负载
    • 相移值:0
    • 同步输入源是 ePWM 同步输出信号
    • ADC SOCA 触发器被启用
      • 触发源:时基计数器等于零
      • 触发事件计数:1个事件生成中断
      • 启用触发事件计数初始化
      • 触发事件计数初始值:0
    • ADC SOCB 触发器被启用
      • 触发源:时基计数器等于零
      • 触发事件计数:4个事件产生中断
      • 启用触发事件计数初始化
      • 触发事件计数初始值:3.

    EPWM1

    • 频率:1kHz
    • 向上/向下计数模式
    • 同步输出脉冲:计数器零事件生成 ePWM 同步输出脉冲
    • ADC SOCA 触发器被启用
      • 触发源:时基计数器等于零
      • 触发事件计数:1个事件生成中断

    我在下面的 zip 文件中附加了完整的 CCS 项目和源代码。

    运行该示例时、请确保将更改从示例1恢复到 ePWM_init.c.xdt。

    我对此示例有一个担忧。 对于 SOCB 触发器、SYNCI 事件用于清零事件计数器并使事件计数器递增(通过在 SYNC 上 TBCNT 变为零间接实现)。 因此、在事件计数器清零和递增之间可能存在竞态条件。 我正在开发第三个示例、以避免任何可能的比赛情况。 完成后、我将与您分享。

    此致、
    弗兰克

    在第一个 EPWM1 SYNCOUT 处捕获逻辑分析仪

    EPWM0 SOCA、B 和 EPWM1 SOCB 的逻辑分析仪捕捉

    e2e.ti.com/.../epwm_5F00_hr_5F00_duty_5F00_cycle_5F00_sync1_5F00_am263x_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    我在我的背景下实施了您的建议1、其中包括 ADC、DAC 和一个 EDMA 通道。 它似乎起作用。 但是、例如、如果我在调试器环境中重新启动应用程序、我确实会获得 FS3相对于 fs1和 fs2的相位跳转。

    我需要按下控制卡上的复位按钮、以摆脱这种相移。 复位后、配置始终有效。 我第二次或更多地得到相移。

    对于您建议的解决方案的第一版、这是事实、其中 ePWM 单元不会相互同步、但通过对您提到的寄存器进行原子写入来启用时钟。

    因此、需要类似于"设置所有 ePWM 单元"的东西。

    BR

    Markus

    一切之上的示波器快照是良好的、并且处于相位。 复位后。

    黄色(Ch1)表示 DAC 输出。 输入是 ADC0_AIN0上的5kHz 正弦波

    在这种情况下、ADC 触发信号是以蓝色(Ch3)显示的50 KHz fs2信号

    CH2是 fs1 200 KHz 信号

    CH4 (绿色)为 FS3。 到目前为止一切都很好。

    通过调试器重新加载映像 A 相跳转结果。 需要进一步调查为什么会发生这种情况...

    1KHz 触发器 FS3与之前的相位位置不同...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markus、您好!

    您是否尝试了示例2以查看它是否显示了您观察到的问题?

    我开发了第三个示例、如示例2、使用 ePWM SYNCO - SYNCI 功能。

    下面简要概述了 ePWM 配置:

    EPWM0

    • ePWM 时基
      • 时基时钟分频器:/1
      • 高速时钟分频器:/1
      • 时基周期:999
      • 计数器模式:递增计数模式
      • 启用相移负载:启用
      • 同步输入脉冲源:同步输入源是 EPWM1同步输出信号
      • 相移值:500
    • ePWM 事件触发
      • ADC SOCA 触发器被启用
        • 触发源:时基计数器等于零
        • 触发事件计数:1个事件生成中断
        • 启用触发事件计数初始化
        • 触发事件计数初始值:0
      • ADC SOCB 触发器被启用
        • 触发源:时基计数器等于零
        • 触发事件计数:4个事件产生中断
        • 启用触发事件计数初始化
        • 触发事件计数初始值:0

    EPWM1

    • ePWM 时基
      • 时基时钟分频器:/4
      • 高速时钟分频器:/1
      • 时基周期:49999
      • 计数器模式:递增计数模式
      • 同步输出脉冲:等于 CMPC 的计数器生成 EPWM 同步输出脉冲
    • ePWM 计数器比较
      • CMPC:125 (500/4、这是由于时基时钟分频器)
    • ePWM 事件触发
      • ADC SOCA 触发器被启用
        • 触发源:时基计数器等于零
        • 触发事件计数:1个事件生成中断

    与示例2不同、我在 EPWM0事件触发 SOCB 脉冲发生器中看不到可能的硬件竞态条件。 SYNCI 事件由 EPWM1 TBCTR=CMPC 驱动、而事件计数器增量由 EPWM0 TBCTR=0驱动。

    我在下面的 zip 文件中附加了完整的 CCS 项目和源代码。

    我尝试暂停(Alt-F8)、复位(Ctrl+Shift+R)和恢复 CPU (F8)、PWM 波形看起来正确。 我还尝试了停止(Alt-F8)和重新启动(Run->Restart),PWM 波形看起来也是正确的。

    此致、
    弗兰克

    在第一个 EPWM1 SYNCOUT 处捕获逻辑分析仪

    EPWM0 SOCA、B 和 EPWM1 SOCB 的逻辑分析仪捕捉

    e2e.ti.com/.../epwm_5F00_hr_5F00_duty_5F00_cycle_5F00_sync5_5F00_am263x_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    非常感谢您的建议。 许多东西需要测试和检查。 目前、我确实使用了略微修改的版本#1。 我的版本使用3个 ePWM 单元、而不是我们之前讨论的两个。 我这么做的原因是我们在重新启动时看到的相位跳转。 每次在重新启动应用程序时不涉及硬件重置时、相位对齐似乎不能保证。 仍然是我不知道的根本原因。 可能是任何东西。

    为了消除这种情况、我不再使用 EPWM0_SOCB 触发器。 我仅使用*_SOCA 触发器来触发来自 ePWM0、1和2的 fs1、fs2和 fs3。

    在向 ADC 发出实际触发信号之前、之前的触发 EPWM0_SOCB 确实用于对 ADC 进行4分频。 对于我来说、当您开始停止应用#1时、处理四分频的内部计数器看起来不会被重置。 使用一个额外的 ePWM (32个中的3个)可以解决这个问题、因为我不需要除以1分频...没有任何相位跳转、它一直有效。

    BR

    Markus

    P.S. 我将测试#3。 这可能需要一些时间。 现在、我们可以关闭该线程。 谢谢你。