测量频率及占空比的频率计设计(共26页)_第1页
测量频率及占空比的频率计设计(共26页)_第2页
测量频率及占空比的频率计设计(共26页)_第3页
测量频率及占空比的频率计设计(共26页)_第4页
测量频率及占空比的频率计设计(共26页)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

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带宽大于260

7、MHz的高速运放组成变换电路。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针“AI

8、N”输入,J1和J2分别是模拟信号输出的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为信号发生

9、器产生的信号architecture 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;en

10、tity corna is port(clr,fin,en,key2,rst:in std_logic; ranin: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

11、 alm<='0' elsif clr='1' then c0<="0000"c1<="0000"c2<="0000"c3<="0000"c4<="0000" elsif fin'event and fin='1' then if en='1' then if c0<"1001" then c0<=c0+1; else c0<="0000&q

12、uot; if c1<"1001" then c1<=c1+1; else c1<="0000" if c2<"1001" then c2<=c2+1; else c2<="0000"if c3<"1001" then c3<=c3+1;else c3<="0000" if c4<"0001" then c4<=c4+1; else c4<="1111" c3<

13、;="1111" c2<="1111" c1<="1111" -超过量程2KHZ时会报警,并alm<='1' -且数码管显示为”FFFF” end if;end if; end if; end if ; end if; elsec4<="0000"c3<="0000"c2<="0000"c1<="0000"c0<="0000"alm<='0' end

14、if;end if;end process p1;p2:process(key2,ranin,c4) begin if key2='1' then dis_out<=ranin; -若key2有效,则输出为占空比,否 elsif c4/="0000"then -则为显示频率 dis_out<=c4&c3&c2&c1; -c4不为“0000”时,量程最低位为 else -10HZ,记频率范围为0-2KHZ,c4为 dis_out<=c3&c2&c1&c0; -“0000”时,量程最低位为1HZ,

15、记 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(enl,clr,clk0)beginif clr='1'

16、 thenloout<=1;elsif (clk0'event 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_log

17、ic;hiout:buffer integer range 1 to );end count2;architecture one of count2 isbeginprocess(enh,clr,clk0)beginif clr='1' then -clk0为实验板自带的12MHZhiout<=1; -信号elsif (clk0'event and clk0='1') thenif enh='1' then -当输入信号有效时,在clk0hiout<=hiout+1;-上升沿时记下高电平的个end if; -数end if;e

18、nd process;end one;library ieee;-控制模块一use ieee.std_logic_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 clk2'event and clk2='1' then en<=not en; -以clk2二分

19、频产生相反的en,rst end if; -信号,用来作为自动切换量程模块 if clk2='0' and en='0' then rst<='1' -的使能信号和复位信号 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;en

20、l:buffer std_logic;clr,load:out std_logic);end ctrl1;architecture one of ctrl1 issignal ct:std_logic;beginprocess(fin,enl,ct)beginif fin'event and fin='1' thenct<=(not ct);end if;if fin='1' and ct='0' thenclr<='1' -clr为记低电平模块的复位信号elseclr<='0'end i

21、f;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(fin:in std_logic;enh:buffer std_logic;clr:out std_logic);end ctrl2

22、;architecture one of ctrl2 issignal ct: std_logic;beginprocess(fin,enh,ct)beginif fin'event 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<

23、='1' -enh为记高电平模块的使能信号elseenh<='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(key

24、2,clk0)begin if clk0'event and clk0='1' thenif(key2='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);

25、dataout:out std_logic_vector(15 downto 0);end reg16;architecture one of reg16 isbegin process(load) begin if load'event 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 i

26、sport(load:in std_logic;high,low:in integer range 1 to ;ran:out std_logic_vector(7 downto 0);end slov;architecture 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)*

27、10/(high+low);end process;process(a,b)begin -把计算出来的占空比转换输出if load'event and load='1' thenranh<=conv_std_logic_vector(a,4);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:i

28、n std_logic;q:out std_logic);end zhengxing;architecture one of zhengxing isbeginprocess(clk0)beginif clk0'event and clk0='1' thenq<=a; -对输入信号进行整形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

29、 div is port(clk0,clk2,key2,rst:in std_logic; signl:in std_logic_vector(7 downto 0); alm:out std_logic; data:out std_logic_vector(15 downto 0);end div;-各个模块的元件例化声明architecture one of div iscomponent comp isport(signl:in std_logic_vector(7 downto 0);fout:out std_logic);end component;component zhengxi

30、ng isport(clk0,a:in std_logic;q:out std_logic);end component;component ctrl is port(clk2:in std_logic; rst,load:out std_logic; en:buffer std_logic);end component ctrl;component reg16 is port(load:in std_logic; datain:in std_logic_vector(15 downto 0); dataout:out std_logic_vector(15 downto 0);end com

31、ponent;component ctrl1 isport(fin:in std_logic;enl:buffer std_logic;clr,load:out std_logic);end component;component ctrl2 isport(fin:in std_logic;enh:buffer std_logic;clr:out std_logic);end component;component count1 isport(enl,clr,clk0:in std_logic;loout:out integer range 1 to );end component;compo

32、nent count2 isport(enh,clr,clk0:in std_logic;hiout:out integer range 1 to );end component;component slov isport(load:in std_logic;high,low:in integer range 1 to ;ran:out std_logic_vector(7 downto 0);end component;component disp isport(key2,clk0:in std_logic;ran:in std_logic_vector(7 downto 0);dataou

33、t:out std_logic_vector(15 downto 0);end component;component corna is port(clr,fin,en,key2,rst:in std_logic; ranin:in std_logic_vector(15 downto 0); alm:out std_logic; dis_out:buffer std_logic_vector(15 downto 0);end component corna;signal countclr,regload,counten,count1en,count2en,count1clr,count2cl

34、r,slovload,finf,finedf:std_logic;signal datall,fran:std_logic_vector(15 downto 0);signal hinum,lownum:integer range 1 to ;signal hpl:std_logic_vector(7 downto 0);-电路的具体连接beginu0:zhengxing port map(clk0,finf,finedf);u1:ctrl port map(clk2,countclr,regload,counten);u2:corna port map(countclr,finedf,cou

35、nten,key2,rst,fran,alm,datall);u3:reg16 port map(regload,datall,data);u4:ctrl1 port map(finedf,count1en,count1clr,slovload);u5:ctrl2 port map(finedf,count2en,count2clr);u6:count1 port map(count1en,count1clr,clk0,lownum);u7:count2 port map(count2en,count2clr,clk0,hinum);u8:slov port map(slovload,hinu

36、m,lownum,hpl);u9:disp port map(key2,clk0,hpl,fran);ul0:comp port map(signl,finf);end one;四、FPGA时序仿真结果: (1)输入信号模块 仿真波形: 结果分析: 输入信号signl为高频脉冲,当signl>""时,输出fout为1,否则为0。 RTL Viewer:(2)低电平计数模块: 仿真波形:结果分析:本模块是记在闸门打开时通过低电平的个数,clk0是试验箱自带的12MHZ的脉冲信号,enl喝clr是由经过整形的fin分频得来的,它们的电位时时相反,lout为闸门打开时记的低电平通过的个数。 RTL Vewer:(3)计算展空比模块: 仿真波形: 结果分析: 本模块实现计算占空比的功能,仿真波形中,设记得的高电平个数为5000,低电平的个数为5009,当能信号load为1时,计算占空比,并把计算的占空比转

温馨提示

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

评论

0/150

提交评论