智能车制作

标题: lpt脉冲累加(测速)PIT中断时间问题 [打印本页]

作者: m__dd    时间: 2013-3-12 09:34
标题: lpt脉冲累加(测速)PIT中断时间问题
本帖最后由 m__dd 于 2013-3-12 09:38 编辑

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

作者: 1228463834    时间: 2013-3-12 09:56
读取时间太短了吧
作者: m__dd    时间: 2013-3-12 10:05
本帖最后由 m__dd 于 2013-3-12 10:07 编辑
1228463834 发表于 2013-3-12 09:56
读取时间太短了吧


准备用20ms左右,但是20ms也不稳定,50ms很稳定,但是时间太长。你们的用的啥?效果咋样?
作者: exiao    时间: 2013-3-12 10:09
不应该啊
作者: wangyao19920204    时间: 2013-3-12 11:24
等人来解答,我脉冲捕捉也没有调好呢
作者: 我爱小kb    时间: 2013-3-12 12:25
还有贡献?,学习学习先
作者: Mr_Q    时间: 2013-3-12 12:28
我也考虑过这个问题,想是在实验中出真知,现在还没试
作者: m__dd    时间: 2013-3-12 12:46
exiao 发表于 2013-3-12 10:09
不应该啊

那应该呢?   你们的处理的很好么?
作者: 南工★YIHUI    时间: 2013-3-12 15:38
不错不错
作者: zhaoliujian78    时间: 2013-3-12 16:26
看看是不是时间算的有点问题
作者: 一坨飞奔de喵    时间: 2013-3-12 16:36
水平不够,帮顶
作者: 战怺竝!    时间: 2013-3-12 17:13
确实有这问题,等待答案
作者: 战怺竝!    时间: 2013-3-12 17:14
确实有这问题,等待答案
作者: 1228463834    时间: 2013-3-12 18:02
m__dd 发表于 2013-3-12 10:05
准备用20ms左右,但是20ms也不稳定,50ms很稳定,但是时间太长。你们的用的啥?效果咋样?

好像是可以读出来的,你可以用中断看看那

作者: m__dd    时间: 2013-3-12 21:51
完蛋了,用DMA测速遇到同样的问题
作者: m__dd    时间: 2013-3-12 21:51
彻底迷茫了
作者: 封号式寂寞    时间: 2013-3-12 22:00

作者: pln760    时间: 2013-3-13 09:33
暂时还不懂
作者: ╘记得↘→开朗    时间: 2013-3-13 09:39

作者: ゞ卟メ懂Lveゞ    时间: 2013-3-13 18:58
偷经验
作者: Y__man    时间: 2013-3-31 10:14
到底多少毫秒中断一次比较好那
作者: m__dd    时间: 2013-3-31 10:24
Y__man 发表于 2013-3-31 10:14
到底多少毫秒中断一次比较好那

一般20ms以下,根据你的图像采集、程序周期

作者: guoshunkai521    时间: 2013-3-31 10:28
这个我还不清楚,学学……
作者: LQ~少行    时间: 2013-3-31 10:32
貌似是的,我也试过了,1KHz的PWM,100ms应该可以记100的,但实际是90,而1000ms就计数了998,所以应该是时间越长,计数越精确。。。
作者: Universe    时间: 2013-4-8 12:13
正在搞lpt测速,楼主能否给指点迷津,编码器需要上拉,就进行了IO内部上拉,但是测得数据为零,楼主遇到过这个问题么
作者: 神探刷王    时间: 2013-4-19 01:53
我也在研究这个问题好纠结
作者: m__dd    时间: 2013-4-19 03:57
Universe 发表于 2013-4-8 12:13
正在搞lpt测速,楼主能否给指点迷津,编码器需要上拉,就进行了IO内部上拉,但是测得数据为零,楼主遇到过这 ...

没遇到过,我们是外部上拉

作者: Universe    时间: 2013-4-19 13:52
m__dd 发表于 2013-4-19 03:57
没遇到过,我们是外部上拉

谢谢,现在搞好了
作者: Believe_me    时间: 2013-5-11 16:44
我在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;//开总中断

}

作者: Believe_me    时间: 2013-5-11 16:47
主函数中:  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;  
}
作者: 寒窗乍暖    时间: 2013-5-11 21:14
试试不让LPT进中断,在PIT中断或者场中断中直接读取计数器的值再清零
作者: m__dd    时间: 2013-5-12 18:44
寒窗乍暖 发表于 2013-5-11 21:14
试试不让LPT进中断,在PIT中断或者场中断中直接读取计数器的值再清零

问题解决了,是线的问题
作者: 惶影,惊寂    时间: 2014-3-2 11:17
不错,继续努力

作者: …石头…    时间: 2014-3-10 23:51

作者: 阳光龙哥    时间: 2014-4-12 22:18

作者: zhagsenkk    时间: 2014-4-28 21:57

作者: →_→    时间: 2014-5-10 16:51
lptmr用起来感觉还好啊,加一点滤波看看




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