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:如何设置 TTBCLK

Guru**** 2606725 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1021521/tms320f28379d-how-can-i-set-up-ttbclk

器件型号:TMS320F28379D

尊敬的所有人:

我正在使用 TMS28379D LaunchPad 学习 TI DSP。

我正在用示例进行学习。

我对 TTBCLK 有疑问。

当我运行"ePWM_EX8_d死 区"时、我预期 TBBCLK 与 systemclk 相同、为200MHz。

但事实证明、3MHz……

因此、我期望 HSPCLKDIV 和 CLKDIV 发生变化。

但是、我无法找到访问这些值的位置。

如果你们对此有任何建议、请告诉我...

此致、

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

    Mingi 您好!

    EPWM_EX8_d死 区将 EPWM 模块配置为向上计数模式。 在该模式下、Tpwm 的计算方法为:

    Tpwm = 2 (TBPRD)(TTBCLK)

    在示例中、TBPRD 配置为2000

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

    使用以下函数配置 HSPCLKDIV 和 CLKDIV 的示例:  

        //
        // Set ePWM clock pre-scaler
        //
        EPWM_setClockPrescaler(base,
                               EPWM_CLOCK_DIVIDER_4,
                               EPWM_HSCLOCK_DIVIDER_4);
    

    因此、在本例中 、HSPCLKDIV x CLKDIV = 4*4 = 16

    若要查找 EPWMCLK、我们将看到 EPWMCLK 来自 SYSCLK、然后是默认值为/2的分频器(EPWMCLKDIV)。 这是因为当最大 SYSCLK 为200MHz 时、EPWMCLK 最大值为100MHz。

    综上所述、EPWMCLK 应为100MHz。

    TTBCLK = 1/(100MHz/16 )= 160nsec  

    Tpwm = 2 (TBPRD)(TTBCLK)= 2 (2000)(160ns)=.00064

    Fpwm = 1/Tpwm = 1/.00064 =~ 1562Hz


    您看到其他内容的原因是您可能没有使用_LAUNCHXL_F28379D 预定义符号。 在 device.h 文件中、通过更改 PLL 设置来设置 SYSCLK。 默认情况下、这些示例设置为使用20MHz 输入时钟配置时钟设置、但 LaunchPad 实际上具有10MHz 输入时钟。

    如果不包含预定义、SYSCLK 将设置为100MHz、因此 EPWMCLK 将设置为50MHz。

    重做50MHz 公式:

    TTBCLK = 1/(50MHz/16 )= 320nsec

    Tpwm = 2 (TBPRD)(TTBCLK)= 2 (2000)(320ns)=.00128

    Fpwm = 1/Tpwm = 1/.00128 =~ 781.25Hz

    //
    // Launchpad Configuration
    //
    #ifdef _LAUNCHXL_F28379D
    
    //
    // 10MHz XTAL on LaunchPad. For use with SysCtl_getClock().
    //
    #define DEVICE_OSCSRC_FREQ          10000000U
    
    //
    // Define to pass to SysCtl_setClock(). Will configure the clock as follows:
    // PLLSYSCLK = 10MHz (XTAL_OSC) * 40 (IMULT) * 1 (FMULT) / 2 (PLLCLK_BY_2)
    //
    #define DEVICE_SETCLOCK_CFG         (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT(40) |  \
                                         SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |   \
                                         SYSCTL_PLL_ENABLE)
    
    //
    // 200MHz SYSCLK frequency based on the above DEVICE_SETCLOCK_CFG. Update the
    // code below if a different clock configuration is used!
    //
    #define DEVICE_SYSCLK_FREQ          ((DEVICE_OSCSRC_FREQ * 40 * 1) / 2)
    
    //
    // ControlCARD Configuration
    //
    #else
    
    //
    // 20MHz XTAL on controlCARD. For use with SysCtl_getClock().
    //
    #define DEVICE_OSCSRC_FREQ          20000000U
    
    //
    // Define to pass to SysCtl_setClock(). Will configure the clock as follows:
    // PLLSYSCLK = 20MHz (XTAL_OSC) * 20 (IMULT) * 1 (FMULT) / 2 (PLLCLK_BY_2)
    //
    #define DEVICE_SETCLOCK_CFG         (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT(20) |  \
                                         SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |   \
                                         SYSCTL_PLL_ENABLE)
    
    //
    // 200MHz SYSCLK frequency based on the above DEVICE_SETCLOCK_CFG. Update the
    // code below if a different clock configuration is used!
    //
    #define DEVICE_SYSCLK_FREQ          ((DEVICE_OSCSRC_FREQ * 20 * 1) / 2)
    
    #endif

    若要在项目中包含预定义、请执行以下操作:

    -右键单击您的项目->单击"属性"

    -转至'Build'->'C2000 Compiler'->'Predefine Symbols'  

    -单击带有加号图标的文件并添加预定义 _LAUNCHXL_F28379D

    此致、

    Marlyn

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

    感谢你的帮助。

    我解决了这个问题。

    但我还有两个关于它的问题。

    1) 1)在哪里可以更改  EPWMCLKDIV?

    2) 2)是否有任何正确的方法来设置 TTBCLK

    可以通过多种方法对其进行设置   、例如更改 HSPCLKDIV、CLKDIV 或 EPWMCLKDIV。

    当我制作控制器时、是否有合适的方法来设置 TTBCLK

    或者,如何设置 TTBCLK 无关紧要 ?

    此致

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

    Mingi 您好!

    [引用 userid="450169" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1021521/tms320f28379d-how-can-i-set-up-ttbclk/3780169 #3780169]1)在哪里可以更改  EPWMCLKDIV?

    在'sysctl.h'文件内有以下函数:

    //*****************************************************************************
    //
    //! Sets the ePWM clock divider.
    //!
    //! \param divider is the value by which PLLSYSCLK is divided
    //!
    //! This function configures the clock rate of the EPWMCLK. The
    //! \e divider parameter is the value by which the SYSCLK rate is divided to
    //! get the EPWMCLK rate. For example, \b SYSCTL_EPWMCLK_DIV_2 will select an
    //! EPWMCLK rate that is half the PLLSYSCLK rate.
    //!
    //! \return None.
    //
    //*****************************************************************************
    static inline void
    SysCtl_setEPWMClockDivider(SysCtl_EPWMCLKDivider divider)
    {
        //
        // Write the divider selection to the appropriate register.
        //
        EALLOW;
        HWREGH(CLKCFG_BASE + SYSCTL_O_PERCLKDIVSEL) =
            (HWREGH(CLKCFG_BASE + SYSCTL_O_PERCLKDIVSEL) &
             ~SYSCTL_PERCLKDIVSEL_EPWMCLKDIV_M) | (uint16_t)divider;
        EDIS;
    }

    具有以下输入参数选项:

    //*****************************************************************************
    //
    //! The following are values that can be passed to SysCtl_setEPWMClockDivider()
    //! as the \e divider parameter.
    //
    //*****************************************************************************
    typedef enum
    {
        SYSCTL_EPWMCLK_DIV_1,           //!< EPWMCLK = PLLSYSCLK / 1
        SYSCTL_EPWMCLK_DIV_2            //!< EPWMCLK = PLLSYSCLK / 2
    } SysCtl_EPWMCLKDivider;

    因此、要更改 EPWMCLKDIV、您可以在初始化 ePWM 模块之前将以下代码行插入.c 文件中:

     SysCtl_setEPWMClockDivider(SYSCTL_EPWMCLK_DIV_2);

    [引用 userid="450169" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1021521/tms320f28379d-how-can-i-set-up-ttbclk/3780169 #3780169]2)是否有任何正确的方法来设置 TTBCLK[/quot]

    该值取决于 EPWMCLK、 HSPCLKDIV 和 CLKDIV。 也就是说、只要 EPWMCLK 不大于数据表最大值(100MHz)、就没有一种正确的方法来配置 TTBCLK。 这取决于 您尝试实现的值。  

    此致、

    Marlyn