资源描述
数学建模论文
-------频率计
摘要:
本次试验通过对数字频率计原理的掌握,利用已有的数字电路设计知识,配合相应的软件,如ISE软件的使用(设计输入、仿真、实现),了解可编程逻辑器件(FPGA)的一般情况,通过 VHDL语言的描述来设计满足要求的数字频率计。并根据实验结果对误差的来源进行分析和计算
数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。它不仅可以测量正弦波、方波、三角波、尖脉冲信号和其他具有周期特性的信号的频率,而且还可以测量它们的周期。经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪;可以测量电容做成数字式电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪、计价器等。因此数字频率计在测量物理量方面应用广泛。
本实验报告介绍了使用VHDL开发FPGA的一般流程和频率计的基本原理和相应的测量方案,采用了一种基于FPGA的数字频率的实现方法。该设计的频率计能准确的测量频率在1Hz到100MHz之间的信号。使用ModelSim仿真软件对VHDL程序做了仿真,并完成了综合布局布线,最终下载到芯片Spartan3A and Spartan3AN上取得良好测试效果,圆满完成实验测试。
关键字:FPGA,VHDL,ISE,ModelSim软件,频率测量,数字频率计。
提出问题:频率计是如何设计并运行的
正文:
一.利用数学公式进行误差分析
1.直接测量法误差
从公式(1-1)可知,上述测频方法的测量误差,一方面决定于闸门时间T准不准,另一方面决定于计数器计得的数准不准。根据误差合成方法,从公式(1-1)可得:
公式(4-2)中第一项是数字化仪器所特有的误差,而第二项是闸门时间的相对误差,这项误差决定于石英振荡器所提供的标准频率的准确度。现分述如下:
2. ±1误差
在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间T接近甚至等于被测信号周期Tx的整数倍N倍时,此项误差为最大,图 1-1 画出的就是这种情况。
计算公式
式中T为闸门时间,fx为被测频率。从公式(1-3)可知,不管计数值N多少,其最大误差总是±1个计数单位,故称“±1个字误差”,简称“±1误差”。而且fx一定时,增大闸门时间T,可减小±1误差对测频误差的影响。当T选定后,fx越低,则由±1误差产生的测频误差越大。
3. 误差比较
与分析电子计数器测频时的误差类似,根据误差传递公式,并结合图 1-2可得:
根据图 1-2 测周原理
所以,公式(1-5)可写成
从公式(1-6)可见,测量周期时的误差表达式与测频的表达式形式相似,很明显Tx愈大(即被测频率愈低),±1误差对测周精确度的影响就愈小。
二.设计要求
目的:本次试验通过对数字频率计原理的掌握,利用已有的数字电路设计知识,配合相应的软件,如ISE软件的使用(设计输入、仿真、实现),了解可编程逻辑器件(FPGA)的一般情况,通过vhdl语言的描述来设计满足要求的数字频率计。并根据实验结果对误差的来源进行分析和计算。以此提高自己的系统设计能力。 指标:
1.被测输入信号:方波
2.测试频率范围为:10Hz~100MHz
3.量程分为三档:
第一档:闸门时间为1S时,最大读数为999.999KHz
第二档:闸门时间为0.1S时,最大读数为9999.99KHz 第三档:闸门时间为0.01S时,最大读数为99999.9KHz。
4.显示工作方式:
a、用六位BCD七段数码管显示读数。
b、采用记忆显示方法
c、实现对高位无意义零的消隐。
1.原理图
2.单元电路设计
1.分频模块 VHDL程序:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fenpinqi is
Port ( clk : in STD_LOGIC;
clk10 : out STD_LOGIC;
clk100 : out STD_LOGIC;
clk1000 : out STD_LOGIC);
end fenpinqi;
architecture Behavioral of fenpinqi is
signal counter2:Integer range 1 to 2400000:=1;
signal counter3:Integer range 1 to 240000:=1;
signal counter4:Integer range 1 to 24000:=1;
signal clk00:Std_Logic:='0';
signal clk000:Std_Logic:='0';
signal clk0000:Std_Logic:='0';
begin
PROCESS(clk)begin
IF clk'event and clk='1' THEN
IF Counter2=2400000 then
counter2<=1;
clk00<=not clk00;
else
counter2<=counter2+1;
end if;
end if;
end process;
PROCESS(clk)begin
IF clk'event and clk='1' THEN
IF Counter3=240000 then
counter3<=1;
clk000<=not clk000;
else
counter3<=counter3+1;
end if;
end if;
end process;
PROCESS(clk)begin
IF clk'event and clk='1' THEN
IF Counter4=24000 then
counter4<=1;
clk0000<=not clk0000;
else
counter4<=counter4+1;
end if;
end if;
end process;
clk10<=clk00;
clk100<=clk000;
clk1000<=clk0000;
end Behavioral;
生成符号:
本模块采用的是元器件调用,先写好fenpinqi 模块然后在主程序中调用,把其中的变量改作2400000、240000和24000即可分成1kHZ、100HZ和10HZ等 的方波信号,其中1kHZ信号用做后面的显示电路的扫描信号,分频器模块仿真波形如下:
2.闸门选择器
生成符号:
通过拨码开关选择需要100HZ、10HZ或者1HZ 的信号来测量被测频率,当拨动开关为“011"时表示选择的是1HZ的测频信号、 “101”时输出为10HZ的测频信号、“110”时输出为100HZ的测频信号。 仿真波形如下:
3.门控电路
生成符号:
本模块的作用是产生相应的门控信号计数器使能信号gate、计数器清零信号reset和锁存器锁存信号latch以实现对后面计数器和锁存器的控制。gate信号和reset信号以及latch信号均用时序逻辑来产生。 仿真波形如下:
4.计数器
本模块产生的10进制的计数器,通过级联产生0至999999的计数器。计数器符号如下
总体符号:
这样产生的是同步计数器,使用同样地时钟、同样地清零信号。前一级的输出carry输出至下一级的使能端上。输出端的进位作为溢出信号输出,加D触发器的目的是为了使溢出信号能够保存至下一个清零信号有效。从而能有足够的时间显示溢出。 十进制计数器仿真波形:
5.锁存器
本模块是锁存器,用来存储计数器输出的数据和溢出信号,在latchin信号有效的时候开始锁存输入信号,同时前面锁存的信号也就被更新掉。以此实现所需功能。
锁存器仿真波形如下:
6.数据选择器:
生成符号:
7.六进制计数器:
生成符号:
8.小数点控制器:
小数点控制器仿真波形:
9.译码器:
生成符号:
10.反相器,使能生成符号:
显示控制电路,用1kHZ的信号产生6进制的计数器来控制小数点显示电路和数据选择器。6进制计数器送到3_8译码器输入端来控制位选,译码器用来把选择的数据译成7段码控制段选。
三、设计实现
1 顶层设计 采用符号图方法,通过线连接起来就形成了顶层图。
2管脚分配 管脚分配如下:
NET "nCS" LOC = D7; NET "DIG<0>" LOC = F8;
NET "DIG<1>" LOC = D8; NET "DIG<2>" LOC = E7;
NET "SEG<0>" LOC = A11; NET "SEG<1>" LOC = B12;
NET "SEG<2>" LOC = A12; NET "SEG<3>" LOC = C12;
NET "SEG<4>" LOC = C13; NET "SEG<5>" LOC = A13;
NET "SEG<6>" LOC = B14; NET "dp" LOC = C11;
NET "clk48MHz" LOC = T8; NET "sel1" LOC = M8;
NET "sel10" LOC = E6; NET "sel100" LOC = F7;
NET "f_x" LOC = A14; NET "overout" LOC = C10;
NET "gateout" LOC = A10;
3下载过程:
双击Generate Program File,把未用的管脚置高,准备就绪后就可以运行Configure Device,选择要下载的位文件(.bit)便可开始下载了。
五、测试结果
六.结论
本实验主要利用VHDL语言完成基于FPGA的数字频率计的设计与实现。本实验利用ISE进行综合和利用ModelSim对设计进行了仿真,分析,并最终下载到Spartan3A and Spartan3AN系列芯片中,实现了对频率的测量。
展开阅读全文