智能车制作

标题: 正交解码出了问题 求解决 [打印本页]

作者: 文库闪动    时间: 2015-5-3 14:31
标题: 正交解码出了问题 求解决
正交解码出来寄存器的值老是0 有的时候是1   程序  void qd_init(void)
{
  //配置正交解码功能参数
  ftm2_init_struct.FTM_Ftmx = FTM2;              //只有FTM1和FTM2有正交解码功能
  ftm2_init_struct.FTM_Mode = FTM_MODE_QD;       //正交解码功能
  ftm2_init_struct.FTM_QdMode = QD_MODE_PHAB;    //AB相输入模式
  //初始化FTM
  LPLD_FTM_Init(ftm2_init_struct);
  //使能AB相输入通道
  LPLD_FTM_QD_Enable(FTM2,PTA10,PTA11);
}



uint32 getcounter(void)
{
static uint32 counter=0;
counter= LPLD_FTM_GetCounter(FTM2);
LPLD_FTM_ClearCounter(FTM2);
return counter;

}
作者: 文库闪动    时间: 2015-5-3 14:33
getcounter()放在中端里的
作者: 文库闪动    时间: 2015-5-3 14:34
顶。。。。。。难道没有人吗
作者: 文库闪动    时间: 2015-5-3 14:36
自顶。。。。。。。。。。。。。。。。
作者: dewdyw    时间: 2015-5-3 14:48
试一试K60接A、B信号线的引脚先配置输入上拉,再配置正交解码。
作者: dewdyw    时间: 2015-5-3 15:04
另外,对于K60,虽然LPLD_FTM_GetCounter()返回值是uint32类型,但是正交解码那个脉冲计数是16位的,有正负,所以应该用int16。用uint32会导致读到负的计数时,16位负数(int16)转换成一个很大的32位正数(uint32)。类似于这样,目标平台为x86 PC:
  1. #include <stdio.h>
  2. #include <stdint.h>

  3. int main(void)
  4. {
  5.         typedef int16_t     int16;
  6.             typedef int32_t     int32;
  7.             typedef uint32_t    uint32;

  8.             int16 i16 = -102;
  9.             int32 i32 = (int32)i16;
  10.             uint32 u32 = (uint32)i16;

  11.             printf("%d\n", i32);
  12.             printf("%u\n", u32);

  13.             return 0;
  14. }

  15. // output:
  16. // -102
  17. // 4294967194

复制代码



作者: 文库闪动    时间: 2015-5-3 16:18
dewdyw 发表于 2015-5-3 15:04
另外,对于K60,虽然LPLD_FTM_GetCounter()返回值是uint32类型,但是正交解码那个脉冲计数是16位的,有正负 ...

谢谢 我试试看

作者: 文库闪动    时间: 2015-5-3 16:38
文库闪动 发表于 2015-5-3 16:18
谢谢 我试试看

还是那样 ,估计是对编码器使用不对,用的龙丘的带方向迷你编码器,两路信号采集了计数信号和方向信号,程序放在其他的车上可以测出速度,我得问问龙丘 ,谢谢你

作者: ——◆◇の_爷是    时间: 2015-7-9 16:39
解决了吗?





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