2009级电子信息工程
基于单片机的频率计设计
设计题目 基于单片机的频率计设计
姜釜源 [1**********]
姓名及
学号 王小均 [1**********]
钟玉伟 [1**********]
学院
专业
班级
指导老师 工程技术学院 电子信息工程 09级2班 薛世华
2012年5月24日
摘要
随着电子信息产业的不断发展,信号频率的测量在科技研究和实际应用中的作用日益重要。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。考虑到上述问题,本课题——基于单片机设计频率计。首先,我们把待测信号经过放大整形,然后把信号送入单片机的定时计数器里进行计数,获的频率值,最后把测得的频率数值送入显示电路里进行显示。本设计从频率计的原理出发,介绍了基于单片机的频率计的设计方案,选择了实现系统的各种电路元器件。
关键字:单片机 频率计 测量
1引言 .............................................................. 5
2芯片简介 .......................................................... 5
2.1 单片机 ...................................................... 5
2.1.1单片机特点及引脚图 ..................................... 5
2.1.2单片机引脚说明 ......................................... 7
2.1.3 时钟电路............................................... 9
2.1.4复位电路 ............................................... 9
2.2 74HC系列芯片简介........................................... 10
2.2.1 74HC593............................................... 10
2.2.2 74HC373............................................... 11
2.2.3 74HC138............................................... 11
2.2.4 74HC10................................................ 12
3输入与非门。其管脚如下图2.2.4所示。 ...................... 12
2.2.5 74HC00................................................ 12
3方案选择与论证 ................................................... 12
3.1方案比较.................................................... 12
3.2方案论证.................................................... 14
3.3方案选择.................................................... 14
4频率计系统原理概述 ............................................... 15
5系统硬件设计 ..................................................... 15
5.1数字时钟电路................................................ 15
5.2复位电路.................................................... 16
5.3输入保护闸门电路............................................ 16
5.4分频电路.................................................... 17
5.5数字频率显示电路............................................ 17
6 软件设计......................................................... 17
7系统调试 ......................................................... 22
8总结 ............................................................. 23
附录一(元件清单)................................................. 24
附录二 (完整原理图)................................................ 25
附录三(测试及物图)............................................... 26
.............................................................. 27
............................................................. 27
参考文献........................................................... 28
致谢............................................................... 28
1引言
频率仪器是数字电路中一个典型应用,实际的硬件设计用到的器件较多,联机比较复杂,而且会产生比较大的延迟。随着复杂可编程逻辑器件的广泛应用,将使整个系统大大简化。提高整体性能,它是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波,方波,三角波,尖脉冲信号和其他具有周期的信号的频率,而且还可以测量他们的周期。经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪,可以测量电容做成数字电容测量仪; 在电路中增加传感器,还可以做成数字脉搏仪,计价器等。因此数字频率计在测量物理量方面有广泛应用。
本设计在测量频率时分别采用了测周法和测频法。在频率小于100Hz 时用测周法,在频率大于100Hz 时用测频法。
测周法的原理实际上是测量一个周期所用时间的多少,再取周期的倒数,就是频率了。测周法适用于低频段的测量,当频率较高时,采用测周法误差会比较大。
测频法的原理实际上是测量单位时间内的周期数,所测量即是频率,测频法适用于较高频段的测量,当测量的频率较低时,采用测频法误差会比较大。
本课题的任务是设计一个基于单片机技术的数字频率计。主要介绍了整形电路,控制电路和显示电路的构成原理,以及测周法和测频法的基本方法,并且进行了相应的软硬件设计。
2芯片简介
2.1 单片机
2.1.1单片机特点及引脚图
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52拥有灵巧的8位CPU 和在系统可编程Flash ,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方
案。
AT89S52具有以下标准性功能:
1、与MCS-51单片机产品兼容;
2、8K 支持在线编程(ISP)的FLASH 结构程序存储器,1000次擦写寿命;
3、全静态操作:0Hz-33MHz ;
4、三级加密程序存储器;
5、32个可编程I/O口线;
6、3个16位定时器/计数器;
7、6个中断源;
8、全双工UART 串行通道;
9、低功耗空闲和掉电模式;
10、掉电后中断可唤醒;
11、看门狗定时器;
12、双数据指针;
13、掉电标识符。
工业级产品,温度范围(-40°C 到85°C) ,PU 为无铅环保产品。另外,A T89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其PDIP 图如下图2-1所示。
图2-1 AT89S52单片机的引脚配置图
2.1.2单片机引脚说明
P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash 编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL 逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。
P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL 逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX@RI)访问外部数据存
储器时,P2口输出P2锁存器的内容。在flash 编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL 逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash 编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能:
P3.0RXD(串行输入口) ;
P3.1TXD(串行输出口) ;
P3.2INT0 (外中断0) ;
P3.3INT1 (外中断1) ;
P3.4T0(定时/计数器0) ;
P3.5T1(定时/计数器1) ;
P3.6WR (外部数据存储器写选通) ;
P3.7RD (外部数据存储器读选通) ;
此外,P3口还接收一些用于FLASH 闪存编程和程序校验的控制信号。 RST :复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG :当访问外部程序存储器或数据存储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE 仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是,每当访问外部数据存储器时将跳过一个ALE 脉冲。对FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG )。如有必要,可通过对特殊功能寄存器(SFR )区中的8EH 单元的D0位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC 指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
PSEN :程序储存允许(PSEN )输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN 信号。 EA /VPP:外部访问允许,欲使CPU 仅访问外部程序存储器(地址为0000H-FFFFH ),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA 端状态。如EA 端为高电平(接Vcc 端),CPU 则执行内部程序存储器的指令。FLASH 存储器编程时,该引脚加上+12V的编程允许电源Vpp ,当然这必须是该器件是使用12V 编程电压Vpp 。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
2.1.3 时钟电路
图2.1.3
2.1.4复位电路
图2.1.4
2.2 74HC系列芯片简介
(1)具有非常低的静态功耗。在电源电压VCC=5V时,中规模集成电路的静态功耗不小于100mv 。
(2)具有非常高的输入阻抗,正常工作的CMOS 集成电路,其输入保护二极管处于反偏状态,直流输入阻抗大于100M 欧。
(3)宽的电源电压范围。CMOS 集成电路标准4000B/4500B系列产品的电源电压为3~18V。
(4)扇出能力强。在 低频工作时,一个输出端可以驱动CMOS 器件50个以上输入端。
(5)扛干扰能力强。CMOS 集成电路的电压噪声容限可达电源电压的45%,且高低电平的噪声容限基本相等。
(6)逻辑摆幅大。CMOS 在空载时,输出高电平VOH 大于等于VCC-0.05V , 输出低电平VOL 小于等于0.05V 。
2.2.1 74HC593
八进制3态非反转透明锁存器,输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。当锁存使能端LE 为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。其管脚图说明如下图2.2.1所示。
图2.2.1
2.2.2 74HC373
256倍分频器,当三态允许控制端 OE 为低电平时,O0~O7 为正常逻辑状态,可用来驱动负载或总线。当OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据D 而变。当LE 为低电平时,O 被锁存在已建立的数据电平。当LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV 。 管脚说明如下图2.2.2所示。
图22.2
2.2.3 74HC138
74HC138是一款高速74HC138引脚兼容低功耗肖特基TTL (LSTTL )系列。 74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。其管脚说明如下图2.2.3所示。
2.2.4 74HC10
3输入与非门。其管脚如下图2.2.4所示。
图2.2.4
2.2.5 74HC00
四—2输入与非门。其管脚如下图2.2.5所示。
图2.2.5
3方案选择与论证
3.1方案比较
方案一:本方案主要以单片机为核心,利用单片机的外部中断和定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显
示。其实原理框图如3.1.1所示
3.1.1 方案一原理图
方案二:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图3.1.2所示
2.2方案二原理框图
方案三:本方案以单片机为中心,主要分为保护与闸门电路,分频电路,单片机电路,led
动态显示电路。其实原理框图如3.1.3所示。
图3.1.3
3.2方案论证
方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测得正弦波改为方波。利用单片机的外部中断和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。
方案二:本方案使用大量的数字器件,被测量信号放大整形电路变成计数器所要求的脉冲信号,其频率于被测信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间1s ,当1s 信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s 信号结束闸门关闭,停止计数。若在闸门时间1s 内计数器计得的脉冲个数为N ,则被测信号频率FX=NHZ。逻辑控制电路的作用有两个:一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。
方案三:基本原理与第一种方案差不多,但第一种方案由于单片机计数周期较大的原因测频率的范围比较小,故特别加了分频器来降低进入单片机的被计数频率,故可以大大增强其测频率的范围。
3.3方案选择
比较以上三种方案可以知道,方案一得核心是单片机,使用的元器件少,原
理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程,但量程较小。方案二与方案一相比较方案二则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高了点。方案三结合了以上二者的优点,并可编程实现自动调节测频的范围。基于上述,所以选择了方案三。
4频率计系统原理概述
本频率计的设计以AT89S52单片机为核心,利用它内部的外部中断和定时/计数器完成待测信号周期/频率的测量,单片机AT89S52内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。由外部中断检测外部信号下降沿进行计数,这样可以用来测量待测信号的频率。外部输入在每个机器周期被采用一次,这样查测一次从1到0的跳变至少需要2个机器周期,所以最大计数速率为时钟频率1/24。定时/计数器的工作有运行控制位TR 控制,当TR 置1,定时/计数器开始计数:当TR 清0 ,停止计数。
由于频率较大时,单片机无法继续计数,故需降低被测频率再输入单片机,这样单片机变可以测量较大的频率。
硬件系统框图如下图4.1:
图4.1
5系统硬件设计
5.1数字时钟电路
如下图5.1所示
图5.1
5.2复位电路
如下图5.2所示
VCC
C3
图5.2
5.3输入保护闸门电路
如下图5.3所示
图5.3
5.4分频电路 如下图5.4所示
图5.4
5.5数字频率显示电路
如下图5.5所示
图5.5
6 软件设计
6.1 软件流程图
6.2程序
#include
#define uint unsigned int #define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码 unsigned long int x=0,x0,count0,count1,led[8]; sbit qingl=P3^0; //为定义 sbit fp_1=P3^1; sbit fp_16=P3^3;
sbit fp_256=P3^2; sbit shuru=P3^6; void delay(uint t) //延时 {
while(t--); }
void disply(int j) //数码管动态显示 {
uchar i=0; int k=0;
for(i=0;i
switch(i) //数据处理 {
x=x-1;
case 0:led[0]=x/10000000;break; case 1:led[1]=(x%10000000)/1000000;break; case 2:led[2]=(x%1000000)/100000;break; case 3:led[3]=(x%100000)/10000;break; case 4:led[4]=(x%10000)/1000;break; case 5:led[5]=(x%1000)/100;break; case 6:led[6]=(x%100)/10;break; case 7:led[7]=(x%10);break; } (int)led[i]; //消零 k=k+led[i]; delay(200); if(k) {
P2=i; P0=table[led[i]]; } else if((i==7)&led[7]==0) { P2=7; P0=0x3f; } } while(j--) //循环显示 { i=0; k=0; for(i=0;i
(int)led[i]; k=k+led[i]; delay(200); if(k) {
P2=i; P0=table[led[i]]; } else if((i==7)&led[7]==0) { P2=7; P0=0x3f; } } } }
void t0_and_t1init() //定时器0和计数器1初始化 {
count0=0; count1=0;
TMOD=0x51; //t0定时,t1计数 TR0=0; TR1=0;
TH0=(65536-49970)/256; TL0=(65536-49970)%256; TH1=0; TL1=0; EA=1; ET0=1; TR0=1; TR1=1; }
void du_shu() //读数子程序 {
if(fp_16) //16分频 {
x0=P1&0x0f;
x=(TH1*256+TL1)*16+x0; if(x
else if(fp_256) //256分频 {
x=(count1*65535+TH1*256+TL1)*256+P1; if(x
x=TH1*256+TL1; } }
void into_0(void) interrupt 1 { TF1=1;
TH0=(65536-49970)/256; TL0=(65536-49970)%256; count0++;
if(count0==20) {
shuru=1; TR0=0; TR1=0;
du_shu(); }
else if(TF1==1) {
TF1=0; if(fp_1) {
fp_1=0; fp_16=1; }
else if(fp_16) {
fp_16=0; fp_256=1; }
else if(fp_256) {
count1++; TH1=0; TL1=0;
分频 //t0中断 //判断定时满1秒 //调用读数子程序读取计数值 //判断计数器是否溢出 //更换档位 //1
} } }
void main() {
fp_1=0; fp_16=1; fp_256=0; shuru=1; qingl=1; while(1) {
shuru=1; qingl=1; qingl=0;
t0_and_t1init(); shuru=0; disply(70); } }
//主函数 //初设16分频
//清零分频器端口数据
//调用定时器计数器初始化程序 //动态显示
7系统调试
(1)调试工具: ①示波器 ②6V 直流电源 ③频率计 (2)调试环境: ①地点:实验室 ②室温:20 ℃ (3)测试过程:
当我们把硬件焊接等工序完成之后便开始进行测试,首先是测试了单片机驱动数码管,发现显示不良,原因是顶层信号线没接好,接好后再进行测试,最终晶显示良好。接通电源和输入信号进行检测,发现输入附近集成块电压为方波信号,经老师指导,发现地线没接通,接通后再测试,信号能进入单片机,硬件测试完毕,没有问题。然后我们把我们编写的程序写入单片机,将单片机接入电
路进行测试,通电之后单片机驱动数码管的显示部分都没有工作,原来是存频率的数组类型与频率位选码不是同一种类型,经改正调试就,最后成功显示。最后输入一定的频率测量,发现单片机不自动换挡,但能测到65KZ 的信号。
8总结
通过这次设计,我们懂得了理论与实际相结合的重要性,只有在实践中利用自己的理论知识,才能更好地掌握专业知识。只有理论知识是远远不够的,理论知识要在实践中解决问题才能发挥出其重要性,在这次设计过程中提高我们的动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机硬件及C 语言掌握得不够好。
通过这次设计,我们增强了对单片机和C 语言的理解,进一步提高分析解决实际问题的能力,培养了自己独立思考,独立动手的能力。还学会了解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化;通过典型程序的设计与制作,加深对基本原理的了解,增强了实践能力。
附录一(元件清单)
附录二 (完整原理图)
L 1L 2
附录三(测试及物图)
参考文献
【1】唐颖。单片机原理与应用及C51程序设计,北京大学出版社 【2】康华光。电子技术基础数字部分,高等教育出版社 【3】康华光。电子技术基础模拟部分,高等教育出版社
【4】潘永雄。电子线路CAD 实用教程,西安电子科技大学出版社 【5】荣政。C 语言程序设计,西安电子科技大学出版社 【6】高吉祥。电子技术基础实验与课程设计,电子工业出版社
致谢
感谢学院精心制作这样的课题来锻炼我们,在这里我们对我们的指导老师薛世华老师示深深的感谢。在测试的这段时间,他们总是在实验室忙碌到很晚。在设计过程中,我们得到了老师们精心的指导和无私的帮助,他们专业的知识和科学、严谨的专业精神令我们敬佩不已,也让我们受益匪浅。同时,我们要感谢教给我们专业知识的老师们,谢谢你们!
2009级电子信息工程
基于单片机的频率计设计
设计题目 基于单片机的频率计设计
姜釜源 [1**********]
姓名及
学号 王小均 [1**********]
钟玉伟 [1**********]
学院
专业
班级
指导老师 工程技术学院 电子信息工程 09级2班 薛世华
2012年5月24日
摘要
随着电子信息产业的不断发展,信号频率的测量在科技研究和实际应用中的作用日益重要。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。考虑到上述问题,本课题——基于单片机设计频率计。首先,我们把待测信号经过放大整形,然后把信号送入单片机的定时计数器里进行计数,获的频率值,最后把测得的频率数值送入显示电路里进行显示。本设计从频率计的原理出发,介绍了基于单片机的频率计的设计方案,选择了实现系统的各种电路元器件。
关键字:单片机 频率计 测量
1引言 .............................................................. 5
2芯片简介 .......................................................... 5
2.1 单片机 ...................................................... 5
2.1.1单片机特点及引脚图 ..................................... 5
2.1.2单片机引脚说明 ......................................... 7
2.1.3 时钟电路............................................... 9
2.1.4复位电路 ............................................... 9
2.2 74HC系列芯片简介........................................... 10
2.2.1 74HC593............................................... 10
2.2.2 74HC373............................................... 11
2.2.3 74HC138............................................... 11
2.2.4 74HC10................................................ 12
3输入与非门。其管脚如下图2.2.4所示。 ...................... 12
2.2.5 74HC00................................................ 12
3方案选择与论证 ................................................... 12
3.1方案比较.................................................... 12
3.2方案论证.................................................... 14
3.3方案选择.................................................... 14
4频率计系统原理概述 ............................................... 15
5系统硬件设计 ..................................................... 15
5.1数字时钟电路................................................ 15
5.2复位电路.................................................... 16
5.3输入保护闸门电路............................................ 16
5.4分频电路.................................................... 17
5.5数字频率显示电路............................................ 17
6 软件设计......................................................... 17
7系统调试 ......................................................... 22
8总结 ............................................................. 23
附录一(元件清单)................................................. 24
附录二 (完整原理图)................................................ 25
附录三(测试及物图)............................................... 26
.............................................................. 27
............................................................. 27
参考文献........................................................... 28
致谢............................................................... 28
1引言
频率仪器是数字电路中一个典型应用,实际的硬件设计用到的器件较多,联机比较复杂,而且会产生比较大的延迟。随着复杂可编程逻辑器件的广泛应用,将使整个系统大大简化。提高整体性能,它是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波,方波,三角波,尖脉冲信号和其他具有周期的信号的频率,而且还可以测量他们的周期。经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪,可以测量电容做成数字电容测量仪; 在电路中增加传感器,还可以做成数字脉搏仪,计价器等。因此数字频率计在测量物理量方面有广泛应用。
本设计在测量频率时分别采用了测周法和测频法。在频率小于100Hz 时用测周法,在频率大于100Hz 时用测频法。
测周法的原理实际上是测量一个周期所用时间的多少,再取周期的倒数,就是频率了。测周法适用于低频段的测量,当频率较高时,采用测周法误差会比较大。
测频法的原理实际上是测量单位时间内的周期数,所测量即是频率,测频法适用于较高频段的测量,当测量的频率较低时,采用测频法误差会比较大。
本课题的任务是设计一个基于单片机技术的数字频率计。主要介绍了整形电路,控制电路和显示电路的构成原理,以及测周法和测频法的基本方法,并且进行了相应的软硬件设计。
2芯片简介
2.1 单片机
2.1.1单片机特点及引脚图
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52拥有灵巧的8位CPU 和在系统可编程Flash ,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方
案。
AT89S52具有以下标准性功能:
1、与MCS-51单片机产品兼容;
2、8K 支持在线编程(ISP)的FLASH 结构程序存储器,1000次擦写寿命;
3、全静态操作:0Hz-33MHz ;
4、三级加密程序存储器;
5、32个可编程I/O口线;
6、3个16位定时器/计数器;
7、6个中断源;
8、全双工UART 串行通道;
9、低功耗空闲和掉电模式;
10、掉电后中断可唤醒;
11、看门狗定时器;
12、双数据指针;
13、掉电标识符。
工业级产品,温度范围(-40°C 到85°C) ,PU 为无铅环保产品。另外,A T89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其PDIP 图如下图2-1所示。
图2-1 AT89S52单片机的引脚配置图
2.1.2单片机引脚说明
P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash 编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL 逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。
P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL 逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL )。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX@RI)访问外部数据存
储器时,P2口输出P2锁存器的内容。在flash 编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL 逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash 编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能:
P3.0RXD(串行输入口) ;
P3.1TXD(串行输出口) ;
P3.2INT0 (外中断0) ;
P3.3INT1 (外中断1) ;
P3.4T0(定时/计数器0) ;
P3.5T1(定时/计数器1) ;
P3.6WR (外部数据存储器写选通) ;
P3.7RD (外部数据存储器读选通) ;
此外,P3口还接收一些用于FLASH 闪存编程和程序校验的控制信号。 RST :复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG :当访问外部程序存储器或数据存储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE 仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是,每当访问外部数据存储器时将跳过一个ALE 脉冲。对FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG )。如有必要,可通过对特殊功能寄存器(SFR )区中的8EH 单元的D0位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC 指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
PSEN :程序储存允许(PSEN )输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN 信号。 EA /VPP:外部访问允许,欲使CPU 仅访问外部程序存储器(地址为0000H-FFFFH ),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA 端状态。如EA 端为高电平(接Vcc 端),CPU 则执行内部程序存储器的指令。FLASH 存储器编程时,该引脚加上+12V的编程允许电源Vpp ,当然这必须是该器件是使用12V 编程电压Vpp 。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
2.1.3 时钟电路
图2.1.3
2.1.4复位电路
图2.1.4
2.2 74HC系列芯片简介
(1)具有非常低的静态功耗。在电源电压VCC=5V时,中规模集成电路的静态功耗不小于100mv 。
(2)具有非常高的输入阻抗,正常工作的CMOS 集成电路,其输入保护二极管处于反偏状态,直流输入阻抗大于100M 欧。
(3)宽的电源电压范围。CMOS 集成电路标准4000B/4500B系列产品的电源电压为3~18V。
(4)扇出能力强。在 低频工作时,一个输出端可以驱动CMOS 器件50个以上输入端。
(5)扛干扰能力强。CMOS 集成电路的电压噪声容限可达电源电压的45%,且高低电平的噪声容限基本相等。
(6)逻辑摆幅大。CMOS 在空载时,输出高电平VOH 大于等于VCC-0.05V , 输出低电平VOL 小于等于0.05V 。
2.2.1 74HC593
八进制3态非反转透明锁存器,输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。当锁存使能端LE 为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。其管脚图说明如下图2.2.1所示。
图2.2.1
2.2.2 74HC373
256倍分频器,当三态允许控制端 OE 为低电平时,O0~O7 为正常逻辑状态,可用来驱动负载或总线。当OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据D 而变。当LE 为低电平时,O 被锁存在已建立的数据电平。当LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV 。 管脚说明如下图2.2.2所示。
图22.2
2.2.3 74HC138
74HC138是一款高速74HC138引脚兼容低功耗肖特基TTL (LSTTL )系列。 74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。其管脚说明如下图2.2.3所示。
2.2.4 74HC10
3输入与非门。其管脚如下图2.2.4所示。
图2.2.4
2.2.5 74HC00
四—2输入与非门。其管脚如下图2.2.5所示。
图2.2.5
3方案选择与论证
3.1方案比较
方案一:本方案主要以单片机为核心,利用单片机的外部中断和定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显
示。其实原理框图如3.1.1所示
3.1.1 方案一原理图
方案二:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图3.1.2所示
2.2方案二原理框图
方案三:本方案以单片机为中心,主要分为保护与闸门电路,分频电路,单片机电路,led
动态显示电路。其实原理框图如3.1.3所示。
图3.1.3
3.2方案论证
方案一:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测得正弦波改为方波。利用单片机的外部中断和定时器的功能对被测信号进行计数。编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。
方案二:本方案使用大量的数字器件,被测量信号放大整形电路变成计数器所要求的脉冲信号,其频率于被测信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间1s ,当1s 信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s 信号结束闸门关闭,停止计数。若在闸门时间1s 内计数器计得的脉冲个数为N ,则被测信号频率FX=NHZ。逻辑控制电路的作用有两个:一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。
方案三:基本原理与第一种方案差不多,但第一种方案由于单片机计数周期较大的原因测频率的范围比较小,故特别加了分频器来降低进入单片机的被计数频率,故可以大大增强其测频率的范围。
3.3方案选择
比较以上三种方案可以知道,方案一得核心是单片机,使用的元器件少,原
理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程,但量程较小。方案二与方案一相比较方案二则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高了点。方案三结合了以上二者的优点,并可编程实现自动调节测频的范围。基于上述,所以选择了方案三。
4频率计系统原理概述
本频率计的设计以AT89S52单片机为核心,利用它内部的外部中断和定时/计数器完成待测信号周期/频率的测量,单片机AT89S52内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。由外部中断检测外部信号下降沿进行计数,这样可以用来测量待测信号的频率。外部输入在每个机器周期被采用一次,这样查测一次从1到0的跳变至少需要2个机器周期,所以最大计数速率为时钟频率1/24。定时/计数器的工作有运行控制位TR 控制,当TR 置1,定时/计数器开始计数:当TR 清0 ,停止计数。
由于频率较大时,单片机无法继续计数,故需降低被测频率再输入单片机,这样单片机变可以测量较大的频率。
硬件系统框图如下图4.1:
图4.1
5系统硬件设计
5.1数字时钟电路
如下图5.1所示
图5.1
5.2复位电路
如下图5.2所示
VCC
C3
图5.2
5.3输入保护闸门电路
如下图5.3所示
图5.3
5.4分频电路 如下图5.4所示
图5.4
5.5数字频率显示电路
如下图5.5所示
图5.5
6 软件设计
6.1 软件流程图
6.2程序
#include
#define uint unsigned int #define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码 unsigned long int x=0,x0,count0,count1,led[8]; sbit qingl=P3^0; //为定义 sbit fp_1=P3^1; sbit fp_16=P3^3;
sbit fp_256=P3^2; sbit shuru=P3^6; void delay(uint t) //延时 {
while(t--); }
void disply(int j) //数码管动态显示 {
uchar i=0; int k=0;
for(i=0;i
switch(i) //数据处理 {
x=x-1;
case 0:led[0]=x/10000000;break; case 1:led[1]=(x%10000000)/1000000;break; case 2:led[2]=(x%1000000)/100000;break; case 3:led[3]=(x%100000)/10000;break; case 4:led[4]=(x%10000)/1000;break; case 5:led[5]=(x%1000)/100;break; case 6:led[6]=(x%100)/10;break; case 7:led[7]=(x%10);break; } (int)led[i]; //消零 k=k+led[i]; delay(200); if(k) {
P2=i; P0=table[led[i]]; } else if((i==7)&led[7]==0) { P2=7; P0=0x3f; } } while(j--) //循环显示 { i=0; k=0; for(i=0;i
(int)led[i]; k=k+led[i]; delay(200); if(k) {
P2=i; P0=table[led[i]]; } else if((i==7)&led[7]==0) { P2=7; P0=0x3f; } } } }
void t0_and_t1init() //定时器0和计数器1初始化 {
count0=0; count1=0;
TMOD=0x51; //t0定时,t1计数 TR0=0; TR1=0;
TH0=(65536-49970)/256; TL0=(65536-49970)%256; TH1=0; TL1=0; EA=1; ET0=1; TR0=1; TR1=1; }
void du_shu() //读数子程序 {
if(fp_16) //16分频 {
x0=P1&0x0f;
x=(TH1*256+TL1)*16+x0; if(x
else if(fp_256) //256分频 {
x=(count1*65535+TH1*256+TL1)*256+P1; if(x
x=TH1*256+TL1; } }
void into_0(void) interrupt 1 { TF1=1;
TH0=(65536-49970)/256; TL0=(65536-49970)%256; count0++;
if(count0==20) {
shuru=1; TR0=0; TR1=0;
du_shu(); }
else if(TF1==1) {
TF1=0; if(fp_1) {
fp_1=0; fp_16=1; }
else if(fp_16) {
fp_16=0; fp_256=1; }
else if(fp_256) {
count1++; TH1=0; TL1=0;
分频 //t0中断 //判断定时满1秒 //调用读数子程序读取计数值 //判断计数器是否溢出 //更换档位 //1
} } }
void main() {
fp_1=0; fp_16=1; fp_256=0; shuru=1; qingl=1; while(1) {
shuru=1; qingl=1; qingl=0;
t0_and_t1init(); shuru=0; disply(70); } }
//主函数 //初设16分频
//清零分频器端口数据
//调用定时器计数器初始化程序 //动态显示
7系统调试
(1)调试工具: ①示波器 ②6V 直流电源 ③频率计 (2)调试环境: ①地点:实验室 ②室温:20 ℃ (3)测试过程:
当我们把硬件焊接等工序完成之后便开始进行测试,首先是测试了单片机驱动数码管,发现显示不良,原因是顶层信号线没接好,接好后再进行测试,最终晶显示良好。接通电源和输入信号进行检测,发现输入附近集成块电压为方波信号,经老师指导,发现地线没接通,接通后再测试,信号能进入单片机,硬件测试完毕,没有问题。然后我们把我们编写的程序写入单片机,将单片机接入电
路进行测试,通电之后单片机驱动数码管的显示部分都没有工作,原来是存频率的数组类型与频率位选码不是同一种类型,经改正调试就,最后成功显示。最后输入一定的频率测量,发现单片机不自动换挡,但能测到65KZ 的信号。
8总结
通过这次设计,我们懂得了理论与实际相结合的重要性,只有在实践中利用自己的理论知识,才能更好地掌握专业知识。只有理论知识是远远不够的,理论知识要在实践中解决问题才能发挥出其重要性,在这次设计过程中提高我们的动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机硬件及C 语言掌握得不够好。
通过这次设计,我们增强了对单片机和C 语言的理解,进一步提高分析解决实际问题的能力,培养了自己独立思考,独立动手的能力。还学会了解决程序编写问题的实际本领,真正实现由课本知识向实际能力的转化;通过典型程序的设计与制作,加深对基本原理的了解,增强了实践能力。
附录一(元件清单)
附录二 (完整原理图)
L 1L 2
附录三(测试及物图)
参考文献
【1】唐颖。单片机原理与应用及C51程序设计,北京大学出版社 【2】康华光。电子技术基础数字部分,高等教育出版社 【3】康华光。电子技术基础模拟部分,高等教育出版社
【4】潘永雄。电子线路CAD 实用教程,西安电子科技大学出版社 【5】荣政。C 语言程序设计,西安电子科技大学出版社 【6】高吉祥。电子技术基础实验与课程设计,电子工业出版社
致谢
感谢学院精心制作这样的课题来锻炼我们,在这里我们对我们的指导老师薛世华老师示深深的感谢。在测试的这段时间,他们总是在实验室忙碌到很晚。在设计过程中,我们得到了老师们精心的指导和无私的帮助,他们专业的知识和科学、严谨的专业精神令我们敬佩不已,也让我们受益匪浅。同时,我们要感谢教给我们专业知识的老师们,谢谢你们!