1 绪论
1.1课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
背景
随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。目前许多高精度的数字频率计都采用单片机加上外部的高速计数器来实现,然而单片机的时钟频率不高导致测频速度比较慢,并且在这种设计中,由于PCB版的集成度不高,导致PCB板走线长,因此难以提高计数器的工作频率。为了克服这种缺点,大大提高测量精度和速度,我们可以设计一种可编程逻辑器件来实现数字频率计。EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。其设计的灵活性使得EDA技术得以快速发展和广泛应用。以Max+PlusⅡ软件为设计平台,采用VHDL语言实现数字频率计的整体设计。伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,VHDL语言是经IEEE确认的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
硬件语言,在电子设计领域受到了广泛的接受。
1.2 课程设计目的
掌握数字频率计电路的设计原理,并能够在实际生活中正确应用;
学会在MAX+plusⅡ软件环境中仿真;
锻炼自己独立解决问题的能力,学会有效获取有用信息。
2 课程设计总体
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
方案一: 采用小规模数字集成电路制作
被测信号经过放大整形变换为脉冲信号后加到主控门的输入端,时基信号经控制电路产生闸门信号送至主控门,只有在闸门信号采样期间内输入信号才通过主控门,若时基信号周期为T,进入计数器的输入脉冲数为N,则被信号的测频率其频率F=N/T,
方案二:采用单片机进行测频控制
单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入测频电路,由单片机对测频电路的输出信号进行处理,得出相应的数据送至显示器显示。采用这种方案优点是呆以依赖地成熟的单片机技术、运算功能较强、软件编程灵活、自由度大、设计成本也较低,缺点是显而易见的,在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,整个系统显得十分复杂,并且单片机的频率不能做得很高,使得测量精度大大降低。
方案三:采用现场可编程门阵列(FPGA)为控制核心
采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便。
综合上述
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
,方案三为本设计测量部分最佳选择方案。
3 设计的基本原理
3.1设计的原理框图如下所示:
3.2工作原理
众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间可以根据需要取值,大于或小于1 s都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1 s作为闸门时间。
数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1所示。
3.3图形元件原理图
利用软件MAX+plusⅡ的图形文件输入法设计设计频率计的原理图3—1
图3—1
4 设计的
步骤
新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤
和过程
4.1 测频控制信号发生器
测频控制信号发生器产生测量频率的控制时序,是设计频率计的关键。这里控制信号CLK取为1 Hz,2分频后就是一个脉宽为1 s的时钟信号FZXH,用来作为计数闸门信号。当FZXH为高电平时开始计数;在FZXH的下降沿,产生一个锁存信号SCXH,锁存数据后,还要在下次FZXH上升沿到来之前产生清零信号CLEAR,为下次计数做准备,CLEAR信号是上升沿有效。
四选一数据选择器的程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity si_xuan_1 is
port(a,b,c1,c2,c3,c4:in std_logic;
y:out std_logic);
end si_xuan_1;
architecture behav of si_xuan_1 is
signal x:std_logic_vector(1 downto 0);
begin
process(a,b)
begin
x<=b&a;
case x is
when"00"=> y<=c1;
when"01"=> y<=c2;
when"10"=> y<=c3;
when"11"=> y<=c4;
when others=>null;
end case;
end process;
end behav;
通过四选一数据选择器的控制按不同的BA二进制数值时输出被测信号的1分频、10分频、100分频、1000分频,通过二四译码器按不同的BA二进制数值时输出四个档次p0、p1、p2、p3,分别代表1hz、10hz、100hz、1000hz为单位。
4.2 计数器
计数器以待测信号FZXH作为时钟,在清零信号CLEAR到来时,异步清零;FZXH为高电平时开始计数。本文设计的计数器计数最大值是99 999 999。
十进制计数器的程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jishu10 is
port(clk,rst,en:in std_logic;
cq:out std_logic_vector(3 downto 0);
cout:out std_logic);
end jishu10;
architecture behav of jishu10 is
begin
process(clk,rst,en)
variable cqi:std_logic_vector(3 downto 0);
begin
if rst='1' then cqi:=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
if cqi<9 then cqi:=cqi+1;
else cqi:=(others=>'0');
end if;
end if;
end if;
if cqi=9 then cout<='1';
else cout<='0';
end if;
cq<=cqi;
end process;
end behav;
4.3 锁存器
当锁存信号SCXH上升沿到来时,将计数器的计数值锁存,这样可由外部的七段译码器译码并在数码管上显示。设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存器的位数应跟计数器完全一样,均是32位。寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为动态扫描电路的输入。4位寄存器的VHDL源程序如下。
library ieee;
use ieee.std_logic_1164.all;
entity reg_4 is
port(load:in std_logic;
din:in std_logic_vector(3 downto 0);
dout:out std_logic_vector(3 downto 0));
end reg_4;
architecture behav of reg_4 is
begin
process(din)
begin
if load’event and load='1' then
dout<=din;
end if;
end process;
end behav;
在源程序中LOAD 是锁存信号,上升沿触发;din[3..0]是寄存器输入;dout[3..0]是寄存器输出。
4.4 译码驱动电路
本文数码管采用动态显示方式,每一个时刻只能有一个数码管点亮。数码管的位选信号电路是74LS138芯片,其8个输出分别接到8个数码管的位选;3个输入分别接到EPF10K10LC84-4的I/O引脚。
译码模块是对计数出的数进行译码显示出来,该部分由寄存器、动态扫描电路和译码驱动电路组成。
本设计采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延迟时间相当重要。根据人眼视觉暂留原理,LED数码管每秒导通16次以上,人眼就无法LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。如果延时控制的不好则会出现闪动,或者亮度不够,根据经验,延时0.005S可以达到满意的效果。另外,显示的字符有变化时,可在延时到达后送一个地电平(共阴极数码管)LED数码管先短暂熄灭,再显示一个字符,可使在视觉上字符的变化更清楚。
动态扫描显示的VHDL源程序如下。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity xu_dynamic is
port(clk,reset:in std_logic;
din1:in std_logic_vector(3 downto 0);
din2:in std_logic_vector(7 downto 4);
din3:in std_logic_vector(11 downto 8);
din4:in std_logic_vector(15 downto 12);
shift:out std_logic_vector(1 downto 0);
bus4:out std_logic_vector(3 downto 0));
end xu_dynamic;
architecture one of xu_dynamic is
signal scan_clk:std_logic_vector(1 downto 0);
begin
p1:process(clk,scan_clk,reset)
variable scan:std_logic_vector(17 downto 0);
begin
if reset='1' then
scan:="000000000000000000";
scan_clk<="00";
elsif clk'event and clk='1' then
scan:=scan+1;
end if;
scan_clk<=scan(1 downto 0);
end process p1;
p2:process(scan_clk,din1,din2,din3,din4)
begin
case scan_clk is
when"00"=>bus4<=din1;shift<="11";
when"01"=>bus4<=din2;shift<="10";
when"10"=>bus4<=din3;shift<="01";
when"11"=>bus4<=din4;shift<="00";
when others=>bus4<=din1;shift<="11";
end case;
end process p2;
end one;
程序中,CLK是扫描时钟;RST为复位信号,当RST=1时对位选信号复位,shitf为4个数码管的位选信号,高电平有效;din1、din2、din2、din3、din4为输入的锁存信号,bus4为选中的信号输出。
4.5数码管显示
本文采用8个共阴极数码管来显示待测频率的数值,其显示范围从O~99 999 999
七段数码管驱动电路的VHDL设计
library ieee;
use ieee.std_logic_1164.all;
entity decl7s is
port(a:in std_logic_vector(3 downto 0);
led7s:out std_logic_vector(6 downto 0));
end decl7s
4.6 模块的整合
整个软件的程序流程图如4—1所示。
图4—1
5 设计的仿真和运行结果
5.1 设计的仿真
把源程序通过键盘输入电脑,先在MAX+plusⅡ软件环境下进行编译,将编译提示的错误完全改正后,在MAX+plusⅡ软件环境下进行仿真的结果如图5—1所示。其中sig为系统待测信号,clr为清零信号,clk则为扫描时钟,sel0、sel1、sel2为led片选,q6到q0为led输出信号,sel决定选择显示的8个数码管。Clr接一开关,当clr置1时清零,8个led数码管显示为零,当clr开关置0时,系统开始测试输入信号的频率,将数据传至锁存器后,送往led输出所测频率。
图5—1
5.2 运行结果
软件仿真完全正确后,线封锁引脚,然后连接硬件(如图5—2),
图5—2
再次编译,没有错误后下载程序到硬件之中,选用Altera公司生产的FPGA产品FLEX10K系列的EPF10K10LC84-4芯片,下载适配后,便可以在数码管上显示出待测频率的数值。如下图5—3所示
图5—3
6 总结
6.1 课程设计总结
1 设计任务完成情况
通过为期两周的课程设计,完成了本次设计的技术指标,刚开始设计的时候,由于vhdl语言编写程序这部分比较难搞定,所以在分析设计程序模块的时候,就会停下来设计控制电路,为了提高效率,在实际的操作中,先分模块编写程序再根据分块程序写出总的程序,利用波形文件仿真实验结果,调测符合要求。最后搞定控制电路的连接。最后完成的一块电路板,它所实现的功能就是可以测被测信号的频率,周期和脉宽。在调测的过程中发现测量频率时,档位在1Hz~9999999Hz,最终得到的结果的误差稍微大了点,其他的测量结果非常接近测量值。
2 问题及改进
由于电路里面使用的电容元件,在实验的时候,随着实验室里面温度的变化,输出信号的频率也会发生变化,这是造成误差的一个原因,为了在验收的时候提高测量的准确性,所以在测量前要调节电位器,把产生的方波信号接示波器,测量其输出频率,调节电位器,使输出的信号非常接近1KHz,这样的话在后面的测量中会减小误差。刚开始的时候波形文件的仿真总是遇到大大小小的问题,比如结束时间不会重新设置、正弦输入脉冲不会调制等等。最后也在实验指导老师的帮助下,一步步的真正的掌握了,最后成功的调制出了波形的仿真。还有引脚锁定的第一种方法,元器件的选择等等一些细节上的小问题,也在不知不觉的这几天的课程设计中顺利的解决了,虽然在设计的道路上我们遇到了很多的大大小小的困难,但是最终我们也在实习指导老师的帮助下真正的学到了许多实际应用中的知识,而且顺利的完成我们的数字频率计。
6.2 课程设计心得
课程设计心得
一 、收获:
本次实习让我们体味到设计电路、连接电路、调测电路过程中的乐苦与甜。设计是我们将来必需的技能,这次实习恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。在实习的过程中发现了以前学的数字电路的知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度。合理的分配时间。在设计控制电路的时候,我们可以连接译码显示和计数电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。在整个课程设计完后,总的感觉是:有收获。以前上课都是上一些最基本的东西而现在却可以将以前学的东西作出有实际价值的东西。在这个过程中,我的确学得到很多在书本上学不到的东西,如:利用VHDL语言编写程序,如何利用现有的元件组装得到设计利用计算机来画图等等。但也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,找了老半天结果却是接头的方向接错了,有时更是忘接电源了。在学习中的小问题在课堂上不可能犯,在动手的过程中却很有可能犯。特别是在接电路时,一不小心就会犯错,而且很不容易检查出来。但现在回过头来看,还是挺有成就感的。我的动手能力又有了进一步的提高,我感到十分的高兴。巩固了课堂上所学到的理论性的知识,对VHDL语言有了更深一层的理解,熟练地掌握了MAX+plusⅡ软件的应用,能在MAX+plusⅡ软件环境下生成可用的波形文件、文本文件、图形文件等。
通过紧张有序的设计实践,我觉得自己的动手能力有了很大的提高;自信心也增强了.在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这又巩固和深化了自己的知识结构。
二、建议:
由于种种原因,我们实习之前准备严重不足,包括心理上和自身能力上,在这之前同学们对实习内容了解的并不多, 对实习中必须用到数字实验平台几乎是一无所知,所以自然地就造成了许多不必要的时间上的浪费,我建议以后老师们能够在课堂外利用空闲的时间多讲解一下有关此方面的知识,让同学们提前有所准备,对实验内容有所了解,相信做的时候大家必会感到更加轻松吧。另外,既然是数电实验,作为基础的数电,大家一定要熟知课本上的知识,这样才能在实验时不手忙脚乱不知所措。
参考文献
[1] 阎石 主编,《数字电子技术基础》,高等教育出版社,1998
[2] 谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001
[3] 廖裕评等主编,《CPLD数字电路设计——使用MAX+plusⅡ入门篇》,清华大学出版社,2001
[4] 冯涛等主编,《可编程逻辑器件开发技术:MAX+plusⅡ入门与提高》,人民邮电出版社,2002
[5] 杨崇志,《特殊新型电子元件手册》,辽宁科学技术出版社,1999
[6] 彭介华,《电子技术课程设计指导》高等教育出版社.2000年出版.
[7] Mark Zwolinski, Digital System Design with VHDL, 电子工业出版社,2002
[8] Alan B. Marcovitz Introduction to logic Design, 电子工业出版社,2002
附录 A源程序
LIBRARY IEEE; --等精度频率计FPGA设计部分
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY etester IS
PORT ( BCLK : IN STD_LOGIC; --标准频率时钟信号clock2,50MHZ
TCLK : IN STD_LOGIC; --待测频率时钟信号
CLR : IN STD_LOGIC; --清零和初始化信号
CL : IN STD_LOGIC; --当SPUL为高电平时,CL为预置门控信号,用于测频计数
--时间控制当SPUL为低电平时,CL为测脉宽控制信号,
--CL高电平时测高电平脉宽而当CL为低电平时,测低电平脉宽。
SPUL : IN STD_LOGIC; --测频或测脉宽控制
START : OUT STD_LOGIC;--起始计数标志信号
EEND : OUT STD_LOGIC; -- 由低电平变到高电平时指示脉宽计数结束,
SEL : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --数据读出选同控制
DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --END etester; 8位数据读出
END etester;
ARCHITECTURE behave OF etester IS
SIGNAL BZQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --标准计数器
SIGNAL TSQ : STD_LOGIC_VECTOR(31 DOWNTO 0); --测频计数器
SIGNAL ENA : STD_LOGIC; --计数使能
SIGNAL MA, CLK1, CLK2, CLK3 : STD_LOGIC;
SIGNAL Q1,Q2,Q3,BENA,PUL:STD_LOGIC;
SIGNAL SS : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
START <= ENA ;
DATA <= BZQ(7 DOWNTO 0) WHEN SEL="000" ELSE -- 标准频率计数低8位输出
BZQ(15 DOWNTO 8) WHEN SEL="001" ELSE
BZQ(23 DOWNTO 16) WHEN SEL="010" ELSE
BZQ(31 DOWNTO 24) WHEN SEL="011" ELSE -- 标准频率计数最高8位输出
TSQ(7 DOWNTO 0) WHEN SEL="100" ELSE --待测频率计数值最低8位输出
TSQ(15 DOWNTO 8) WHEN SEL="101" ELSE
TSQ(23 DOWNTO 16) WHEN SEL="110" ELSE
TSQ(31 DOWNTO 24) WHEN SEL="111" ELSE --待测频率计数值最高8位输出
TSQ(31 DOWNTO 24) ;
BZH : PROCESS(BCLK, CLR) --标准频率测试计数器,标准计数器
BEGIN
IF CLR = '1' THEN BZQ <= ( OTHERS=>'0' ) ;
ELSIF BCLK'EVENT AND BCLK = '1' THEN
IF BENA = '1' THEN BZQ <= BZQ + 1; END IF;
END IF;
END PROCESS;
TF : PROCESS(TCLK, CLR, ENA) --待测频率计数器,测频计数器
BEGIN
IF CLR = '1' THEN TSQ <= ( OTHERS=>'0' );
ELSIF TCLK'EVENT AND TCLK = '1' THEN
IF ENA = '1' THEN TSQ <= TSQ + 1; END IF;
END IF;
END PROCESS;
PROCESS(TCLK,CLR)
BEGIN
IF CLR = '1' THEN ENA <= '0' ;
ELSIF TCLK'EVENT AND TCLK='1' THEN ENA <= CL ; END IF;
END PROCESS;
MA<=(TCLK AND CL) OR NOT(TCLK OR CL) ; --测脉宽逻辑
CLK1<=NOT MA ; CLK2<=MA AND Q1 ; CLK3<=NOT CLK2; SS<=Q2 & Q3 ;
DD1: PROCESS(CLK1,CLR)
BEGIN
IF CLR = '1' THEN Q1 <= '0' ;
ELSIF CLK1'EVENT AND CLK1 = '1' THEN Q1 <= '1' ; END IF;
END PROCESS;
DD2: PROCESS(CLK2,CLR)
BEGIN
IF CLR = '1' THEN Q2 <= '0' ;
ELSIF CLK2'EVENT AND CLK2 = '1' THEN Q2 <= '1' ; END IF;
END PROCESS;
DD3: PROCESS(CLK3,CLR)
BEGIN
IF CLR = '1' THEN Q3 <= '0' ;
ELSIF CLK3'EVENT AND CLK3 = '1' THEN Q3 <= '1' ; END IF;
END PROCESS;
PUL<='1' WHEN SS="10" ELSE --当SS=“10”时,PUL高电平,允许标准计数器计数,
'0' ; --禁止计数
EEND<='1' WHEN SS="11" ELSE --EEND为低电平时,表示正在计数,由低电平变到高电平
'0'; --时,表示计数结束,可以从标准计数器中读数据了
BENA<=ENA WHEN SPUL='1' ELSE
--标准计数器时钟使能控制信号,当SPUL为1时,测频率
PUL WHEN SPUL='0' ELSE --当SPUL为0时,测脉宽和占空比
PUL ;
END behave;
附录 B仿真时序波形图
PAGE
1