關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > 用dsPIC30F的QEI模塊測量交流電機速度和位置(05-100)

用dsPIC30F的QEI模塊測量交流電機速度和位置(05-100)

——
作者:Microchip公司 Jorge Zambada 時間:2009-02-23 來源:電子產(chǎn)品世界 收藏

 

本文引用地址:http://m.butianyuan.cn/article/91537.htm

  圖6 由標志模式復位

  用QEI計算角速度

  在一個周期性中斷中執(zhí)行速度計算,因為角速度在一個固定時間周期中是增長的數(shù)字,這個中斷間隔,必須小于最大轉速的1/2轉所需時間。電機的轉速是3450RPM,所以在這個實例中選用4000RPM,以避免在任何速度計算時溢出。下式用于計算時間間隔:

  實例3是定時器1的初始化,用于產(chǎn)生周期性中斷,dsPIC DSC運行在14.75MIPS。

  實例3:定時器1初始化,產(chǎn)生0.0075秒ISR周期

  void InitTMR1(void)

  {

  TMR1=0; //復位定時器計數(shù)器

  T1CONbit.TON=0; //關閉定時器1

  T1CONbit.TSIDL=0; //睡眠期間連續(xù)工作

  T1CONbit.TGATE=0; //禁止進入精確定時器

  T1CONbit.TCS=0; //使用Tcy作為時鐘源

  T1CONbit.TCK=2; //Tcy/64作為輸入時鐘

  PR1=1728 ;

  //用64預分頻器確定中斷周期=0.0075秒

  IFSobit.T1IF=0; //清定時器1中斷標志

  IECobits.T1IE=1; //允許定時器1中斷

  T1CONbits.TON=1; //打開定時器1

  turn;

  }

  實例4是在周期性ISR中計算速度變量:

  實例4:角速度計算實例

  #define MAX_CNT_PER_REV(500*4-1)

  #define MAXSPEED (unsigned int)(((unsigned long)MAX_CNT_PER_REV*2048)/125)

  #define HALFMAXSPEED (MAXSPEED>>1)

  int Speed;

  void_attribute_((_interrupt_))_T1Interrupt(void)

  {

  IFSobits.T1IF=0;//清定時器1中斷標志

  PositionCalculation();

  Speed=AngPos[0]- AngPos[1];

  If(Speed>=0)

  {

  if (Speed>=(HALFMAXSPEED)

  Speed=Speed-MAXSPEED;

  }

  else

  {

  if (Speed<-(HALFMAXSPEED)

  Speed=Speed+MAXSPEED;

  }

  Speed*=2;

  Return;

  }

  結語

  從本文的編碼實例,可以得到表1所示數(shù)據(jù)。

  如果測量的速度和角位置需要比較高的分辨率,可以用下列方法:

  用比較長地時間周期精確計數(shù)。必須避免脈沖計數(shù)器寄存器POSCN溢出,所以在這種情況下推薦使用POSCN寄存器的精度。

  使用輸入捕捉通道代替轉換每轉計數(shù)周期測量。

  用每轉產(chǎn)生更多脈沖地增量計數(shù)器。

  代碼實例選用6010 DSC,開發(fā)工具是MPLAB IDE7.11和MPLAB C30 v1.31。■

  (郭盛利)

分頻器相關文章:分頻器原理

上一頁 1 2 3 4 5 下一頁

評論


相關推薦

技術專區(qū)

關閉