智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: larry
打印 上一主题 下一主题

[软件类] K60的正交解码

  [复制链接]

0

主题

1672

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13030
QQ
威望
7128
贡献
3436
兑换币
424
注册时间
2013-1-5
在线时间
1233 小时
21#
发表于 2013-2-21 21:01:26 | 只看该作者
参考下
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

高级会员

Rank: 4

积分
703
威望
393
贡献
210
兑换币
159
注册时间
2012-6-29
在线时间
50 小时
22#
发表于 2013-2-27 20:02:00 | 只看该作者
larry 发表于 2012-4-2 13:51
我这里的情况指电磁组的双路脉冲检测方案

摄像头组的也用这两路捕捉,可以吗?
/*功能:FTM1、FTM2模块双路正交脉冲计数;
引脚:PTA12、PTA13、PTA10、PTA11
内容:初始化FTM1、FTM2的正交解码功能;*/
回复 支持 反对

使用道具 举报

0

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
833
威望
514
贡献
147
兑换币
6
注册时间
2012-2-21
在线时间
86 小时
毕业学校
昆明理工大学
23#
发表于 2013-3-16 22:10:54 | 只看该作者

#include "lptmr.h"

//==========================================================================
//函数名称: lptmr_internal_ref_input                                                      
//函数返回: 无                                          
//参数说明: 无
//注    意: 内部参考时钟4分频作为模块时钟,使用ptc5号引脚,alt2通道        
//功能概要: 清上次寄存器的值便于本次设置      
//==========================================================================
void lptmr_internal_ref_input()
{
  unsigned int compare_value=15625; //4 seconds with prescale=8 and 2Mhz fast clock

  //Reset LPTMR module
  lptmr_clear_registers();
  /* Enable LPT Module */
  SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK;
   
  //打开c口5号引脚的相应功能
  SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //Turn on PORTA clock
  PORTC_PCR5=PORT_PCR_MUX(0x4); //Use ALT2 on PTC 5
  
  // /* Ensure Internal Reference Clock is Enabled *  /
  MCG_C1|=MCG_C1_IRCLKEN_MASK;  
  //Enable fast internal ref clock by setting MCG_C2[IRCS]=1
  //If wanted to use 32Khz slow mode, set MCG_C2[IRCS]=0 instead
  MCG_C2|=MCG_C2_IRCS_MASK;

  /* Configure LPTMR */
  LPTMR0_CMR=LPTMR_CMR_COMPARE(compare_value);  //Set compare value
  LPTMR0_PSR=LPTMR_PSR_PCS(0x0)|LPTMR_PSR_PRESCALE(0x1);  //Use internal clock prescaled by8
  LPTMR0_CSR=LPTMR_CSR_TPS(0x2)|LPTMR_CSR_TMS_MASK;    //use 2模块(LPT0_ALT2)(c口5引脚) 计数模式  

  LPTMR0_CSR|=LPTMR_CSR_TEN_MASK; //开始计数 //Turn on LPT with default settings

}


//==========================================================================
//函数名称: lptmr_pulse_counter                                                        
//函数返回: 无                                          
//参数说明: 输入值为要使用的引脚号
//注    意: 使用1khz的LPO时钟进行计数,使用与低速状态           
//功能概要: 清上次寄存器的值便于本次设置      
//==========================================================================
void lptmr_pulse_counter(char pin_select)
{
  unsigned int compare_value=1000;

  //Reset LPTMR module
  lptmr_clear_registers();

  //Set up GPIO
  if(pin_select==LPTMR_ALT1)
  {
    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; //Turn on PORTA clock
    PORTA_PCR19=PORT_PCR_MUX(0x6); //Use ALT6 on PTA19

    //printf("Testing ALT1 pin on PORTA19\n");
    //printf("\tTWR-K70F120M: ALT1 is conected to pin 18 on J15\n");
  }
  else if(pin_select==LPTMR_ALT2)
  {
    SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //Turn on PORTC clock
    PORTC_PCR5=PORT_PCR_MUX(0x4); //Use ALT2 on PTC5

  }



  LPTMR0_PSR=LPTMR_PSR_PCS(0x1)|LPTMR_PSR_PBYP_MASK; //Use LPO clock but bypass glitch filter
  LPTMR0_CMR=LPTMR_CMR_COMPARE(compare_value);  //Set compare value
  LPTMR0_CSR=LPTMR_CSR_TPS(pin_select)|LPTMR_CSR_TMS_MASK; //Set LPT to use the pin selected, and put in pulse count mode, on rising edge (default)

  //printf("Press any key to start pulse counter\n");
  //in_char(); //wait for keyboard press

  LPTMR0_CSR|=LPTMR_CSR_TEN_MASK; //Turn on LPT

  
}


//=================================================================================
//函数名: get_counter_value
//功能  : 读编码器的计数值
//注意  : 电压不稳,频率过低可能丢脉冲
//输入  : 无
//输出  : 编码器的计数值

// On each read of the LPTMR counter register, software must first write to the  *
//LPTMR counter register with any value. This will synchronize and register the  *
// current value of the LPTMR counter register into a temporary register. The    *
//contents of the temporary register are returned on each read of the LPTMR      *
// counter register.
//===============================================================================
uint16 get_counter_value()
{
  LPTMR0_CNR=0x1;
  return LPTMR0_CNR;
}

//==========================================================================
//函数名称: lptmr_clear_registers                                                        
//函数返回: 无                                          
//参数说明:            
//功能概要: 清上次寄存器的值便于本次设置      
//==========================================================================
void lptmr_clear_registers()
{
  LPTMR0_CSR=0x00;
  LPTMR0_PSR=0x00;
  LPTMR0_CMR=0x00;
}
回复 支持 反对

使用道具 举报

17

主题

202

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1235
威望
626
贡献
417
兑换币
385
注册时间
2012-11-9
在线时间
96 小时
24#
发表于 2013-3-24 23:17:36 | 只看该作者
谢了
回复 支持 反对

使用道具 举报

17

主题

202

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1235
威望
626
贡献
417
兑换币
385
注册时间
2012-11-9
在线时间
96 小时
25#
发表于 2013-3-31 17:02:51 | 只看该作者
文圣利 发表于 2013-2-21 11:58
正交解码计数,好像会丢,计的数比脉冲累加器得到数要小

你讲的丢是什么意思
回复 支持 0 反对 1

使用道具 举报

4

主题

519

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
11207

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
5237
贡献
3112
兑换币
1178
注册时间
2012-2-1
在线时间
1430 小时
26#
发表于 2013-4-3 21:58:49 | 只看该作者
必须选使用外部时钟吗???
回复 支持 反对

使用道具 举报

13

主题

265

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3090

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

QQ
威望
1496
贡献
832
兑换币
898
注册时间
2012-10-11
在线时间
381 小时
27#
发表于 2013-5-2 12:00:41 | 只看该作者
楼主  为什么我的图像显示没有负数呢????
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
783
威望
410
贡献
217
兑换币
169
注册时间
2012-10-3
在线时间
78 小时
毕业学校
韶大
28#
发表于 2013-7-15 23:59:17 | 只看该作者
我想问下,两个接口分别怎样接啊
回复 支持 反对

使用道具 举报

0

主题

75

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4644
威望
3242
贡献
1092
兑换币
428
注册时间
2012-2-3
在线时间
155 小时
毕业学校
武汉理工大学
29#
发表于 2013-12-15 12:10:01 | 只看该作者
谢谢分享~~O(∩_∩)O~
回复 支持 反对

使用道具 举报

16

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1127
威望
601
贡献
326
兑换币
361
注册时间
2013-3-5
在线时间
100 小时
毕业学校
西安文理学院
30#
发表于 2013-12-28 20:39:17 | 只看该作者
FTM不是用来产生脉冲的吗,怎么也可以用来计算编码器的脉冲了,不明白,计数不是用lmptr吗?求大神解答
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 14:15 , Processed in 0.176201 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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