嵌入式课程设计数字频率计.docx
《嵌入式课程设计数字频率计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计数字频率计.docx(16页珍藏版)》请在冰点文库上搜索。
嵌入式课程设计数字频率计
第一章概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率。
测量范围在9kHz以下的方波,时基宽度为1us,10us,100us,1ms。
用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对方波的频率进行自动的测量。
1.1课程设计的基本原理
所谓频率,就是周期性信号在单位时间(
)内变化的次数,若在一定时间间隔
内测得这个周期性信号的重复变化次数为
,则其频率可表示为
图1数字频率计结构图
图1是数字频率计的组成框图。
被测信号
经放大整形电路变成计数器所要求的脉冲信号
,其频率与被测信号的频率
相同。
时基电路提供标准时间基准信号
,其高电平持续时间
,当
信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到
信号结束时闸门关闭,停止计数。
若在闸门时间内计数器计得的脉冲数为
,则被测信号频率
。
逻辑控制电路的作用有两个:
一是产生锁存脉冲
,使显示器上的数字稳定;二是产生清“0”脉冲
,使计数器每次测量从零开始计数。
1.2系统设计要求
●以单片机未核心设计一个数字频率计,有频率检测电路、单片机时钟电路、抚慰电路、数码管驱动电路、四位数码管电路5部分组成
●可以测量9KHZ以下的方波
1.3设计方案确定
1.硬件方案
硬件电路有5部分组成,既平率检测电路、单片机时钟电路、复位电路、数码管驱动电路、四位数马管电路。
各部分实现功能如下:
●频率检测电路:
进行频率检测并转换成数字信号。
●单片机时钟电路、复位电路:
单片机正常工作需要。
●数码管驱动电路、四位数码管电路:
用于测试的电压结果显示。
2.软件方案
本系统的软件部分主要完成功能:
对脉冲的频率采集、计算及显示。
根据软件的功能划分软件设计模块,各模块的具体任务如下:
●数码管显示模块:
实现采集好的频率值的显示。
●脉冲计数模块:
把脉冲的频率检测出来。
第二章数字频率计的硬件结构设计
2.1系统硬件的构成
本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有分频器、显示器等器件。
可分为以下几个模块:
放大整形模块、秒脉冲产生模块、换档模拟转换模块、单片机系统、LCD显示模块。
各模块关系图如图2所示:
图2数字频率计功能模块
2.2系统工作原理图
图3数字频率计系统工作原理图
2.3AT89C51单片机及其引脚说明
89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:
4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器,一个5中断源两个优先级的中断结构,一个双工的串行口,片上震荡器和时钟电路。
引脚说明:
·VCC:
电源电压
·GND:
地
·P0口:
P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。
当对0端口写入1时,可以作为高阻抗输入端使用。
当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。
在这种模式下,P0口具有内部上拉电阻。
在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。
程序校验时需要外接上拉电阻。
·P1口:
P1口是一带有内部上拉电阻的8位双向I/O口。
P1口的输出缓冲能接受或输出4个TTL逻辑门电路。
当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。
·P2口:
P2是一带有内部上拉电阻的8位双向的I/O端口。
P2口的输出缓冲能驱动4个TTL逻辑门电路。
当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX@DPTR)时,P2口送出高8位地址数据。
在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。
当利用8位地址线访问外部数据存储器时(例MOVX@R1),P2口输出特殊功能寄存器的内容。
当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。
·P3口:
P3是一带有内部上拉电阻的8位双向的I/O端口。
P3口的输出缓冲能驱动4个TTL逻辑门电路。
当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P3口同时具有AT89C51的多种特殊功能,具体如下表1所示:
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0)
P3.5
T1(定时器1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器都选通)
表1P3口的第二功能
•RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。
•ALE/:
当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。
当在Flash编程时还可以作为编程脉冲输出()。
一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。
但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。
•:
程序存储允许时外部程序存储器的读选通信号。
当AT89C52执行外部程序存储器的指令时,每个机器周期两次有效,除了当访问外部数据存储器时,将跳过两个信号。
•/VPP:
外部访问允许。
为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,必须同GND相连接。
需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。
当执行内部编程指令时,应该接到VCC端。
•XTAL1:
振荡器反相放大器以及内部时钟电路的输入端。
·XTAL2:
振荡器反相放大器的输出端。
在本次设计中,采用89C51作为CPU处理器,充分利用其硬件资源,结合D触发器CD4013,分频器CD4060,模拟转换开关CD4051,计数器74LS90等数字处理芯片,主要控制两大硬件模块,量程切换以及显示模块。
下面还将详细说明。
2.4信号调理及放大整形模块放大整形系统包括衰减器、跟随器、放大器、施密特触发器。
它将正弦输入信号Vx整形成同频率方波Vo,幅值过大的被测信号经过分压器分压送入后级放大器,以避免波形失真。
由运算放大器构成的射级跟随器起阻抗变换作用,使输入阻抗提高。
同相输入的运算放大器的放大倍数为(R1+R2)/R1,改变R1的大小可以改变放大倍数。
系统的整形电路由施密特触发器组成,整形后的方波送到闸门以便计数。
由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中采用了这个信号调理电路对输入的波形进行阻抗变换、放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图4所示:
图4
2.5时基信号产生电路:
CD4013------双上升沿D触发器,引脚及功能见如下图5:
CD4013由两个相同的、相互独立的数据型触发器构成。
每个触发器有独立的数据置位复位时钟输入和Q及Q非输出。
此器件可用作移位寄存器,且通过将Q非输出连接到数据输入,可用作计数器和触发器。
在时钟上升沿触发时,加在D输入端的逻辑电平传送到Q输出端。
置位和复位或复位线上的高电平完成。
图5CD4013芯片引脚用功能图
CD4060------14位二进制串行计数器,引脚及功能见如下图6:
CD4060由一震荡器和14极二进制串行计数器位组成,震荡器的结构可以是RC或晶振电路。
CR为高电平时,计数器清零且振荡器使用无效,所有的计数器位均为主从触发器CP1非(和CP0)的下降沿计数器以二进制进行计数,在时钟脉冲线上使用施密特触发器对时钟上升和下降时间无限制。
图6CD4060芯片引脚用功能图
时基信号的产生原理:
本电路采用32768HZ晶体震荡器,利用CD4060芯片经过14级分频得到2HZ的信号(32768/214),在经过CD4013双D触发器经过二分频得到0.5HZ的方波,即输出秒脉冲信号使单片机进行计数。
图七秒脉冲产生电路原理图
2.6显示模块
1602主要功能
A、40通道点阵LCD驱动;
B、可选择当作行驱动或列驱动;
C、输入/输出信号:
输出,能产生20×2个LCD驱动波形;输入,接受控制器送出的串行数据和控制信号,偏压(V1∽V6);
D、通过单片机控制将所测的频率信号读数显示出来。
第3章软件设计
根据硬件电路和设计思路,可以画出如下的程序结构图。
程序流程图
3.1应用程序
Include.h文件
/*************************************************
*文件名称:
Include.h
*文件功能:
包含文件中常用操作函数
*************************************************/
#ifndefINCLUDE_H
#defineINCLUDE_H
#include"AT89X51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#define_BV(x)(1<<(x))
#defineGET_BIT(x,y)(((x)&(1<<(y)))==0?
0:
1)//取x变量y位的数据
#defineSET_BIT(x,y)((x)|=(0x0001<<(y)))//置位x变量y位
#defineCLR_BIT(x,y)((x)&=~(0x0001<<(y)))//清零x变量y位
#defineLET_BIT(x,y,z)((x)=(x)&(~(0x0001<<(y)))|(z)<<(y))//置位或清零x变量y位
#defineF_CPU11059200UL//cpu震荡周期
#definesei()(EA=1)//开总中断
#definecli()(EA=0)//关总中断
#endif
freCountMain.c文件
/*************************************************************************
*实例名称:
频率计
*实例说明:
实现0~9000hz频率计的统计
*作者:
yd
*时间:
09.06.20
*************************************************************************/
#include"target.h"
#include"led.h"
uchardisplayBuff[4]={'0','0','0','0'};//数码管显示缓冲区,千,百,十,个
constuchardisplayMode=0x00;//后四位分别对应缓冲区中每位的数据类型,1为任意字符显示,0为数字显示
voidmain()
{
uintget_fre;
target_init();
init_led();
sei();
while
(1)
{
get_fre=get_fre_number();
if(get_fre/1000<0x0A)
{
displayBuff[0]=get_fre/1000+'0';//计算频率千位,放在缓冲区第0位
}
displayBuff[1]=(get_fre/100)%10+'0';//计算频率百位,放在缓冲区第1位
displayBuff[2]=(get_fre%100)/10+'0';//计算频率十位,放在缓冲区第2位
displayBuff[3]=get_fre%10+'0';//计算频率个位,放在缓冲区第3位
ledSweepDisplay(displayBuff,displayMode,0x04);//循环显示数码管缓冲区中数据
}
}
3.2建立仿真模型
在电子设计尤其是单片机系统设计过程中利用Proteus软件来进行仿真建模分析有很大的好处,它不但非常方便而且能够在很大程度范围内减少因设计问题而造成的浪费。
这里的仿真主要是运用ISIS工具。
先从ISIS的元件库中找到需要用的元件,然后搭建相应的主电路,设置好参数后即可进行仿真。
仿真电路图由三部分组成,分别为计时部分,计频部分。
计时部分可以由脉冲信号发生器来实现不同时间范围内的计时功能,如:
将脉冲信号发生器设置为1HZ,则计时时间为100秒,若为100HZ,则计时时间为1秒。
计频电路的输入部分的脉冲由555芯片的3脚输出来提供,555芯片的输入部分由一个脉冲信号发生器来模拟。
为了便于观察其他形式的波形是否能够整形成方波。
3.3仿真程序设计及编译
由上面的程序结构图,可以写出仿真程序,完整的程序见附录2所示。
经检查在Keil中编译后,程序无误生成hex文件。
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中
第四章结束语
频率测量在科技研究和实际应用中的作用日益重要。
这次课程设计让我知道了测量方波信号的方法,如利用可编程逻辑器件或者利用单片机做小系统,传统的频率计通采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量低频信号时不宜直接使用。
而这次课程设计采用了AT89C51单片机和相关硬软件实现。
用C语言进行设计,采用单片机智能控制,结合外围电子电路,得以高低频率的精度测量,编程简单,精度高。
自己学习单片机已有两年的时间了,这是我又一次利用它来完成课程设计,现在深深地感受单片机的适用性强、应用面广、功能完善。
单片机技术发展已经很成熟,在电子控制系统应用上仍然占有很重要的地位,作为一名自动化专业的学生,学习好单片机就显得很有必要。
在学习单片机时,不能只满足于课本以及软件仿真,更为重要的是注重它在实际生活中的应用,多思考、多动手搭建电路,这样我们才能将所学的东西内化,为今后在系统设计中打下一个坚实的基础。
总之,利用不多的空余时间完成的这次课程设计,不仅很好地巩固了相关专业知识,而且本次实验再次频繁的使用了Proteus和Keil软件,快速有效的解决了一些问题,但它的功能与优越性远远不止这些,自己要加深对这两款软件的了解与学习。
自己查资料,自己设计,自己验证,直到得出满意的结果,使我明白了自主学习的重要性和必要性。
学习要有收获,不仅局限于课本,还要能在实践中学以致用,这才是我们这些即将离开大学的大学生应该努力的方向。
参考文献
[1]孙晓明.《EDA实验指导书》.武汉:
武汉理工大学教材中心,2007.1
[2]谭会生,张昌凡.《EDA技术及应用》.西安:
西安电子科技大学出版社.2004
[3]杨欣、王玉凤、刘湘黔.《51单片机应用从零开始》.北京:
清华大学出版社,2008
[4]焦宝文.《电子技术基础课程设计指南》.北京:
清华大学出版社,2006
[5]阎石.《数字电子技术基础》.北京:
清华大学出版社,2007
[6]马建国.孟宪元.《电子设计自动化技术基础》.北京:
清华大学出版社,2004
[7]李光飞,楼苗然主编.《51系列单片机》.北京:
北京航空航天大学出版社,2003
[8]黄正瑾编著.《CPLD系统设计技术入门与应用》.北京:
电子工业出版社,2002
[9]谢自美编著.《电子线路设计·实验·测试》.华中理工大学出版社,2002
[10]陈永甫编著.《电子电路智能化设计.实例与应用》.北京:
电子工业出版,2002.8
[11]康华光主编.《电子技术基础(第四版)》.北京:
高等教育出版社,1999