智能车制作

标题: 编码器波形!!! [打印本页]

作者: 头上两只角    时间: 2015-9-16 12:45
标题: 编码器波形!!!
使用编码器获得脉冲的时候。。为什么会有突然间的增大。。。。。。两个信号口只接 上拉电阻 ,,,,用不用加电容???   

作者: CSU虚心向前    时间: 2015-9-16 13:47
上拉后,电压还会变?
作者: zty562694497    时间: 2015-9-16 18:50
你可以拿示波器看看定时器的周期是否正常
作者: Quixote    时间: 2015-9-16 21:29
是变成255么?还是几万?
作者: 头上两只角    时间: 2015-9-17 07:54
本帖最后由 头上两只角 于 2015-9-17 07:55 编辑
Quixote 发表于 2015-9-16 21:29
是变成255么?还是几万?

虚拟示波器显示几万。。。。   一段时间正常但是突然出现尖峰脉冲。。数据变成几万了。。

作者: Quixote    时间: 2015-9-17 13:29
头上两只角 发表于 2015-9-17 07:54
虚拟示波器显示几万。。。。   一段时间正常但是突然出现尖峰脉冲。。数据变成几万了。。

你换成signed long int试试

作者: 头上两只角    时间: 2015-9-17 17:59
Quixote 发表于 2015-9-17 13:29
你换成signed long int试试

好的我试试看。。。。

作者: 头上两只角    时间: 2015-9-17 21:59
Quixote 发表于 2015-9-17 13:29
你换成signed long int试试

还是不行。。。

作者: Quixote    时间: 2015-9-18 11:53
头上两只角 发表于 2015-9-17 21:59
还是不行。。。

把你底层函数发上来看看

作者: 头上两只角    时间: 2015-9-18 12:59
Quixote 发表于 2015-9-18 11:53
把你底层函数发上来看看

   LeftPulse = FTM1_CNT;
    LeftPulse = (LeftPulse >30000)?(LeftPulse-65535)eftPulse;
    FTM1_CNT = 0;
    LeftSpeed = LeftPulse;

    RightPulse = FTM2_CNT;
    RightPulse = (RightPulse >30000)?(RightPulse-65535):RightPulse;
    FTM2_CNT = 0;
    RightSpeed = RightPulse;



正常的底层。。野火的。。


void FTM_QUAD_init()
{
      /*开启端口时钟*/
    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

    /*选择管脚复用功能*/
    PORTA_PCR12 = PORT_PCR_MUX(7);
    PORTA_PCR13 = PORT_PCR_MUX(7);
    PORTA_PCR11 = PORT_PCR_MUX(6);
    PORTA_PCR10 = PORT_PCR_MUX(6);


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

    FTM1_CNTIN = 0;
    FTM2_CNTIN = 0;
    FTM1_MOD = 65535; //可根据需要设置
    FTM2_MOD = 65535; //可根据需要设置

    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); //可根据需要选择
    FTM1_CNT=0;
    FTM2_CNT=0;
}




作者: Quixote    时间: 2015-9-18 13:13
本帖最后由 Quixote 于 2015-9-18 13:24 编辑

RightPulse改为signed short int
其余改为:RightPulse = *((signed short int*)(&FTM2_CNT));/*这个改动有问题的话,使用signed short int temp = FTM2_CNT;
RightPulse = *((signed short int*)(&temp));  */
    FTM2_CNT = 0;
    RightSpeed = RightPulse;//RightSpeed的类型也要改为有符号的
试试

作者: 头上两只角    时间: 2015-9-18 17:48
Quixote 发表于 2015-9-18 13:13
RightPulse改为signed short int
其余改为:RightPulse = *((signed short int*)(&FTM2_CNT));/*这个改动 ...

我定义的也都是int类型。。。。
作者: Quixote    时间: 2015-9-18 19:12
头上两只角 发表于 2015-9-18 17:48
我定义的也都是int类型。。。。

是signed short int么?

作者: 头上两只角    时间: 2015-9-18 21:49
Quixote 发表于 2015-9-18 19:12
是signed short int么?

不是。。。。。有什么区别吗???
作者: Quixote    时间: 2015-9-18 22:03
头上两只角 发表于 2015-9-18 21:49
不是。。。。。有什么区别吗???

不同编译器有不同,你换下试试呗





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