基于单片机的频率计设计毕业设计.docx

上传人:b****6 文档编号:7771197 上传时间:2023-01-26 格式:DOCX 页数:16 大小:91.63KB
下载 相关 举报
基于单片机的频率计设计毕业设计.docx_第1页
第1页 / 共16页
基于单片机的频率计设计毕业设计.docx_第2页
第2页 / 共16页
基于单片机的频率计设计毕业设计.docx_第3页
第3页 / 共16页
基于单片机的频率计设计毕业设计.docx_第4页
第4页 / 共16页
基于单片机的频率计设计毕业设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于单片机的频率计设计毕业设计.docx

《基于单片机的频率计设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的频率计设计毕业设计.docx(16页珍藏版)》请在冰豆网上搜索。

基于单片机的频率计设计毕业设计.docx

基于单片机的频率计设计毕业设计

基于单片机的频率计设计

前言

频率计数器是测量信号频率的装置,也可以用来测量方波脉冲的脉宽。

通常频率以数字形式直接显示出来,简便易读。

即所谓的数字频率计频率测量对生产过程监控有很重要的作用,可以发现系统运行中的异常情况,以便迅速作出处理。

传统的频率计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量低频信号时不宜直接采用基于单片机技术。

而数字式频率计数器具有操作简单方便、响应速度快、体积小等一系列优点,可以及时准确地测量低频信号的频率。

频率计最基本的工作原理为:

当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T。

在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。

主门的另外一个输入端为基电路产生的闸门脉冲。

在闸门脉冲开启主门的期间,特定周期的窄脉冲才能通过主门,从而进入计数器进行计数,计数器的显示电路则用来显示被测信号的频率值,内部控制电路则用来完成各种测量功能之间的切换并实现测量设置。

频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。

闸门时间也可以大于或小于1秒。

闸门时间越长,得到的频率值就越准确。

数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。

随着复杂可编程逻辑器件(CPLD)和功能越来越强大的单片机的广泛应用。

数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器,它的基本功能是测量正弦信号、方波信号、尖脉冲信号及其他各种单位时间内变化的物理量。

在AT89C51单片机上实现的频率计,整个系统非常精简,而且具有灵活的现场可更改性。

在不更改硬件电路的基础上,对系统进行各种改进,还可以进一步提高系统的性能。

该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。

1AT89C51介绍

1.1AT89C51介绍

本频率计的设计以AT89C51单片机为核心,频率测量电路选用89C51作为频率计的信号处理核心。

89C51包含2个16位定时/计数器、1个具有同步移位寄存器方式的串行输入/输出口和4K×8位片内FLASH程序存储器。

16位定时/计数器用于实现待测信号的频率测量或者待测信号的周期测量。

同步移位寄存器方式的串行输入/输出口用于把测量结果送到显示电路。

4K×8位片内FLASH程序存储器用于放置系统软件。

89C51与具有更大程序存储器的芯片管脚兼容,如:

89C52(8K×8位)或89C55(32K×8位),为系统软件升级打下坚实的物质基础。

利用它内部的定时/计数器完成待测信号周期/频率的测量。

单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。

在构成为定时器时,每个机器周期加1(使用12MHz时钟时,每1us加1),这样以机器周期为基准可以用来测量时间间隔。

在构成为计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。

外部输入每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率1/24(使用12MHz时钟时,最大计数速率为500KHz)。

定时/计数器的工作由相应的运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。

AT89C51管脚图如图1.1-1所示:

图1.1-1AT89C51管脚图

1.2显示器

在单片机应用系统中,常用的显示器主要有LED和LCD。

共阴级八段数码管图如图1.2-1和图1.2-2所示:

图1.2-1共阴极八段数码管图

图1.2-2共阴极八段数码管图

2系统设计

2.1测量方案

测量方案有很多种,如频率测量,周期测量,脉宽测量,占空比测量等。

2.1.1频率测量

频率测量采用直接测量法时,当待测信号频率较低时,误差较大。

间接测量法在低频段的测量精度高,但高频段的误差较大。

组合测频法在低频时采用直接测量周期法测信号周期,然后换算成频率。

高频时采用直接测频法,这种方法在一定程度上弥补了上述两种方法的不足,但是难以确定最佳分测点,且电路设计较复杂。

因此要采用合理的组合方案。

当信号为方波和正弦波,幅度为0.5~5V,频率为0.1Hz~30MHz,频率测量误差为0.1%。

2.1.2周期测量

周期测量方案与频率测量方案选择类似。

当信号为方波和正弦波,幅度为0.5~5V,频率为1Hz~1MHz,周期测量误差为0.1%,频率为1Hz~1KHz,周期测量误差为1%。

测量并显示周期脉冲信号的占空比,占空比变化范围为10%~90%。

2.1.3脉宽和占空比测量

在测量脉冲宽度和占空比时,首先经信号处理电路进行处理,脉冲边沿被处理得非常陡峭。

为了提高测量精度,在测量脉宽或占空比时采用了数字均值滤波技术。

脉宽测量,信号为脉冲波,幅度为0.5~5V,脉冲宽度为100us,脉冲宽度测量误差为1%。

2.1.4数字显示

采用十进制数字显示,显示刷新时间1~10s连续可调,能对上述三种测量功能分别用不同颜色的发光二极管指示。

并且具有自校功能,时标信号频率为1MHz。

2.2频率计系统设计

采用FPGA等可编程器件可以方便的完成不同测量原理的频率计设计。

以单片机为核心的频率计系统框图如图2.2-1所示,采用高阻抗,高增益的前端放大器和分频器,采用屏蔽,看门狗,软件陷阱以及软件容错等多种软件抗干扰措施。

将被测量的输入信号(0.1Hz~30MHz)划分成0.1~1Hz,1Hz~50KHz,50KHz~1MHz,1~30MHz四个频率段。

首先对小于1MHz与大于1MHz的信号采用两个预处理放大器,分别进行放大。

然后,对放大器的信号进行整形,分频处理。

最后,利用单片机进行频率,周期,脉宽,占空比的测量和计算处理,并将运算结果串行输出到数码显示。

 

图2.2-1系统框图

3软件设计

3.1基于单片机频率计设计

在频率测量中,由于设计要求的被测频率范围较宽,为了便于信号的放大和测量,把整个测量频率范围划分为4个频段:

在0.1~1Hz频段内,设定闸门时间为10s,由定时器T0定时20ms,时标信号为0.5us,循环500次得到,并由它控制计数器T1计数脉冲个数,把计得的脉冲数除以10得到频率。

在1Hz~50kHz频段内,由定时器T0定时20ms,时标信号为0.5us,循环50次得到1s的闸门时间,并由其控制计数器T1计数脉冲个数,计得的脉冲数即为信号频率。

在50kHz~1MHz频段内,先经16分频,使其频率降为3125~62500Hz,闸门时间设为1s,又T0作为闸门时间计数器,又T1计数被测脉冲个数,由T1中的数值乘以16即为频率,其绝对误差为+16Hz或-16Hz,最大相对误差为(16Hz)/(50KHz)=0.032%。

在1~30Hz频段内,信号经512分频,闸门时间为1s,由定时器T0提供闸门时间,由T1计数被测脉冲个数,信号频率等于T1计数值乘以512。

这样,测量最大的绝对误差为+512Hz或-512Hz,最大相对误差为(512Hz)/(1MHz)=0.0512%,可以达到设计精度要求。

在周期测量中,信号在1kHz以上,由定义可知周期T=1/f,先测量频率后取倒数就可得到周期。

在1kHz以下的周期测量中,用被测量信号启动/停止计数器T0测量正脉冲脉宽T+,用被测量信号启动/停止计数器T1测量负脉冲脉宽T_,通过数据处理T++T_,再乘以时标0.5us,即为周期,最大绝对误差为+0.5us或-0.5us。

在测量脉宽时,由外部信号的高电平启动计数器T1计数,当信号变为低电平时,T1计数器停止工作,此时T1的计数值乘以0.5us即为脉宽,其最大绝对误差为+0.5us或-0.5us。

在测量占空比时,先测量信号的脉宽和周期,为保证测量精度,采用周期除以脉宽(用4字节乘、除法实现),再去倒数可得占空比。

3.2基于单片机频率计设计的主程序框图

图3.2-1主程序框图

4结束语

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

频率计是一种专门对被测信号频率进行测量的电子测量仪器。

频率计主要由四个部分构成:

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

基于单片机设计的数字频率计具有原理简单、易于调试和测量方便等优点,主要用来测量低频信号的频率。

由于其测量范围会受单片机计数速率的限制,其测量量程较小,所以可以从原理上进行改进以提高其测频范围,比如通过增加分频电路,就可实现对高频信号的测量。

本文所介绍的频率计的设计方法,所制作的频率计需要外围器件较少,所以该频率计应用周期测量和相应的数学处理实现低频段的频率测量,因此很容易扩展实现信号的周期测量和占空比测量。

首先在这里感谢XX老师认真的指导,本次设计的过程和结果都给了我很多感触。

通过这几周的毕业设计,使我不仅对单片机有了更深层次的了解,也扩大了我的知识面,将理论与实际相结合。

在设计过程中,难免会有许多考虑不周全的地方,如果没有导师的督促指导,以及同学们的支持,我想这个设计不会完成的这么顺利。

在设计的每个阶段从查阅资料到设计方案的确定和修改,老师和同学们都给了我很大的帮助。

最后,再次感谢XX老师的耐心指导。

附录:

C语言程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchartemp[8]={0,0,0,0,0,0,0,0};

uchartemp1[8]={0,0,0,0,0,0,0,0};

ucharT1count,timecount,T1count1,timer,yushu,yushu1;

longfre,frx;

floatzhou;

bitflag;

bitflag1;

voiddelay(uchar);

bitresult;

sbitird=P1^1;

sbitid=P1^0;

sbitclr=P1^2;

sbiten=P1^5;

sbitrw=P1^6;

sbitrs=P1^7;

sbitrd=P3^7;

sbitkb=P1^3;

sbitkx=P1^4;

sbitA0=P3^6;

sbitA1=P3^7;

bitstart;

ucharcodetab1[]="fre:

";

ucharcodetab2[]="frx:

";

voiddelay(ucharz)

{

ucharx,y;

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

for(y=110;y>0;y--);

}

panduan_bz()

{

rs=0;

rw=1;

en=1;

result=(bit)(P2&0x80);

en=0;

return(result);

}

voidwrite_com(ucharcom)

{

while(panduan_bz());

rs=0;

rw=0;

en=0;

P2=com;

delay(5);

en=1;

delay(5);

en=0;

}

voidwrite_dat(uchardat)

{

while(panduan_bz());

rs=1;

rw=0;

en=0;

P2=dat;

delay(5);

en=1;

delay(5);

en=0;

}

voidinit()

{

ucharnum;

en=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<16;num++)

{

write_dat(tab1[num]);

delay(5);

}

write_com(0x80+0x40);

for(num=0;num<16;num++)

{

write_dat(tab2[num]);

delay(5);

}

}

voidinit1()

{

ird=1;

id=1;

TMOD=0x55;

TH1=0;

TL1=0;//初值为0

TH0=0;

TL0=0;

TR0=1;

TR1=1;

IE=0x8a;

RCAP2H=(65536-47850)/256;//重装载计数器赋初值

RCAP2L=(65536-47850)%256;

ET2=1;//开定时器2中断

EA=1;//开总中断

TR2=1;

}

voiddisplay()

{

uchari;

fre=(T1count*65536+TH1*256+TL1);//频率计算

temp[0]=fre/10000000;

temp[1]=fre%10000000/1000000;

temp[2]=fre%10000000%1000000%1000000/100000;

temp[3]=fre%10000000%1000000%1000000%100000/10000;

temp[4]=fre%10000000%1000000%1000000%100000%10000/1000;

temp[5]=fre%10000000%1000000%1000000%100000%10000%1000/100;

temp[6]=fre%10000000%1000000%1000000%100000%10000%1000%100/10;

temp[7]=fre%10000000%1000000%1000000%100000%10000%1000%100%10;

if(fre<=999)

{

write_com(0x80+4);

for(i=0;i<8;i++)

{

write_dat(0x30+temp[i]);//保存要显示的数到显示缓冲区

}

write_dat('H');

write_dat('z');

write_dat('');

write_dat('');

}

elseif(fre>=1000)

{

write_com(0x80+4);

for(i=0;i<8;i++)

{

write_dat(0x30+temp[i]);//保存要显示的数到显示缓冲区

if(i==4)

{

write_dat('.');

}

}

write_dat('K');

write_dat('H');

write_dat('z');

}

T1count=0;

timecount=0;

TH1=0;

TL1=0;

TH0=0;

TL0=0;//定时器0重新装值,保证精确(不加的话只是最多差0.001s,0.1%)

}

voiddisplay1()

{

ucharj;

floatzhou;

zhou=((T1count1*65536+TH0*256+TL0)*1.0549);

frx=(long)((zhou)*256);

temp1[0]=frx/10000000;

temp1[1]=frx%10000000/1000000;

temp1[2]=frx%10000000%1000000%1000000/100000;

temp1[3]=frx%10000000%1000000%1000000%100000/10000;

temp1[4]=frx%10000000%1000000%1000000%100000%10000/1000;

temp1[5]=frx%10000000%1000000%1000000%100000%10000%1000/100;

temp1[6]=frx%10000000%1000000%1000000%100000%10000%1000%100/10;

temp1[7]=frx%10000000%1000000%1000000%100000%10000%1000%100%10;

if(frx<=999)

{

write_com(0x80+0x40+4);

for(j=0;j<8;j++)

{

write_dat(0x30+temp1[j]);//保存要显示的数到显示缓冲区

}

write_dat('H');

write_dat('z');

write_dat('');

write_dat('');

}

elseif(frx>=1000)

{//frx=frx/1000;

write_com(0x80+0x40+4);

for(j=0;j<8;j++)

{

write_dat(0x30+temp1[j]);//保存要显示的数到显示缓冲区

if(j==4)

{

write_dat('.');

}

}

write_dat('K');

write_dat('H');

write_dat('z');

}

}

voidmain(void)

{

init();

init1();

while

(1)

{

rd=0;

ird=1;

if(flag==1)//标志位为1,表示进行完了一次1S记数

{

flag=0;

kb=0;

kx=1;

clr=0;

ird=0;

id=0;

display1();

display();

}

else

{

kb=1;

kx=0;

}

}

}

voidt1(void)interrupt3//记数器中断,加1

{

T1count++;

}

voidt0(void)interrupt1//记数器中断,加1

{

T1count1++;

}

voidTimer2()interrupt5//调用定时器2,自动重装载模式

{

uchari=0;//定义静态变量i

TF2=0;//定时器2的中断标志要软件清0

timecount++;//计数标志自加1

if(timecount==20)//判断是否到1s

{

timecount=0;//将静态变量清0

flag=1;

}

}

参考文献:

[1]吴居娟、齐娟:

基于可编程增益放大器的多路高速数据采集系统设计,煤矿现代化,2007.5,P45-P50

[2]何立民:

单片机应用技术选编,北京航空航天大学出版社,1999.6,P63-P70

[3]丁鸣艳、李文:

基于多路数据采集的交流调速系统设计,机械与电子,2007.10,P33-P36

[4]王瑞福:

单片微机测控系统大全,北京航空航天大学出版社,1998.8,P79-P85

[5]孙育才:

单片微机应用系统设计与实现,东南大学出版社,1990.6,P88-P95

[6]邹大挺:

频率计的设计,电子产品世界出版社,2006.7,P90-P98

[7]李华:

单片机实用接口技术,北京航空航天大学出版社,2006.5,P23-P33

[8]张鹏、王雪梅:

单片机原理与应用实例教程,海军出版社,2007.8,P101-107

[9]郝建国:

单片机在电子电路设计中的应用,清华大学出版社,2005.8,P74-P79

[10]谢自美:

电子线路设计与实现,华中科技大学出版社,2006.9,P83-P89

[11]吴清平:

单片机原理与应用实例教程,海军出版社,2008.5,P56-P63

[12]李群芳:

单片微型计算机与接口技术,电子工业出版社,2008.6,P76-P87

[13]李朝青:

单片机原理及接口技术设计,北京航空航天大学出版社,2003.7,P48-P56

[14]赫建国、刘建新:

基于单片机频率计设计,西安邮电学院学报,2003.7,P53-P59

[15]谢自美:

电子线路设计与实现,华中科技大学出版社,2006.5,P87-P96

[16]李光第、朱月秀:

单片机基础,北京航空航天大学出版社,2004.6,P56-P63

[17]李群芳、肖看:

单片机原理接口与应用,清华大学出版社,2005.6,P98-P106

[18]林凌:

51系列单片机系统设计与应用技巧,北京航空航天大学出版社,2004.7,P79-84

[19]陈光东、赵性初:

单片微机原理与接口技术,华中科技大学出版社,2003.8,P83-P95

[20]杨素行:

模拟电子技术基础简明教程,高等教育出版社,2010.12,P235-P245

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

当前位置:首页 > 小学教育 > 语文

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

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