智能车制作

标题: 关于正交解码的 代码的一些问题!! [打印本页]

作者: 头上两只角    时间: 2014-3-5 11:32
标题: 关于正交解码的 代码的一些问题!!
/*==============================================================================
功能: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可以知道转向。

那个TOFDIR  和QUADIR  是什么东西   (用的野火的老库)   也找不到啊   不知道怎么判断、

作者: 头上两只角    时间: 2014-3-5 11:32
查看FTM1_CNT、FTM2_CNT就可知道当前计数值,查看TOFDIR、QUADIR可以知道转向。

那个TOFDIR  和QUADIR  是什么东西   (用的野火的老库)   也找不到啊   不知道怎么判断

作者: huang91    时间: 2014-3-5 12:16
本帖最后由 huang91 于 2014-3-5 12:40 编辑

不顾原理只管程序必然会受人摆布。
blog.csdn.net/hcx25909/article/details/7339242

作者: huang91    时间: 2014-3-5 12:35
本帖最后由 huang91 于 2014-3-5 12:37 编辑

  1. void FTM2_QUAD_Iint(void)  
  2. {  
  3.          PORTA_PCR10= PORT_PCR_MUX(6); // 设置引脚A10引脚为FTM2_PHA功能  
  4.          PORTA_PCR11= PORT_PCR_MUX(6); // 设置引脚A11引脚为FTM2_PHB功能  
  5.          SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;//使能FTM2时钟  
  6.          FTM2_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止  
  7.          FTM2_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同时确定方向和计数值  
  8.          FTM2_CNTIN=0;//FTM0计数器初始值为0  
  9.          FTM2_MOD=65535;//结束值  
  10.          FTM2_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//启用FTM2正交解码模式  
  11.          FTM2_MODE |= FTM_MODE_FTMEN_MASK;//FTM2EN=1   
  12.          FTM2_CNT=0;  
  13. }
复制代码

在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正数则为正转,负数则为反转。




作者: 头上两只角    时间: 2014-3-5 13:32
huang91 发表于 2014-3-5 12:35
在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正 ...

能吗????

作者: 头上两只角    时间: 2014-3-5 19:23
huang91 发表于 2014-3-5 12:35
在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正 ...

你的代码  好像不对啊。

作者: huang91    时间: 2014-3-5 20:18
头上两只角 发表于 2014-3-5 19:23
你的代码  好像不对啊。

这不是我的代码,地址看3L。我看了程序,漏了句选择外部时钟。

作者: 头上两只角    时间: 2014-3-6 08:33
huang91 发表于 2014-3-5 20:18
这不是我的代码,地址看3L。我看了程序,漏了句选择外部时钟。

怎么添加。。。。

作者: stafan    时间: 2014-5-20 22:17
huang91 发表于 2014-3-5 12:35
在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正 ...

小哥能不能给个完整的程序啊,感谢啊





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