智能车制作

标题: 关于K60正交解码的问题。 [打印本页]

作者: 天空的hero    时间: 2015-6-30 11:48
标题: 关于K60正交解码的问题。
我的k60 ftm正交解码的初始化函数如下。
void FTM2_QUAD_Init(void)
{
  SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

  PORTA_PCR10 = PORT_PCR_MUX(6);
  //PORTA_PCR10 |= PORT_PCR_PE_MASK;
  //PORTA_PCR10 |= PORT_PCR_PS_MASK;

  PORTA_PCR11 = PORT_PCR_MUX(6);
  //PORTA_PCR11 |= PORT_PCR_PE_MASK;
  //PORTA_PCR11 |= PORT_PCR_PS_MASK;

  SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;

  FTM2_MOD = 65535;
  FTM2_CNTIN = 0;

  FTM2_MODE |= FTM_MODE_WPDIS_MASK;

  FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK;

  FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK;
  FTM2_MODE |= FTM_MODE_FTMEN_MASK;

  FTM2_CNT = 0;
  FTM2_SC |= FTM_SC_CLKS(3);
}


PIT定时中断函数如下

void Sys_PIT_Hander(void)//系统时钟PIT中断
{
  Sys.CycFlag = TRUE;  
  Pulse = FTM2_CNT;
  FTM2_CNT = 0;
  Sys_PIT_ClearITPendingBit();//清除中断标志位
}



结果是我把编码器的AB相直接与PA10和PA11口相连,OLED显示Pulse数只有0或者-1,不知道有没有人遇到和我一样的问题,Pulse是int16的。

作者: 冬瓜弗斯    时间: 2015-6-30 12:49

作者: 天空的hero    时间: 2015-6-30 15:04
好像能用了,把A口换成B口就成功了,但是正转和反转脉冲数不一样,基本上是正转脉冲数是反转脉冲数的2倍
作者: 黑色枫夜    时间: 2015-6-30 20:47
我也跪过,不知道原因
作者: 黑色枫夜    时间: 2015-6-30 20:47
找到原因求解答
作者: 天空的hero    时间: 2015-7-1 09:00
黑色枫夜 发表于 2015-6-30 20:47
找到原因求解答

还没找到,就是发现能识别正反转,FTM2_CNT读取后不清零发现正转一圈得到的脉冲数比反转一圈得到的脉冲数多很多,并且正转一圈的脉冲数并不是所谓的4倍关系。

作者: 黑色枫夜    时间: 2015-7-1 11:51
天空的hero 发表于 2015-7-1 09:00
还没找到,就是发现能识别正反转,FTM2_CNT读取后不清零发现正转一圈得到的脉冲数比反转一圈得到的脉冲数 ...

事实上我们也这样试过。。。后来只能换了个片子。。。





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2