金牌会员
- 积分
- 2094
- 威望
- 1037
- 贡献
- 619
- 兑换币
- 675
- 注册时间
- 2014-8-22
- 在线时间
- 219 小时
- 毕业学校
- 郑州轻工业学院
|
/************************************************************************/
/* 正交解码 */
//它是两路脉冲的所有边沿都检测的,所得计数器的值要除以4才能得到实际脉冲数
//在周期性定时中断服务程序中,读取FTMx_CNT的值即可得到当前的转速,记得清零FTMx_CNT
//使用int变量保存,如为正数则为正转,负数则为反转。
/************************************************************************/
void FTM_QUAD_INIT(void)
{
/*开启端口时钟*/
SIM_SCGC5 |=SIM_SCGC5_PORTA_MASK;
/*选择管脚复用功能*/
PORTA_PCR8=PORT_PCR_MUX(6);//设置引脚PA8为FTM1_PHA功能
PORTA_PCR9=PORT_PCR_MUX(6);//设置引脚PA9为FTM1_PHB功能
PORTA_PCR10=PORT_PCR_MUX(6);//设置引脚PA10为FTM2_PHA功能
PORTA_PCR11=PORT_PCR_MUX(6);//设置引脚PA11为FTM2_PHB功能
/*使能FTM1、FTM2时钟*/
SIM_SCGC6 |=SIM_SCGC6_FTM1_MASK;//FTM1的使能时钟
SIM_SCGC3 |=SIM_SCGC3_FTM2_MASK;//FTM2的使能时钟
FTM1_MODE |=FTM_MODE_WPDIS_MASK;//禁止写保护
FTM2_MODE |=FTM_MODE_WPDIS_MASK;//禁止写保护
FTM1_CNTIN=0;//FTM1的初始值为0
FTM2_CNTIN=0;//FTM2的初始值为0
FTM1_MOD=65535;//结束值
FTM2_MOD=65535;//结束值 自己设定
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_CNT = 0;
FTM2_CNT = 0;
FTM1_SC |=FTM_SC_CLKS(3);//选择外部时钟
// FTM1_CONF |=FTM_CONF_BDMMODE(3);//可根据需要选择
FTM2_SC |=FTM_SC_CLKS(3);
// FTM2_CONF |=FTM_CONF_BDMMODE(3);
//输入滤波可选
//写入该寄存器的值将立刻起作用
//而且通道0、1、2、3必须在输入模式下,如设置不当可能造成错过正确的信号。
/*
FTM1_QDCTRL_PHAFLTREN=1;
FTM1_QDCTRL_PHBFLTREN=1;
FTM2_QDCTRL_PHAFLTREN=1;
FTM2_QDCTRL_PHBFLTREN=1;
*/
|
|