基于单片机的简单频率计课程设计报告.docx
- 文档编号:9404718
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:368.68KB
基于单片机的简单频率计课程设计报告.docx
《基于单片机的简单频率计课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的简单频率计课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机的简单频率计课程设计报告
《单片机原理与接口技术》课程设计报告
频率计
目 录
2 频率计得硬件电路设计ﻩ3
2、1 控制、计数电路3
2、2 译码显示电路5
3 频率计得软件设计与调试ﻩ6
3、1软件设计介绍ﻩ6
3、2程序框图8
3、3功能实现具体过程8
3、4测试数据处理,图表及现象描述10
4讨论ﻩ11
5心得与建议ﻩ12
6附录(程序及注释)ﻩ13
1功能分析与设计目标
背景:
在电子技术中,频率就是最基本得参数之一,并且与许多电参量得测量方案、测量结果都有十分密切得关系,因此频率得测量就显得更为重要。
为了实现智能化得计数测频,实现一个宽领域、高精度得频率计,一种有效得方法就是将单片机用于频率计得设计当中。
用单片机来做控制电路得数字频率计测量频率精度高,测量频率得范围得到很大得提高。
题目要求:
用两种方法检测(Δm,ΔT )要求显示单位时间得脉冲数或一个脉冲得周期。
设计分析:
电子计数式得测频方法主要有以下几种:
脉冲数定时测频法(M法),脉冲周期测频法(T法),脉冲数倍频测频法(AM法),脉冲数分频测频法(AT法),脉冲平均周期测频法(M/T法),多周期同步测频法。
下面就是几种方案得具体方法介绍。
脉冲数定时测频法(M法):
此法就是记录在确定时间Tc内待测信号得脉冲个数Mx,则待测频率为:
Fx=Mx/Tc
脉冲周期测频法(T法):
此法就是在待测信号得一个周期Tx内,记录标准频率信号变化次数Mo。
这种方法测出得频率就是:
Fx=Mo/Tx
脉冲数倍频测频法(AM法):
此法就是为克服M法在低频测量时精度不高得缺陷发展起来得。
通过A倍频,把待测信号频率放大A倍,以提高测量精度。
其待测频率为:
Fx=Mx/ATo
脉冲数分频测频法(AT法):
此法就是为了提高T法高频测量时得精度形成得.由于T法测量时要求待测信号得周期不能太短,所以可通过A分频使待测信号得周期扩大A倍,所测频率为:
Fx=AMo/Tx
脉冲平均周期测频法(M/T法):
此法就是在闸门时间Tc内,同时用两个计数器分别记录待测信号得脉冲数Mx与标准信号得脉冲数Mo.若标准信号得频率为Fo,则待测信号频率为:
Fx=FoMx/Mo
多周期同步测频法:
就是由闸门时间Tc与同步门控时间Td共同控制计数器 计数得一种测量方法,待测信号频率与M/T法相同。
以上几种方法各有其优缺点:
脉冲数定时测频法,时间Tc为准确值,测量得精度主要取决于计数Mx得误差。
其特点在于:
测量方法简单,测量精度与待测信号频率与门控时间有关,当待测信号频率较低时,误差较大。
脉冲周期测频法,此法得特点就是低频检测时精度高,但当高频检测时误差较大。
脉冲数倍频测频法,其特点就是待测信号脉冲间隔减小,间隔误差降低;精度比M法高A倍,但控制电路较复杂.
脉冲数分频测频法,其特点就是高频测量精度比T法高A倍,但控制电路也较复杂。
脉冲平均周期测频法,此法在测高频时精度较高,但在测低频信号时精度较低.
多周期同步测频法,此法得优点就是,闸门时间与被测信号同步,消除了对被测信号计数产生得±1个字误差,测量精度大大提高,且测量精度与待测信号得频率无关,达到了在整个测量频段等精度测量.
功能描述:
由于水平有限,本次设计采用相对简单得M法与T法两种方法测量简单方波得频率或脉宽(由于就是输入简单方波信号,省去了被测输入信号通过脉冲形成电路进行放大与整形这个步骤)。
利用AT89C51单片机得T0、T1得定时计数器功能,来完成对输入得信号进行频率计数或脉宽计时,计数(计时)得频率结果通过5位八段LED数码管显示器显示出来。
设计指标:
M法由于T0、T1对外部脉冲信号得最高计数频率为振荡频率得1/24,而振荡频率为12MHz,得M法最高计数频率为500KHz,而本设计设定最高计数频率即为500KHz。
误差要求尽量小。
T法仅设定能测得外部脉宽范围为65536×20us,以使定时计数器在不产生溢出中断得情况下进行测量。
本设计得频率测量误差要求尽量小,实践证明误差控制在1/100范围内。
2 频率计得硬件电路设计
原理介绍
放大整形电路
控制门电路
计数器电路
译码显示电路
待测信号
图2-1 数字式频率计原理框图
由上图可以瞧出,待测信号经过放大整形电路后得到一个待测信号得脉冲信号,然后通过计数器计数,可得到需要得频率值,最后送入译码显示电路中显示出来。
但就是控制部分相对重要,它在整个系统得运行中起至关重要得作用。
本设计控制电路与计数器电路以AT89C51为核心,译码显示电路采用单片机静态显示计数来显示,采用5位七段LED数码管显示器。
下面分节介绍各部分硬件电路:
2、1控制、计数电路
单片机作为控制系统与计数器,就是本次设计得最重要得部分,AT89C51就是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableand ErasableReadOnly Memory)得低电压,高性能CMOS8位微处理器,俗称单片机.该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准得MCS-51指令集与输出管脚相兼容.由于将多功能8位CPU与闪烁存储器组合在单个芯片中,ATMEL得AT89C51就是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉得方案。
所以本次设计采用AT89C51单片机.
89C51单片机, 它提供下列标准特征:
4K字节得程序存储器,128字节得RAM,32条I/O线,2个16位定时器/计数器,,一个5中断源两个优先级得中断结构,一个双工得串行口,片上震荡器与时钟电路。
其引脚说明如下:
引脚说明:
·VCC:
电源电压。
·GND:
接地。
·P0口:
P0口就是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。
当对0端口写入1时,可以作为高阻抗输入端使用。
当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用得形式。
在这种模式下,P0口具有内部上拉电阻。
在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。
程序校验时需要外接上拉电阻.
·P0口:
P0口就是一带有内部上拉电阻得8位双向I/O口.P0口得输出缓冲能接受或输出4个TTL逻辑门电路。
当对P0口写1时,它们被内部得上拉电阻拉升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P0口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。
·P1口:
P2就是一带有内部上拉电阻得8位双向得I/O端口。
P1口得输出缓冲能驱动4个TTL逻辑门电路。
当向P1口写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得多种特殊功能,P3、0得第二功能就是串行输入口RXD,P3、1得第二功能就是串行输出口TXD,P3、2得第二功能就是外部中断0,P3、3得第二功能就是外部中断1,P3、4得第二功能就是定时器T0,P3、5得第二功能就是定时器T1,P3、6得第二功能就是外部数据存储器写选通/WR,P3、7得第二功能就是外部数据存储器读选通/RD.
M法主要使用管脚为P3、0、P3、1以及P3、5。
其具体使用方法如下:
P3、、0口与寄存器74LS164得A,B端口连接,串行输出待显示得数据.ﻫP3、1口接移位寄存器74LS164得CLK(第8引脚),输出同步时钟信号。
ﻫP3。
5口(即T1)输入脉冲信号。
T法主要使用管脚为P2、0、P3、0、P3、1以及P3、3.其具体使用方法如下:
P2、0口接开关用于控制何时输出显示脉宽时间。
P3、、0口与寄存器74LS164得A,B端口连接,串行输出待显示得数据。
ﻫ P3、1口接移位寄存器74LS164得CLK(第8引脚),输出同步时钟信号。
P3。
5口(即T1)输入脉冲信号.
2、2译码显示电路
显示电路采用静态显示方式.频率测量结果经过译码,通过89C51得串行口送出。
串行口工作于模式0,即同步移位寄存器方式。
这时从89C51得RXD(P3、0)输出数据,送至串入并出移位寄存器74164得数据输入口A与B ;从TXD( P3、1)输出时钟,送至74164得时钟输入口CP。
74164将串行数据转换成并行数据,进行锁存。
74164输出得8位并行数据送至8段LED,实现测量数据得显示。
使用这种方法主程序可不必扫描显示器,从而单片机可以进行下一次测量。
这种方法也便于对显示位数进行扩展。
74LS164
并行输出
串行输入
7段LED
3频率计得软件设计与调试
3、1软件设计介绍
本设计过程使用到得软件有:
WAVE软件模拟器,keiluVision2,protuse.
软件设计过程:
在keiluVision2中输入所编程序 ,保存为以、c为后缀得文件,新建项目,加入刚保存得文件,编译,调试到程序编译不显示错误.在option for target项中output中选中creathexfiles,重新编译程序,软件生成以、hex为后缀得文件.
在protuse软件中画出所设计得电路模拟图,加载入前面生成得以、Hex为后缀得文件,运行,观察,调试数码管显示得数值,并与设置得输入信号频率作比较,调试,分析误差产生原因,改进程序与电路图。
使用伟福软件编译所设计得c程序,调试到正确无误。
并最终通过硬件来验证所设计得频率计就是否达到先前设定得设计指标.
开始
初始化程序,初始化数组、中间量
延时子程序、数码管显示函数定义
定时计数器T0、T1初始化
启动T0定时50ms,T1对方波计数
T0溢出?
停止计数
T1计数值输出,静态显示
结束
就是
T法:
开始
初始化程序且TH1=0,TL1=0
外部输入方波到且=1,GATE=1,T1计时
延时程序,数码管显示函数
=0?
T1停止计时,数值输出
数值串行输出静态显示
就是
否
否
图示:
Keil软件程序设计
Protuse软件模拟
Protuse就是数字电路模拟常用得工具,方便易用,如图就是工作窗口:
3、2程序框图
M法:
结束
注:
以上两流程图均只表示出程序设计得简单流程,并且只表示出处理一次测量得过程,多次测量重复以上步骤即可。
具体细节或某些中间变量得赋值与对程序流程得影响详细见程序注释。
3、3功能实现具体过程
M法具体过程:
T0定时50ms,T1对方波得计数,数值串行输出与静态显示三大部分内容,此外还要附加延时程序以使静态显示数值稳定等。
具体描述如下:
1 T0实现50ms定时:
采用12MHz得晶体振荡器得情况下,一秒得定时已超过了定时器可提供得最大定时值。
为了实现一秒得定时,采用定时与计数相结合得方法实现。
选用定时/计数器T0作定时器,工作于方式1产生50 ms得定时,定时完成所得得计数值乘以20即为所测信号频率。
2 T1计数部分:
ﻫ 将定时器/计数器得方式寄存器TMOD,用软件赋初值51H,即01010001B.这时定时器/计数器1采用工作方式1,方式选择位C/T设为1,即设T1为16位计数器.定时器/计数器O采用工作方式1,C/T设为0,即设TO为16位定时器。
ﻫ 计算计数初值:
设计数初值为m,本设计采用12MHz得晶振.机器周期=12×(1/晶振频率),得等式。
所以计数初值m=15536.ﻫ 当定时器/计数器T1设定为计数方式时,其计数脉冲就是来源T1端口得外部事件。
当T1端口上出现由“1”(高电平)到“0"(低电平)得负跳变脉冲时,计数器则加1计数。
计算机就是在每个机器周期得S5P2状态时采样T1端口,当前一个机器周期采样为1且后一个机器周期采样为0时,计数器加1计数。
计算机需用两个机器周期来识别1次计数,因而最大计数速率为振荡频率得1/24。
在采用12MHz晶振得情况下,单片机最大计数速度为0。
5MHz即500kHz。
另外,此处对外部事件计数脉冲得占空比(即脉冲得持续宽度)无特殊要求,但必须保证所给出得高电平在其改变之前至少被采样1次,即至少保持1个完整得机器周期.由此可见,从T1口输入脉冲信号,T1可实现对脉冲个数得计数。
3 数值串行输出与静态显示
此部分用到了单片机得串行输出口P3、0与P3、1、串行口控制寄存器SCON设置为0x00,即工作方式0—同步移位寄存器输入输出方式。
串行数据(计数值)通过RXD输出,而TXD用于输出移位时钟,作为5个74LS164得同步信号,74LS164用于扩展并行输出口,这种方式下,收发得数据为8位,低位在前,五起始位、奇偶校验位及停止位,波特率固定为振荡频率得1/12。
发送过程中,当执行一个数据写入发送缓冲器SBUF得指令时,串行口把SBUF中得8为数据以1/12得波特率从RXD(P3、0)端输出,发送完毕置中断标志TI=1,传送过程中将8位数据由低位到高位一位一位顺序通过RXD输出,并在TXD脚上输出/12得移位时钟。
通过编码0~9与error(错误)得代号E(即当超出量程显示E),并根据所得计数值得各位数值,向单片机外部依次串行输出各位得编码,通过74LS164得并行输出并且依靠人眼得视觉暂留现象能够在5位7段LED上同时显示各位得数值.具体程序编写,详见本论文附上得程序及程序注释。
T法具体过程:
由输如方波脉冲信号,T1对方波信号得高电平部分计时,计时结果串行输出与静态显示三大部分,与M法一样,还要附加延时程序以使静态显示数值稳定等.具体描述如下:
1 由输如方波脉冲信号
方波信号通过管脚输入检测,此处该管脚相当于对信号得监测,通过软件方式告之单片机哪段时间输入信号为高电平,哪段时间为低电平。
以便控制T1计时得开始与停止。
2 T1对方波信号得高电平部分计时
通过查询方式,当信号输入管脚为1(即高电平)时进行计时,设置TMOD值为0x90,即T1为方式1得16位定时器(也可设置为计数器,效果一样),且T1受GATE位得影响:
因为GATE=1,只有为高电平且由软件使TR1置一时,才能启动定时器工作。
正因为如此,测量高电平脉宽显得精确可控。
定时器计时结束则可将数值输出显示。
3 计时结果串行输出与静态显示
此部分内容同M法一致,详见M法得功能实现描述。
3、4测试数据处理,图表及现象描述
根据设计得程序连接好硬件电路,使用伟福硬件仿真器与实验台进行测量.数据处理:
a.将输入方波得频率由小到大进行变化,并读出静态显示出得测量值与示波器显示得测量值,比较二者得差别,分析误差随输入信号频率得变化情况及误差来源,提出改进方案.
b.过程中要求对同一频率得输入方波进行多组测量,取平均值f或T(频率或周期)。
软硬件连接图如下:
现象描述:
M法:
示波器显示数值与静态显示得数值十分吻合,误差相当小,一般在1~10Hz内。
本测量在低频段得相对测量误差较大。
增大T可以提高测量精度,但在低频段仍不能满足要求。
T法:
在低频与高频时误差较大,在1KHz到一定范围内误差很小.理论上T法在低频段精度高.但此次设计中反映得现象却相反。
初步分析为计时程序误差太大,不够合理.一个就是采用得就是查询方式,不易控制计时器何时开始计时与结束,另外P2、0得按键延时等,误差较大.
总体而言得误差分析:
(1)单片机计数速率得限制引起误差.被测信号频率越高,测量误差越大,且所测信号频率不能超过480kHz。
这就是因为采用得就是12MHz得晶振,单片机最大计数速度为500kHz,所以当被测信号越接近500kHz时,测量结果与实际频率得误差就越大。
而当被测信号大于500 kHz时,频率计将测不出信号频率。
(2)原理上存在±1误差。
由于该设计就是在计数门限时间一秒内得频率信号脉冲数,所以定时开始时得第一个脉冲与定时时间到时得最后一个脉冲信号就是否被记录,存在随机性。
这种误差对测量频率低得信号影响较大。
由于D触发器必须在信号得上升沿才翻转,故T0对信号脉冲个数不存在±1%误差,而T1计时为信号信号周期得整数倍,则存在对T1计数得±1%误差,故测量精度与被测频率无关.但若取计时时间大于0、1S(实际最小时间约为0、5S),误差则小于0.001%;若对低频信号f测量,则计时时间远大于0、1S,故误差极小.但就是在高频端分频时,由于软件中断、延时等原因,会导致脉宽得测量误差增大,而频率测量误差较小(保持在0、01%).
误差改进措施:
a.选用频率较高与稳定性好得晶振。
如选24kHz得晶振可使测量范围扩大,稳定性好得晶振可以减小误差.
b.测量频率较高得信号时,可先对信号进行分频,再进行测量。
c.改进T法计时程序,从根本上减小误差。
ﻫ
4讨论
本次设计实现了用两种方法对外部未知频率得方波信号得测量。
M法测量得设计达到了高范围(500KHz,在LED管位数足够得情况下,改进程序得显示程序部分即可)与高精度(1~10hz一般情况下);T法设计由于部分程序得缺陷并未能实现很好得测量频率得效果,仅能测量一定范围得频率。
未达到设计目标得原因详见误差分析部分。
此次设计还有很大不足,尤其就是在信号得对象选择上,信号要求就是方波信号.未能对任意未知波形信号进行分析测量.在今后得时间里,我们小组会继续探索单片机设计数字频率计得设计,加上信号预处理电路,改进信号频率得测量方法,提高信号显示得精度,拓展本次设计未能实现得各项频率计应当具备得要求,如可选量程,科学计数显示等等。
5心得与建议
通过此次设计,我们小组得成员都受到了极大得锻炼,对团队合作得重要性有了深刻认识,虽然我们面对得就是一个相对简单得课题,但由于初次进行基于单片机得课题设计,所以在设计过程中,我们遇到了一些困难,也经历了一次又一次得困惑,最初我们尝试着完美化我们得设计,以实现更多得功能与提高可操纵性,却没有从最基本得内容一步步做起,没有将核心部分放在首位。
正如老师讲得,正确得顺序就是先把核心部分做好,就像盖房子一样,先打地基——定时计数就是我们这次设计得核心,然后再一步一步扩展,完善功能,向上盖房子。
生活实际中确实如此,做任何事,没有打好基础,最终就不能有很好得发展。
学习也就是如此,对于工科得我们数学、物理等就就是我们得基础,往往发展得瓶颈就在基础部分。
今后,我们小组得成员会吸收此次设计实践收获得宝贵经验,更加努力地,更加坚定地在电子科技上一步一步脚踏实地地学习进步。
6 附 录
M法
#include〈reg51、h〉
#defineucharunsignedchar
#defineuintunsignedint
uintnuml,numh,f;
codeuchark[11]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x02,0x9e};
voidinit() //初始化函数
{
SCON=0x00; //串行同步移位输出
TMOD=0x51; //T1计数,T0定时
ﻩET0=1; //T0中断允许
TH0=(15535)/256;
TL0=(15535)%256;//T0定时50ms得初值
TH1=0;
TL1=0;
ﻩIT0=1; //T1计数得初值
TR0=1;
TR1=1; //开始计数、定时
ﻩEA=1;
}
voiddelay(uintz)
{
uintx,y;
ﻩfor(x=z;x>0;x—-)
ﻩﻩfor(y=110;y>0;y——);
} //延时函数,delay(200);大约延时200ms、
voidsend(ucharb) //串行输出显示函数部分一
{
SBUF=b;
while(!
TI); //发送结束标志
TI=0;
}
voiddisplay(uintx)//串行输出显示函数部分二
ﻩif(x〉99999)
ﻩ{
ﻩsend(0x00);//0x00表示该位不显示字符
ﻩsend(0x00);
ﻩsend(0x00);
ﻩsend(0x00);
send(k[11]);//程序最大测量频率定为100k,大于此范围则显示“E”,指示error。
ﻩ}
elseif((x〈100000)&&(x>9999))
{
send(k[x/10000]);
ﻩsend(k[x%10000/1000]);
ﻩﻩsend(k[x%10000%1000/100]);
ﻩsend(k[x%10000%1000%100/10]);
ﻩsend(k[x%10000%1000%100%10]);
ﻩ}
ﻩelse if((x〈10000)&&(x〉999))
{
send(0x00);
send(k[x/1000]);
ﻩsend(k[x%1000/100]);
send(k[x%1000%100/10]);
send(k[x%1000%100%10]);
ﻩ}
ﻩelse if((x〈1000)&&(x〉99))
{
send(0x00);
ﻩsend(0x00);
send(k[x/100]);
send(k[x%100/10]);
ﻩsend(k[x%100%10]);
}
elseif((x〈100)&&(x〉9))
ﻩ{
ﻩsend(0x00);
ﻩﻩsend(0x00);
ﻩsend(0x00);
send(k[x/10]);
ﻩﻩsend(k[x%10]);
}
ﻩelse
ﻩ{
ﻩsend(0x00);
send(0x00);
send(0x00);
ﻩsend(0x00);
send(k[x%10]);
ﻩ}
}
voidtimer_0()interrupt1//定时器T0中断
{
TH0=(15535)/256;
TL0=(15535)%256;
TR1=0;
TR0=0;
numh=TH1;
numl=TL1;
TH1=0;
TL1=0;//恢
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 简单 频率计 课程设计 报告