[讨论] eQEP测速公式的实现

z_jzhao   2013-1-14 17:27 楼主
以上代码为实现以下公式
       当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         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是如何表示的,请各位赐教!

   
  

回复评论 (1)

只要理解QEP是怎么工作的,自己做个测速函数好了。
点赞  2013-1-16 17:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复