智能车制作

标题: 输入捕捉不准 [打印本页]

作者: zhengz    时间: 2009-9-14 15:56
标题: 输入捕捉不准
大家好,我最近编了一个输入捕捉测脉冲频率的小程序,发现测的脉冲的频率不太准,比如,如果是1hz,我测得是频率是0.965左右,如果是100hz,测得的频率是99.58hz左右,如果是1000hz,测得的频率是995.5左右,大家帮忙分析下,是什么原因呢,程序如下:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12hy64.h>
#pragma LINK_INFO DERIVATIVE "mc9s12hy64"
void timer0_init(void)
{
  TIM0_TIE=0x10; //允许C4I中断
  TIM0_TSCR2_PR=0x02; //时钟=M Clock/4=2MHz
  TIM0_TIOS =0xEF; //ch2设置为输入捕捉
  TIM0_TSCR1_TEN = 1;  //启用定时器
  TIM0_TCTL3=0x02; //捕捉上升沿
  TIM0_TFLG1=0xFF; //写1清除标志,其实是让寄存器中的值变成0
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 12 void timer0overflow(void)
{
if(!flg)
  {
     rising_1=TIM0_TCNT;
     TIM0_TSCR2_TOI=1;
     TIM0_TFLG1_C4F=1; //写1清除C2F标志
     flg=1;
  }
else
  {  
     rising_2=TIM0_TCNT;
     TIM0_TSCR2_TOI=0;
     TIM0_TFLG1_C4F=1; //写1清除C2F标志
    {
        if(rising_2 < rising_1)
       {
          new_rising=rising_2+0xFFFF;
          period=((float)new_rising-(float)rising_1);//单位为微秒
          for(u=1;u<P;u++)
          { period=period+0xFFFF; }
       }
       else
       {
          period=((float)rising_2-(float)rising_1);
          for(u=1;u<P;u++)
          { period=period+0xFFFF; }
       }
           TIM0_TCNT=0;
           frequency=2000000.0/period; //Hz  
           t=frequency*24;
           flg=0;
           P=0;
      }
  }
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 16 void timeroverflow(void)
{
   TIM0_TFLG2_TOF=1;
   P++;
}
#pragma CODE_SEG D EFAULT
作者: marui    时间: 2009-9-16 13:48
可以在软件中通过调整时间来抵消误差,以前我做过测频的东西也不准,调整一下就行了。
作者: zhengz    时间: 2009-9-16 16:38
你是说要人为的加些延迟进去,是吗
作者: chiusir    时间: 2009-9-17 19:17
是你的定时不准确吧。
作者: zhengz    时间: 2009-9-18 09:06
我没用定时器啊,只是用的计数器捕捉脉冲下降沿嘛
作者: chiusir    时间: 2009-9-19 09:11
那你的频率从何谈起?频率是“1秒”钟内脉冲发生的次数,这个“1秒”就是你要确定的时间槛。搞定时间槛频率测量就准确了!
作者: zhengz    时间: 2009-9-19 10:29
哦,我没有用到定时,我就是采样两个相邻脉冲的下降沿,计算时间差,求得的脉冲频率,不是定时1s采样的脉冲个数,所以时间槛跟我的程序没关系啊
作者: chiusir    时间: 2009-9-19 23:45
那你的时间差计算的准确吗?如果准确就没问题的。
作者: chenrunshe_007    时间: 2009-9-20 01:31
可能是你没有把中断里面的运行语句耗得时间算进去所以有点误差,要不就真的是你的板本身的工艺所决定的精度不可能达到100%,有95%以上就不错了
作者: liang88889999    时间: 2009-9-20 16:44
定时不准确吧。
作者: xueyaping    时间: 2010-12-13 12:46





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