智能车制作

标题: 编码器,正交解码 [打印本页]

作者: DHTCL    时间: 2014-5-17 13:02
标题: 编码器,正交解码
我用的是正交解码,现在遇到了一个问题, FTM1_CNT, FTM2_CNT这两个值是左右电机的脉冲采集的数值,但是这两个值不能够从0变为负值,请问怎么解决?还有TOFDIR、QUADIR这两个量怎么查询,这两个量是电机的转向
代码如下
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= 0;
    FTM2_CNT= 0;
   

}

作者: allenanswerzq    时间: 2014-5-17 16:41
变量设为有符号的即可。。。
作者: yayang2008    时间: 2014-5-17 20:01
很简单,设置个变量,当正向电压时,把脉冲数直接赋给变量,当施加到电机上的电压是负的时候,把采集脉冲数的负值负给变量,对变量进行积分,这样就可以有正有负了,得到的结果参与运算,




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