常驻嘉宾
- 积分
- 4053
- 威望
- 1471
- 贡献
- 866
- 兑换币
- 824
- 注册时间
- 2012-8-18
- 在线时间
- 858 小时
- 毕业学校
- 湘潭大学
|
我用FTM 的正交解码模块测速,因为学校买的是单相的编码器,我用QUADMODE=1;时即B相用于方向,我给拉高了,即一直为加计数,用A相接编码器输出;
可问题是 我用FTM输出PWM时和示波器左下角的那个1000Hz输出时测得和理论值几乎一样的数据,可一接上编码器,稍微一动就会有较大的数,上千啊,而且会保留,再动时又会成为0等,变化是乱的啊
代码如下
PORT_PCR_REG(PORTA_BASE_PTR, 8) = PORT_PCR_MUX(6); // 选择PTA8的正交解码功能
PORT_PCR_REG(PORTA_BASE_PTR, 9) = PORT_PCR_MUX(6);
PORT_PCR_REG(PORTA_BASE_PTR, 8) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ; //开弱上拉
PORT_PCR_REG(PORTA_BASE_PTR, 9) |= PORT_PCR_PE_MASK | PORT_PCR_PS_MASK ; //开弱上拉
SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK; //使能FTM1时钟
FTM1_MODE |= FTM_MODE_WPDIS_MASK; // 写保护禁止
FTM1_QDCTRL |= FTM_QDCTRL_QUADMODE_MASK; // B向确定方向A向计数
//FTM1_QDCTRL &= FTM_QDCTRL_PHAPOL_MASK; //PHAPOL=0:普通极性
//FTM1_QDCTRL |= FTM_QDCTRL_PHBPOL_MASK; //PHBPOL=1:反向极性
FTM1_QDCTRL |= FTM_QDCTRL_PHAFLTREN_MASK; //PHAFLTREN=1:A相输入滤波使能。
FTM1_QDCTRL |= FTM_QDCTRL_PHBFLTREN_MASK; //PHAFLTREN=1:B相输入滤波使能。
FTM1_FILTER |= FTM_FILTER_CH0FVAL(5);
FTM1_FILTER |= FTM_FILTER_CH1FVAL(5);
FTM1_CNTIN = 0; // FTM1计数器初始值为0
FTM1_MOD = 65535; // 结束值
FTM1_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; // 启用FTM1正交解码模式
FTM1_MODE |= FTM_MODE_FTMEN_MASK; // FTM1EN=1
FTM1_CNT = 0;
|
|