智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 963|回复: 8
打印 上一主题 下一主题

正交解码出了问题 求解决

[复制链接]

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
跳转到指定楼层
1#
发表于 2015-5-3 14:31:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正交解码出来寄存器的值老是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;

}
回复

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
414
威望
210
贡献
136
兑换币
118
注册时间
2014-12-3
在线时间
34 小时
毕业学校
重庆大学
推荐
发表于 2015-5-3 14:48:29 | 只看该作者
试一试K60接A、B信号线的引脚先配置输入上拉,再配置正交解码。
回复 支持 1 反对 0

使用道具 举报

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
2#
 楼主| 发表于 2015-5-3 14:33:14 | 只看该作者
getcounter()放在中端里的
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
3#
 楼主| 发表于 2015-5-3 14:34:00 | 只看该作者
顶。。。。。。难道没有人吗
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
4#
 楼主| 发表于 2015-5-3 14:36:24 | 只看该作者
自顶。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
414
威望
210
贡献
136
兑换币
118
注册时间
2014-12-3
在线时间
34 小时
毕业学校
重庆大学
6#
发表于 2015-5-3 15:04:16 | 只看该作者
另外,对于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

复制代码


回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
7#
 楼主| 发表于 2015-5-3 16:18:41 | 只看该作者
dewdyw 发表于 2015-5-3 15:04
另外,对于K60,虽然LPLD_FTM_GetCounter()返回值是uint32类型,但是正交解码那个脉冲计数是16位的,有正负 ...

谢谢 我试试看
回复 支持 反对

使用道具 举报

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
754
威望
111
贡献
55
兑换币
61
注册时间
2014-10-23
在线时间
294 小时
毕业学校
西南民族大学
8#
 楼主| 发表于 2015-5-3 16:38:07 | 只看该作者

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

使用道具 举报

0

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
543
威望
273
贡献
172
兑换币
174
注册时间
2014-9-30
在线时间
49 小时
毕业学校
攀枝花学院
9#
发表于 2015-7-9 16:39:44 | 只看该作者
解决了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-22 15:51 , Processed in 0.052558 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表