简单频率计的制作.docx

上传人:b****7 文档编号:11100614 上传时间:2023-02-25 格式:DOCX 页数:21 大小:292.14KB
下载 相关 举报
简单频率计的制作.docx_第1页
第1页 / 共21页
简单频率计的制作.docx_第2页
第2页 / 共21页
简单频率计的制作.docx_第3页
第3页 / 共21页
简单频率计的制作.docx_第4页
第4页 / 共21页
简单频率计的制作.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

简单频率计的制作.docx

《简单频率计的制作.docx》由会员分享,可在线阅读,更多相关《简单频率计的制作.docx(21页珍藏版)》请在冰豆网上搜索。

简单频率计的制作.docx

简单频率计的制作

一.设计的基本原理和框图

1.1基本原理:

数字频率计是用数字显示被测信号的频率的仪器,被测信号可以是正弦波,方波或者其他周期性变化的信号,它的基本原理是时基信号发生器提供标准的时基脉冲信号,若其周期为1s则门控电路的输出信号持续时间亦准确到1s。

闸门电路有标准秒信号控制,当秒信号到来时闸门开通,信号通过闸门送到计数译码显示电路,秒信号结束时闸门关闭,计数器停止计数,由于计数器记得脉冲数N的是一秒内的累积数,所以被测频率是NHZ。

闸门时间可以取大于或者小于1秒的值,测得的频率时间间隔与闸门时间的取值成正比,在这里取的闸门时间为1s。

在此,数字频率计由分频器,片选电路,计数器,锁存器,译码电路和显示电路作为主要组成部分。

1.2设计框图如图1.1所示:

 

图1.1

二.单元电路设计

2.1分频电路模块

分频器在总电路中有两个作用。

由总图框图中分频器有两个输出,一个给计数器,一个给锁存器。

时钟信号经过分频电路形成了20分频后的门信号。

另一个给锁存器作锁存信号,当信号为低电平时就锁存计数器中的数。

分频电路图如图2.1

图2.1分频电路图

2.2片选信号电路模块

这个电路有两个用途:

一是为后面的片选电路产生片选信号,二是为译码模块提供选择脉冲信号。

电路图如图2.2

图2.2片选信号电路图

2.3计数器模块

计数器模块为该电路中的核心模块,它的功能是:

当门信号为上升沿时,电路开始计算半个周期内被测信号通过的周期数,到下升沿后结束。

然后送给锁存器锁存。

计数器电路图如图2.3所示:

图2.3计数器电路图

2.4锁存器模块

在分频信号的下降沿到来时,锁存器将计数器的信号锁存,然后送给编译模块中。

其电路图如图2.4所示:

图2.4锁存器电路图

2.5译码信号模块

此模块是对四个锁存器进行选择,按顺序的将四个锁存器中的数值送给译码模块中译码。

其电路图如图2.5

图2.5译码信号电路图

2.6片选模块

该模块接收到片选信号后,输出给显示器,选择显示那个显示管。

其电路图如图2.6所示:

图2.6片选电路图

2.7译码模块

译码模块的作用就是将译码信号模块中选择出的信号进行译码,并将其送给显示器。

其电路图如图2.7所示:

图2.7译码电路图

 

 

2.8总电路图

图2.8总电路图

三.编程下载

3.1分频模块的程序

libraryieee;

useieee.std_logic_1164.all;

entityfenis

port(clk:

instd_logic;

q:

outstd_logic);

endfen;

architecturefen_arcoffenis

begin

process(clk)

variablecnt:

integerrange0to9;

variablex:

std_logic;

begin

ifclk'eventandclk='1'

thenifcnt<9then

cnt:

=cnt+1;

else

cnt:

=0;

x:

=notx;

endif;

endif;

q<=x;

endprocess;

endfen_arc;

3.2片选信号模块的程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityselis

port(clk:

instd_logic;

q:

outstd_logic_vector(2downto0));

endsel;

architecturesel_arcofselis

begin

process(clk)

variablecnt:

std_logic_vector(2downto0);

begin

ifclk'eventandclk='1'then

cnt:

=cnt+1;

endif;

q<=cnt;

endprocess;

endsel_arc;

3.3计数器模块的程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycornais

port(clr,sig,door:

instd_logic;

alm:

outstd_logic;

q3,q2,q1,q0,dang:

outstd_logic_vector(3downto0));

endcorna;

architecturecorn_arcofcornais

begin

process(door,sig)

variablec3,c2,c1,c0:

std_logic_vector(3downto0);

variablex:

std_logic;

begin

ifsig'eventandsig='1'then

ifclr='0'then

alm<='0';

c3:

="0000";

c2:

="0000";

c1:

="0000";

c0:

="0000";

elsifdoor='0'then

c3:

="0000";

c2:

="0000";

c1:

="0000";

c0:

="0000";

elsifdoor='1'then

ifc0<"1001"then

c0:

=c0+1;

else

c0:

="0000";

ifc1<"1001"then

c1:

=c1+1;

elsec1:

="0000";

ifc2<"1001"then

c2:

=c2+1;

else

c2:

="0000";

ifc3<"1001"then

c3:

=c3+1;

else

c3:

="0000";

alm<='1';

endif;

endif;

endif;

endif;

endif;

ifc3/="0000"then

q3<=c3;

q2<=c2;

q1<=c1;

q0<=c0;

dang<="0100";

elsifc2/="0000"then

q3<="0000";

q2<=c2;

q1<=c1;

q0<=c0;

dang<="0011";

elsifc1/="0000"then

q3<="0000";

q2<="0000";

q1<=c1;

q0<=c0;

dang<="0010";

else

q3<="0000";

q2<="0000";

q1<="0000";

q0<=c0;

dang<="0001";

endif;

endif;

endprocess;

endcorn_arc;

3.4锁存器模块的程序

libraryieee;

useieee.std_logic_1164.all;

entitylockis

port(l:

instd_logic;

a4,a3,a2,a1,a0:

instd_logic_vector(3downto0);

q4,q3,q2,q1,q0:

outstd_logic_vector(3downto0));

endlock;

architecturelock_arcoflockis

begin

process(l)

variablet4,t3,t2,t1,t0:

std_logic_vector(3downto0);

begin

ifl'eventandl='0'then

t4:

=a4;

t3:

=a3;

t2:

=a2;

t1:

=a1;

t0:

=a0;

endif;

q4<=t4;

q3<=t3;

q2<=t2;

q1<=t1;

q0<=t0;

endprocess;

endlock_arc;

3.5译码信号模块的程序

libraryieee;

useieee.std_logic_1164.all;

entitychis

port(sel:

instd_logic_vector(2downto0);

a3,a2,a1,a0,dang:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(3downto0));

endch;

architecturech_arcofchis

begin

process(sel)

begin

caseselis

when"000"=>q<=a0;

when"001"=>q<=a1;

when"010"=>q<=a2;

when"011"=>q<=a3;

when"111"=>q<=dang;

whenothers=>q<="1111";

endcase;

endprocess;

endch_arc;

3.6片选模块的程序

libraryieee;

useieee.std_logic_1164.all;

entityymis

port(d:

instd_logic_vector(2downto0);

q:

outstd_logic_vector(7downto0));

endym;

architectureym_arcofymis

begin

process(d)

begin

casedis

when"000"=>q<="00000001";

when"001"=>q<="00000010";

when"010"=>q<="00000100";

when"011"=>q<="00001000";

when"100"=>q<="00010000";

when"101"=>q<="00100000";

when"110"=>q<="01000000";

when"111"=>q<="10000000";

whenothers=>q<="00000000";

endcase;

endprocess;

endym_arc;

3.7译码器模块的程序

libraryieee;

useieee.std_logic_1164.all;

entitydispis

port(d:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(6downto0));

enddisp;

architecturedisp_arcofdispis

begin

process(d)

begin

casedis

when"0000"=>q<="0111111";

when"0001"=>q<="0000110";

when"0010"=>q<="1011011";

when"0011"=>q<="1001111";

when"0100"=>q<="1100110";

when"0101"=>q<="1101101";

when"0110"=>q<="1111101";

when"0111"=>q<="0100101";

when"1000"=>q<="1111111";

when"1001"=>q<="1101111";

whenothers=>q<="0000000";

endcase;

endprocess;

enddisp_arc;

3.8顶层文件的程序

libraryieee;

useieee.std_logic_1164.all;

entitypljis

port(sig,clr,clk:

instd_logic;

alm:

outstd_logic;

q:

outstd_logic_vector(6downto0);

se:

outstd_logic_vector(7downto0));

endplj;

architectureartofpljis

componentcorna

port(clr,sig,door:

instd_logic;

alm:

outstd_logic;

q3,q2,q1,q0,dang:

outstd_logic_vector(3downto0));

endcomponent;

componentfen

port(clk:

instd_logic;

q:

outstd_logic);

endcomponent;

componentlock

port(l:

instd_logic;

a4,a3,a2,a1,a0:

instd_logic_vector(3downto0);

q4,q3,q2,q1,q0:

outstd_logic_vector(3downto0));

endcomponent;

componentsel

port(clk:

instd_logic;

q:

outstd_logic_vector(2downto0));

endcomponent;

componentch

port(sel:

instd_logic_vector(2downto0);

a3,a2,a1,a0,dang:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(3downto0));

endcomponent;

componentdisp

port(d:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(6downto0));

endcomponent;

componentym

port(d:

instd_logic_vector(2downto0);

q:

outstd_logic_vector(7downto0));

endcomponent;

signalt1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t12:

std_logic_vector(3downto0);

signalt11:

std_logic;

signalt20:

std_logic_vector(2downto0);

begin

u1:

cornaportmap(clr=>clr,sig=>sig,door=>t11,alm=>alm,q3=>t1,q2=>t2,q1=>t3,q0=>t4,dang=>t5);

u2:

fenportmap(clk=>clk,q=>t11);

u3:

lockportmap(l=>t11,a4=>t1,a3=>t2,a2=>t3,a1=>t4,a0=>t5,q4=>t6,q3=>t7,q2=>t8,q1=>t9,q0=>t10);

u4:

selportmap(clk=>clk,q=>t20);

u5:

chportmap(sel=>t20,a3=>t6,a2=>t7,a1=>t8,a0=>t9,dang=>t10,q=>t12);

u6:

dispportmap(d=>t12,q=>q);

u7:

ymportmap(d=>t20,q=>se);

endarchitectureart;

 

四.仿真与调试

4.1分频电路模块的仿真

在quartusII中打开事先编译好的程序,然后建立工程文件,再打开波形图显示窗口,设置好参数,保存后编译,编译无错误既可以生成电路图。

其仿真图如图4.1所示:

图4.1分频电路仿真图

4.2片选信号电路的仿真

其仿真图如图4.2.

图4.2片选信号电路仿真图

4.3计算器模块的仿真

其仿真图如图4.3所示:

图4.3计算器电路仿真图

4.4锁存器模块仿真

其仿真图如图4.4所示:

图4.4锁存器电路仿真图

4.5译码信号模块的仿真

其仿真图如图4.5.

图4.5译码信号电路仿真图

4.6片选模块的仿真

其仿真图如图4.6

图4.6片选电路仿真图

4.7译码器模块

其仿真图如4.7

图4.7译码电路仿真图

4.8总电路图的仿真

用顶层文件将七个模块用导线相形成总电路图。

其仿真图如图4.8

图4.8总电路仿真图

4.9硬件调试

软件仿真完成以后就与硬件相连,先设置好管脚。

点击“assingmengt”菜单的“pinplanner”将管脚设置好,再在实验箱上按设置好的管脚用导线连起来,确定后编译。

关闭puartus软件,将试验箱接入电脑,按提示安装。

重新打开软件,点击菜单“tools”中的”granmmer”确定接好USB接口。

将实验箱的线接好后就可以运行,看结果与仿真是否相符.

点击“start”将清零信号置低电平,显示器显示10000的字样。

将被侧信号与时钟信号设置合理的数值,将清理信号置为高电平。

显示器中就能显示器分频数值。

1.清零信号为低电平时候的显示结果如图4.9.1

图4.9.1清零信号为低电平时的结果

图中为清零信号为低电平时,显示为0000,前面的1为在这种情况下只需要一个计数器工作。

2.清零信号置为高电平后的结果如下图图4.9.2所示:

图4.9.2清零信号为高电平时的显示结果

图中显示的为将被测信号为时钟信号的3840倍的显示结果。

显示为3840,前面的4为需要用4个计数器工作。

 

五.心得体会

这次课程设计是我们几个同学一起做的,我最深刻的体会就是合作更容易创造成功,在做课程设计的过程中,我碰到很多的问题,有的是在书上和网上都没找到答案的,由于自己平时遇到问题的时候一般都习惯在书上和网上寻找答案,所以也没怎么问同学和老师,但是这样做得结果是问题始终解决不了,又花了很多时间,后来我就问了同学,他们一下子就告诉了我该怎么解决这个问题,后来大家有问题的时候就互相问,结果是问题解决得既快又好,这让我们大家都节约了很多不必要的时间,我想分组做课程设计真的有很多好处,因为学习的目的是学知识,至于是怎么学到的并不是最重要的。

这让我想到为什么公司在招聘员工的时候常常会考察这个员工是否有与他人合作的精神,而不是看他能力怎么样了,因为仅仅只靠自己一个人的能力,而不会与他人合作是很难在段的时间里取得成绩的,而要在这个社会上有很强的竞争力,需要的不仅仅是事情做得好,更重要的是能不能很快的解决问题。

在刚拿到这个课题的时候,我对QuartusII这个软件是很不熟悉的,于是就找了EDA这本书来仔细的看,先是按照书上所说的来自己先练习使用这个软件,结果还是遇到了问题,比如事先已经把程序保存在一个文件夹里了,心想直接调出来用就可以了吧!

因为保存在文件夹里的程序是已经编译过没有问题的了,调出来用的时候就不必再编译一遍了吧!

实际是如果这样做了是不能做出仿真图形的,要在建立工程之后,打开波形图窗口再保存和编译过后才能仿真出波形图。

有些问题自己一直解决不了,后来经过问了老师和同学之后才把问题解决了。

所以我认识到,在学习的过程中,不仅要擅于看懂书里面讲的内容,还要多向老师和同学请教,这样能更好的学习到解决问题的方法。

在这里我要特别感谢陈老师对我的悉心指导和帮助,感谢热心帮助我的同学们,谢谢你们!

 

六.参考文献

EDA技术实用教程—VHDL版(第四版)科学出版社潘松黄继业编著

电子技术基础(数字部分)清华大学出版社阎石主编

电子技术基础(模拟部分)高等教育出版社康华光主编

电子技术基础实验高等教育出版社陈大钦主编

电子技术课程设计指导高等教育出版社彭介华主编

可编程逻辑器件设计及应用机械工业出版社张原编著

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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