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.

[参考译文] TMS320F28388D:PWM 模块:更改 TBPRD 值

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1245594/tms320f28388d-pwm-module-changing-tbprd-value

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARESysConfig

您好、TI!

我对在 PWM 模块中更改 TBPRD 以实现可变频率有疑问。

在 spruiid 中(第 26.4.5节同时写入 ePWM 模块之间的 TBPRD 和 CMPx 寄存器)提到了 EPWMXLINK 可用于同时更改 TBPRB 和 CMPx 的值。

我尝试在使用某些算法计算 CMP 值之前、在 ADCA1 ISR 内更改 TBPRD 的值。 ADC A1 ISR 时间为25微秒、PWM 模块 TBPRD 范围为2500-5000。

我的问题是、待多久后会实现 TBPRD 的更新值?

以下一段代码我用于更改 TBPRD 值。 是这样吗?

EPwm1Regs.TBPRD = 5000u;

EPwm1Regs.EPWMXLINK.bit.TBPRDLINK = 0;

谢谢。

Saikumar.

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

    您好,Saikumar,

    1. 存在 如果您只使用 ePWM1、则无需使用 XLink 函数。
      1. 如果您使用它、 在启动配置期间仅设置一次 EPWMXLINK、以在代码的整个生命周期中锁定不同 ePWM 模块之间的值 -例如,如果 ePWM1和 ePWM2需要总是具有相同的 TBPRD 值, ePWM2可以连接到 ePWM1。 只要 ePWM1的 TBPRD 值被改变、ePWM2的 TBPRD 值也将被改变为相同的值。

    2. 默认情况下、TBCTL[PRDLD]= 0。 这意味着 TBPRD 使用影子加载功能。 TBCTL2[PRDLDSYNC]位定义新 TBPRD 值何时生效。 默认情况下为 CTR=ZRO (计数器=零)

    为便于计算和读取、我通常建议将 TBPRD 值存储在用于计算的代码中、这样就无需每次都访问寄存器。 希望这个解释对您有所帮助!

    此致、
    杰森·奥斯博尔恩
    注意:这篇文章的要点 粗体显示。

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

    尊敬的 Jason Osborn:

    感谢您的快速响应。

    关于第1点、我要将 EPWM2和 ePWM 3链接到 EPWM1、这样对于 ePWM 2和 EPWM3、EPWM1的 TBPRD 值相同。

    为了利用 EPWMXLINK 功能来实现相同的 TBPRD 值、我需要使用哪些代码行。

    谢谢。

    Saikumar.

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

    Saikumar,

    了解一下 C2000Ware EPWM 示例"epwm_EX14_global_load_use_case" 。 此示例介绍了如何同时使用链接和全局加载功能!

    为了进行链接、 此 driverlib 函数

    EPWM_setupEPWMLinks();

    要对其进行专门设置、将 ePWM2和3 TBPRD 连接到 ePWM1 TBPRD、  以下代码会自动执行 您查找的 并将全部3个 ePWM 模块的 TBPRD 先设置为your_TBPRD_value""、然后再设置为new_value""。

    void epwm_setup (void)

    {

    EPWM_setupEPWMLinks(your_epwm_2_base, EPWM_LINK_WITH_EPWM_1, EPWM_LINK_TBPRD);

    EPWM_setupEPWMLinks(your_epwm_3_base, EPWM_LINK_WITH_EPWM_1EPWM_LINK_TBPRD);

    return;

    }

    主要()

    {

    epwm_setup();

    EPWM_setTimeBasePeriod(your_epwm_1_base, your_TBPRD_value);

    ... (later) ...

    EPWM_setTimeBasePeriod(your_epwm_1_base, new_value);

    }

    或者、可以通过 SysConfig 工具完成此配置-我强烈建议这样做! SysConfig 工具是一个非常直观的界面、可与相对复杂的 ePWM 外设以及 C2000器件的其余部分连接! 这使得初始设置和任何后续更新都容易得多。

    此致、
    杰森·奥斯博尔恩
    注意:这篇文章的要点  粗体显示。

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

    尊敬的 Jason Osborn:

    谢谢、我将查看示例项目。