eQEP测速公式的实现
以上代码为实现以下公式
当QPOSCNT递增时: (x2-x1)一定 <4000 ,对于正向旋转(x2-x1)/1000〈 1;
当QPOSCNT递减时: (x2-x1)一定 >-4000 ,对于么向旋转(x2-x1)/4000>-1
因此: speed_fr = [(x2-x1)/4000]/[(1/6000) min * 6000rpm] = (x2-x1)/4000
代码如下:
if (p->DirectionQep==0) // POSCNT递减计数
{
if (newp>oldp)
Tmp1 = - (_IQ(1) - newp + oldp); // x2-x1为负 -4000〈 x2-x1〈 0
else
Tmp1 = newp -oldp;
}
else if (p->DirectionQep==1) // POSCNT递增计数
{
if (newp<oldp)
Tmp1 = _IQ(1) + newp - oldp; /* _IQ(1)=1*2的24次方=16777216.0L
GLOBAL_Q =24 则_IQ(A)= _IQ24(A))=((A) * 16777216.0L)
*/
else
Tmp1 = newp - oldp; // x2-x1为正 4000 〉x2-x1 〉0
}
注:newp 、oldp相当于X1,X2,在代码中都是以Q24的值表示,但是为什么带要有个_IQ(1) 参入到其中,而且除以4000是如何表示的,请各位赐教!
|