【原创】TI C2833x介绍---HRPWM(9)
0赞因为CMPAHR是高8位有效的寄存器,所以为了把它的值限制在1-255的范围内,需要给计算出的MEP加上1.5的偏移量。至于这里的偏移量为什么是加1.5而不是其它的数,在器件手册中并没有提及,目前也没有什么很合理的解释,暂且留作一个问题以后深究;不过如果不是打破沙锅问到底的话也可以暂时不关心它,因为在2833x和2834x上面,这个值都是固定的1.5,在Piccolo系列上面则是固定的0.5。将小数1.5转化为Q8格式下的定点数,为1.5*2^8=384,以16进制表示则是0x0180。
所以上次提到的例子中,CMPAHR的计算步骤为:
第一步,计算传统PWM方法下比较寄存器CMPA的值为:
CMPA的值=int(PWM占空比*PWM周期值)=int(0.405*80)=32,即6进制的0x20
第二步,计算CMPAHR的值为:
CMPAHR的值=(frac(PWM占空比*PWM周期值))* 每个系统时钟周期可以调整的MEP个数+1.5)<<8= (frac(32.4) *55 + 1.5) <<8=6016=0x1780
实际上因为CMPAHR高8位有效,低8位为保留位,所以实际的CMPAHR的值=0x1700。
这里的左移8位和前面1.5转换为0x0180一样,都是把浮点数转换为定点数的方法,因为是8位整数位,所以转换为Q8,也就是左移8位(整好也因为低8位是无效的保留位)。此外,从这两个步骤也可以看出,CMPA寄存器是存储的传统PWM方法对应的比较值,CMPAHR则是对应存储的MEP调整的值,因为CMPAHR最大调整达到接近一个时钟周期,但是又不足1个,所以它存储的是小数部分,而CMPA存储的是整数部分。