智能车制作

标题: 【脉冲计数】lptmr+FTM_QUAD分享+我遇到的问题orz [打印本页]

作者: zty562694497    时间: 2015-4-19 14:07
标题: 【脉冲计数】lptmr+FTM_QUAD分享+我遇到的问题orz
我是平衡组。。用的是500线的欧姆龙编码器。。程序用的是野火的旧库。。脉冲计数左轮用正交解码计数,,右轮用低功耗lptmr计数。。现在用50%占空比采集脉冲数。遇到了些问题orz
下面上图。。
红色是正交解码。。蓝色是lptmr。。lptmr会间歇性的跳变到零。。请问这是为啥涅。。
[attach]76413[/attach]
第二个问题就是。。换个方向转轮子。。lptmr的数值顿时变低了。。。
[attach]76414[/attach]
PS:我采集时间为5ms,,

下面分享我计数的子函数吧
lptmr:呃。。这个在野火例程里有。。放上来有些过于复杂orz
正交解码:参考论坛里大神的代码稍做了些修改
void FTM_QUAD_init()
{
    /*开启端口时钟*/
    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;//A端口
    SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;//B端口

    /*选择管脚复用功能*/
    PORTA_PCR12 = PORT_PCR_MUX(7);//A12
    PORTA_PCR13 = PORT_PCR_MUX(7);//A13
    PORTB_PCR18 = PORT_PCR_MUX(6);//B18
    PORTB_PCR19 = PORT_PCR_MUX(6);//B19

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

    FTM1_MOD = 65525; //结束值,可根据需要设置
    FTM2_MOD = 65525;

    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);
}

int16 FTM_QUAD_get()  //读取脉冲数值
{
    int16 QD_Value;
    QD_Value = (int16_t)(FTM1_CNT);
    //g_nRQD_Value = (int16_t)(FTM2_CNT);
    FTM1_CNT = 0;
    FTM2_CNT = 0;

    return QD_Value;
}


作者: zty562694497    时间: 2015-4-19 14:21
orz自己顶起
作者: hi希特勒    时间: 2015-4-19 15:13
楼主 既然是平衡组为什么不两路正交解码
作者: zty562694497    时间: 2015-4-19 15:42
咳。。因为主板很干脆的没有预留FTM2的口╮(╯▽╰)╭
作者: hi希特勒    时间: 2015-4-19 15:59
有没有口 不要紧 大不了不要用底层库 我倒是很奇怪lptmr是如何测正负的
作者: zty562694497    时间: 2015-4-19 16:09
hi希特勒 发表于 2015-4-19 15:59
有没有口 不要紧 大不了不要用底层库 我倒是很奇怪lptmr是如何测正负的

加了D触发器咯

作者: 跑龙套的人    时间: 2015-4-19 16:16
不要使用内部上拉,还有LPTMR的口不要用A19(晶振)
作者: zty562694497    时间: 2015-4-19 18:23
跑龙套的人 发表于 2015-4-19 16:16
不要使用内部上拉,还有LPTMR的口不要用A19(晶振)

嗯嗯。。。我使用的是C5。。
不过为何不要使用内部上拉?lptmr_init里需要配置内部上拉呢。。。。如何把内部上拉去除呢?把C5口拿来复用么?

作者: 跑龙套的人    时间: 2015-4-19 18:39
zty562694497 发表于 2015-4-19 18:23
嗯嗯。。。我使用的是C5。。
不过为何不要使用内部上拉?lptmr_init里需要配置内部上拉呢。。。。如何把 ...

K60内部上拉是100k弱上拉,测得不太准。把PULLUP配置去掉就可以取消内部上拉了(你是用野火库的吧)

作者: zty562694497    时间: 2015-4-19 19:16
跑龙套的人 发表于 2015-4-19 18:39
K60内部上拉是100k弱上拉,测得不太准。把PULLUP配置去掉就可以取消内部上拉了(你是用野火库的吧)

用的是野火的旧库。。。
呃。。没有找到配置上拉的地方呢QAQ

作者: chuyuanqiang    时间: 2015-4-26 17:38
跑龙套的人 发表于 2015-4-19 18:39
K60内部上拉是100k弱上拉,测得不太准。把PULLUP配置去掉就可以取消内部上拉了(你是用野火库的吧)

相请问下,为什么用A19不好呢?还有我们的FTM2模块不知道什么原因B148输出,B19没有,是弄块问题还是冲突之类的啊


作者: 跑龙套的人    时间: 2015-4-26 18:19
chuyuanqiang 发表于 2015-4-26 17:38
相请问下,为什么用A19不好呢?还有我们的FTM2模块不知道什么原因B148输出,B19没有,是弄块问题还是冲 ...

A19外接了晶振,B18没输出有可能是软件初始化问题或者IO口烧了

作者: chuyuanqiang    时间: 2015-4-26 21:52
跑龙套的人 发表于 2015-4-26 18:19
A19外接了晶振,B18没输出有可能是软件初始化问题或者IO口烧了

哦哦哦,谢谢啦!

作者: aha_EFj2p    时间: 2017-4-10 10:23
你好,我想问问你用的是什么软件来测的????
作者: znjqr    时间: 2017-4-10 11:08
楼主加油,我们都看好你哦

作者: zty562694497    时间: 2017-7-26 23:19
aha_EFj2p 发表于 2017-4-10 10:23
你好,我想问问你用的是什么软件来测的????

泥壕。波形我用的是山外的多功能调试助手,里面有虚拟示波器功能。没想到以前的旧帖子还会被翻起来。我做了第十届飞思卡尔(没错第十届是最后一次叫飞思卡尔)之后便没有继续做小车了,现在已经毕业开始工作,偶尔回来看看。


作者: 小龙_jIigi    时间: 2018-3-6 17:37
我们的c5用了,只能用a19,但是现在采集不出数据,另一个用的是正交解码,正交解码可以采集出数据,虽说a19采集不准确,但是一直没数据也不对,可能是什么原因




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