微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 关于eQEP关凤程序的疑问

关于eQEP关凤程序的疑问

时间:10-02 整理:3721RD 点击:
   tmp = (long)((long)p->theta_raw*(long)p->mech_scaler);          // Q0*Q26 = Q26
     tmp &= 0x03FFF000;                                       
     p->theta_mech = (int)(tmp>>11);                         // Q26 -> Q15
     p->theta_mech &= 0x7FFF;                       
         
         // The following lines calculate p->elec_mech   
     p->theta_elec = p->pole_pairs*p->theta_mech;  // Q0*Q15 = Q15
     p->theta_elec &= 0x7FFF;                     
这一段是什么原理 为什么要这样写啊
        if(EQep1Regs.QFLG.bit.UTO==1)                    // If unit timeout (one 100Hz period)
        {
                /** Differentiator        **/
                // The following lines calculate position = (x2-x1)/4000 (position in 1 revolution)
                 pos16bval=(unsigned int)EQep1Regs.QPOSLAT;                      // Latched POSCNT value               
             tmp = (long)((long)pos16bval*(long)p->mech_scaler);            // Q0*Q26 = Q26
             tmp &= 0x03FFF000;
             tmp = (int)(tmp>>11);                                                   // Q26 -> Q15
             tmp &= 0x7FFF;
                newp=_IQ15toIQ(tmp);      这句话是什么意思啊
                oldp=p->oldpos;
                   if (p->DirectionQep==0)                                      // POSCNT is counting down
                   {
                    if (newp>oldp)
                              Tmp1 = - (_IQ(1) - newp + oldp);    // x2-x1 should be negative
                    else
                      Tmp1 = newp -oldp;
                   }

不好意思,我也不懂

第一段是计算角度公式的程序。
第二句是声明的新值。
第三局使电机反转计算的单位时间。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top