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.

[参考译文] TMS320F28379D:高分辨率 PWM 信号

Guru**** 2606725 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1023017/tms320f28379d-high-resolution-pwm-signal

器件型号:TMS320F28379D

您好!

是否可以使用 DSP 生成低于1Hz 的浮点 PWM 信号? (例如0.575Hz)

谢谢、

Sinan、

此致。

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

    您好、Sinan、

    通常、低频 PWM 运行(低于250kHz) 不需要 HRPWM;ePWM 的正常功能就足够了。  这是您的系统中的要求吗?

    此致、

    Marlyn

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

    我不认为需要 HRPWM。 标准 ePWM 将会实现这一目的!

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

    大家好、 Marlyn:

    是的、这是我的系统的一项要求。  当我查看 TRM 中的 ePWM 部分时、我无法使用公式创建所需的低频(例如0.575Hz)。   DSP 可能不支持低频。

    谢谢、

    Sinan。

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

    您好、Sinan、

    您可以尝试以下示例:

    在向上/向下计数模式下、

    TPWM = 2 (TBPRD)(TTBCLK)

    TTBCLK = 1/(EPWMCLK/(HSPCLKDIV * CLKDIV))

    EPWMCLK 可通过 EPWMCLKDIV 位配置为 SYSCLKOUT/2。 如果您的 SYSCLKOUT 为200Mz、则 EPWMCLK 将为100MHz。

    HSPCLKDIV 的最大值可以是14、对于 CLKDIV、它可以是128。  

    HSPCLKDIV * CLKDIV = 1792

    TBCLK = EPWMCLK /(HSPCLKDIV * CLKDIV)= 100M/1792 = 55803.6

    TTBCLK = 1/TBCLK = 1/55803.6 =.000018

    您所需的频率为0.575Hz、因此 TPWM = 1/.575 = 1.73913

    我们可以使用第一个公式[TPWM = 2 (TBPRD)(TTBCLK)]来立即求解 TBPRD

    TBPRD = TPWM /(2*TTBCLK)= 1.73913 /(2*.000018)= 48309

    这是上述代码:

    // Set EPWMCLK to SYSCLKOUT/2. If SYSCLKOUT is 200MHz, EPWMCLK will be 100MHz
    SysCtl_setEPWMClockDivider(SYSCTL_EPWMCLK_DIV_2); 
    
    // Within EPWM Initialization: Setup HSPCLKDIV and CLKDIV
    EPWM_setClockPrescaler(myEPWM1_BASE,
                           EPWM_CLOCK_DIVIDER_128,
                           EPWM_HSCLOCK_DIVIDER_14);
                           
    // Within EPWM Initialization: Setup Count mode and TBPRD
    EPWM_setTimeBaseCounterMode(myEPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_setTimeBasePeriod(myEPWM1_BASE, 48309);

    此致、

    Marlyn