大家好,我正在用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:
非常感谢,我再好好研究一下