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.

[参考译文] TMS320F2800157-Q1:即使在定期使用 TBCLKSYNC 且 PWM 脉冲缺失后、PWM 输出脉冲也会出现问题

Guru**** 2541920 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414693/tms320f2800157-q1-issue-with-pwm-output-pulse-even-after-using-tbclksync-and-missing-pwm-pulses-at-regular-intervals

器件型号:TMS320F2800157-Q1
主题中讨论的其他器件:SysConfigC2000WARE

工具与软件:

尊敬的 TI 专家:

尝试使用同步两个 PWM 通道的输出时遇到问题 TBCLKSYNC 非常重要。

  1. 尽管 PWM 输出 PWM1和 PWM2已同步、但我观察到、PWM 脉冲在固定的时间间隔内持续缺失。

您能否说明为什么缺少这些脉冲?

仅供参考、请查看以下 SysConfig 快照以及我对代码的修改。

SysConfig:

EPWM1:

上述配置是针对 ePWM1和 ePWM2通道完成的。 为了同步这两个通道输出、我使用了以下代码。

现在、我将获得如下所示的输出脉冲  

脉冲输出 ePWM1A 和 ePWM2A 是同步的、但您可以观察到、在一段时间后、脉冲在固定时间间隔内丢失。

请说明为什么缺少这些优点以及我的配置中存在什么问题?  

此致、

Meetkumar P. Parikh

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

    尊敬的 Meetkumar:

    是否更新了任何 CMP/TBPRD 值? 您是否启用了相位?  

    AQ 输出是否设置为某些状态?

    您是否尝试过运行我们的示例之一?

    此致!

    Ryan Ma

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

    尊敬的 Ryan Ma:

    我不仅仅尝试通过以下简单的步骤来同步 ePWM1和 ePWM2  

    TBCLKSYNC  = 0

    2.配置 PWM  

    3. TBCLKSYNC  = 1

     

    如果我尝试不使用上述方法、则可以获得精确的 PWM 频率、但存在相位差。 但是、如果我开始为 TBCLKSYNC 使用上述同步机制、那么它开始定期丢失脉冲  

    如中所示、Snapshot AQ 输出配置为在 TBCTR 值等于 CMPA 值时更改。

    不能、也不能对 CMP/TBPRD 值进行任何运行时间更改

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

    大家好、

    您能否共享导致此问题的 syscfg 和主代码?

    此致!

    Ryan Ma

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

    尊敬的 Ryan Ma:

    下面是 ePWM 的 SysConfig 代码、

    void epwm_init (){
    EPWM_setClockPrescaler (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);
    EPWM_setTimeBasePeriod (GP1_GP2_PWM_OBC_LEG_BASE、356);
    EPWM_setTimeBaseCounter (GP1_GP2_PWM_OBC_LEG_BASE、0);
    EPWM_setTimeBaseCounterMode (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_disablePhaseShiftLoad (GP1_GP2_PWM_OBC_LEG_BASE);
    EPWM_setPhaseShift (GP1_GP2_PWM_OBC_LEG_BASE、0);
    EPWM_setSyncInPulseSource (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_SYNC_IN_PULSE_SRC_DISABLE);
    EPWM_setCounterCompareValue (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_COUNTER_COMPARE_A、178);
    EPWM_setCounterCompareShadowLoadMode (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setCounterCompareValue (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_COUNTER_COMPARE_B、0);
    EPWM_setCounterCompareShadowLoadMode (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setDeadBandDelayPolarity (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_DB_FED、EPWM_DB_POLARY_ACTIVE_LOW);
    ePWM_setDeadBandDelayMode (GP1_GP2_PWM_OBC_LEG_BASE、ePWM_DB_RED、TRUE);
    EPWM_setDeadBandDelayMode (GP1_GP2_PWM_OBC_LEG_BASE、EPWM_DB_FED、TRUE);
    EPWM_setEmulationMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_EMULATION_FREE_RUN);
    EPWM_setClockPrescaler (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);
    EPWM_setTimeBasePeriod (GP5_GP6_PWM_CMN_LEG_BASE、356);
    EPWM_setTimeBaseCounter (GP5_GP6_PWM_CMN_LEG_BASE、0);
    EPWM_setTimeBaseCounterMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_disablePhaseShiftLoad (GP5_GP6_PWM_CMN_LEG_BASE);
    EPWM_setPhaseShift (GP5_GP6_PWM_CMN_LEG_BASE、0);
    EPWM_setSyncInPulseSource (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_SYNC_IN_PULSE_SRC_DISABLE);
    EPWM_setCounterCompareValue (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_COUNTER_COMPARE_A、178);
    EPWM_setCounterCompareShadowLoadMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setCounterCompareValue (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_COUNTER_COMPARE_B、0);
    EPWM_setCounterCompareShadowLoadMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_NO_CHANGE、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setDeadBandDelayPolarity (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_DB_FED、EPWM_DB_POLARY_ACTIVE_LOW);
    EPWM_setDeadBandDelayMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_DB_RED、TRUE);
    EPWM_setDeadBandDelayMode (GP5_GP6_PWM_CMN_LEG_BASE、EPWM_DB_FED、TRUE);
    }

    下面突出显示了其他代码:

    void Init_Sys (void)

    //
    //初始化器件时钟和外设
    //
    device_init();

    //
    //禁用引脚锁定和启用内部上拉。
    //
    device_initGPIO();

    //
    //初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
    //
    Interrupt_initModule();

    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //
    interrupt_initVectorTable();

    //
    // PinMux 和外设初始化
    //

    //在配置模块之前禁用 ePWM 时基时钟
    EALLOW;
    SYSCTL_disablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC); //这一行附加代码导致了问题
    EDIS;

    board_init();

    //同步 ePWM 时基时钟
    EALLOW;
    SysCtl_enablePeripheral (SysCtl_PERIPH_CLK_TBCLKSYNC);//这行附加代码导致了问题
    EDIS;

    //
    // C2000Ware 库初始化
    //
    C2000Ware_libraries_init ();

    //
    //启用全局中断(INTM)和实时中断(DBGM)
    //
    EINT;
    ERTM;
    }

    此致、

    Meetkumar  

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

    尊敬的 Meetkumar:  

    很抱歉响应出现延迟、我没有机会对我这边进行测试。 我明天会介绍这些内容、并向您通报最新结果。

    此致!

    Ryan MA

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

    尊敬的 Ryan Ma:

    当然可以!

    FYI 说明:

    1. CPU 时钟频率为100Mhz。

    2. C2000Ware 版本- C2000Ware_4_03_00_00

    3. 在 SysConfig 中使用空项目(如果尝试相同操作)。

    4.请执行与快照中所示相同的配置

    期待您的回复!

    谢谢、此致、

    Meetkumar P. Parikh

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

    尊敬的 Ryan Ma:

    我在这里发现了一个观察结果。

    我捕获了 TBCTR 值的图表、并发现其保持不变的值、如下所示。  

    因此、由于 CMPA 不等于 TBCTR 值、输出脉冲在特定的时间段内始终保持高电平... 您可以在下面的 PWM 输出图像中看到

    ==============================================================================================

    如果我尝试使用 TI 给出的任一 ePWM 示例项目、并且从这个项目中移除所有内容、重新配置 ePWM 模块、那么下面是我在调试期间观察到的情况。

    1. TBCTR 正确递增和递减  

    输出 PWM 脉冲正常。

    您能说明一下、问题出在哪里? 为什么它不能用于导入的空 SysConfig 工程和 ePWM SysConfig 示例工程?   

    谢谢、此致、

    Meetkumar P. Parikh

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

    尊敬的 Rayan Ma:  

    感谢您努力重现此问题。 不过、我相信在实际问题上、可能会有一些误解。

    您能否确认您是否已彻底阅读我之前的回复? 我怀疑一些关键细节可能被忽略了。

    请允许我引述我先前答复中突出核心问题的有关部分:

    [报价 userid="574349" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414693/tms320f2800157-q1-issue-with-pwm-output-pulse-even-after-using-tbclksync-and-missing-pwm-pulses-at-regular-intervals/5423183 #5423183"]

    如果我尝试使用 TI 给出的任一 ePWM 示例项目、并且从这个项目中移除所有内容、重新配置 ePWM 模块、那么下面是我在调试期间观察到的情况。

    1. TBCTR 正确递增和递减  

    输出 PWM 脉冲正常。

    [报价]

    如您所见、本例中可以实现正确的输出、但使用以下 C2000Ware 版本中的"已导入的空 SysConfig 工程"时无法实现:

    [报价 userid="574349" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414693/tms320f2800157-q1-issue-with-pwm-output-pulse-even-after-using-tbclksync-and-missing-pwm-pulses-at-regular-intervals/5422785 #5422785"]C2000Ware_4_03_00_00

    CCS 中导入的空 SysConfig 工程专门发生该问题。

    您能否确认 SysConfig 脚本是否有任何问题或其他可能导致以下问题的问题? 如果您看到下面的捕获图、您会发现 TBCTR 计数器的确切问题、它在特定时间段内保持不变... 为什么当 TBCTR>CMPA 时 TBCTR 在特定的时间段内保持恒定?  

    [报价 userid="574349" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414693/tms320f2800157-q1-issue-with-pwm-output-pulse-even-after-using-tbclksync-and-missing-pwm-pulses-at-regular-intervals/5423183 #5423183"]

    我在这里发现了一个观察结果。

    我捕获了 TBCTR 值的图表、并发现其保持不变的值、如下所示。  

    因此、由于 CMPA 不等于 TBCTR 值、输出脉冲在特定的时间段内始终保持高电平... 您可以在下面的 PWM 输出图像中看到

    [报价]

    注1:该问题与导入的空 SysConfig 工程有关!

    希望您现在清楚地了解我的问题! 请告诉我,如果你有任何进一步的困惑!

    跳过 此回复并提供此问题的解决方案。

    此致、  

    Meetkumar

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

    尊敬的 Meetkumar:

    请完成调试过程、了解生成输出脉冲的原因。

    1.确认在 PWM 初始化后是否设置了 TBCLKSYNC。

    2.在 TBCTL 寄存器中确认您处于正确的计数模式。

    3.确认 TBPRD 是否已正确加载、且 CMPA/CMPB 是否小于 TBPRD。

    4.仔细检查 AQCTLA / AQCTLB 寄存器以查看是否看到事件的预期输出。

    这将生成正确的波形。 抱歉、我无法重现您看到的问题。

    [报价 userid="574349" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414693/tms320f2800157-q1-issue-with-pwm-output-pulse-even-after-using-tbclksync-and-missing-pwm-pulses-at-regular-intervals/5424907 #5424907"]

    注1:该问题与导入的空 SysConfig 工程有关!

    [报价]

    这不会影响 PWM。 我们使用 SysConfig 的示例代码只生成生成生成所需波形所需的 driverlib 函数。 您所显示的输出在 SysConfig 之后的 PWM 配置似乎有问题。 TBCLKSYNC 将启动 PWM 的计数。 但在您看到的输出中、PWM 的初始化好像不同于 sysoncig 项目1。

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

    尊敬的 Rayan Ma:

    您能否请从以下路径导入空的 SysConfig 工程并按照以下步骤操作? 我很好奇观察空工程的结果。

    步骤:

    1. 从以下位置导入工程:
      C2000Ware_4_03_00_00\driverlib\f280015x\examples\empty_projects\ccs\empty_driverlib_project.projectspec"

    2. 禁用 TBCLKSYNC.

    3. 配置两个 ePWM 模块  

    4. 启用。 TBCLKSYNC

    5. 观察并报告结果。

    6. 捕获2个 PWM 模块的 A 通道。 (无需观察 B 通道)。 只是为了查看两个 PWM 输出是否同步

    我在您之前的回复中注意到您对进行了尝试 epwm_ex13_up_aq.c示例项目、但我对空项目的结果特别感兴趣。

    注:我尝试过多台配置全新的不同 PC、但  发现了相同的问题。 因此、我请您专门尝试使用空工程。

    谢谢!

    Meetkumar P. Parikh

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

    尊敬的 Meetkumar:

    请浏览我所概述的调试步骤。

    正如我所提到的、我无法在空项目中重现问题。 我按照您的 SysConfig 配置的准确屏幕截图进行了操作。 SysConfig 将为这两个工程生成相同的代码。

    我使用的是最新的 C2000WARE。 您是否可以尝试安装最新的 C2000WARE、以查看是否仍然出现问题?

    /**
     * Import the modules used in this configuration.
     */
    const epwm  = scripting.addModule("/driverlib/epwm.js", {}, false);
    const epwm1 = epwm.addInstance();
    const epwm2 = epwm.addInstance();
    
    /**
     * Write custom configuration values to the imported modules.
     */
    epwm1.$name                                                      = "myEPWM0";
    epwm1.epwmTimebase_emulationMode                                 = "EPWM_EMULATION_FREE_RUN";
    epwm1.epwmTimebase_hsClockDiv                                    = "EPWM_HSCLOCK_DIVIDER_1";
    epwm1.epwmTimebase_period                                        = 356;
    epwm1.epwmTimebase_counterMode                                   = "EPWM_COUNTER_MODE_UP_DOWN";
    epwm1.epwmTimebase_syncInPulseSource                             = "EPWM_SYNC_IN_PULSE_SRC_DISABLE";
    epwm1.epwmCounterCompare_cmpA                                    = 36;
    epwm1.epwmCounterCompare_enableShadowLoadModeCMPA                = false;
    epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA   = "EPWM_AQ_OUTPUT_HIGH";
    epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_LOW";
    epwm1.epwm.$assign                                               = "EPWM1";
    epwm1.epwm.epwm_aPin.$assign                                     = "GPIO0";
    epwm1.epwm.epwm_bPin.$assign                                     = "GPIO1";
    
    epwm2.$name                                                      = "myEPWM1";
    epwm2.copyUse                                                    = true;
    epwm2.copyFrom                                                   = "myEPWM0";
    epwm2.epwmTimebase_emulationMode                                 = "EPWM_EMULATION_FREE_RUN";
    epwm2.epwmTimebase_hsClockDiv                                    = "EPWM_HSCLOCK_DIVIDER_1";
    epwm2.epwmTimebase_period                                        = 356;
    epwm2.epwmTimebase_counterMode                                   = "EPWM_COUNTER_MODE_UP_DOWN";
    epwm2.epwmTimebase_syncInPulseSource                             = "EPWM_SYNC_IN_PULSE_SRC_DISABLE";
    epwm2.epwmCounterCompare_cmpA                                    = 36;
    epwm2.epwmCounterCompare_enableShadowLoadModeCMPA                = false;
    epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA   = "EPWM_AQ_OUTPUT_HIGH";
    epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_LOW";
    epwm2.epwm.$assign                                               = "EPWM2";
    epwm2.epwm.epwm_aPin.$assign                                     = "GPIO2";
    epwm2.epwm.epwm_bPin.$assign                                     = "GPIO3";
    

    //#############################################################################
    //
    // FILE:   empty_driverlib_main.c
    //
    //! \addtogroup driver_example_list
    //! <h1>Empty Project Example</h1> 
    //!
    //! This example is an empty project setup for Driverlib development.
    //!
    //
    //#############################################################################
    //
    //
    // $Copyright:
    // Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    
    //
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    #include "c2000ware_libraries.h"
    
    //
    // Main
    //
    void main(void)
    {
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Disable pin locks and enable internal pull-ups.
        //
        Device_initGPIO();
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
        SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    
        //
        // PinMux and Peripheral Initialization
        //
        Board_init();
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    
        //
        // C2000Ware Library initialization
        //
        C2000Ware_libraries_init();
    
        //
        // Enable Global Interrupt (INTM) and real time interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        while(1)
        {
            
        }
    }
    
    //
    // End of File
    //
    

    此致!

    Ryan Ma

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

    尊敬的 Rayan Ma:

    我已经检查了提到的调试步骤。

    我的实现也与您的调试步骤内联。  

    1.确认在 PWM 初始化后是否设置了 TBCLKSYNC。 - 是的  TBCLKSYNC 在 PWM 配置后被置位

    2.在 TBCTL 寄存器中确认您处于正确的计数模式。 -这是正确的,因为你可以看到在我的上一个答复共享代码

    3.确认 TBPRD 是否已正确加载、CMPA/CMPB 是否小于 TBPRD - TBPRD 已正确加载、CMPA 是否小于 TBPRD

    4.仔细检查 AQCTLA / AQCTLB 寄存器以查看是否看到事件的预期输出。 - 配置正确

    我之前已全面检查此步骤、让我尝试使用最新的 C2000Ware。

    我可以知道您使用的是哪个 C2000ware 版本吗?

    感谢您的支持!

    谢谢!
    Meetkumar

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

    尊敬的 Meetkumar:

    我使用的是 C2000WARE 5.03。

    此致!

    Ryan Ma

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

    尊敬的 Ryan Ma:

    可以、它能够使用最新版本的 C2000 ware 5.03。

    谢谢、此致、

    Meetkumar P. Parikh