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.
您好!
这可能看起来非常简单、但当我运行 ePWM_UP_AQ 示例时、我在示波器上测量的频率与我预期的频率不同。
对于递增计数模式、Fpwm = 1/Tpwm、且 Tpwm = (TBPRD + 1) x T_TBCLK。 示例代码的 TBPRD 为2000、我假设 ePWM 时钟为100MHz、Fpwm 应为50kHz、但我测量的是6.25kHz。 我唯一能想到的是100MHz 假设是错误的、在哪里可以检查或修改它?
谢谢你
Jin
您好、Jin、
以下是测量6.25kHz 频率的原因:
Tpwm = (TBPRD + 1) x T_TBCLK
TBPRD 为2000
TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV)
通过查看该示例、我们可以看到 HSPCLKDIV 和 CLKDIV 都设置为除以2。
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
若要查找 EPWMCLK 的值、可参考 PERCLKDIVSEL 寄存器的 EPWMCLKDIV 位。 这是 ePWM 时钟分频选择位。 默认情况下、它被设置为 PLLSYSCLK 的二分频。
现在、要查找 PLLSYSCLK、
如果 在 示例中打开 InitSysCtrl()函数的声明,则可以找到 PLLSYSCLK 的设置位置:
InitSysPll (XTAL_OSC、IMULT_20、FULT_0、PLLCLK_By_2);
launchpad 上的 XTAL_OSC 为10MHz (可在 launchpad 的 BOM/原理图中找到)
计算如下: fPLLSYSCLK = fOSCCLK *(SYSPLLMULT.IMULT + SYSPLLMULT.FAULT)/SYSCLKDIVSEL.PLLSYSCLKDIV
输入传递给 InitSysPll 的值、我们得到 fPLLSYSCLK =(10M)*(20)/2 = 100MHz
由于 EPWMCLKDIV 设置为除以2、因此 EPWMCLK = 100M /2 = 50MHz
将 EPWMCLK 插回输出 TBCLK 计算:50M/(4)= 12.5m
因此、Tpwm =(2001)/(12.5m)= 0.00016
Fpwm = 1/Tpwm = 1/0.00016 = 6.246kHz
如果 您希望 ePWM 时钟频率为100MHz、则最简单的方法是将 EPWMCLKDIV 更改为1分频。 这可以通过 在程序中包含以下代码来完成:
EALLOW; ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0; EDIS;
对于50kHz 输出(Fpwm)、有许多方法可以实现这一点。 如果您将 ePWM 时钟更改为100MHz、那么您可以相应地调整 TBPRD、将其设置为500应该会提供50kHz 的输出。
此致、
Marlyn