单片机频率计如何计算更精确?
华为890
2011-04-13
待测频率范围在6K~60K。现在只取100ms,测量出来以后频率值跳动太大,有没有什么改进的地方,使频率值跳动在2个数以内,不跳Z好? 下面是我的代码: void T0T1_Init() { IE=0x88; //开总中断,定时器1中断允许 TMOD=0x15; //定时器1工作于定时方... 待测频率范围在6K~60K。现在只取100ms,测量出来以后频率值跳动太大,有没有什么改进的地方,使频率值跳动在2个数以内,不跳Z好?
下面是我的代码:
void T0T1_Init()
{
IE=0x88; //开总中断,定时器1中断允许
TMOD=0x15; //定时器1工作于定时方式,方式1,定时器0工作于计数方式,方式1
TH1=0xdc; //定时器1初值设置为定时10ms
TL1=0x00;
TH0=0x00; //定时器0从0开始计数
TL0=0x00;
TR0=1; //开定时器0,和定时器1
TR1=1;
}
void dsqzd() interrupt 3 using 1
{
TR1=0;
TH1=0xdc; //定时器1初值设置为定时10ms
TL1=0x00;
mm++;
if(mm==10)
{
mm=0;TR0=0;
value_buf[tt++]=TH0*256+TL0;
TH0=0x00;TL0=0x00;TR0=1;
}
if(tt==N){tt=0;}
TR1=1;
}
全部评论
//定时器1工作于定时方式,方式1,定时器0工作于计数方式,方式1
方式1不太好,每触发一次中断,需要重新赋初值,有时间浪费,累积多了,就会有偏差,用方式2,8位自动重装方式较好。如果要求十分精确,Z好使用时钟芯片。
100ms,测量一次,显示一次,显示数值跳动,是正常的。
可以把四次的数值,取平均值,每隔400ms,显示一次;这样,跳动的现象就会明显减小。
如果把八次的数值,取平均值,每隔800ms,显示一次;这时,显示的就会很稳定了,但是,也显得“迟钝”和“冷漠”多了。
每隔400ms,显示一次平均值,效果Z好。
你把计频的步长直接设成1S,这样主便计算,计数的中断用定时器中断去触发,设一个缓存数组,测3个值或2个值取平均,这样,比较准而且波动很小,我测50K时就是这样测的.效果还可以.
这可能是51单片机的缺陷吧,一般到了50K的话测量真的不是很准的。看来只能多测试几次取平均值。60K的话,你延长测量的时间啊,设定的时间可以是0.5s。试试看
你的频率计的工作原理是什么,是用定时器吗,怎么测的,我觉得使用定时器的计数功能,搞一个上升(下降)沿计数就可以了
您可能感兴趣的社区主题
评论
选购仪器 上yiqi.com
仪器网络推广
品牌网上传播
长按识别二维码查看信息详情