采用up-down计数模式,则PWM的周期可用如下公式计算Tpwm=2*TBPRD*(1/TBCLK);
若使用HRPWM模式,仍是up-down计数模式,则PWM周期的计算公式仍是Tpwm=2*TBPRD*(1/TB=2*TBPRDCLK),还是应该为Tpwm=2*TBPRD*(1/(TBCLK*MEP_ScaleFactor))呢?也就是说如果采用了HRPWM模式的微步长法是否可以说系统时钟频率变为了原来的MEP_ScaleFactor*SYSCLK?还请朋友们给指点一下,谢谢!
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.
采用up-down计数模式,则PWM的周期可用如下公式计算Tpwm=2*TBPRD*(1/TBCLK);
若使用HRPWM模式,仍是up-down计数模式,则PWM周期的计算公式仍是Tpwm=2*TBPRD*(1/TB=2*TBPRDCLK),还是应该为Tpwm=2*TBPRD*(1/(TBCLK*MEP_ScaleFactor))呢?也就是说如果采用了HRPWM模式的微步长法是否可以说系统时钟频率变为了原来的MEP_ScaleFactor*SYSCLK?还请朋友们给指点一下,谢谢!
hongyue,
采用up-down计数模式,则PWM的周期可用如下公式计算Tpwm=2*TBPRD*(1/TBCLK);
若使用HRPWM模式,仍是up-down计数模式,则PWM周期的计算公式仍是Tpwm=2*TBPRD*(1/TB=2*TBPRDCLK)
是,TBCLK还是按照之前的ePWM的方法计算,跟HRPWM是独立分开的, 换言之,HRPWM模块不会影响ePWM模块的设置。
我觉得系统时钟对于环境温度的细微变化,只会对HRPWM造成影响,不会影响到ePWM模块,还是再一次强调,ePWM模块跟HRPWM模块的配置是分开的。
Eric
现在有点糊涂了,那现在如果我需要使用HRPWM模块,而且MEP_ScaleFactor也已经设置,此时已配置好了CMPA:CMPAHR,现在计数器的计数步长的周期应该为多少呢?比如说CMPA=200,CMPAHR=23,TBCLK=100MHz,MEP_ScaleFactor=66,那这样的话计数器加1是按照100MHz还是按照100*66MHz的频率计数呢?如果按照100MHz频率计数的话,计数到CMPA=200需要的时间为2us;而如果按照100*66MHz频率计数的话,计数到CMPA=200需要2/66=30.3ns。另外计数器计数到CMPAHR=23需要多长时间呢???
感觉如果还是按照原来的频率计数的话,在TBCLK=100MHz时,PWM的最高频率为5MHz,PWM的精度是达不到10.1bits的。
hongyue,
不好意思,可能是我没解释的很清楚。
这样吧,我们举个例子。
假如我们周期值设置为61,递增模式,我要求50%的占空比,那么ePWM比较寄存器的值应该为CMPA = 30.5,但是ePWMs是没办法实现半个TBCLK的,只能设置为30,或31,这时候就会使得占空比并非是50%。
在这种情况下,我们先设置ePWM的CMPA =30,然后使能HRPWM模块,将0.5的TBCLK的周期用HRPWM来实现。那么HRPWM一个TBCLK 根据SFO来进行校准可以计算出1个TBCLK总共为多少个微步长(150ps),也即是MEP_ScaleFactor的值。然后0.5个TBCLK *MEP_ScaleFactor,就是HRPWM中要计数的值。
所以你在计算的时候,你就分成两部分去算就好了,ePWM就按原来的来算,算完后再把不足一个TBCLK的交给HRPWM来计数。
比如说CMPA=200,CMPAHR=23,TBCLK=100MHz,MEP_ScaleFactor=66,那这样的话计数器加1是按照100MHz还是按照100*66MHz的频率计数呢?
ePWM的计数肯定还是按照原来的TBCLK来计数,至于计数到30的时候,PWM并没有马上就动作,应该是会启动HRPWM的计数,当HRPWM计数到对应的微步长数的时候,PWM才动作。HRPWM没有公开技术细节,但我认为应该是这样子。
Eric