2019-07-21 00:27发布
edmund1234 发表于 2019-6-1 17:21 如果说你用的是一般输捕捉的方法, 从数学上就不可能的事, 20ms最大误差值是50Hz
nashui_sx 发表于 2019-6-2 12:15 你还没解决呀,给你试了下 输入捕获20ms,外部计数+定时器20ms 测量10us的pwm 计数都是2000,最大1个脉 ...
最多设置5个标签!
如果说你用的是一般输捕捉的方法, 从数学上就不可能的事, 20ms最大误差值是50Hz
用外部时钟计数的方法也不可以吗?
比如T你设定在20ms, 从t=0时开始输入时钟, 但t=0的时候被测量信跟就一定在上升沿或下降沿吗?这就是不同步, 其实这都可以解决
没法解决的是结束的时候, 长如在20ms内应该有2000个数, 那2000.99个的时候你还是只能测到2000个, 是不?
所以最大误差就是一个计数, 你把它反推就能算出来20ms测量时最大误差是50Hz。
明白?
那是不是没有办法做到呢, 不是的, 只不过用输入时钟的方法基本上是办不到
用外部中断做
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
}
}
}
}
谁让你把20ms固定了? 这个方法就要要微调这20ms, 所以要除以TIMx_CNT的内容
不知道你是怎样试的, 这个方法的误差就只在中断响应时间, 及系统时钟晶振的误差, 不存在什么误差
一周热门 更多>