简单频率计的制作.docx
- 文档编号:30427108
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:17
- 大小:46.45KB
简单频率计的制作.docx
《简单频率计的制作.docx》由会员分享,可在线阅读,更多相关《简单频率计的制作.docx(17页珍藏版)》请在冰豆网上搜索。
简单频率计的制作
NewlycompiledonNovember23,2020
简单频率计的制作
一.设计的基本原理和框图
基本原理:
数字频率计是用数字显示被测信号的频率的仪器,被测信号可以是正弦波,方波或者其他周期性变化的信号,它的基本原理是时基信号发生器提供标准的时基脉冲信号,若其周期为1s则门控电路的输出信号持续时间亦准确到1s。
闸门电路有标准秒信号控制,当秒信号到来时闸门开通,信号通过闸门送到计数译码显示电路,秒信号结束时闸门关闭,计数器停止计数,由于计数器记得脉冲数N的是一秒内的累积数,所以被测频率是NHZ。
闸门时间可以取大于或者小于1秒的值,测得的频率时间间隔与闸门时间的取值成正比,在这里取的闸门时间为1s。
在此,数字频率计由分频器,片选电路,计数器,锁存器,译码电路和显示电路作为主要组成部分。
设计框图如图所示:
图
二.单元电路设计
分频电路模块
分频器在总电路中有两个作用。
由总图框图中分频器有两个输出,一个给计数器,一个给锁存器。
时钟信号经过分频电路形成了20分频后的门信号。
另一个给锁存器作锁存信号,当信号为低电平时就锁存计数器中的数。
分频电路图如图
图分频电路图
片选信号电路模块
这个电路有两个用途:
一是为后面的片选电路产生片选信号,二是为译码模块提供选择脉冲信号。
电路图如图
图片选信号电路图
计数器模块
计数器模块为该电路中的核心模块,它的功能是:
当门信号为上升沿时,电路开始计算半个周期内被测信号通过的周期数,到下升沿后结束。
然后送给锁存器锁存。
计数器电路图如图所示:
图计数器电路图
锁存器模块
在分频信号的下降沿到来时,锁存器将计数器的信号锁存,然后送给编译模块中。
其电路图如图所示:
图锁存器电路图
译码信号模块
此模块是对四个锁存器进行选择,按顺序的将四个锁存器中的数值送给译码模块中译码。
其电路图如图
图译码信号电路图
片选模块
该模块接收到片选信号后,输出给显示器,选择显示那个显示管。
其电路图如图所示:
图片选电路图
译码模块
译码模块的作用就是将译码信号模块中选择出的信号进行译码,并将其送给显示器。
其电路图如图所示:
图译码电路图
总电路图
图总电路图
三.编程下载
分频模块的程序
libraryieee;
usefenis
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;
片选信号模块的程序
libraryieee;
useselis
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;
计数器模块的程序
libraryieee;
usecornais
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;
锁存器模块的程序
libraryieee;
uselockis
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;
译码信号模块的程序
libraryieee;
usechis
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;
片选模块的程序
libraryieee;
useymis
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";
whenothers=>q<="00000000";
endcase;
endprocess;
endym_arc;
译码器模块的程序
libraryieee;
usedispis
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;
顶层文件的程序
libraryieee;
usepljis
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;
四.仿真与调试
分频电路模块的仿真
在quartusII中打开事先编译好的程序,然后建立工程文件,再打开波形图显示窗口,设置好参数,保存后编译,编译无错误既可以生成电路图。
其仿真图如图所示:
图分频电路仿真图
片选信号电路的仿真
其仿真图如图.
图片选信号电路仿真图
计算器模块的仿真
其仿真图如图所示:
图计算器电路仿真图
锁存器模块仿真
其仿真图如图所示:
图锁存器电路仿真图
译码信号模块的仿真
其仿真图如图.
图译码信号电路仿真图
片选模块的仿真
其仿真图如图
图片选电路仿真图
译码器模块
其仿真图如
图译码电路仿真图
总电路图的仿真
用顶层文件将七个模块用导线相形成总电路图。
其仿真图如图
图总电路仿真图
硬件调试
软件仿真完成以后就与硬件相连,先设置好管脚。
点击“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版(第四版)科学出版社潘松黄继业编着
电子技术基础(数字部分)清华大学出版社阎石主编
电子技术基础(模拟部分)高等教育出版社康华光主编
电子技术基础实验高等教育出版社陈大钦主编
电子技术课程设计指导高等教育出版社彭介华主编
可编程逻辑器件设计及应用机械工业出版社张原编着
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 频率计 制作