简易数字频率计

前段时间在做校内电子设计竞赛的题目,选题是《简易数字频率计》,因为这是电子类的竞赛,对于自己的能力是一个考查,所以自己也是比较的看重,与队友经过半个多月的努力,终于把它给做出来了,虽然做的不是很好,但还是拿出来看看,其中,队友做的是硬件,我负责的软件部分。

 

基于单片机的数字频率计的设计,目的是设计一款数字频率计,能够测量1 Hz ~ 100KHz的数字频率,包括正弦波及方波的测量,支持0.5 V ~ 20 V电压。本频率计以STC89C52为核心,通过整形放大电路将外部脉冲变成同频率的矩形波,再利用单片机内部定时/计数器,通过控制其门控时间,对外部输入脉冲进行计数。优点是测量准确度高,响应速度快,功耗低,体积小。

关键字:单片机、整形放大、计数


 

目录

简易数字频率计... I

  ... I

Simple digital frequency meter I

Abstract I

1. 方案设计与论证... 3

1.1 整体方案比较与论证... 3

1.2 模块电路的方案设计... 3

2. 理论分析与计算... 5

2.1 系统原理... 5

3. 软件系统分析与设计... 6

3.1 主程序设计... 6

3.2 子程序设计... 6

4. 功能与数据测试及结果分析... 7

4.1 测试仪器... 7

4.2 测试方法及数据... 7

4.3 测试结果分析... 7

附录:

1. 方案设计与论证

1.1 整体方案比较与论证

     方案一:测周期法

测周期法又称为计时法,测周期法使用被测信号来控制闸门的开闭,而将标准时基脉冲通过闸门加到计数器,闸门在外信号的一个周期内打开,这样计数器得到的计数值就是标准时基脉冲外信号的周期值,然后求周期值的倒数,就得到所测频率值。

首先把被测信号通过二分频,获得一个高电平时间是一个信号周期T的方波信号;然后一直用一个周期为T1的高频方波信号作为计数脉冲,在一个信号周期T的时间内对T1信号进行计数,在被测信号的一个周期内也存在最大±1 的标准信号脉冲误差,被测信号频率越低,误差越小,一般在信号频率较低时采用。

     方案二:测频法

测频法又被称为计数法,计数法是被测信号通过一个定时闸门加到计数器进行计数的方法,如果闸门打开时间为T,计数器得到的计数值为N,则被测频率为f=N/T.改变时间T,则改变频率范围。由此方法可得到准确的频率。

考虑到频率测量的准确性,所以本次设计采用方案二。

 

1.2 模块电路的方案设计

1.2.1 预处理功能模块

预处理功能模块包括2部分:输入通道电路、基准信号电路。

输入通道电路:输入级及过载保护 放大极 整形级

选用LM358对输入信号进行两级放大,有4倍和40倍两种放大倍数,用开关控制。放大后的信号送入由LM393构成的比较器,转变成TTL信号

电路图如下:

基准信号电路:本设计采用由NE555构成振荡电路产生方波来作为时基信号

电路图如下:


1.2.3 显示电路

  通过键盘实现功能选择,信号频率显示功能用12864模块实现,它与单片机的接口如下图所示,D0-D7为数据口,E,RW,RS为控制信号,可以实现被测频率值与周期的显示。



2. 理论分析与计算

2.1 系统原理

       图1

如图1所示,52单片机有3个定时/计数器,均有定时与计数两种模式。单片机工作在定时器模式时,C/T开关打向上边,对单片机内部晶振12分频(12时钟模式下)后的频率进行计数,通过设定计数初值来进行定时。单片机工作在计数器模式时,C/T开关打向下边,对Tn脚输入的外来脉冲进行计数。本设计将T0T1两个定时器设置为计数器模式,分别对被测脉冲与基准脉冲进行计数,将T2设置为定时器模式,通过T2T0T0计数时间长短的控制,从而来计算外来频率的大小。

T0计数的数值为M0 T2的定时时间为T,则被测信号的频率为:

Fx = M0 /T

本设计可产生一个25KHz左右的时基信号,通过该时基信号可以对测得的频率进行一定程度的自检,设T1计数的时基信号数值为M1,然后从T0输入与此时基信号相同频率的信号,设为M0T2的定时时间为T,则误差为:

E= | M0 - M1 | / M1 / T

 

2.2电路原理

 

 

555振荡器:


 3、软件系统分析与设计

3.1 主程序设计

3.2 子程序设计

延时函数:                  void delay(uint z);

写命令函数:               void write_com(uint com);           

写数据函数:               void write_data(uint date);                          

频率显示函数:           void disp(ulong z);

周期显示函数:           void disp_cycle(ulong z);        

显示定位函数:           void pos(uchar x,uchar y);               

液晶初始化函数:       void lcd_init();                               

定时器初始化函数:    void t0_t1_init();


4、功能与数据测试及结果分析

4.1 测试仪器

数字示波器:TDS1012

直流稳压电源:YB1732B3A

DDS函数信号发生器:SU3080 

4.2 测试方法及数据

4.3 测试结果分析

通过对本频率计各类指标的测试,其满足频率测量和周期测量基本功能,可测频率范围0Hz 130KHz,可测幅度范围为0.1V ~ 20V,具有简单的自检功能,测试精度基本满足基础部分要求,但是正弦波在1 5Hz区间由于部分原因无法测量出数据,但是此部分频率较小,影响不大,所以本频率计可用于一般场合下方波及正弦波的频率与周期测量。

 

参考文献

[1]张毅刚.单片机原理及接口技术(C51编程)[M].北京:人民邮电出版社,2011.

[2]康华光.电子技术基础 数字部分(第五版)[M].北京:高等教育出版社,2006.

[3]Stephen Prata.C Primer Plus(第五版)中文版[M].北京:人民邮电出版社,2005.

[4]AT89S52 User’s Guide[EB/OL]. http://www.atmel.com/AT89S52.pdf

 

附录:

一、系统电路图



二、实物图




 代码附件:

V3(定稿);测频、周、功能控制、液晶显示、可简自检、可测方波占空比.txt