智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 25065|回复: 14
打印 上一主题 下一主题

K60 编码器测速程序不对啊,大师进···

[复制链接]

20

主题

72

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4139
威望
2153
贡献
820
兑换币
436
注册时间
2012-10-24
在线时间
583 小时
跳转到指定楼层
1#
发表于 2012-12-26 15:38:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

打算使用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个坑啊

0

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
698
威望
337
贡献
195
兑换币
196
注册时间
2012-11-1
在线时间
83 小时
推荐
发表于 2013-7-7 19:24:04 | 只看该作者
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相高电平,这和硬件给高电平有什么区别吗?


回复 支持 1 反对 0

使用道具 举报

13

主题

265

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3090

优秀会员奖章活跃会员奖章

QQ
威望
1496
贡献
832
兑换币
898
注册时间
2012-10-11
在线时间
381 小时
2#
发表于 2013-4-28 12:48:07 | 只看该作者
楼主啊    能告诉一下   FTM正交解码是怎么测速的吗!  看了几天  没什么头绪啊!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
698
威望
337
贡献
195
兑换币
196
注册时间
2012-11-1
在线时间
83 小时
3#
发表于 2013-7-5 16:58:31 | 只看该作者
请问FTM1 和FTM2都要分别给脉冲吗?
回复 支持 反对

使用道具 举报

20

主题

72

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4139
威望
2153
贡献
820
兑换币
436
注册时间
2012-10-24
在线时间
583 小时
4#
 楼主| 发表于 2013-7-6 21:45:20 | 只看该作者
cyp 发表于 2013-7-5 16:58
请问FTM1 和FTM2都要分别给脉冲吗?

看你用几个通道了,两个编码器,就两个都要给了
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
698
威望
337
贡献
195
兑换币
196
注册时间
2012-11-1
在线时间
83 小时
5#
发表于 2013-7-7 18:47:43 | 只看该作者
automate 发表于 2013-7-6 21:45
看你用几个通道了,两个编码器,就两个都要给了

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

使用道具 举报

20

主题

72

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4139
威望
2153
贡献
820
兑换币
436
注册时间
2012-10-24
在线时间
583 小时
6#
 楼主| 发表于 2013-7-7 19:12:02 | 只看该作者
cyp 发表于 2013-7-7 18:47
可是我用FTM0两个通道分别和正交解码的两个端口用线接起来,串口发送还是没有读到计数值,求指导~


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

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

回复 支持 反对

使用道具 举报

20

主题

72

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4139
威望
2153
贡献
820
兑换币
436
注册时间
2012-10-24
在线时间
583 小时
8#
 楼主| 发表于 2013-7-7 23:49:26 | 只看该作者
cyp 发表于 2013-7-7 19:24
void FTM1_QUAD_Iint(void)
{
    PORTA_PCR8= PORT_PCR_MUX(6); // 设置引脚A12引脚为FTM1_PHA功能  
...

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

回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

高级会员

Rank: 4

积分
698
威望
337
贡献
195
兑换币
196
注册时间
2012-11-1
在线时间
83 小时
9#
发表于 2013-7-9 16:56:44 | 只看该作者
automate 发表于 2013-7-7 23:49
软件给? 建议分清输入输出····

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


回复 支持 反对

使用道具 举报

5

主题

28

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1283
威望
709
贡献
328
兑换币
273
注册时间
2012-3-27
在线时间
123 小时
毕业学校
广西大学
10#
发表于 2013-7-16 07:35:39 | 只看该作者
接上拉电阻了没 编码器输出端
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 14:47 , Processed in 0.074834 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表