一、周期法:
1、对于任何周期信号,可用前述的时间间隔的测量方法,先测定其每个周期的时间T,再用下式求出频率f:f=1/T。
2、例如示波器上显示的被测波形,一周期为8div,“t/div”开关置“1μs”位置,其“微调”置“校准”位置。则其周期和频率计算如下:T=1us/div&TImes,8div=8us,f=1/8us=125kHz所以,被测波形的频率为125kHz。
二、李沙育图形法测频率:
1、将示波器置X-Y工作方式,被测信号输入Y轴,标准频率信号输入“X外接”,慢慢改变标准频率,使这两个信号频率成整数倍时,例如fx:fy=1:2,则在荧光屏上会形成稳定的李沙育图形。
2、李沙育图形的形状不但与两个偏转电压的相位有关,而且与两个偏转电压的频率也有关。用描迹法可以画出ux与uy的各种频率比、不同相位差时的李沙育图形。
3、利用李沙育图形与频率的关系,可进行准确的频率比较来测定被测信号的频率。其方法是分别通过李沙育图形引水平线和垂直线,所引的水平线垂直线不要通过图形的交叉点或与其相切。若水平线与图形的交点数为m,垂直线与图形的交点数n,则fy/fx=m/n
4、当标准频率fx为已知时,由上式可以求出被测信号频率fy。显然,在实际测试工作中,用李沙育图形进行频率测试时,为了使测试简便正确,在条件许可的情况下,通常尽可能调节已知频率信号的频率,使荧光屏上显示的图形为圆或椭圆。这时被测信号频率等于已知信号频率。
5、由于加到示波器上的键埋培两个电压相位不同,荧光屏上图形会有不同的形状,但这对确定未知频率并无影响。李沙育图形法测量频率是相当准确的,但 *** 作较费时。同时,它只适用于测量频率较低的信号。
扩展资料:
示波器分类:
模拟示波器采用的是模拟电路(示波管,其基础是电子q)电子q向屏幕发射电子,发射的电子经聚焦形成电子束,并打到屏幕上。屏幕的内表面涂有荧光物质,这样电子束打中的点就会发出光来。
数字示波器则是数据采集,A/D转换,软件编程等一系列的技术制造出来的高性能示波器。数字示波器的工作方式是通过模拟转换器(ADC)把被测电压转换为数字信息。
数字示波器捕获的是波形的一系列样值,并对样值进行存储,存储限度是判断累计的样值是否能描绘出波形为止,随后,数字示波器重构波形。数字示波器可以分为数字存储示波器(DSO),数字荧光示波器(DPO)和采样示波器。
模拟示波稿唯器要提高带宽,需要示波管、垂直放大和水平扫描全面推进。数字示波器要改善带宽只需要提高前端的A/D转换器的性能,对示液兆波管和扫描电路没有特殊要求。
加上数字示波管能充分利用记忆、存储和处理,以及多种触发和超前触发能力。廿世纪八十年代数字示波器异军突起,成果累累,大有全面取代模拟示波器之势,模拟示波器的确从前台退到后台。
参考资料:
百度百科—示波器
1、单片机内有计数器和计时器,设你固定计时器为1秒钟,用计数器计算频率的脉冲个数,如果是100个,那么频率就是手嫌100Hz;另一种方式,用计数器计算100脉冲神薯州,然后去读计时器这100个脉冲用了多少时间,如果是2秒,100/2=50Hz那就是50Hz。2、幅度需要分压取样,可以直接在220V上做个1/100分压,或者做个隔离取样,互感器效果比较好,成本稍高,推荐这种方式。游蔽
定时器1对外部脉冲计数时TMOD高4位设置应该是5因此TMOD=0x51
以下我的频率计程序:
#include <reg52.h>//因没用到STC12C5410专有特殊功能寄存器,此处用52或51的头文件均可
#define unit unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit beiguang=P3^2//液晶屏背光
sbit rs=P1^3//液晶屏写选择,0命令 1数据
sbit rw=P1^4//液晶屏读写选择
sbit lcden=P1^5//液晶屏使能
sbit fm=P1^7//蜂鸣器
#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性
//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa,bb,cc//变量声明
unit dd,ee
void Delay1ms(unsigned int i) //1ms延时程序
{
unsigned int j
for(i>0i--)
{
for(j=0j<125j++)
{}
}
}
void init()//初始化设置
{
TMOD=0x15//定时器0作为计数器,定时器1作为定时器用
TH0=0//计数器清0
TL0=0
EA=1//开总中断
ET1=1//允许定时器1中断
TH1=0x4c
TL1=0x5c
TR0=1//启动计数器
TR1=1//启动定时器
aa=0
}
void write_com(uchar com)//向液晶屏写命令
{
db=com
rs=0
rw = 0
lcden=0
Delay1ms(10*12)
lcden=1
Delay1ms(10*12)
lcden=0
}
void write_date(uchar date)//向液晶屏写数据
{
db=date
rs=1
rw = 0
lcden=0
Delay1ms(10*12)
lcden=1
Delay1ms(10*12)
lcden=0
}
void init2()//液晶屏初始化
{
beiguang=0
rw=0
write_com(0x38)
Delay1ms(10*12)
write_com(0x0f)
Delay1ms(10*12)
write_com(0x06)
Delay1ms(10*12)
write_com(0x01)
Delay1ms(10*12)
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5
init2()//液晶屏初始化
A1=number/10000%10//分离出万,千,百,十,个,对于int型数据,最大不超过65535
A2=number/1000%10
A3=number/100%10
A4=number/10%10
A5=number%10
write_com(0x80)//第1个数据的位置设定,第1行第1列
Delay1ms(10)
write_date(0x30+A1)//写数据
Delay1ms(10)
write_date(0x30+A2)
Delay1ms(10)
write_date(0x30+A3)
Delay1ms(10)
write_date(0x30+A4)
Delay1ms(10)
write_date(0x30+A5)
Delay1ms(10)
write_com(0x87)/袜液/第6个数据'H'的位置,中间空85和86 二格
write_date('H')
Delay1ms(10)
write_date('z')
Delay1ms(10)
}
void main()//主程序很简单
{
init()//初始化
while(1)//循环程序
{
dd=bb*256+cc//0.5S的贺凳计数值
ee=2*dd//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断禅好旅,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=0//报警
}
display4(ee)//显示
fm=1//报警停止
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++
TH1=0x4c//11.0592Mhz
TL1=0x5c
if(aa==10)//中断10次,共0.5S
{
TR0=0//暂停计数
aa=0
bb=TH0//读出计数器数据
cc=TL0
TL0=0//计数器清0
TH0=0
TR0=1//重新启动
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)