打印

光栅传感器和DSP的QEP接口,为什么结果老是往一个方向漂移

[复制链接]
2932|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hitmanman|  楼主 | 2009-9-22 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是2407 DSP
把T2设置成定向增/减计数模式

我物体不动,但是程序结果显示物体老是往同一个方向漂移!!
不知咋回事?

感谢高手指点!

QEP初始化程序如下
void  QepInit()
{
    T2PR=0xFFFF;// 通用定时器2的周期寄存器为0XFFFF
    T2CON=0x1870;// 通用定时器2为定向增减计数模式, 并且以正交编码脉冲
                       // 电路作为时钟源
    T2CNT=0x7FFF;      // 计数器初始值为65536/2=0x7FFF
    WSGR=0x0000;    / 不使能所有的等待状态   
   
   
    EVAIMRB=0x000C;      //只使能定时器的上溢和下溢中断!
    CAPCONA=0x0E00;  // 使能EVA的QEP电路

}


其他程序

main()
{  
   int i;
   SystemInit();                 //系统初始化
   QepInit();                    //正交编码脉冲初始化
   
   MCRC=MCRC & 0x0000;         //IOPE0-7  IOPF0-7  设为I-O口模式
   PEDATDIR=0xFF00;           //所有IOPE0-7=0,
   PFDATDIR=0xFF00;           //所有IOPF0-7=0,

   SCI_Init();   
   
   Timer1Init();                  /*定时器1初始化*/
  // Timer2Init();               /*定时器2初始化*/

   asm(" CLRC INTM ");            /* 开总中断 */

   T1CON=T1CON|0x0040;   // 启动定时器 T1使能
   T2CON=T2CON|0x0040;   // 启动定时器 T2使能

   PEDATDIR=PEDATDIR ^ 0x0001;           //IOPE0取反
   PEDATDIR=PEDATDIR ^ 0x0001;           //IOPE0取反

   PFDATDIR=PFDATDIR ^ 0x0001;           //IOPF0取反
   PFDATDIR=PFDATDIR ^ 0x0001;           //IOPF0取反

   //转动方向控制
   if(MyOrder==0x01 | MyOrder==0x03)
        { PEDATDIR=PEDATDIR | 0x0001;}   //IOPE0取1   电机正转
   if(MyOrder==0x02 | MyOrder==0x04)
        { PEDATDIR=PEDATDIR & 0xFFF0;}   //IOPE0取0   电机反转


        //模拟QEP脉冲,暂时IOPF0取1,IOPE0取1
    //    PEDATDIR=PEDATDIR | 0x0001;
    //    PFDATDIR=PFDATDIR | 0x0001;         


   while(1)  //等待中断
   {

  
  
  
   //模拟QEP 正交编码脉冲
  /*     PEDATDIR=PEDATDIR ^ 0x0001;           //IOPE0取反
       for(kkk=0;kkk<300;kkk++){;}
       PFDATDIR=PFDATDIR ^ 0x0001;           //IOPF0取反
       for(kkk=0;kkk<300;kkk++){;}
       PEDATDIR=PEDATDIR ^ 0x0001;           //IOPE0取反
       for(kkk=0;kkk<300;kkk++){;}
       PFDATDIR=PFDATDIR ^ 0x0001;           //IOPF0取反
       for(kkk=0;kkk<300;kkk++){;}       */

   }
}

void SystemInit()
{  

    asm(" SETC    INTM ");    /* 关闭总中断 */
    asm(" CLRC  SXM  ");    /* 禁止符号位扩展 */
    asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
    asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
    SCSR1=0x83FE;             /* 系统时钟CLKOUT=20*2=40M */
                               /* 打开ADC,EVA,EVB,CAN和SCI的时钟*/

    WDCR=0x006F;            /* 禁止看门狗,看门狗时钟64分频 */
    KickDog();                /* 初始化看门狗 */  
   
    IFR=0xFFFF;                /* 清除中断标志 */
    IMR=0x0007;                /* 打开中断INT 1 2 3*/      
   
}

相关帖子

沙发
hitmanman|  楼主 | 2009-9-23 08:58 | 只看该作者
程序有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

159

帖子

0

粉丝