- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
摘要
在电子技术领域中,频率是最基本的参数之一,并且与许多电参量的测量方案以及测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了用VHDL语言设计了一个简单的数字频率计的过程。
关键词: 1
1.1 设计内容 1
1.2 设计方案 1
1.3 设计目的 1
二、设计原理 2
三、具体内容 3
3.1 测频控制 3
3.2 计数 4
3.3 锁存器 6
3.4 扫描译码驱动 7
3.5数码管显示
四、运行结果 9
五、心得体会 10
参考文献 10
附录A VHDL程序 12
附录B 控制方式管脚列表 19
附录C 电路原理图 20
一、绪论
1.1 设计内容
此次EDA基础课程设计中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板设计和仿真一个数字频率计,对1Hz~250KHz 的脉冲进行频率测量,采用等精度测量,即在所测量的整个频段内部,均可实现相同精度的测量,即测量精度与频率无关,测得结果在数码管上显示,并设计相应的功能按键。
1.2 设计方案
此次EDA课程设计采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的50M的时钟,将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便,并且选用EP3C40F780C8芯片,由50M晶振体产生时钟信号,开关做为相应的功能按键。
1.3 设计目的
(1) 了解等精度测频的方法和原理;
(2) 掌握如何在FPGA内部设计多种功能模块;
(3) 掌握VHDL在测量模块设计方面的技巧。
二、设计原理
??频率,是指一秒内信号变化的次数,也就是每秒接受信号脉冲的次数。信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟。计待测信号的脉冲个数,即。时间可以根据需要取值,大于或小1 s都可以。时间越长,得到的频率值就越准确,但时间越长,则每测一次频率的间隔就越长。时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,
三、具体内容
3.1 测频控制信号
测频控制信号发生器产生测量频率的控制时序是最初的,也是整个程序的核心内容。控制信号CLK取为Hz(为系统时钟电路信号)。分频后就是一个分频后就是一个脉宽为1s的信号,用来作为计数闸门信号。当为高电平时开始计数;,,,CLR为控制开关,当它为高电平时,分频器才开始工作,当它为低电平时,分频器是停止分频。
程序如下:PROCESS ( CLK1 )
VARIABLE A :STD_LOGIC_VECTOR(25 DOWNTO 0);
BEGIN
IF (CLR=1)THEN
IF CLKEVENT AND CLK = 1 THEN
IF A=10111110101111000010000000 THEN
A:=00000000000000000000000000;
CLK1=0;
ELSE CLK1=1;
A:=A+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS ( CLK3 )
BEGIN
IF CLK1EVENT AND CLK1=1 THEN
CLK3=NOT CLK3;
END IF ;
END PROCESS;
PROCESS ( CLK2 )
VARIABLE B : STD_LOGIC_VECTOR(12 DOWNTO 0);
BEGIN
IF (CLR=1)THEN
IF CLKEVENT AND CLK = 1 THEN
IF B=1001110001000 THEN
原创力文档


文档评论(0)