智能车制作

标题: 正交解码得出的数据都是正的 [打印本页]

作者: 默冩﹏摯愛    时间: 2015-3-4 18:49
标题: 正交解码得出的数据都是正的
K60正交解码得出的数据都是正的。正转正常,反转就是6万多。我以为是数据类型的问题,但是定义的是有符号的16位数据类型
void FTM1_QUAD_Iint(void)
{
    PORTA_PCR12= PORT_PCR_MUX(7); // 设置引脚A8引脚为FTM1_PHA功能  
    PORTA_PCR13= PORT_PCR_MUX(7); // 设置引脚A9引脚为FTM1_PHB功能  
    PORT_PCR_REG(PORTA_BASE_PTR, 12) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ;      //开弱上拉
    PORT_PCR_REG(PORTA_BASE_PTR, 13) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ;      //开弱上拉

    SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;//使能FTM1时钟  
    FTM1_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止  
    FTM1_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同时确定方向和计数值  
    FTM1_CNTIN=0;//FTM0计数器初始值为0  
    FTM1_MOD=65535;//结束值  
    FTM1_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//启用FTM1正交解码模式  
    FTM1_MODE |= FTM_MODE_FTMEN_MASK;//FTM1EN=1   
    FTM1_CNT=0;  
}
//*****************************************************************************
//  FTM2 编码器2  引脚 PTA 10-11
//*****************************************************************************
void FTM2_QUAD_Iint(void)  
{  
  PORTB_PCR18    =  PORT_PCR_MUX(6);                                            // 设置引脚A10引脚为FTM2_PHA功能  
  PORTB_PCR19    =  PORT_PCR_MUX(6);                                            // 设置引脚A11引脚为FTM2_PHB功能  
  PORT_PCR_REG(PORTB_BASE_PTR, 18) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ;     //开弱上拉
  PORT_PCR_REG(PORTB_BASE_PTR, 19) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ;     //开弱上拉
  SIM_SCGC3     |=  SIM_SCGC3_FTM2_MASK;                                        // 使能FTM2时钟  
  FTM2_MODE     |=  FTM_MODE_WPDIS_MASK;                                        // 写保护禁止  
  FTM2_QDCTRL   |=  FTM_QDCTRL_QUADMODE_MASK;                                   // AB相同时确定方向和计数值  
  FTM2_CNTIN     =  0;                                                          // FTM0计数器初始值为0  
  FTM2_MOD       =  65535;                                                      // 结束值  
  FTM2_QDCTRL   |=  FTM_QDCTRL_QUADEN_MASK;                                     // 启用FTM2正交解码模式  
  FTM2_MODE     |=  FTM_MODE_FTMEN_MASK;                                        // FTM2EN=1   
  FTM2_CNT       =  0;  
}
求解!
while(1)
   {  
    printf("当前值是%d\n", FTM1_CNT);
}

作者: zhou1994    时间: 2015-3-4 18:55
先把寄存器的值附给一个s16或者s32的数,然后打印这个数。不要直接打印寄存器
作者: 空有一人    时间: 2015-3-4 19:06
:):)
作者: 1685063539    时间: 2015-3-4 19:43
FTM1_CNT的类型是uint32_t,,,,试着用十六进制打印
作者: zhou1994    时间: 2015-3-4 19:55
1685063539 发表于 2015-3-4 19:43
FTM1_CNT的类型是uint32_t,,,,试着用十六进制打印

不要误导他。还成无符号了。。。。

作者: 默冩﹏摯愛    时间: 2015-3-4 20:41
谢谢你们,已经解决了
作者: 綿婲/ka餹    时间: 2015-3-4 23:27
楼主怎样解决的
作者: tt跳跳tt    时间: 2015-3-4 23:32
:lol:lol
作者: 、痕迹    时间: 2015-3-5 00:24
手动处理.....[attach]74801[/attach]
作者: Slayers    时间: 2015-3-7 10:51
、痕迹 发表于 2015-3-5 00:24
手动处理.....

我也是这样搞的

作者: 夜雨寒    时间: 2015-3-7 20:53
、痕迹 发表于 2015-3-5 00:24
手动处理.....

同样方法的路过

作者: considering    时间: 2015-6-20 16:48
我的也是正转是速度越大,脉冲数也就越大,如果反转,貌似速度越快,脉冲数越小。不过是从65535开始较小的,问了一下,都说反转时应该是负数,然后就蒙了,该怎么解决呀?人为出来可以吗?




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