关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 用dsPIC30F的QEI模块测量交流电机速度和位置(05-100)

用dsPIC30F的QEI模块测量交流电机速度和位置(05-100)

——
作者:Microchip公司 Jorge Zambada时间:2009-02-23来源:电子产品世界收藏

 

本文引用地址:http://www.eepw.com.cn/article/91537.htm

  图6 由标志模式复位

  用QEI计算角速度

  在一个周期性中断中执行速度计算,因为角速度在一个固定时间周期中是增长的数字,这个中断间隔,必须小于最大转速的1/2转所需时间。电机的转速是3450RPM,所以在这个实例中选用4000RPM,以避免在任何速度计算时溢出。下式用于计算时间间隔:

  实例3是定时器1的初始化,用于产生周期性中断,dsPIC DSC运行在14.75MIPS。

  实例3:定时器1初始化,产生0.0075秒ISR周期

  void InitTMR1(void)

  {

  TMR1=0; //复位定时器计数器

  T1CONbit.TON=0; //关闭定时器1

  T1CONbit.TSIDL=0; //睡眠期间连续工作

  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所示数据。

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

  用比较长地时间周期精确计数。必须避免脉冲计数器寄存器POSCN溢出,所以在这种情况下推荐使用POSCN寄存器的精度。

  使用输入捕捉通道代替转换每转计数周期测量。

  用每转产生更多脉冲地增量计数器。

  代码实例选用6010 DSC,开发工具是MPLAB IDE7.11和MPLAB C30 v1.31。■

  (郭盛利)

分频器相关文章:分频器原理

上一页 1 2 3 4 5 下一页

评论


相关推荐

技术专区

关闭