简易数字频率计的设计

 我来答
妖感肉灵10
2022-12-08 · TA获得超过6.3万个赞
知道顶级答主
回答量:101万
采纳率:99%
帮助的人:2.4亿
展开全部

频率测量的方法常用的有测频法和测周法两种。

测频法的基本思想是让计数器在闸门信号的控制下计数1秒时间,计数结果是1秒内被测信号的周期数,即被测信号的频率。若被测信号不是矩形脉冲,则应先变换成同频率的矩形脉冲。测频法的原理框图如图所示。

图中,秒脉冲作为闸门信号,当其为高电平时,计数器计数;低电平时,计数器停止计数。显然,在同样的闸门信号作用下,被测信号的频率越高,测量误差越小。当被测频率一定时,闸门信号高电平的时间越长,测量误差越小。但是闸门信号周期越长,测量的响应时间也越长。

2、当被测信号频率较低时,为保证测量精度,常采用测周法。即先测出被测信号的周期,再换算成频率。测周法的实质是把被测信号作为闸门信号。

在它的高电平的时间内,用一个标准频率的信号源作为计数器的时钟脉冲。若计数结果为N,标准信号频率为f1,则被测信号的周期为:T=T1·N。被测信号的频率为:f=1/T1·N=f1/N。

利用测周法所产生的最大绝对误差,显然也等于±1个标准信号周期。如果被测信号周期的真值为T真=T1·N,则T测=T1·(N±1)σmax=(f测-f真)/f真=T真/T测_1=±1/(N±1)由上式可知,对于一定的被测信号,标准信号的频率越高,则N的值越大,因而相对误差越小。

3、低频段的测量,鉴于上述困难,对于低频信号,为了达到规定的精度,要采取一些比较特殊的方法。例如,可考虑将被测信号倍频后再用测频法测量。

或将闸门信号展宽。由于倍频电路比较复杂,所以一般采用后一种方法,实际上闸门信号展宽与被测信号倍频在效果上是相同的。

闸门信号展宽比较容易做到,例如采用分频电路就可以实现。若闸门信号高电平时间从1秒展宽到10秒,则相对误差可以按比例下降,但响应时间也增大相同的比例。

4、显示方式:共用右边四个数码管,左三个显示数据,最右端一个显示单位,为0时单位为Hz,为1时单位为Khz

5、代码:

//#include<c8051F330.h>

#include<ZLG7289.h>

#include<init.h>

#defineuintunsignedint

uinta,b,c,d;

unsignedlong x;

unsignedlong count;

unsignedcharflag=0;

voidTimer0_Init()interrupt1

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

if(++count==40)

{

count=0; 

TR1=0;

x=TH1*256+TL1;       

TH1=0;

TL1=0;

TR1=1;

flag=1;

}

}

voidshow(void)

{if(x>=10&&x<100)

{

a=0;

b=x*10%100;

c=x/10;

d=x%10;

ZLG7289_Download(1,7,0,a);

ZLG7289_Download(1,6,0,b);

ZLG7289_Download(1,5,1,d);

ZLG7289_Download(1,4,0,c);

}

elseif(x>=100&&x<1000)

{

a=0;

b=x/100;

c=x%100/10;

d=x%10;

ZLG7289_Download(1,7,0,a);

ZLG7289_Download(1,6,1,d);

ZLG7289_Download(1,5,0,c);

ZLG7289_Download(1,4,0,b);

}

elseif(x>=1000&&x<10000)

{

a=x/1000;

b=x%1000/100;

c=x%100/10;

d=1;

ZLG7289_Download(1,7,0,d);

ZLG7289_Download(1,6,0,c);

ZLG7289_Download(1,5,0,b);

ZLG7289_Download(1,4,1,a);

}

}

main(void)

{

system_init();

systemclk_init();

port_init();

ZLG7289_Init(40);

ZLG7289_Reset();

timer_init();

while(1)

{

if(flag==1)

{

show();

flag=0;

}

}}

#include<C8051F330.h>

#include<port.h>

voidsystem_init()

{

PCA0MD&=~0x40;

}

voidsystemclk_init()

{

OSCICL=OSCICL+42;//设置内部振荡器为24MHZ

OSCICN|=0x01;  //内部振荡器4分频

}

voidport_init()

P0SKIP=0x00;      //跳过P0.0做INT0.P0.1做INT1(P0.6,P0.7模拟输出不跳)

P1SKIP=0x00;      //跳过P1.2,P1.3,P1.4

XBR0=0x00;        //交叉开关使能UART0

XBR1=0x60;        //打开交叉开关

//IT01CF=0x10;    //INT0配置在P0.0,INT1配置在P0.1

P0MDIN=0xFF;    //数字输入

P1MDIN=0xFF;

P0MDOUT=0xFF;//推挽

P1MDOUT=0xFF;

}

voidtimer_init()

{

TMOD=0X51;

TH0=(65535-2500)/256;

TL0=(65535-2500)%256;

EA=1;

ET0=1;

TR1=1;

TR0=1;

}

#ifndef__port_H_

#define__port_H_

voidsystem_init(void);

voidsystemclk_init(void);

voidport_init(void);

voidtimer_init(void);

#endif

绿知洲
2024-11-13 广告
噪声系数测量软件是我们上海绿知洲信息科技有限公司专为无线通信领域开发的一款专业工具。该软件具备高精度、易操作的特点,能够实时测量并分析设备的噪声系数,有效评估系统的信号质量。通过图形化界面,用户可以直观地查看测量结果,并进行数据保存与导出。... 点击进入详情页
本回答由绿知洲提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式