怎样才能在20ms的时间内精确测量出的计算出一个大约100khz信号的频率,允许误差大概在5hz以内

2019-07-21 00:27发布

我尝试了使用输入捕获,PWM输入模式,和外部时钟 1模式,其中发外部时钟1 的准确度最高,但是也有1赫兹的误差,不知道是我的算法问题还是 本来就有这种问题,而且当我缩短测量时间至20ms时,误差就会被放大至约20HZ,我想问一下,还有什么比较好的方法没有,或者是能不能对我说的三个方法优化一下使达到要求?   



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
edmund1234
2019-07-21 13:44
本帖最后由 edmund1234 于 2019-6-1 20:21 编辑

那是不是没有办法做到呢, 不是的, 只不过用输入时钟的方法基本上是办不到

用外部中断做

void 外部中断函数(void){
    static u8 Mode=0;
    static u16 Count=0;

    //------ 判断中断标志位, 及清除中断标志位, 自已加上去

    if(!Mode){
           TIMx->CR1 |= TIM_CR1_CEN;
           Mode=1;
    }
    else {
           Count++;
           if (TIMx->CNT > t_20ms){
              TIMx->CR1 &= ~(u32)TIM_CR1_CEN;
                                                                    <<--------------- 答案在此时此处 频率= Count/(TIMx->CNT)
              Mode=Count=0;                            <<--------------- 继续下一个20ms
           }
       }
   }

}

一周热门 更多>