频率计程序设计与仿真.docx
《频率计程序设计与仿真.docx》由会员分享,可在线阅读,更多相关《频率计程序设计与仿真.docx(18页珍藏版)》请在冰豆网上搜索。
![频率计程序设计与仿真.docx](https://file1.bdocx.com/fileroot1/2023-1/29/baae614c-2362-4dc1-9a80-780845d1243a/baae614c-2362-4dc1-9a80-780845d1243a1.gif)
频率计程序设计与仿真
课程设计任务书
学生姓名:
龙威专业班级:
通信1103
指导教师:
陈适工作单位:
信息工程学院
题目:
频率计程序设计与仿真
课程设计要求
1采用测频法
2设计一个4位十进制数字显示的数字频率计
3其测量范围为1-9999kHz
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
电子计数器测频有两种方式:
一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。
直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。
本文阐述了用数字电路设计了一个简单的数字频率计的过程。
频率测量中直接测量的数字频率计主要由四个部分构成:
时基(T)电路、输入电路、计数显示电路以及控制电路。
在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成方波信号,加到与非门的另一个输入端上.该与非门起到主阀门的作用,在与非门第二个人输入端上加阀门控制信号,控制信号为低电平时阀门关闭,无信号进入计数器;控制信号为高电频时,阀门开启整形后的信号进入计数器,若阀门控制信号取1s,则在阀门时间1s内计数器得到的脉冲数N就是被测信号的频率。
频率计能够快速准确的捕捉到被测信号频率的变化,因此,频率计拥有非常广泛的应用范围。
在传统的生产制造企业中,在计量实验室中,在无线通讯测试中都需要用到频率计。
本频率计是由ne555产生时基信号,控制闸门与非门的导通,计数器74ls90计数,单稳态触发器74ls123触发锁存数据,七段共阴数码管显示频率。
该设计方案简单、实用、经济,能够测量0~10KHz幅度为0.2~5V的方波信号的频率,且精度为1Hz。
关键字:
频率计、计数器、锁存器、脉冲形成电路
1.概述
数字频率计是通过一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常是计算每秒内的脉冲个数,也就是我们所称的闸门时间为1秒。
闸门时间不定,但闸门时间影响频率计的准确度,闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。
如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。
因此,数字频率计是一种应用很广泛的仪器。
本次课程设计中画图与仿真主要用到了Proteus软件,Proteus是一款电路分析实物仿真系统,可仿真各种电路和IC,元件库齐全,有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真,使用和操作起来非常方便。
2.数字频率计原理与框图
所谓频率,就是周期性信号在单位时间内变化的次数.若在一定时间间隔t内测得这个周期性信号的重复变化次数为n,则其频率可表示为
若在闸门时间1S内计数器计得的脉冲个数为n,则被测信号频率等于nHz。
数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。
它一般由放大整形电路、时基电路、逻辑控制电路、闸门电路、计数器、锁存器、译码器、显示器等几部分组成。
其基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
计数信号并与锁存信号和清零复位信号共同控制计数、锁存和清零三个状态,然后通过数码显示器件进行显示。
图2-1数字频率计整体框图
3.数字频率计的设计
3.1放大整形电路
放大整形电路由晶体管放大器与74LS00等组成,放大器将输入频率为的周期信号如正弦波、三角波等进行放大。
与非门74LS00构成施密特触发器,它对放大器的输出信号进行整形,使之成为矩形脉冲。
以便进行测量。
其中由
端输入未知频率的波,74LS00组成的施密特触发器将从晶体管放大器放大的信号进行整形变换,得到需要的方波。
电路图如图3-1所示。
图3-1放大整形电路
3.2时基电路
时基电路的作用是产生一个标准时间信号,高电平持续时间是1s,由定时器555构成的多谐震荡器产生,当标准时间的精度要求较高时,应通过晶体震荡器分频获得。
若震荡器的频率
,其中
。
由公式
和
,可计算出电阻R1、R2及电容C的值。
若取电容C=10uF,则
kΩ
kΩ
所以取
为36kΩ,
为107kΩ。
时基电路图如图3-2所示。
图3-2时基电路
3.3逻辑控制电路
在时基信号结束时产生的负跳变用来产生锁存信号,锁存信号的负跳变又用来产生清“0”信号。
脉冲信号可由两个单稳态触发器74LSl23产生,它们的脉冲宽度由电路的时间常数决定。
设锁存信号和清“0”信号的脉冲宽度相同,如果要求tw=0.02s,则有tw=0.45Rx/Cx=0.02s,若取Rx=10kΩ,则Cx=tw/0.45Rx=4.4uf,取标称值4.7uf,由74LSl23的功能表可得,当,触发脉冲从1A端输入时,在触发脉冲的负跳变作用下,输出端1Q可获得一正脉冲端,一非Q端可获得一负脉冲,其波形关系正好满足要求。
逻辑控制电路图如图3-3所示。
:
图3-3逻辑控制电路
逻辑控制电路中用的芯片是74LS123,74LS123是常用的可重触发单稳态触发器。
3.4计数、锁存、译码显示电路的设计
这部分电路是频率计内作重要的电路部分,由计数器、锁存器、译码器、显示器和单稳态触发器组成。
其中计数器按十进制计数,由2个异步十进制计数器74ls90构成,一次从个位开始计数,向上位发出进位信号进而使高位开始计数。
计数输出如果电路中不接锁存器,则显示器上的显示数字就会随计数器的状态不停地变化,要使计数器停止计数时,显示器上的数字显示能稳定,就必须在计数器后接入锁存器。
锁存器的工作是受单稳态触发器控制的。
门控信号的下降沿使单稳态触发器1进入暂稳态,单稳1的上升沿作为锁存器的时钟脉冲。
为了使计数器稳定、准确的计数,在门控信号结束后,锁存器将计数结果锁存。
单稳1的暂态脉冲的下降沿使单稳2进入暂态,利用2的暂态对计数器清零,清零后的计数器又等待下一个门控信号到来重新计数。
锁存器的作用是将计数器在1s结束时所得的数进行锁存,使显示器稳定地显示此时计数器的值。
1s计数时间结束时,逻辑控制电路发出锁存信号,将此时计数器的值送至数码显示器。
选用锁存器74LS273可以完成上述功能。
当时钟脉冲CP的正跳变来到时,锁存器的输出等于输入,即Q=D,从而将计数器的输出值送到锁存器的输出端。
正脉冲结束后,无论D为何值,输出端Q的状态仍保持原来的状态不变。
所以在计数期间内,计数器的输出不会送到译码显示器。
锁存器在一个有效脉冲到来后将计数器输出信号锁存,并输出到数码管译码器,4片译码器用74LS48实现。
电路图如图3-4所示。
图3-4计数、锁存、译码电路
表3-67490功能表
复位输入
输出
R1R2S1S2
QDQCQBQA
HH L ×
HH × L
×× H H
XL × L
L×L ×
L× × L
×L L ×
LLLL
LLLL
HLLH
计 数
计 数
计 数
计 数
图3-5数字频率计电路图
4.Proteus仿真
绘制好电路图后,进行仿真运行,首先调节输入波的频率,如图4-1所示。
设置为50Hz,点击OK后对电路进行仿真,数码显像管的显示值为50,如图4-2所示。
图4-1频率设置窗口
图4-2仿真结果
再改变输入波的频率,如图4-3所示,设置为1000HZ。
进行仿真结果为993HZ,如图4-4所示。
误差在允许的范围内。
图4-3频率设置窗口
图4-4仿真结果
该仿真结果表明:
上述电路符合实验任务要求,且精确度较高.能够准确的测量。
5.心得体会
回顾起此次课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在短短的两个星期的日子里,有苦有甜。
同时也学到很多很多新的东西,虽然时间有限但是自己很多方面都有了提升,如动手能力和解决问题的能力。
课程设计刚开始拿到题目时,对于理论知识学习不够扎实的我深深感到了自己的不足,便重新看了教材,对知识进行了梳理,掌握了基本理论知识。
这样对平时学习的不足和缺陷就有所弥补。
遇到过各种各样的问题,没有扎实的理论知识是无法解决的。
只有把所学的理论知识与实践相结合起来,从理论中得出结论,通过实际动手去验证理论,在这二者的配合下,我们不仅可以成功的完成课程设计,而且还可以掌握和巩固所学知识,充实自己的知识储备。
同时也可以使自己的实际动手能力和独立思考的能力在一定程度上得到提升,使自己能更好的适应社会的要求。
通过本次课程设计,我在发现问题、分析问题和解决问题的能力得到了提升。
培养了我的设计思维,提高了我们的逻辑思维能力,使我们在逻辑电路的分析与设计上有了很大的进步。
同时也让我在面对问题的时候不在像以前那样惊慌失措,而是慢慢分析问题,逐步去解决问题,实现各个击破。
培养我们独立思考的能力,和逻辑的分析能力.例如设计前必须胸有轮廓,首先该了解频率计数器的基本原理,各单元组成.进而理解各电路单元的组成结构,如何运用已知的器件实现某个条件,达到目的.
总之,通过本次课程设计,我收获颇丰,一方面使自己各方面能力在一定程度上得到提升,另一方面是自己切身体会到数字电子技术的实用性和有效性,增加了自己对数电学习和电子制作的兴趣。
同时在让我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐。
6.参考文献
[1]谢自美编.电子线路设计.华中科技大学出版社,2003
[2]康华光编.电子技术基础数字部分(第五版).华中科技大学出版社,2006
[3]李响初编.数字电路基础与应用.机械工业出版社,2008
[4]刘洪涛编.电子制作实用教程.电子科技大学出版社,2001
[5]朱清慧编.电子线路设计.清华大学出版社,2008
[6]周跃庆编.数字电子技术基础教程.天津大学出版社,2006
[7]傅劲松编.电子制作实例集锦.福建科学技术出版社,2006
[8]沈小丰编.数字线路实验-数字电路实验.清华大学出版社,2007
附录一数字频率计总图
附录二元件清单
1
74LS123
2片
2
555
1片
3
74LS48
4片
4
74LS90
4片
5
74LS273
2片
6
74LS92
1片
7
74LS00
2片
8
数码显示器
4只
9
3DG100
1只
10
电阻电容
若干
附录三仿真图
1频率计仿真全图
2频率计仿真—开始计数部分
3频率计仿真—结束结束,动态显示部分
附录四程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitypljis
port(start:
instd_logic;--复位信号
clk:
instd_logic;--系统时钟
clk1:
instd_logic;--被测信号
yy1:
outstd_logic_vector(7downto0);--八段码
w1:
outstd_logic_vector(3downto0));--数码管位选信号
endplj;
architecturebehavofPLjis
signalb1,b2,b3,b4,b5,b6,b7:
std_logic_vector(3downto0);--十进制计数器
signalbcd:
std_logic_vector(3downto0);--BCD码寄存器
signalq:
integerrange0to49999999;--秒分频系数
signalqq:
integerrange0to499999;--动态扫描分频系数
signalen,bclk:
std_logic;--使能信号,有效被测信号
signalsss:
std_logic_vector(3downto0);--小数点
signalbcd0,bcd1,bcd2,bcd3:
std_logic_vector(3downto0);--寄存7位十位计数器中有效的高4位数据
begin
second:
process(clk)--此进程产生一个持续时间为一秒的的闸门信号
begin
ifstart='1'thenq<=0;
elsifclk'eventandclk='1'then
ifq<49999999thenq<=q+1;
elseq<=49999999;
endif;
endif;
ifq<49999999andstart='0'thenen<='1';
elseen<='0';
endif;
endprocess;
and2:
process(en,clk1)--此进程得到7位十进制计数器的计数脉冲
begin
bclk<=clk1anden;
endprocess;
com:
process(start,bclk)--此进程完成对被测信号计脉冲数
begin
ifstart='1'then--复位
b1<="0000";b2<="0000";b3<="0000";b4<="0000";b5<="0000";b6<="0000";b7<="0000";
elsifbclk'eventandbclk='1'then
ifb1="1001"thenb1<="0000";--此IF语句完成个位十进制计数
ifb2="1001"thenb2<="0000";--此IF语句完成百位十进制计数
ifb3="1001"thenb3<="0000";--此IF语句完成千位十进制计数
ifb4="1001"thenb4<="0000";--此IF语句完成万位十进制计数
ifb5="1001"THENb5<="0000";--此IF语句完成十万位十进制计数
ifb6="1001"thenb6<="0000";--此IF语句完成百万位十进制计数
ifb7="1001"thenb7<="0000";--此IF语句完成千万位十进制计数
elseb7<=b7+1;
endif;
elseb6<=b6+1;
endif;
elseb5<=b5+1;
endif;
elseb4<=b4+1;
endif;
elseb3<=b3+1;
endif;
elseb2<=b2+1;
endif;
elseb1<=b1+1;
endif;
endif;
endprocess;
process(clk)--此进程把7位十进制计数器有效的高4位数据送如bcd0~3;并得到小数点信息
begin
ifrising_edge(clk)then
ifen='0'then
ifb7>"0000"thenbcd3<=b7;bcd2<=b6;bcd1<=b5;bcd0<=b4;sss<="1110";
elsifb6>"0000"thenbcd3<=b6;bcd2<=b5;bcd1<=b4;bcd0<=b3;sss<="1101";
elsifb5>"0000"thenbcd3<=b5;bcd2<=b4;bcd1<=b3;bcd0<=b2;sss<="1011";
elsebcd3<=b4;bcd2<=b3;bcd1<=b2;bcd0<=b1;sss<="1111";
endif;
endif;
endif;
endprocess;
weixuan:
process(clk)--此进程完成数据的动态显示
begin
ifclk'eventandclk='1'then
ifqq<99999thenqq<=qq+1;bcd<=bcd3;w1<="0111";
ifsss="0111"thenyy1(0)<='0';
elseyy1(0)<='1';
endif;
elsifqq<199999thenqq<=qq+1;bcd<=bcd2;w1<="1011";
ifsss="1011"thenyy1(0)<='0';
elseyy1(0)<='1';
endif;
elsifqq<299999thenqq<=qq+1;bcd<=bcd1;w1<="1101";
ifsss="1101"thenyy1(0)<='0';
elseyy1(0)<='1';
endif;
elsifqq<399999thenqq<=qq+1;bcd<=bcd0;w1<="1110";
ifsss="1110"thenyy1(0)<='0';
elseyy1(0)<='1';
endif;
elseqq<=0;
endif;
endif;
endprocess;
m0:
process(bcd)--译码
begin
casebcdis
when"0000"=>yy1(7downto1)<="0000001";
when"0001"=>yy1(7downto1)<="1001111";
when"0010"=>yy1(7downto1)<="0010010";
when"0011"=>yy1(7downto1)<="0000110";
when"0100"=>yy1(7downto1)<="1001100";
when"0101"=>yy1(7downto1)<="0100100";
when"0110"=>yy1(7downto1)<="1100000";
when"0111"=>yy1(7downto1)<="0001111";
when"1000"=>yy1(7downto1)<="0000000";
when"1001"=>yy1(7downto1)<="0001100";
whenothers=>yy1(7downto1)<="1111111";
endcase;
endprocess;
endbehav;