亿加合和智能车制作

标题: K60 编码器测速程序不对啊,大师进··· [打印本页]

作者: automate    时间: 2012-12-26 15:38
标题: K60 编码器测速程序不对啊,大师进···

打算使用FTM的counter完成对编码器输出脉冲的计数,现在使用FTM的正交解码模式中的count and direction encoding mode(只进行测速,不用辨别电机转向),比如说使用FTM1模块的通道0接编码器的脉冲输出,通道1接高电平,这样FTM1的counter就会随编码器的脉冲加法计数,下面是我写的程序(有问题),不知道出在什么地方,调试时,编码器脉冲输出正常,FTM各寄存器初始化亦正常,但给FTM1通道0大约400HZ的脉冲时,FTM1中的CNT寄存器并不进行计数·······
求助各位大大,

void pulse_counter_init(void)         //编码器计数器初始化
{
        SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
        PORTA_PCR12 = PORT_PCR_MUX(3);     //
        PORTA_PCR13 = PORT_PCR_MUX(3);          //
        PORTB_PCR18 = PORT_PCR_MUX(3);
        PORTB_PCR19 = PORT_PCR_MUX(3);
       
        SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;   //选通FTM1时钟
        SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;   //选通FTM2时钟
       
        FTM1_CNTIN = 0x0000u;
        FTM1_CNT =0x1234;  
        FTM1_MOD = 0xffff; // FTM counter is free running counter
        FTM2_CNTIN = 0x0000u;
        FTM2_CNT =0x1234;  
        FTM2_MOD = 0xffff; // FTM counter is free running counter
       
        FTM1_MODE |= FTM_MODE_FTMEN_MASK;
        FTM2_MODE |= FTM_MODE_FTMEN_MASK;       
       
        FTM1_C0SC |= FTM_CnSC_ELSA_MASK;     //捕捉输入上升沿
        FTM1_QDCTRL |= FTM_QDCTRL_QUADMODE_MASK  //Count and direction encoding mode
                                                          | FTM_QDCTRL_QUADEN_MASK; //  使能正交解码模式
       
        FTM2_C0SC |= FTM_CnSC_ELSA_MASK;     //捕捉输入上升沿
        FTM2_QDCTRL |= FTM_QDCTRL_QUADMODE_MASK  //Count and direction encoding mode
                                                          | FTM_QDCTRL_QUADEN_MASK; //  使能正交解码模式               
       
        FTM1_CONF |= FTM_CONF_BDMMODE(3); //bdm调试时,计数器冻结
        FTM2_CONF |= FTM_CONF_BDMMODE(3); //bdm调试时,计数器冻结
       
        FTM1_SC |= FTM_SC_PS(0) | FTM_SC_CLKS(1);
        FTM2_SC |= FTM_SC_PS(0) | FTM_SC_CLKS(1);  
}



补充内容 (2012-12-26 19:36):
原来是那个信号复选有问题哈,现在有数字了,但是测得不准,定时5ms,测760us的脉冲才能测4个坑啊
作者: hpbfsj    时间: 2013-4-28 12:48
楼主啊    能告诉一下   FTM正交解码是怎么测速的吗!  看了几天  没什么头绪啊!
作者: cyp    时间: 2013-7-5 16:58
请问FTM1 和FTM2都要分别给脉冲吗?
作者: automate    时间: 2013-7-6 21:45
cyp 发表于 2013-7-5 16:58
请问FTM1 和FTM2都要分别给脉冲吗?

看你用几个通道了,两个编码器,就两个都要给了

作者: cyp    时间: 2013-7-7 18:47
automate 发表于 2013-7-6 21:45
看你用几个通道了,两个编码器,就两个都要给了

可是我用FTM0两个通道分别和正交解码的两个端口用线接起来,串口发送还是没有读到计数值,求指导~

作者: automate    时间: 2013-7-7 19:12
cyp 发表于 2013-7-7 18:47
可是我用FTM0两个通道分别和正交解码的两个端口用线接起来,串口发送还是没有读到计数值,求指导~


软件,确保你的程序配置正确,正确的计数模式,设置成增计数模式

硬件,每个FTM正交解码模块都要有两个输入,其中一个输入为固定的高电平,另一个接编码器输出


作者: cyp    时间: 2013-7-7 19:24
automate 发表于 2013-7-7 19:12
软件,确保你的程序配置正确,正确的计数模式,设置成增计数模式

硬件,每个FTM正交解码模块都要有两 ...

void FTM1_QUAD_Iint(void)
{
    PORTA_PCR8= PORT_PCR_MUX(6); // 设置引脚A12引脚为FTM1_PHA功能  
    PORTA_PCR9= PORT_PCR_MUX(6); // 设置引脚A13引脚为FTM1_PHB功能

    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_CNTIN=0;//FTM0计数器初始值为0  
    FTM1_MOD=65535;//结束值  
    FTM1_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//启用FTM1正交解码模式  
    FTM1_MODE |= FTM_MODE_FTMEN_MASK;//FTM1EN=1   
    FTM1_CNT=0;  
}
本来是用DMA,现在改方案,新板子还没回来,想试一下FTM正交解码,这个是在网上载的历程,我想可不可以用软件给B相高电平,这和硬件给高电平有什么区别吗?



作者: automate    时间: 2013-7-7 23:49
cyp 发表于 2013-7-7 19:24
void FTM1_QUAD_Iint(void)
{
    PORTA_PCR8= PORT_PCR_MUX(6); // 设置引脚A12引脚为FTM1_PHA功能  
...

软件给? 建议分清输入输出····


作者: cyp    时间: 2013-7-9 16:56
automate 发表于 2013-7-7 23:49
软件给? 建议分清输入输出····

现在可以测速的了,但是一直会出现突变  FTM1_QDCTRL   |=  FTM_QDCTRL_PHAFLTREN_MASK;                        FTM1_QDCTRL   |=  FTM_QDCTRL_PHBFLTREN_MASK;   
这两句话不是滤波使能吗?可是突变的数值让车子一直在点头,写了滤波也没有用,
有没有啥好用的方法能改正一下~先谢谢拉~                  



作者: ggkukucat    时间: 2013-7-16 07:35
接上拉电阻了没 编码器输出端
作者: weltry    时间: 2013-12-2 20:29
cyp 发表于 2013-7-7 18:47
可是我用FTM0两个通道分别和正交解码的两个端口用线接起来,串口发送还是没有读到计数值,求指导~

FTM0没有正交解码的

作者: captain_q3p5i    时间: 2016-3-1 19:18
求指导,本人欧姆龙500的,不会用啊,用的历程,显示出来的是跳动的乱的数据
作者: 。南风    时间: 2017-9-16 10:52
买了欧姆龙的编码器,不知道怎么测速度,大佬告诉我一下
作者: 。南风    时间: 2017-9-16 10:52
买了欧姆龙的编码器,不知道怎么测速度,大佬告诉我一下
作者: 1354046363    时间: 2017-12-21 21:30
。南风 发表于 2017-9-16 10:52
买了欧姆龙的编码器,不知道怎么测速度,大佬告诉我一下

DMA就可以测速





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