尊敬的所有人:
我正在使用 TMS28379D LaunchPad 学习 TI DSP。
我正在用示例进行学习。
我对 TTBCLK 有疑问。
当我运行"ePWM_EX8_d死 区"时、我预期 TBBCLK 与 systemclk 相同、为200MHz。
但事实证明、3MHz……
因此、我期望 HSPCLKDIV 和 CLKDIV 发生变化。
但是、我无法找到访问这些值的位置。
如果你们对此有任何建议、请告诉我...
此致、
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.
尊敬的所有人:
我正在使用 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