智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5445|回复: 13
打印 上一主题 下一主题

【求助!快崩溃了】求大神指点下K60的两路正交解码

[复制链接]

3

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
887
威望
445
贡献
278
兑换币
291
注册时间
2013-4-1
在线时间
82 小时
跳转到指定楼层
1#
发表于 2014-5-28 01:45:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚临时换的K60芯片,双电机测速已经纠结很多天了,一直没有读数
用的代码是论坛上搜来的,代码应该没什么问题吧......
/*======================================================================
功能:FTM1、FTM2模块双路正交脉冲计数;
引脚:PTA12、PTA13、PTA10、PTA11
内容:初始化FTM1、FTM2的正交解码功能;
参数:无
======================================================================*/
void FTM_QUAD_init()
{
    /*开启端口时钟*/
    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

    /*选择管脚复用功能*/
    PORTA_PCR12 = PORT_PCR_MUX(7);
    PORTA_PCR13 = PORT_PCR_MUX(7);
    PORTA_PCR10 = PORT_PCR_MUX(6);
    PORTA_PCR11 = PORT_PCR_MUX(6);

    /*使能FTM1、FTM2时钟*/
    SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;
    SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;

    FTM1_MOD = 14000; //可根据需要设置
    FTM2_MOD = 14000;

    FTM1_CNTIN = 0;
    FTM2_CNTIN = 0;

    FTM1_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
    FTM2_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
    FTM1_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能
    FTM2_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能

    FTM1_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式
    FTM1_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式
    FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式
    FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式

    FTM1_SC |= FTM_SC_CLKS(3);  //选择外部时钟
//   FTM1_CONF |=FTM_CONF_BDMMODE(3); //可根据需要选择
    FTM2_SC |= FTM_SC_CLKS(3);
//   FTM2_CONF |=FTM_CONF_BDMMODE(3);

}


查看FTM1_CNT、FTM2_CNT就可知道当前计数值,查看TOFDIR、QUADIR可以知道转向。

我很纠结是不是编码器连错了,我两根信号线没做任何处理直接连的FTM1模块的两个引脚,是不是应该加个上拉电阻.......还是不能这么连?
还是我编码器有问题,我用的型号是OME-100-1N?
跪求大神指点一二,没多少时间了:'(:'(
回复

使用道具 举报

6

主题

618

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6491
威望
3362
贡献
527
兑换币
2332
注册时间
2013-8-31
在线时间
1301 小时
2#
发表于 2014-5-28 01:57:31 | 只看该作者
可以用示波器看看两根信号线是不是相差90度。
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
887
威望
445
贡献
278
兑换币
291
注册时间
2013-4-1
在线时间
82 小时
3#
 楼主| 发表于 2014-5-28 02:01:10 | 只看该作者
allenanswerzq 发表于 2014-5-28 01:57
可以用示波器看看两根信号线是不是相差90度。

如果相位相差90度,两个信号直接连到FTM两个引脚上就行了吗?
回复 支持 反对

使用道具 举报

6

主题

618

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6491
威望
3362
贡献
527
兑换币
2332
注册时间
2013-8-31
在线时间
1301 小时
4#
发表于 2014-5-28 02:41:47 | 只看该作者
忆枫 发表于 2014-5-28 02:01
如果相位相差90度,两个信号直接连到FTM两个引脚上就行了吗?

有些引脚是不能正交解码的。。比如A11和A10。
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
887
威望
445
贡献
278
兑换币
291
注册时间
2013-4-1
在线时间
82 小时
5#
 楼主| 发表于 2014-5-28 11:41:09 | 只看该作者
allenanswerzq 发表于 2014-5-28 02:41
有些引脚是不能正交解码的。。比如A11和A10。

10和11不是FTM2模块么,应该可以的啊。不是只有FTM0不能正交解码的么?
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1562
威望
721
贡献
441
兑换币
469
注册时间
2013-11-6
在线时间
200 小时
6#
发表于 2014-5-28 13:05:27 | 只看该作者
我用的是B0,B1和B18,B19。   FTM1_CNT、FTM2_CNT除了大小是还有正负的,即方向,所以只要这两个量就行了。主函数里初始化一下这个函数就能用这两个量了
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
887
威望
445
贡献
278
兑换币
291
注册时间
2013-4-1
在线时间
82 小时
7#
 楼主| 发表于 2014-5-28 13:53:11 | 只看该作者
Traveling_light 发表于 2014-5-28 13:05
我用的是B0,B1和B18,B19。   FTM1_CNT、FTM2_CNT除了大小是还有正负的,即方向,所以只要这两个量就行了。 ...

能不能加个QQ交流一下?
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1562
威望
721
贡献
441
兑换币
469
注册时间
2013-11-6
在线时间
200 小时
8#
发表于 2014-5-28 23:14:03 | 只看该作者
忆枫 发表于 2014-5-28 13:53
能不能加个QQ交流一下?

1390424927   我不是大神哦,不过小问题应该还是能解决的
回复 支持 反对

使用道具 举报

5

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
995
威望
452
贡献
321
兑换币
295
注册时间
2014-2-26
在线时间
111 小时
9#
发表于 2014-6-23 10:20:47 | 只看该作者
lz解决了么 我们遇到同样的问题啦  而且代码和你复制的是一个 。。。
回复 支持 反对

使用道具 举报

3

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
887
威望
445
贡献
278
兑换币
291
注册时间
2013-4-1
在线时间
82 小时
10#
 楼主| 发表于 2014-6-28 18:10:51 | 只看该作者
zkm123 发表于 2014-6-23 10:20
lz解决了么 我们遇到同样的问题啦  而且代码和你复制的是一个 。。。

解决了,直接用的野火的库了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 12:19 , Processed in 0.078117 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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