TI中文支持网
TI专业的中文技术问题搜集分享网站

PWM的周期应该怎么算

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

user4880999:

兄弟,不是说F28377S的频率是200MHz(systemclk),TBCLK就是200Mhz。。。

TBCLK=systemclk / HSPCLKDIV*CLKDIV

(对应你代码中

EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

)

TB_div2的值我看不到,估计是=2。

TBclk=200mhz / (2^2  * 2^2)

所以最终周期应该是0.2*16=3.2ms左右。。。

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

ming chen3:

参考下图:有的模块出问题,先看系统时钟结构。

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

Zhaoming Liu:

回复 user4880999:

您好,TB_DIV2是1

我用示波器反推出来 EPWMCLK=12.5MHz

但是没能看明白 EPWMCLK是怎么算出来,我怎么才能看到PLLSYSCLK的值,不知是否可以帮我解释一下,非常感谢。

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

SHIH CIH-HUEI:

回复 Zhaoming Liu:

確認一下暫存器

PERCLKDIVSEL.bit.EPWMCLKDIV = ?

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

Zhaoming Liu:

回复 ming chen3:

请问PLLSYSCLK的值能查出来吗?

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

user4880999:

回复 Zhaoming Liu:

兄弟,我不知道怎么去看。。。笨办法就是找一个F28337例程,看一下初始化中pll怎么设置的,一般来说例程对时钟都有讲解的,会告诉你现在的sysclk是多少。。。我估计你自己用的就是例程吧。至于TBclk的算法,你百度“TMS320F28027课件_第七讲_ePWM”。。上面ppt讲的详细

大家好,我正在用C2000学习PWM,处理器是F28377S。

我想发送5000Hz的PWM,但是现在还没太搞明白PWM波的周期应该怎么算,还请大家帮助一下。

手册里有下面一张图,使用中间那个模式,我理解PWM波的频率就应该是 F= TBCLK/(TBPRD+1)

F28377S的频率是200MHz,即1/TBCLK=200M,所以想发出5000Hz的话,TBPRD = TBCLK/5000=200M/5000=4000

但是通过示波器测量的是否发现PWM波并没有获得想要的周期0.2ms,而是一个大概在3ms左右。

我把设置TBCLK的代码和示波器照片也贴到下面。请大家帮我看一下,是我理解错了,还是哪里不对。

非常感谢您的帮助!

//// Setup TBCLK//EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count upEPwm2Regs.TBPRD = 40000;// Set timer periodEPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loadingEPwm2Regs.TBPHS.bit.TBPHS = 0x0000;// Phase is 0EPwm2Regs.TBCTR = 0x0000;// Clear counterEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;// Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;

Zhaoming Liu:

回复 user4880999:

非常感谢,我再好好研究一下

赞(0)
未经允许不得转载:TI中文支持网 » PWM的周期应该怎么算
分享到: 更多 (0)