单片机期末设计数字频率计.docx

上传人:b****3 文档编号:24675800 上传时间:2023-05-31 格式:DOCX 页数:15 大小:118.58KB
下载 相关 举报
单片机期末设计数字频率计.docx_第1页
第1页 / 共15页
单片机期末设计数字频率计.docx_第2页
第2页 / 共15页
单片机期末设计数字频率计.docx_第3页
第3页 / 共15页
单片机期末设计数字频率计.docx_第4页
第4页 / 共15页
单片机期末设计数字频率计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机期末设计数字频率计.docx

《单片机期末设计数字频率计.docx》由会员分享,可在线阅读,更多相关《单片机期末设计数字频率计.docx(15页珍藏版)》请在冰豆网上搜索。

单片机期末设计数字频率计.docx

单片机期末设计数字频率计

1.引言

近年来,在电子技术中,频率是最基本的参数之一,并且与许多的电参量的测量方法、测量结果都有十分密切的关系,因此,频率的测量显得尤其重要。

数字电路制造工业的进步,使得系统的设计人员能在更小的空间内实现更多的功能,从而提高系统的可靠性和速度,数字集成电路具有结构简单,和同类型电路单元多的特点,因为容易高集成化和归一化。

在电子系统非常广泛的应用者,到处可见处理离散系统的数字电路,共消费用的微波炉和电视、先进的工业控制系统、空间通讯系统、交通控制雷达系统、医院救急系统等无一不用到数字技术。

由于数字电路的飞速发展,所以数字频率计的发展也很快。

通常能对时间和频率两种以上的功能数字化测量仪器,称为数字式频率计。

在电子测量技术中是最为基本的一个参量,对适应晶体振荡器、各种信号发生器、分频和倍频电路的出书信号的频率测量,广播、电视、电讯、微电子技术等现代科学领域。

因此,数字频率计是一种应用很广泛的仪器。

 

目录

1.引言……………………………………………………………………1

1.1作品简介………………………………………………………………2

1.2作品设计思路及方案…………………………………………………2

1.3知识点应用……………………………………………………………3

2.硬件设计………………………………………………………………3

2.1硬件设计思路描述软件设计…………………………………………3

2.2分模块进行设计说明…………………………………………………4

2.3硬件设计原理图………………………………………………………9

3.软件设计…………………………………………………………………9

3.1软件设计思路描述……………………………………………………9

3.2主程序设计……………………………………………………………10

3.3核心子程序的设计……………………………………………………16

4.作品调试………………………………………………………………17

结语…………………………………………………………………………17

参考文献……………………………………………………………………17

 

1.1作品简介

数字频率计是一种用十进制数字,显示被测信号频率的数字测量仪器。

它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。

在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,显示直观,所以经常要用到数字频率计。

1.2作品设计思路及方案

频率测量中直接测量的数字频率计主要由四个部分构成:

时基(T)电路、输入电路、计数显示电路以及控制电路。

在一个测量周期过程中,被测信号通过NE555芯片的的输入端输入,从输出端引出后,信号发往单片机,在定时器进行一秒钟的中断,和计数器的计数脉冲个数,即可得到被测信号的频率)

1.3知识点应用

时钟电路

复位电路

计数器定时器

数码管动态扫描

NE555的波形整形电路

2.硬件设计

2.1硬件设计思路描述:

数字频率计的主要功能是测量周期信号的频率。

频率是单位时间( 1S )内信号发生周期变化的次数。

如果我们能在给定的 1S 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。

数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。

这就是数字频率计的基本原理。

信号的频率就是信号在单位时间内所产生的脉冲个数,其表达式为f=N/T,其中f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。

计数器所记录的结果,就是被测信号的频率。

如在1s内记录1000个脉冲,则被测信号的频率为1000HZ。

基于51单片机,定时器负责一秒钟的计时,而计数器则记下在一秒钟里面收到的脉冲个数,并显示在六位数码管上。

脉冲发生源经过NES555将正弦波整成方波,即可测量不同波形的频率,增加了实用性。

2.1.1单片机的时钟电路:

在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。

根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式,如图1.11所示。

在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。

对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。

晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。

时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。

CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。

图1.1

 

2.1.2单片机的复位电路:

AT89C51的上电复位电路如图1.2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。

对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1µF。

上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。

为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。

上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。

在图1.2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。

另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。

如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。

2.1.3单片机的计数器/定时器

16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。

当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。

显然,定时器的定时时间与系统的振荡频率有关。

因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。

如果晶振为12MHz,则计数周期为:

T=1/(12×106)Hz×1/12=1μs这是最短的定时周期。

若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。

当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。

计数器在每个机器周期的S5P2期间采样引脚输入电平。

若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。

此后的机器周期S3P1期间,新的计数值装入计数器。

如图3所示中P3.4与P3.5口。

2.1.4数码管动态扫描电路:

 

8段数码管显示原理,数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。

对于“共阳极”的数码管,内部每个发光二极管的阳极被接在一起,成为该各段的公共选通线;发光二极管的阴极则成为段选线。

对于“共阴极”数码管,则正好相反,内部发光二极管的阴极接在一起,阳极成为段选线。

这两种数码管的驱动方式是不同的。

当需要点亮“共阳极”数码管的一段时,公共段需接高电平(即写逻辑1)、该段的段选线接低电平(即写逻辑0),从而该段被点亮。

当需要点亮“共阴极”数码管的一段时,公共段需接低电平(即写逻辑0)、该段的段选线接高电平(即写逻辑1),该段被点亮。

在多位8段数码管显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形成段选线的多路复用。

而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。

本次接线还使用了两片74HC573锁存器,使能端接在单片机的P2.6与P2.7,这样子当使能端打开的时候,锁存数据,关掉的时候即使段选的字码改变也不会影响了数码管的显示了。

在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。

8位8段LED动态显示器电原理图如图1.3所示。

图1.3

2.1.5NE555的波形整形电路

555定时器的功能主要由两个比较器决定。

两个比较器的输出电压控制RS触发器和放电管的状态。

在电源与地之间加上电压,当5脚悬空时,则电压比较器C1的反相输入端的电压为2VCC/3,C2的同相输入端的电压为VCC/3。

若触发输入端TR的电压小于VCC/3,则比较器C2的输出为0,可使RS触发器置1,使输出端OUT=1。

如果阈值输入端TH的电压大于2VCC/3,同时TR端的电压大于VCC/3,则C1的输出为0,C2的输出为1,可将RS触发器置0,使输出为0电平。

如图1.4构成施密特触发器,可将正弦波等转换为方波,如图1.5.

图1.4

图1.5

最后将以上几个模块整合起来,最终的硬件原理如图1.6所示。

图1.6

3.软件设计

3.1软件设计思路描述

信号的频率就是信号在单位时间内所产生的脉冲个数,其表达式为f=N/T,其中f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。

计数器TI所记录的结果,就是被测信号的频率。

如在1s内记录1000个脉冲,则被测信号的频率为1000HZ。

基于51单片机,定时器负责一秒钟的计时,而计数器则记下在一秒钟里面收到的脉冲个数,并显示在六位数码管上。

 

3.2主程序设计流程图:

N

Y

3.2.1初始化子程序:

voidini()//初始化函数

{

TMOD=0x15;//计数器T0和定时器T1工作方式EA=1;

ET0=1;TH0=0;TL0=0;TR0=1;

ET1=1;TR1=1;

TH1=(65536-45872)/256;

//50ms产生一次中断

TL1=(65536-45872)%256;

}

3.2.2延时子程序:

定义两个变量,通过for循环实现的延时程序。

程序代码如下:

voiddelayms(uintz)//延时zms

{

uchari,j;//定义两个变量

for(i=z;i>0;i--)

for(j=115;j>0;j--);

}

3.2.3数码管显示子程序:

通过数码管的动态扫描,在极短的时间内来回显示这六个数字,使人眼觉得是同时显示的。

由于只采用了六个数码管,显示六位数。

置段选端口、位选端口高电平,即可分别通过74HC573锁存器送入段码、位码,再将74HC573使能端置零,消影,再送入下一组数据。

代码如下:

voiddisplay(ucharwan,ucharqian,ucharbai,ucharshi,ucharge)//显示子函数

{

wan=f/10000;//万位数字

qian=f/1000%10;//千位数字

bai=f/100%10;//百位数字

shi=f/10%10;//十位数字

ge=f%10;//个位数字

wela=1;//位选端口打开

P1=table1[0];//P1口送入位选码

wela=0;//位选端口关闭

dula=1;//段选端口打开

P1=table[wan];//送入段选码

dula=0;//段选端口关闭

delayms(5);//延时5ms

P1=0xff;//消影,避免显示错乱

wela=1;//送入千位数字

P1=table1[1];

wela=0;

dula=1;

P1=table[qian];

dula=0;

delayms(5);

P1=0xff;

wela=1;//送入百位数字

P1=table1[2];

wela=0;

dula=1;

P1=table[bai];

dula=0;

delayms(5);

P1=0xff;

wela=1;//送入十位数字

P1=table1[3];

wela=0;

dula=1;

P1=table[shi];

dula=0;

delayms(5);

P1=0xff;

wela=1;//送入个位数字

P1=table1[4];

wela=0;

dula=1;

P1=table[ge];

dula=0;

delayms(5);

P1=0xff;

}

3.2.4读脉冲计数子程序:

通过读取放在寄存器的脉冲的计数,将TH0,counter_high进行比较,若读取两次的值不一样,则表示脉冲数目读取出错,跳过之后重新读取。

代码如下:

voidread_counter()//读取T0计数到的脉冲数目

{

do

{

counter_high=TH0;

counter_low=TL0;

a=c*65536+counter_high*256+counter_low;

//a为脉冲计数

}

while(counter_high!

=TH0);

}

3.2.5定时器T1的中断程序:

50ms产生一次中断,进入一次中断后b的值加1,当b=20时,定时1秒,关掉T0与T1。

voidtimer1()interrupt3

{

TH1=(65536-45872)/256;

TL1=(65536-45872)%256;

b++;//当b=20的时候为1秒

if(b==20)

{

b=0;

f=a;//f为频率

TR1=0;TR0=0;

}

}

3.2.6计数器T0中断程序:

当计数寄存器溢出;当计数器溢出时,软件计数加1,相当于收到65536个脉冲

voidtimer0()interrupt1

{

c=c+1;

TH0=0;TH1=0;TR0=1;

}

3.作品调试:

在此次期末设计中,没有亲手搭建出频率计的实体电路,只在开发板上实现了频率计的功能,由于条件的不足,频率的输入只能用电动按键来模拟。

所以作品调试也只能在仿真软件proteus调试,也发现了该作品的不足之处,就是只有当高电平大于4V以上才能被计数到脉冲个数。

之后将脉冲的电平调高就可以实现频率计功能了。

4.结语

本次频率计的量程可从0~60k,精确到个位,可测方波正弦波等波形。

该频率计由于使用的是六位数码管,所以缺点之一,就是量程太小,有局限性。

仿真以后返现了一个初步设计该频率计的时候完全没有想到的缺憾,就是高电平要在4V以上才能被检测出来是一个高电平。

这就意味着当峰值小于4V的脉冲信号是无法被检测到的。

这次设计出来的频率计只是一个小模型,之后会继续改进的,将量程进一步增加,同时将误差减小,还有检测峰值小于4V的各类脉冲信号。

参考文献

[1]郭天祥新概念51单片机C语言教程[M].北京:

电子工业出版社2009页码100-110

[2]dongge1573.NE555XX百科[EB/OL].日期:

2013-10-30

[3]单片机的C语言程序设计与应用——基于proteus仿真(第2版)[M].北京:

电子工业出版社2012页码123-139

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1