智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6878|回复: 36
打印 上一主题 下一主题

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

  [复制链接]

48

主题

493

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2947
威望
1774
贡献
469
兑换币
705
注册时间
2012-4-22
在线时间
352 小时
毕业学校
hgd
跳转到指定楼层
1#
发表于 2013-3-12 09:34:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 m__dd 于 2013-3-12 09:38 编辑

将LPT脉冲累加(PTC5口),与PWM(5K)输出口(PD7口)短接,在PIT0中断读取。
发现:PIT中断时间越长,越准确,PIT中断时间降到30ms一下时就出现不稳定,应该是150左右,但偏离很大;10ms时应该是50左右,但却是43或84   怎么回事?

1

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
威望
129
贡献
41
兑换币
70
注册时间
2013-11-14
在线时间
17 小时
毕业学校
wu
37#
发表于 2014-5-10 16:51:56 | 只看该作者
lptmr用起来感觉还好啊,加一点滤波看看
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
威望
183
贡献
78
兑换币
99
注册时间
2013-10-1
在线时间
41 小时
36#
发表于 2014-4-28 21:57:19 | 只看该作者
回复 支持 反对

使用道具 举报

7

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
739
QQ
威望
390
贡献
165
兑换币
248
注册时间
2013-11-19
在线时间
92 小时
35#
发表于 2014-4-12 22:18:18 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
160
威望
83
贡献
39
兑换币
43
注册时间
2013-12-10
在线时间
20 小时
毕业学校
东南大学
34#
发表于 2014-3-10 23:51:57 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1589
威望
639
贡献
398
兑换币
410
注册时间
2013-9-5
在线时间
276 小时
毕业学校
山东科技大学
33#
发表于 2014-3-2 11:17:20 | 只看该作者
不错,继续努力
回复 支持 反对

使用道具 举报

48

主题

493

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2947
威望
1774
贡献
469
兑换币
705
注册时间
2012-4-22
在线时间
352 小时
毕业学校
hgd
32#
 楼主| 发表于 2013-5-12 18:44:45 | 只看该作者
寒窗乍暖 发表于 2013-5-11 21:14
试试不让LPT进中断,在PIT中断或者场中断中直接读取计数器的值再清零

问题解决了,是线的问题
回复 支持 反对

使用道具 举报

22

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1646

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

威望
810
贡献
544
兑换币
306
注册时间
2011-12-25
在线时间
146 小时
31#
发表于 2013-5-11 21:14:36 | 只看该作者
试试不让LPT进中断,在PIT中断或者场中断中直接读取计数器的值再清零
回复 支持 反对

使用道具 举报

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;  
}
回复 支持 反对

使用道具 举报

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;//开总中断

}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 09:29 , Processed in 0.071397 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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