仪器社区

单片机频率计如何计算更精确?

华为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; }
评论
全部评论
ljx123456aas
//定时器1工作于定时方式,方式1,定时器0工作于计数方式,方式1
方式1不太好,每触发一次中断,需要重新赋初值,有时间浪费,累积多了,就会有偏差,用方式2,8位自动重装方式较好。如果要求十分精确,Z好使用时钟芯片。
9 0 2011-04-14 0条评论 回复
抚摸269
100ms,测量一次,显示一次,显示数值跳动,是正常的。
可以把四次的数值,取平均值,每隔400ms,显示一次;这样,跳动的现象就会明显减小。
如果把八次的数值,取平均值,每隔800ms,显示一次;这时,显示的就会很稳定了,但是,也显得“迟钝”和“冷漠”多了。
每隔400ms,显示一次平均值,效果Z好。
15 0 2011-04-14 0条评论 回复
颓废火焰
你把计频的步长直接设成1S,这样主便计算,计数的中断用定时器中断去触发,设一个缓存数组,测3个值或2个值取平均,这样,比较准而且波动很小,我测50K时就是这样测的.效果还可以.
14 0 2011-04-14 0条评论 回复
6627359
这可能是51单片机的缺陷吧,一般到了50K的话测量真的不是很准的。看来只能多测试几次取平均值。60K的话,你延长测量的时间啊,设定的时间可以是0.5s。试试看
7 0 2011-04-14 0条评论 回复
我想要个黑金
你的频率计的工作原理是什么,是用定时器吗,怎么测的,我觉得使用定时器的计数功能,搞一个上升(下降)沿计数就可以了
14 0 2011-04-14 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论