常驻嘉宾
- 积分
- 4946
- 威望
- 2641
- 贡献
- 1439
- 兑换币
- 1337
- 注册时间
- 2014-8-31
- 在线时间
- 433 小时
- 毕业学校
- 河海大学
|
我是平衡组。。用的是500线的欧姆龙编码器。。程序用的是野火的旧库。。脉冲计数左轮用正交解码计数,,右轮用低功耗lptmr计数。。现在用50%占空比采集脉冲数。遇到了些问题orz
下面上图。。
红色是正交解码。。蓝色是lptmr。。lptmr会间歇性的跳变到零。。请问这是为啥涅。。
第二个问题就是。。换个方向转轮子。。lptmr的数值顿时变低了。。。
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;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|