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.
请教一下CMPAHR寄存器值是如何计算的?CMPAHR register value = (frac(PWMDuty*PWMperiod)*MEP_ScaleFactor+1.5) << 8);
1、不明白为什么用这个公式,里面的1.5、左移8位都是代表什么意思呢?
2、还有就是MEP_ScaleFactor这个值是固定的吗?比如说时钟为100MHz时,每个时钟周期内都是56步长吗?
3、在定义的时候是直接根据使用的频率来定义步长为多少呢还是需要计算MEP_ScaleFactor?还劳烦朋友们帮忙解答一下。
谢谢两位的答复!
这个公式我是在手册中看到的,spruh22c这个手册的793页;在这一页中公式后面加的是0.5,为什么要加这个值呢??若设置好了CMPAHR这个寄存器的值,当计数器达到CMPA的值后,然后会采用微步长计数在达到CMPAHR的值后AQ模块会去动作从而产生高精度的PWM输出,不知道是否可以这样理解?
hongyue,
添加库和头文件后,还要在程序中周期性调用一个校准函数status = SFO();
至于要加0.5,手册是这么解释的。主要是四舍五入的意思。
In the event that frac(PWMDuty * PWMperiod) * MEP_SF results in a value with a decimal portion ≥ 0.5, this rounding constant will round the CMPAHR value up 1 MEP step
Eric
若设置好了CMPAHR这个寄存器的值,当计数器达到CMPA的值后,然后会采用微步长计数在达到CMPAHR的值后AQ模块会去动作从而产生高精度的PWM输出,不知道是否可以这样理解?谢谢Eric!