《测量频率及占空比的频率计设计(共26页).doc》由会员分享,可在线阅读,更多相关《测量频率及占空比的频率计设计(共26页).doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上简易数字频率计设计一、设计任务与要求: 设计一个具有如下功能的简易频率计。(1)基本要求: a被测信号的频率范围为120kHz,用4位数码管显示数据。b测量结果直接用十进制数值显示。c被测信号可以是正弦波、三角波、方波,幅值13V不等。d具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。e当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。(2)发挥部分:a修改设计,实现自动切换量程。b构思方案,使整形时,跳变阈值自动进行调节,以实现扩宽被测信号的幅值范围。二、方案设计与论证:(1)数字频率计概述:数字频率计是直接用十进制数字来显示被测信号频率的一种测量装
2、置。它不仅可以测量正弦波、方波、三角波、尖脉冲信号和其他具有周期特性的信号的频率,而且还可以测量它们的周期。经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪;可以测量电容做成数字式电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪、计价器等。因此数字频率计在测量物理量方面应用广泛。(2) 数字频率计方案选择:本设计要求的测频范围是120KHZ,可分19999HZ和10.0020.00KHZ两个量程,有两种不同的方案实现量程的划分:方案1:将1HZ CLK信号二分频,取分频后信号的高电平作为测频的1S闸门信号,测量结果有5位,当结果小于9999HZ时选择低四位由数码管显示输出,大于9999HZ
3、且小于20KHZ时,选择高四位输出,大于20KHZ时,超量程指示灯亮。通过选择高四位或低四位来实现量程的自动转换。此方案的特点是实现方法简单,适合小范围的频率测量,但测频范围较大时,实现起来,测量速度较慢,还会造成所用元器件的浪费。方案2:由分频来实现量程的划分,将基准信号经分频得1HZ和10HZ的分频信号,设置一信号量SEL,初值为1HZ,将SEL信号二分频取分频后信号的高电平作为测频的闸门信号。测频的量程为19999HZ时, SEL为1HZ,测频的闸门信号为1S;量程为10.0020.00KHZ时,将SEL为10HZ,同时表示小数点的指示灯亮,测频的闸门信号为0.1S;当测量结果小于999
4、9HZ时,SEL赋值为10HZ,测量结果大于9999HZ且小于20KHZ时,SEL赋值为10HZ,测量结果大于20KHZ时,超量程指示灯亮从而实现量程的自动转换。此方案的特点是测频范围较小时,分频略显麻烦。但总体实现起来较为可行。比较两方案可知:对于本设计,方案1较方案2简单,方案1结果有5位,按情况选择4位输出显示即可实现频率的测量和量程的自动转换;而方案2要经过分频略显麻烦。但是,在本设计中,频率测量范围较小,量程划分也简单, 所以,我选方案1进行设计。 方案一原理图: 方案二原理图:(3)实验相关电路原理:(1)设计原理: a 测频率: 数字频率计的核心是电子计数器。电子计数器可以对脉冲
5、数目进行累加运算,能把任意一段时间内的脉冲总数计算出并由数码管显示出来。如某个时间间隔t内对周期性信号的累加计数值为N,则信号频率f为fN/t。 因此,首先应将被测信号变成周期性的脉冲,脉冲形成电路就是起这个作用,其脉冲的重复频率等于被测信号频率。脉冲形成后将它加到闸门电路的一个输入端A,闸门电路就是用来控制开和关的一种电路,当具有标准时间的闸门脉冲到达时,闸门便开启,允许由A进入的脉冲通过;闸门脉冲结束后,闸门便关闭,信号就不能通过。闸门开启时通过的脉冲送到电子计数器进行计数,由装在面板上的数码管显示出来。例如,时基信号的作用时间为1秒,闸门电路将打开1秒,若在这段时间内通过闸门电路的脉冲数
6、目为1000个,则被测信号的频率就是1000Hz。 b 测占空比: 测占空比有很多种方法,本设计采用多周期测量法其测量原理是:预置的时间和被测信号同时输入到同步电路,在同步电路输出端得到一个与被测信号同步的闸门信号。基准信号同时控制两个闸门的开启和关闭。在相同的闸门开启时间内,两个计数器分别对被测信号的通过的高电平和低电平个数进行计数,对得出的结果做运算,得到的结果即为被测信号的占空比。(2)超高速A/D、D/A板GW_ADDA说明:GW_ADDA板含两片10位超高速DAC(转换速率最高150MHz)和一片8位ADC(转换速率最高50MHz),另2片3dB带宽大于260MHz的高速运放组成变换
7、电路。GW_ADDA板上所有的A/D和D/A全部处于使能状态,除了数据线外,任一器件的控制信号线只有时钟线,这有利于高速控制和直接利用MATLAB/DSP Builder工具的设计。GW_ADDA板上工作时钟必须由FPGA的I/O口提供,且DAC和ADC的工作时钟是分开的。无法直接利用MATLAB和DSP Builder进行自动流程的设计,优点是时钟频率容易变化,且可通过Cyclone中的PLL的到几乎任何时钟频率。由此即可测试ADC和DAC的最高转换频率。两个电位器可分别调协两个D/A输出的幅度(输出幅度峰峰值不可大于5V,否则波形失真);模拟信号从接插口的2针“AIN”输入,J1和J2分别
8、是模拟信号输出的PA、PB口,也可在两挂钩处输出,分别是两个10位DA5651输出口。注意,使用A/D,D/A板必须打开GW48-PK2主系统板上的+/-12V电源,用后关闭!三、电路图及设计文件:(1)系统电路图:(2)系统的RTL级描述: (3)系统的引脚锁定图 (4)程序源代码:library ieee;-输入信号模块use ieee.std_logic_1164.all;entity comp isport(signl:in std_logic_vector(7 downto 0);fout:out std_logic);end comp;-signl为信号发生器产生的信号archit
9、ecture one of comp isbeginprocess(signl)beginif (signl) then -判断输入信号不为0fout=1; -fout为以后电路的门else -信号fout=0;end if;end process;end one;library ieee;-自动切换量程模块use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity corna is port(clr,fin,en,key2,rst:in std_logic; r
10、anin:in std_logic_vector(15 downto 0); alm:out std_logic; dis_out:buffer std_logic_vector(15 downto 0);end corna;architecture one of corna issignal c0,c1,c2,c3,c4:std_logic_vector(3 downto 0); beginp1:process(en,fin) begin if rst=1 then alm=0; elsif clr=1 then c0=0000;c1=0000;c2=0000;c3=0000;c4=0000
11、; elsif finevent and fin=1 then if en=1 then if c01001 then c0=c0+1; else c0=0000; if c11001 then c1=c1+1; else c1=0000; if c21001 then c2=c2+1; else c2=0000;if c31001 then c3=c3+1;else c3=0000; if c40001 then c4=c4+1; else c4=1111; c3=1111; c2=1111; c1=1111; -超过量程2KHZ时会报警,并alm=1; -且数码管显示为”FFFF” end
12、 if;end if; end if; end if ; end if; elsec4=0000;c3=0000;c2=0000;c1=0000;c0=0000;alm=0; end if;end if;end process p1;p2:process(key2,ranin,c4) begin if key2=1 then dis_out=ranin; -若key2有效,则输出为占空比,否 elsif c4/=0000then -则为显示频率 dis_out=c4&c3&c2&c1; -c4不为“0000”时,量程最低位为 else -10HZ,记频率范围为0-2KHZ,c4为 dis_ou
13、t=c3&c2&c1&c0; -“0000”时,量程最低位为1HZ,记 end if; -频率范围为0-9999HZend process p2; end one;library ieee;-记低电平个数木块use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count1 isport(enl,clr,clk0:in std_logic;loout:buffer integer range 1 to );end count1;architecture one of count1 isbeginprocess(en
14、l,clr,clk0)beginif clr=1 thenloout=1;elsif (clk0event and clk0=1) thenif enl=1 then -当输入信号有效时,在clk0loout=loout+1; -上升沿来临时,记下低电end if; -平个数end if;end process;end one;library ieee;-记高电平个数模块use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count2 isport(enh,clr,clk0:in std_logic;hiout:
15、buffer integer range 1 to );end count2;architecture one of count2 isbeginprocess(enh,clr,clk0)beginif clr=1 then -clk0为实验板自带的12MHZhiout=1; -信号elsif (clk0event and clk0=1) thenif enh=1 then -当输入信号有效时,在clk0hiout=hiout+1;-上升沿时记下高电平的个end if; -数end if;end process;end one;library ieee;-控制模块一use ieee.std_l
16、ogic_1164.all;entity ctrl is port(clk2:in std_logic; rst,load:out std_logic; en:buffer std_logic);end ctrl;architecture one of ctrl isbegin process(clk2,en) begin -clk2为试验箱自带的1HZ信号 if clk2event and clk2=1 then en=not en; -以clk2二分频产生相反的en,rst end if; -信号,用来作为自动切换量程模块 if clk2=0 and en=0 then rst=1; -的
17、使能信号和复位信号 else rst=0; end if; end process; load=not en; -对en取反得到load,作为锁存器模块end one; -的允许锁存信号library ieee;-控制模块二use ieee.std_logic_1164.all;entity ctrl1 isport(fin:in std_logic;enl:buffer std_logic;clr,load:out std_logic);end ctrl1;architecture one of ctrl1 issignal ct:std_logic;beginprocess(fin,enl
18、,ct)beginif finevent and fin=1 thenct=(not ct);end if;if fin=1 and ct=0 thenclr=1; -clr为记低电平模块的复位信号elseclr=0;end if;if ct=1 and fin=0 thenenl=1; -enl为记高电平模块的使能信号elseenl=0;end if;end process;load=(not ct); -load为计算占空比模块的门控信号end one;library ieee;-控制模块三use ieee.std_logic_1164.all;entity ctrl2 isport(fi
19、n:in std_logic;enh:buffer std_logic;clr:out std_logic);end ctrl2;architecture one of ctrl2 issignal ct: std_logic;beginprocess(fin,enh,ct)beginif finevent and fin=1 thenct=(not ct);end if;if fin=0 and ct=0 thenclr=1; -clr为记高电平模块的复位信号elseclr=0;end if;if ct=1 and fin=1 thenenh=1; -enh为记高电平模块的使能信号elsee
20、nh=0;end if;end process;end one;library ieee;-译码显示模块use ieee.std_logic_1164.all;entity disp isport(key2,clk0:in std_logic; ran:in std_logic_vector(7 downto 0);dataout:out std_logic_vector(15 downto 0);end disp;architecture one of disp isbeginprocess(key2,clk0)begin if clk0event and clk0=1 thenif(key
21、2=1) then -key2有效时,把计算的占空比dataout=ran&; -输出显示end if; end if;end process;end one; library ieee;-锁存器模块use ieee.std_logic_1164.all;entity reg16 is port(load:in std_logic; datain:in std_logic_vector(15 downto 0); dataout:out std_logic_vector(15 downto 0);end reg16;architecture one of reg16 isbegin proce
22、ss(load) begin if loadevent and load=1 then dataout=datain; -锁存要输出的信息 end if; end process; end one;library ieee;-计算占空比模块use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity slov isport(load:in std_logic;high,low:in integer range 1 to ;ran:out std_logic_vector(7 downto 0);end slov;architec
23、ture one of slov issignal a,b:integer range 0 to 9;signal ranh,ranl:std_logic_vector(3 downto 0); beginprocess(high,low)begin -计算占空比a=(high*10)/(high+low);b=(high*10) rem (high+low)*10/(high+low);end process;process(a,b)begin -把计算出来的占空比转换输出if loadevent and load=1 thenranh=conv_std_logic_vector(a,4);
24、ranl=conv_std_logic_vector(b,4);end if;ran=ranh&ranl;end process;end one;library ieee;-整形模块use ieee.std_logic_1164.all;entity zhengxing isport(clk0,a:in std_logic;q:out std_logic);end zhengxing;architecture one of zhengxing isbeginprocess(clk0)beginif clk0event and clk0=1 thenq时,输出fout为1,否则为0。 RTL V
25、iewer:(2)低电平计数模块: 仿真波形:结果分析:本模块是记在闸门打开时通过低电平的个数,clk0是试验箱自带的12MHZ的脉冲信号,enl喝clr是由经过整形的fin分频得来的,它们的电位时时相反,lout为闸门打开时记的低电平通过的个数。 RTL Vewer:(3)计算展空比模块: 仿真波形: 结果分析: 本模块实现计算占空比的功能,仿真波形中,设记得的高电平个数为5000,低电平的个数为5009,当能信号load为1时,计算占空比,并把计算的占空比转换为二进制代码。 RTL Vewer:(4)自动切换量程测频率模块:仿真波形:结果分析:本模块主要实现自动切换量程和计算频率的功能,控
26、制键key2为1时输出显示占空比,为0时显示频率,当en有效(en=1)时,在fin上升沿时开始测频率,在源代码中的信号变量c4 /=“0000”时,此时测得的值乘以10为实际频率,数码管上显示实际频率的高四位;当c4=“0000”时,测得的值即为实际频率值,数码管上显示的即为实际频率;当c4 “0001”时,超量程警报指示灯亮,本设计中使用的时D4二极管,同时数码管上显示“FFFF”。RTL Vewer:五、实验结果分析: (1)实验结果: a 实验板图: 本设计选用杭州康芯电子公司的GW48-PK2实验箱,采用模式5,如上图中左边的数码管显示为5,实验时打开主系统板上的+/-12V电源,这
27、样方可使用A/D,D/A板。当前状况为已经把电路程序下载到电路板,电路板处于复位状态(如图下中的二极管亮),A/D,D/A板上结信号发生器的3V的脉冲。 b 频率为2HZ结果: 此图显示的为测量频率为2HZ的结果,数码管的显示值即为实际测量值。 c 频率为11300HZ结果: 此图显示的测量频率为11300HZ的结果,数码管的显示值为实际测量值(11300HZ)的高四位,本设计具有自动切换量程的功能,由9999HZ到HZ时能自动切换量程。 d 超量程警报结果: 此图显示的为超量程警报,当测得的频率大于20KHZ时,实验板的指示灯D4会闪烁,同时在数码管上显示“FFFF”。 e 占空比结果: 此
28、图显示的为测得的占空比,当前测得的占空比为46%。 (2)实验分析: 在进行硬件验证的过程中,解决了占空比不能自动刷新的问题和超量程警报后不能恢复的问题,其解决方法是: a 占空比自动刷新 加入clk0时钟控制,每当clk0上升沿来临时,对输出的占空比进行刷新,其具体程序的结构体如下: architecture one of disp isbeginprocess(key2,clk0)begin if clk0event and clk0=1 then刷新占空比if(key2=1) then -key2有效时,把计算的占空比dataout=ran&; -输出显示end if; end if;end process;end one; b 超量程警报自动恢复 吃问题解决方法是在自动切换量程测频率模块中,对alm的控制加入en的限制,当en=0时,alm值重新赋予低电平而不在警报。六、参考文献:王泽保、赵博,数字电路典型实验范例剖析,人民邮电出版社,2004李国丽、朱维勇、栾铭,EDA与数字系统设计,机械工业出版社,2004何小艇,电子系统设计,浙江大学出版社,2008专心-专注-专业