论文基于vhdl语言直接测频法频率计设计(原创)_第1页
论文基于vhdl语言直接测频法频率计设计(原创)_第2页
论文基于vhdl语言直接测频法频率计设计(原创)_第3页
论文基于vhdl语言直接测频法频率计设计(原创)_第4页
论文基于vhdl语言直接测频法频率计设计(原创)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于vhdl语言直接测频法频率计设计一.设计原理频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。测频法就是在确定的闸门时间Tw内,记录被测信号的脉冲个数Nx,则被是信号的频率为fx=Nx/Tw 。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1 s作为闸门时间。原理图: 原理图设计框图:基准时钟待测信号产生一秒闸门信号十进制计数器数据锁存动态显示译码显示 设计框图二系统分析1顶层文件。用于集成各个

2、模块的进程,定义输入输出端口。2控制模块。控制十进制计数器的计数及锁存器的工作,当计数器停止计数,则锁存器接收计数器的计数数据。3计数器。由于需要使用数码管显示频率,所以采用的是十进制可清零、具有使能功能的计数器模块。4锁存模块。接受七个计数器信号中的四个进行锁存。5译码显示模块。因为每个数码管有八个段(包括小数点),所以需要八个段选输出,另外有四个位选输出控制四位数码管的亮灭。二.程序设计(1)十进制计数器模块计数器模块是对输入脉冲信号的频率进行测量,由4个十进制加法器组成,其中EN为计数器选通控制信号,START为计数清零信号。在计数清零信号清零后,当计数使能信号EN有效时,开始对待测信号

3、进行计数。本程序计数使能信号EN的宽度为1s(与闸门信号同宽),计数结果为待测信号的频率。(2)4位锁存器模块当锁存信号上升沿到来时,将计数器的计数值锁存,这样可由外部的八段译码器译码并在数码管上显示。设置锁存器的好处是显示的数据稳定。复位后,锁存器里面的内容将清零。另外程序设定开关s3用于将低四位送锁存器,当按下时显示低四位,用于测量大于9999Hz的信号时显示低四位。(3)控制模块根据频率的定义和测量的基本原理,测量信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许(EN)的信号,1秒计数结束后,计数值锁入锁存器的锁存信号。 控制模块的计数使能信号EN能产生一个1秒脉宽的周期信号。当

4、EN为高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。 在停止计数期间,首先需要一个锁存信号CLK的上升沿将计数器在前1秒的计数值锁存进各锁存器中,并由译码器译出并显示计数值。锁存信号后必须有一个清零信号START对计数器进行清零,为下一秒钟的计数操作作准备。(4)译码显示模块动态显示是把所有的数码管的输入信号连在一起,这种连接方式有2个优点:一是节约器件的IO端口;二是降低功耗。每次向数码管写数据时,通过片选信号选通其中一个数码管并把数据写入,利用0.02us换一个数码管亮产生视觉暂留效果,在每个0.02us里面实际只有一个数码管是亮的。程序设定当待测频率为19999Hz时,单位

5、为Hz,没小数点,大于9999Hz时单位kHz,出现小数点。三实验结果8765Hz测试结果:119.765kHz测试结果:高四位低四位1.019765mHz测试结果:高四位低四位引脚定义:5.结论通过为期一周的课程设计,完成了本次设计的技术指标,刚开始设计的时候,由于VHDL语言编写程序这部分比较难懂, 所以参考了很多网上的程序,由于多个模块的使用较为混乱,所以我选择了将各个模块放在一个顶层文件里面,这样看起来更好理解,也方便修改。在硬件测试的过程中发现测量频率时,档位在1Hz9999999Hz,最终得到的结果,测量结果非常接近测量值。6.心得体会本次课程设计让我体味到设计电路、调测电路过程中

6、的辛苦和成功时的喜悦。这次课程设计给我们提供了一个应用自己所学知识的机会,尽管之前掌握这方面的知识较为贫乏,但是从到网上查找资料到对电路的设计对电路的调试再到最后电路的成型,我都是尽全力认真完成,并且虚心积极的向他人请教,过程中发现了自己有很多相关知识并不掌握。检查过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,有时一个字眼的错误就可能让我找很久,如果没有耐心和细心,是很难找到的,在定义管脚时,又要求我们对管脚设置清楚。在整个课程设计完后,我觉得学以致用是学习的重要过程,以前上课都是理论的东西,只有将所学的知识运用到实际中去,才能体现其价值。在这个过程中,我学得到

7、很多在书本上学不到的东西,如:对程序的整体把握提升了,对VHDL语言的理解更加深刻等。不管是在Quartus软件的应用,还是在VHDL编程语言的学习,或是硬件的操作我都有了一定的提高。通过紧张的设计实践,我觉得自己的动手能力有了很大的提高,在课程设计中自己动脑子解决遇到的问题,有不懂的地方向他人请教。书本上的知识有了用武之地,这又巩固和深化了自己的知识结构。附录:程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity plj is port ( start:in std_logic;

8、-复位信号 clk :in std_logic; -系统时钟 clk2: IN STD_LOGIC; -被测信号 key2 :in std_logic; -低四位显示控制 yy1:out std_logic_vector(7 downto 0); -八段码 w1 :out std_logic_vector(3 downto 0); -数码管位选信号end plj;architecture behav of plj is signal clk1: std_logic; -被测信号输入端signal b1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto 0)

9、; -十进制计数器signal bcd:std_logic_vector(3 downto 0); -数据锁存器signal q :integer range 0 to 49999999; -秒分频系数 signal qq : integer range 0 to 499999; -动态扫描分频系数signal en,bclk:std_logic; -使能信号,有效被测信号signal sss : std_logic_vector(3 downto 0); -小数点signal bcd0,bcd1,bcd2,bcd3: std_logic_vector(3 downto 0);-锁存7位十进制

10、计数器中有效的高4位或低4位数据beginclk1=clk2;-被测信号赋给被测信号输入端second:process(clk) -此进程产生一个持续时间为一秒的的闸门信号 begin if start=0 then q=0; elsif clkevent and clk=1 then if q49999999 then q=q+1; else q=49999999; end if; end if; if q49999999 and start=1 then en=1; else en=0; end if;end process;and2:process(en,clk1) -此进程得到7位十进

11、制计数器的计数脉冲begin bclk=clk1 and en;end process; com:process(start,bclk) -此进程完成对被测信号计脉冲数begin if start=0 then -复位 b1=0000;b2=0000;b3=0000;b4=0000;b5=0000;b6=0000;b7=0000; elsif bclkevent and bclk=1 then if b1=1001 then b1=0000; -此IF语句完成个位十进制计数 if b2=1001 then b2=0000; -此IF语句完成百位十进制计数 if b3=1001 then b3=

12、0000; -此IF语句完成千位十进制计数 if b4=1001 then b4=0000; -此IF语句完成万位十进制计数 if b5=1001 THEN b5=0000; -此IF语句完成十万位十进制计数 if b6=1001 then b6=0000; -此IF语句完成百万位十进制计数 if b7=1001 then b7=0000; -此IF语句完成千万位十进制计数 else b7=b7+1; end if; else b6=b6+1; end if; else b5=b5+1; end if; else b4=b4+1; end if; else b3=b3+1; end if; e

13、lse b2=b2+1; end if; else b1=b1+1; end if; end if;end process;process(clk) -此进程把7位十进制计数器有效数据送入bcd03,并得到小数点信息begin if rising_edge(clk) then if en=0 then if key2=0 then bcd3=b4; bcd2=b3; bcd1=b2; bcd0=b1; sss0000 then bcd3=b7; bcd2=b6; bcd1=b5; bcd0=b4; sss0000 then bcd3=b6; bcd2=b5; bcd1=b4; bcd0=b3;

14、 sss0000 then bcd3=b5; bcd2=b4; bcd1=b3; bcd0=b2; sss=1011; -小数点在第2位else bcd3=b4; bcd2=b3; bcd1=b2; bcd0=b1; sss=1111; -当小于10kHz时,小数点去掉,单位变为Hz end if; end if; end if; end if;end process;weixuan:process(clk) -此进程完成数据的动态显示begin if clkevent and clk=1 then if qq 99999 then qq=qq+1;bcd=bcd3; w1=0111; if

15、sss=0111 then yy1(0)=0; -显示第1位的数值和小数点 else yy1(0)=1; end if; elsif qq199999 then qq=qq+1;bcd=bcd2; w1=1011; if sss=1011 then yy1(0)=0;-显示第2位的数值和小数点 else yy1(0)=1; end if; elsif qq299999 then qq=qq+1;bcd=bcd1; w1=1101; if sss=1101 then yy1(0)=0;-显示第3位的数值和小数点 else yy1(0)=1; end if; elsif qq399999 then qq=qq+1;bcd=bcd0; w1=1110; if sss=1110 then yy1(0)=0;-显示第4位的数值和小数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论