请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
Victor Zheng:
左移8位是因为CMPAHR只有8个MSB是有效的。那个公式哪里来的?
MEP_ScaleFactor的值表示多少高精度步长等于一个系统时钟周期。 它会随温度等略微变化。
我们一般调用SFO_TI_Build_V6.lib中的SFO()函数来校准和得到MEP_ScaleFactor的值。
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
Eric Ma:
hongyue,
补充第3点,你可以直接根据CPU的频率来计算一个TBCLK有多少个微步长,但是后果是,由于环境温度会变化,导致CPU的频率会稍微波动,所以实际上你这个步长数是不精准的,最终导致你计算出来的HRPWM的占空比也好或是周期值也好都未能达到最好的效果。所以才要调用MEP_ScaleFactor的值,TI根据环境温度变化来调整这个步长数,使得结果更精准。
Eric
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
hongyue yu:
回复 Eric Ma:
谢谢两位的答复!
这个公式我是在手册中看到的,spruh22c这个手册的793页;在这一页中公式后面加的是0.5,为什么要加这个值呢??若设置好了CMPAHR这个寄存器的值,当计数器达到CMPA的值后,然后会采用微步长计数在达到CMPAHR的值后AQ模块会去动作从而产生高精度的PWM输出,不知道是否可以这样理解?
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
hongyue yu:
回复 hongyue yu:
还有就是我们若调用相应的库函数与头文件就行对吗?程序里面就不需要来计算MEP_ScaleFactor这个值了,只是进行一下定义就可以了,不知能否这样理解?
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
hongyue yu:
回复 Eric Ma:
若设置好了CMPAHR这个寄存器的值,当计数器达到CMPA的值后,然后会采用微步长计数在达到CMPAHR的值后AQ模块会去动作从而产生高精度的PWM输出,不知道是否可以这样理解?谢谢Eric!
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
Eric Ma:
回复 hongyue yu:
理解完全正确。
Eric