注册 登录
查看: 943|回复: 6

[K60] 求教FTM正交解码的问题

[复制链接]
发表于 2013-8-17 10:58:57 | 显示全部楼层 |阅读模式
//以下代码由群友:火云邪神 提供,非常感谢!
//FTM1_CNT=0;   用s16变量保存,他就是脉冲,负数表示反方向

/*配置正交解码*/

void FTM2_QUAD_Iint(void)
{
    PORTB_PCR18= PORT_PCR_MUX(6); // 设置引脚A10引脚为FTM2_PHA功能  
    PORTB_PCR19= PORT_PCR_MUX(6); // 设置引脚A11引脚为FTM2_PHB功能  
    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;  
}

void FTM1_QUAD_Iint(void)
{
    PORTA_PCR12= PORT_PCR_MUX(7); // 设置引脚A12引脚为FTM1_PHA功能  
    PORTA_PCR13= PORT_PCR_MUX(7); // 设置引脚A13引脚为FTM1_PHB功能  
    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;  
}
这个是山外大哥提供的代码。现在有几个问题:

1、读取方向的 TOFDIR  和QUADIR 这两个寄存器在底层中并没有进行过定义,它是这么读取到方向的?
2、我直接用了以上代码调试,发现它只能准确测量一个方向的的脉冲,反方向的测不出来,这个是什么情况?
3、这个帖子上,山外大哥说正交解码的A相只能接脉冲,B相接方向,接错了就测不出脉冲数,编码器的AB相输出的不都是脉冲吗?只有相位上相差九十度 。怎么会分为脉冲和方向的呢?是怎么分的?
PS:http://www.vcan123.com/forum.php?mod=viewthread&tid=347

版主,各位大神,求指教啊~~~多谢~~~~




回复

使用道具 举报

发表于 2013-8-17 11:14:31 | 显示全部楼层
FTM1_CNT=0;   用s16变量保存,他就是脉冲,负数表示反方向

这里说得很明显了,
  1. s16  var = FTM1_CNT;
  2. if(var >= 0)
  3. {
  4.     //正转
  5. }else
  6. {
  7.     //反转
  8. }

只有 编码器支持 AB相才可以测反向,如果你把B相接高电平,就会测到一个方向。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-17 12:02:20 | 显示全部楼层
小学童鞋 发表于 2013-8-17 11:14
FTM1_CNT=0;   用s16变量保存,他就是脉冲,负数表示反方向

这里说得很明显了,


我中断里就是这么写的啊!先只能读一个方向的值,两一个方向的值不对,一直是63***左右。

我现在就是把编码器的A想接在FTM1_PHA, B相接在FTM1_PHB上的,只能测一个方向的脉冲数



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-8-17 12:50:53 | 显示全部楼层
♂荻夜 发表于 2013-8-17 12:02
我中断里就是这么写的啊!先只能读一个方向的值,两一个方向的值不对,一直是63***左右。

我现在就是 ...

你看清楚说明啊!!!
s16 ,不是 s32
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-17 13:46:43 | 显示全部楼层
小学童鞋 发表于 2013-8-17 12:50
你看清楚说明啊!!!
s16 ,不是 s32

S16和是S32不就是一个是有符号短整型一个是有符号长整型吗?要区别的很开吗?之前我也是就是用的s16,觉得我500ms测一次编码器的值会比较大,所用用了长整形的,这个和只能测一个方向应该没有关系吧。说明我看真看了,就是没有出来现象
回复 支持 反对

使用道具 举报

发表于 2013-8-17 14:08:58 | 显示全部楼层
♂荻夜 发表于 2013-8-17 13:46
S16和是S32不就是一个是有符号短整型一个是有符号长整型吗?要区别的很开吗?之前我也是就是用的s16,觉得 ...

在这里,必须区分开,否则就会出现你的问题
回复 支持 反对

使用道具 举报

发表于 2014-5-6 21:40:09 | 显示全部楼层
FTM2_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同时确定方向和计数值  ,,这个和 //FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式一样吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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