智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

[讨论] lpt脉冲累加(测速)PIT中断时间问题

  [复制链接]

6

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1210
威望
599
贡献
333
兑换币
298
注册时间
2013-1-11
在线时间
139 小时
毕业学校
东华大学
21#
发表于 2013-3-31 10:14:16 | 只看该作者
到底多少毫秒中断一次比较好那
回复 支持 反对

使用道具 举报

48

主题

493

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2947
威望
1774
贡献
469
兑换币
705
注册时间
2012-4-22
在线时间
352 小时
毕业学校
hgd
22#
 楼主| 发表于 2013-3-31 10:24:58 | 只看该作者
Y__man 发表于 2013-3-31 10:14
到底多少毫秒中断一次比较好那

一般20ms以下,根据你的图像采集、程序周期
回复 支持 反对

使用道具 举报

8

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1030
QQ
威望
637
贡献
259
兑换币
100
注册时间
2012-2-14
在线时间
67 小时
毕业学校
南阳理工学院
23#
发表于 2013-3-31 10:28:18 | 只看该作者
这个我还不清楚,学学……
回复 支持 反对

使用道具 举报

5

主题

186

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1772
威望
952
贡献
536
兑换币
525
注册时间
2012-3-15
在线时间
142 小时
24#
发表于 2013-3-31 10:32:39 | 只看该作者
貌似是的,我也试过了,1KHz的PWM,100ms应该可以记100的,但实际是90,而1000ms就计数了998,所以应该是时间越长,计数越精确。。。
回复 支持 反对

使用道具 举报

39

主题

253

帖子

0

精华

会长

Rank: 8Rank: 8

积分
2231
威望
1054
贡献
733
兑换币
580
注册时间
2012-10-13
在线时间
223 小时
25#
发表于 2013-4-8 12:13:02 | 只看该作者
正在搞lpt测速,楼主能否给指点迷津,编码器需要上拉,就进行了IO内部上拉,但是测得数据为零,楼主遇到过这个问题么
回复 支持 反对

使用道具 举报

3

主题

59

帖子

0

精华

高级会员

Rank: 4

积分
653
威望
364
贡献
191
兑换币
124
注册时间
2012-5-7
在线时间
49 小时
26#
发表于 2013-4-19 01:53:04 | 只看该作者
我也在研究这个问题好纠结
回复 支持 反对

使用道具 举报

48

主题

493

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2947
威望
1774
贡献
469
兑换币
705
注册时间
2012-4-22
在线时间
352 小时
毕业学校
hgd
27#
 楼主| 发表于 2013-4-19 03:57:44 | 只看该作者
Universe 发表于 2013-4-8 12:13
正在搞lpt测速,楼主能否给指点迷津,编码器需要上拉,就进行了IO内部上拉,但是测得数据为零,楼主遇到过这 ...

没遇到过,我们是外部上拉
回复 支持 反对

使用道具 举报

39

主题

253

帖子

0

精华

会长

Rank: 8Rank: 8

积分
2231
威望
1054
贡献
733
兑换币
580
注册时间
2012-10-13
在线时间
223 小时
28#
发表于 2013-4-19 13:52:36 | 只看该作者
m__dd 发表于 2013-4-19 03:57
没遇到过,我们是外部上拉

谢谢,现在搞好了
回复 支持 反对

使用道具 举报

1

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
397
威望
212
贡献
95
兑换币
129
注册时间
2013-2-27
在线时间
45 小时
29#
发表于 2013-5-11 16:44:09 | 只看该作者
我在pit中读脉冲值直接中断就进不去!怎么回事啊
void pit0_isr(void)
{
  
  DisableInterrupts;            //禁止总中断
  if((PIT_TFLG(0)&PIT_TFLG_TIF_MASK)!=0)
     su_du=LPTMR0_CNR;
     LPTMR0_CSR&=~LPTMR_CSR_TEN_MASK;
    PIT_TFLG(0)|=PIT_TFLG_TIF_MASK;   //清标志
     lptmr_Init();

    enable_pit_interrupt( PIT0);
    EnableInterrupts;//开总中断

}
回复 支持 反对

使用道具 举报

1

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
397
威望
212
贡献
95
兑换币
129
注册时间
2013-2-27
在线时间
45 小时
30#
发表于 2013-5-11 16:47:30 | 只看该作者
主函数中:  lptmr_Init();
        hw_pit_init(0,25000000); //初始化pit0,周期0.5s
        enable_pit_interrupt(PIT0);
        EnableInterrupts;//开总中断
中断服务程序:void pit0_isr(void)
{
   
   DisableInterrupts;            //禁止总中断
  if((PIT_TFLG(0)&PIT_TFLG_TIF_MASK)!=0)
      su_du=LPTMR0_CNR;
      LPTMR0_CSR&=~LPTMR_CSR_TEN_MASK;
     PIT_TFLG(0)|=PIT_TFLG_TIF_MASK;   //清标志
     lptmr_Init();

     enable_pit_interrupt( PIT0);
     EnableInterrupts;//开总中断

}
脉冲计数:void lptmr_Init(void)
{
  
  uint32 compare_value=40000;
  SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK;  //开启模块的时钟单元
  
  LPTMR0_CSR=0x00;                    //LPTMR的初始化
  LPTMR0_PSR=0x00;
  LPTMR0_CMR=0x00;
  SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //Turn on PORTC clock
  PORTC_PCR5=PORT_PCR_MUX(0x4);      //Use ALT4 on PTC5

  LPTMR0_PSR|=LPTMR_PSR_PCS(0x1)|LPTMR_PSR_PBYP_MASK;  //Use LDO but bypass glitch filter

LPTMR0_CMR|=LPTMR_CMR_COMPARE(compare_value);        //Set compare value
  
  LPTMR0_CSR|=LPTMR_CSR_TPS(0x2);            //Set LPT to use the pin selected
  LPTMR0_CSR|=LPTMR_CSR_TMS_MASK;            // put in pulse count mode   上升沿捕捉
  //LPTMR0_CSR|=LPTMR_CSR_TFC_MASK;    //自由计数
  LPTMR0_CSR&=~LPTMR_CSR_TIE_MASK;  //关输入中断
  LPTMR0_CSR|= LPTMR_CSR_TEN_MASK;  
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-7 21:16 , Processed in 0.044887 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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