Quantcast
Channel: C2000™︎ 微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 12191

转速计算问题

$
0
0

说明:三相异步电机,3KW,额定转速1430。

转速计算模块:

void  speedcac()

  {

 

         //检测转动方向

         DirectionQep = EQep1Regs.QEPSTS.bit.QDF;

        

if(EQep1Regs.QFLG.bit.UTO==1)     // 2ms

         {

Position_k=EQep1Regs.QPOSLAT;

if (DirectionQep==0)    // POSCNT is counting down

         {

            if (Position_k>Position_k_1)

             { tmp1 = -(Encoder_N-(Position_k-Position_k_1)); }  // x2-x1 should be negative

else

            {

tmp1 = Position_k-Position_k_1;}

           }

else if (DirectionQep==1)  // POSCNT is counting up

{

         if (Position_k<Position_k_1)

          { tmp1 =Encoder_N-(Position_k_1-Position_k);}

         else

           {

tmp1 = Position_k-Position_k_1;} // x2-x1 should be positive

         }

 

         if(tmp1>Encoder_N)    //限幅

                        {

                                  Speed_Mr_Rpm = BaseRpm; //1430

                        }

                        else if (tmp1<-Encoder_N)

                                {

                                          Speed_Mr_Rpm = -BaseRpm;//-1430

                                }

                       else

                     { Speed_Mr_Rpm = tmp1*Speed_Mr_Rpm_Scaler;}

 

                        Position_k_1=Position_k;

                       EQep1Regs.QCLR.bit.UTO=1; // Clear interrupt flag

      }

}

EQEP初始化模块:

void InitEQEP1()

{

 

         EQep1Regs.QUPRD=300000; //2ms QUTMR=QUPRD时,锁存位置计数器的值

    EQep1Regs.QDECCTL.bit.QSRC=0;                   //正交计数模式

       EQep1Regs.QEPCTL.bit.FREE_SOFT=1;

       EQep1Regs.QEPCTL.bit.PCRM=01;                   // 最大值时复位

       EQep1Regs.QEPCTL.bit.UTE=1;              // Unit Timeout Enable

       EQep1Regs.QEPCTL.bit.QCLM=1;                    // Latch on unit time out

       EQep1Regs.QEPCTL.bit.QPEN=1;           // QEP enable

       EQep1Regs.QCAPCTL.bit.CEN=1;     //感觉这句可以不用的,好像

       EQep1Regs.QPOSMAX=4095; //4096

       EQep1Regs.QEPCTL.bit.SWI=1; //强制初始化位置计数器(QPOSCNT=QPOSINIT)

       EQep1Regs.QEINT.bit.UTO=1;   //使能单位定时器

}

为什么按照这一计算出来的转速Speed_Mr_Rpm 的值一直很大的范围变化呢?或是转速很高,3000多。





Viewing all articles
Browse latest Browse all 12191

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>