基于FPGA的数字频率计实验报告(能测占空比)
基于FPGA数字频率计 (可测占空比)
VHDL 课程设计报告——基于FPGA的数字频率计姓名:学号:班级:目录1 设计原理 (1)2功能设计 (1)3系统总体框图 (1)4各功能块设计说明 (2)5实验结果 (14)6结论分析 (15)一、设计原理频计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。
闸门时间可以根据需要取值,大于或小于1 s都可以。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1 s作为闸门时间,此测量方法称为直接测频法。
由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。
进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。
由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。
二、功能设计1、测量范围:1HZ--------99MHZ,测量精度±1HZ。
2、测量结果高4位与低4位进行分页显示。
当超过9999HZ时,系统亮灯提示超出低4位显示范围,可通过按键进行高低4位结果的显示切换。
高4位显示时,伴有小数点位的点亮,提示已成功切换到高4位。
3、测量所测信号的占空比。
能够快速测出输入待测信号的占空比,并且通过按键,切换到占空比显示状态。
4、内置自测信号由内部时钟产生三个特定时钟,以供自身测试功能是否正常。
三、系统总体框图系统总框图四、各功能块设计说明1、时钟发生器通过对50MHZ的晶振时钟进行50M的分频,等到一个1HZ信号。
再通过此信号,通过2分频,得到一个0.5HZ的信号,从而得到高电平为1秒的闸门控制信号en来控制计数器的计数时间.再通过对en求反,等到锁存信号load.而清零信号clr则通过en与1HZ信号共同产生.同时对50MHZ信号进行500分频,一个两位的std_logic_vector(1 downto 0)信号在分频信号的驱动下不断加‘1’,等到“00”、“01”、“10”、“11”四种片选信号,对应4个数码管,从而驱动数码管的动态扫描显示。
基于FPGA的数字频率计实验报告(能测占空比)
基于FPGA的数字频率计设计学院:专业:班级:姓名:学号:审阅老师:评分:目录一、课程设计目的 (3)二、设计任务 (3)三、功能要求与技术指标 (3)四、数字频率计工作原理概述 (3)五.数字频率计实现方法 (4)六.结论与误差分析 (11)七.VHDL程序: (12)一、课程设计目的熟悉EDA工具,掌握用VHDL语言进行数字系统设计的基本方法和流程,提高工程实践能力。
二、设计任务设计一数字频率计,用VHDL语言描述,用QuartusII工具编译和综合,并在实验板上实现。
三、功能要求与技术指标1.基本功能要求(1)能够测量出方波的频率,其范围50Hz~50KHz。
(2)要求测量的频率绝对误差±5Hz。
(3)将测量出的频率以十进制格式在实验板上的4个数码管上显示。
(4)测量响应时间小于等于10秒。
以上(1)~(4)基本功能要求均需实现。
2.发挥部分(1)提高测量频率范围,如10Hz~100KHz或更高、更低频率,提高频率的测量绝对值误差,如达到±1Hz。
(2)可以设置量程分档显示,如X1档(显示范围1Hz~9999Hz),X10档(显示范围0.001KHz~9.999KHz),X100档(显示范围0.100KHz~999.9KHz)...可以自定义各档位的范围。
量程选择可以通过按键选择,也可以通过程序自动选择量程。
(3)若是方波能够测量方波的占空比,并通过数码管显示。
以上(1)~(3)发挥功能可选择实现其中的若干项。
四、数字频率计工作原理概述1.数字频率计简介在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
而数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。
2.常用频率测量方法:方案一采用周期法。
通过测量待测信号的周期并求其倒数,需要有标准倍的频率,在待测信号的一个周期内,记录标准频率的周期数,这种方法的计数值会产生最大为±1个脉冲误差,并且测试精度与计数器中记录的数值有关,为了保证测试精度,测周期法仅适用于低频信号的测量。
电子科技大学 电子技术实验 FPGA 频率计 实验报告
《现代电子技术综合实验》论文报告29013050XX XXX中文摘要摘要:随着电子信息产业的不断发展,信号频率的测量在科技研究和实际应用中的作用日益重要。
传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行缓慢,而且测量频率的范围比较小。
考虑到上述问题,本文设计一个基于FPGA技术的数字频率计。
首先,我们把方波信号送入计数器里进行计数,获得频率值;最后把测得的频率数值送入显示电路里进行显示。
本文从频率计的具体设计触发,详细阐述了基于FPGA的数字频率计的设计方案,设计了各模块的代码,并对硬件电路进行了仿真。
关键词:FPGA,VHDL,频率计,测量一、引言随着电子信息产业的发展,信号作为其最基础的元素,其频率的测量在科技研究和实际应用中的作用日益重要,而且需要测频的范围也越来越宽。
传统的频率计通常采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量范围低,精度低。
因此,随着对频率测量的要求的提高,传统的测频的方法在实际应用中已不能满足要求。
因此我们需要寻找一种新的测频的方法。
随着FPGA技术的发展和成熟,用FPGA来做为一个电路系统的控制电路逐渐显示出其无与伦比的优越性。
因此本采用FPGA来做为电路的控制系统,设计一个能测量10Hz 到100MHz的数字频率计。
用FPGA来做控制电路的数字频率计测量频率精度高,测量频率的范围得到很大的提高。
二、项目任务与设计思路1、实验项目数字频率计的设计2、实验指标被测输入信号:方波测试频率范围为:10Hz~100MHz量程分为三档:第一档:闸门时间为1S时,最大读数为999.999KHz第二档:闸门时间为0.1S时,最大读数为9999.99KHz第三档:闸门时间为0.01S时,最大读数为99999.9KHz显示工作方式:a、用六位BCD七段数码管显示读数。
b、采用记忆显示方法c、实现对高位无意义零的消隐。
3、实验思路根据实验指标,将电路设计分成6个模块:分频器,闸门选择,门控电路,计数器,锁存器,显示控制。
基于FPGA的等精度数字频率计总结
作品总结智冰冰前几天做了数字频率计,虽然做的不是太好吧,但是还算是做出来了,我在这里就对大家分享一下我的制作过程,希望想做频率计的朋友能够少走一些弯路,如果有不好的地方请大家提出来,如果有更好的方法也可以和我交流交流。
拿到这个题目我首先看到题目要求频率计要能测频率、测周期、测占空比,所以我们要准备的东西就要有FPGA板,51开发板(主要利用数码管模块)、直流稳压电源、数字信号发生器。
准备好这些东西之后就要考虑作品方案问题了。
确立作品方案是整个作品中比较重要的一部分,如果作品方案不合理,就不会做出来比较好的作品。
在确立数字频率计设计方案的时候,首先就要确定用什么方法实现测频率、测周期、测占空比,查找了一些资料,大概知道了一下三种方法:(1)测频率法:测频率法是用脉冲信号产生一个固定的闸门时间t,在固定的闸门时间t内对被测信号进行计数,然后运算求出被测信号频率、周期,但是在闸门时间t内不能保证被测信号计数为整数个,这就会让被测信号产生±1的误差,所以当被测信号频率高时测量比较准确,但是测低频时误差就比较大了。
(2)测周期法:测频率法是用被测信号作为门控信号,在闸门时间t内对脉冲信号进行计数,然后运算求出被测信号频率、周期,但是同样的在闸门时间t内不能保证脉冲信号计数为整数个,这就会让脉冲信号产生±1的误差,所以当被测信号频率低时,相对来说比较准确,但对于高频来说误差就大了。
(3)等精度法:等精度测量是用脉冲信号产生一个预置闸门,然后在预置闸门时间内通过被测信号上升沿产生一个实际闸门,这样实际闸门刚好是被测信号的整数倍。
在计数允许时间内,同时对脉冲信号和被测信号进行计数,再通过数学公式推导得到被测信号的频率。
由于门控信号是被测信号的整数倍,就消除了对被测信号产生的±l周期误差,但是会产生对脉冲信号±1周期的误差。
但是相对测频率法来说误差相对较小。
确立好自己的设计方案后,就要设计自己的程序了。
FPGA频率计实验报告
数字频率计实验报告数字频率计用VHDL语言设计实现基于FPGA的数字频率计学校:学院:姓名:学号:实验室:实验日期:摘要本文介绍了一种基于FPGA的数字频率的实现方法。
该设计采用硬件描述语言VHDL,在软件开发平台ISE上完成。
该设计的频率计有三种闸门选择,分别是1s、0.1s、0.01s,能较准确的测量频率在10Hz到10MHz之间的信号。
使用ModelSim仿真软件对各个模块的VHDL程序做了仿真,对各个模块的功能进行了测试,并完成了综合布局布线,最终下载到芯片上取得了良好测试效果。
关键词:VHDL、频率计、 FPGA、测量目录第一章引言 ..................................... 错误!未定义书签。
第二章基于FPGA的VHDL设计流程 . (3)2.1概述 (3)2.2VHDL语言和V ERILOG HDL介绍 (3)2.2.1 VHDL的特点 (4)2.3FPGA介绍 (5)第三章数字频率计的软件开发环境 ................. 错误!未定义书签。
3.1开发环境 (6)3.2M ODEL S IM介绍 (6)3.3ISE介绍 (5)第四章数字频率计的设计与实现 (7)4.1任务要求 (7)4.2测量原理................................... 错误!未定义书签。
4.3设计方案与系统需求 (7)4.4各模块的功能及实现 (9)4.4.1 分频器 (9)4.4.2 闸门选择器 (10)4.4.3 测频控制器............................. 错误!未定义书签。
4.4.4 计数器................................. 错误!未定义书签。
4.4.5 锁存器................................. 错误!未定义书签。
4.4.6 显示控制系统........................... 错误!未定义书签。
数字频率计实验报告
考虑到测量方便,将数字频率计划分为四档:10~99Hz 、100~999Hz 、1000~9999Hz 、10000~99999Hz 。
这样可以保证每一档三位有效数字,而且第三位有效数字误差在±2以内时即可达到精度要求。
三个输入信号:待测信号、标准时钟脉冲信号和复位脉冲信号。
设计细化要求:频率计能根据数字频率计设计计双0102 雷昊 2001011830786一、课程设计内容及要求本次课程设计要求设计并用FPGA 实现一个数字频率计,具体设计要求如下:测量频率范围: 10Hz ~100KHz 精度: ΔF / F ≤ ±2 %系统外部时钟: 1024Hz 测量波形: 方波 Vp-p = 3~5 V 硬件设备:Altera Flex10K10 五位数码管 LED 发光二极管编程语言:Verilog HDL / VHDL二、系统总体设计输入待测信号频率自动选择量程,并在超过最大量程时显示过量程,当复位脉冲到来时,系统复位,重新开始计数显示频率。
基于上述要求,可以将系统基本划分为四个模块,分别为分频、计数、锁存和控制,并可以确定基本的连接和反馈,如上图所示。
三、系统及模块设计与说明如左图所示为数字频率计测量频率的原理图。
已知给定标准时钟脉冲高电平时间,将此0T 高电平信号作为计数器闸门电平,通过计数器得到时间内待测脉冲的个数N ,则有。
由图示可以看出,一个闸门电平时间内0T 0T Nf计数的最大误差为N ±1,为保证误差要求取N ≥100。
经计算,四档的闸门电平时间分0T 别为10s 、1s 、0.1s 和0.01s 。
仅对计数器计数值N 进行简单的移位即可得到结果。
产生闸门电平的工作由分频器完成。
分频器采用计数分频的方法,产生计数闸门电平和一系列控制脉冲,并接受计数器和控制器的反馈。
控制器主要用来判断计数器计数是否有效,从而控制档位转换,锁存器打开、关闭和设定值。
计数器在分频器和控制器的作用下对输入待测信号计数,并把计数值输出,在计数溢出时向控制器和分频器发送溢出脉冲。
数字频率计实验报告
的工作由分频器完成。
分频器采用计数分频的方法,产生计数闸门电平和一系列控制脉冲,并接受计数器和控制器的反馈。
控制器主要用来判断计数器计数是否有效,从而控制档位转换,锁存器打开、关闭和设定值。
计数器在分频器和控制器的作用下对输入待测信号计数,并把计数值输出,在计数溢出时向控制器和分频器发送溢出脉冲。
锁存器用来储存有效计数值,以稳定输出。
四、系统及模块具体实现与说明系统总体结构图见附图1,下面对每一个模块的具体功能、引脚分配和Verilog HDL语言编程实现进行详细说明。
在分模块介绍之前先说明两个重要的寄存器状态STAT[1..0]和LATCH_STAT[1..0]。
STAT[1..0]用来保存当前档位信息,STA T[1..0]等于0则为第一档,等于1则为第二档,依此类推,共可标记四档,它位于控制模块中,也是输出,这样其他模块可以通过访问它得到当前档位信息,而控制模块可以修改它从而调整档位(注:在系统总图中由于所有与STAT[1..0]相连的线路均为对应顺序连接,故没有才用MAX+plus II中默认的总线连接,而是采用单根线)。
LATCH_STAT[1..0]用来保存锁存器状态信息,LATCH_STA T[1..0]=0时,锁存器在CLK作用下打开关闭。
LATCH_STAT[1..0]=1时,锁存器强制置零,CLK无效。
LATCH_STA T[1..0]=2时,锁存器强制置1FFFF,CLK无效。
它也在控制器中,这样可以通过对其改变数值达到控制锁存器锁存、复位和显示过量程的功能。
计数器COUNTER计数器设计图见附图1右上部分,由四个十进制计数器级联。
四个输入端口:时钟脉冲CLK、使能端EN、清零端CLRN、档位状态端STAT[1..0]。
五个输出端口:四个四位十进制BCD码输出OUT1[3..0]~OUT4[3..0]、过量程溢出OF。
功能表见下:表格1十进制计数器功能表进制计数器用V erilogHDL语言编程实现。
基于FPGA的数字频率计的课程成论文
South China Normal University 课程设计实验报告课程名称: EDA技术指导老师:专业班级: 2014级电路与系统姓名:学号:基于FPGA的谐波合成设计摘要:本文介绍了EP2C5T144C8N微处理器实现多次谐波产生和合成周期性方波的设计,产生的基波频率、各次谐波幅度、相位均可单独数字设置并控制,并最终通过PWM和LPF得到失真较小的谐波合成信号。
本文最后对设计进行了测试与运行,从而验证该设计方案的可行性。
关键词:谐波;基波;PWMAbstract:EP2C5T144C8N microprocessor implementation are introduced in this design and synthesis of cyclic square wave, multiple harmonics produced by fundamental wave frequency, every harmonic amplitude and phase separately digital set and control, and finally obtained by PWM and LPF harmonic synthesis of less distortion of the signal. Finally, the paper has carried on the test to design and operation, to verify the feasibility of the design.Key words:Harmonic; Fundamental wave; PWM目录1 引言 (4)1.1 FPGA简介 (4)1.2 QuartusⅡ简介 (5)1.3谐波合成原理 (5)2 系统总体分析 (7)2.1 系统总体分析 (7)2.2系统软件组成 (8)2.3系统硬件组成 (9)2.4系统运行环境 (9)2.5 系统总体框架 (9)3软件模块设计 (11)3.1 CPU模块设计 (11)3.2 Quartus 模块设计 (14)3.3 Nios II 模块设计 (15)3.3.1 谐波合成 (16)3.3.2 按键中断 (17)3.3.4 PWM输出 (20)4 系统测试及分析 (21)4.1 n次谐波测试 (21)4. 2 按键测试 (22)4.3幅度按键测试 (22)4.4 相位按键测试 (23)4.5 频率按键测试 (23)5 总结 (24)参考文献 (25)1 引言1.1 FPGA简介FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
FPGA_verilog_频率计实验报告
目录一,实验原理...(测频方法) (2)二,任务要求 (3)三,各模块功能及介绍1,分频器 (3)2,闸门选择器 (4)3,频率计数器 (6)4,锁存器 (7)5,锁存—译码器 (8)四,顶层电路及总体仿真1顶层电路 (11)2总体仿真结果 (14)五,测试结果记录 (15)一,测量原理与方法所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。
若在一定的时间间隔T 内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f=N/T所以测量频率就要分别知道N和T的值,由此,测量频率的方法一般有三种:测频方法、测周方法和等精度测量。
测频方法这种方法即已知时基信号(频率或周期确定)做门控信号,T为已知量,然后在门控信号有效的时间段内进行输入脉冲的计数,原理图如下图所示:首先,被测信号①(以正弦波为例)经过放大整形后转变成方波脉冲②,其重复频率等于被测信号频率。
把方波脉冲②加到闸门的输入端。
由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间T是非常准确的(由石英振荡器决定)。
门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。
闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。
比如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间——“闸门时间”为1S。
在这一段时间内,若计数器计得N=100000个数,根据公式f=N/T,那么被测频率就是100000Hz。
如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。
不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。
FPGA频率计
最近自己拿FPGA弄了一个简易频率计(verilog):精度1HZ,可以测试占空比,但是精度只有10%。
下面讲解一下,希望对想弄这个的人有一点帮助:我的硬件说明:EP1C3T144C8N核心板、8位数码管、按键、8位LED、20M晶振首先说一下测量方波信号频率的原理:首先一个几位(比如4位)的计数器在方波信号的跳变沿(比如下降沿激励)激励下,来一个激励脉冲(比如下降沿)计数器将加一,但是问题出现了,这个计数器一直加的话不是溢出了?你怎么样通过这个加的数值来确定你的方波频率?先卖个关子,先来说说这个计数器!计数器肯定是一直在加的(前提是只要你的IO口有跳变沿),那么你的计数的最高数值就是由你的计数器的位数决定的,比如这里是2的4次方,又回到原来的问题,你的计数器不是有跳变沿就加一吗?那岂不是不同的方波信号频率都是加到了最大值?但是你想到没有,不同的方波信号频率输入的话,你的计数器加到最大值的时间是不同的,这里才是设计理解的关键!那么我们就是通过这个不同的时间来判断的。
下面讲解原理:我们让这个计数器在规定的时间内加,然后设定的时间一到我们把这个加的数值存起来,同时将这个计数器清零(很多人这里或许还是不理解为什么要这样,继续往下看)。
那么我们先假设这个待测输入的方波信号的频率是固定不变的,也就是说在这个设定的时间内,计数器加的数值,也就是检测到的跳变沿的个数,具体假设是下降沿,在理论上是一个固定的值!(这里可以仔细想一下),因为每次时间一到这个计数器将被清零了。
我们为了后面计算的方便,假设我们设定的时间是1秒钟,也就是1HZ,在这个1HZ时钟的控制下面,每秒钟将会把这个计数器清零,那么很显然,这个计数器在这个时间1秒钟内加的数值N就是你测的的方波的频率值!这个就是一个很简单的数学的问题,在相同的1秒钟时间内,clk信号相当于加了一次,signal信号加了N次,那么你的signal信号的频率肯定是这个clk频率的N 倍,你的测量的精度显然就是你的设定比较的时钟1HZ咯。
基于FPGA的高精度频率计设计实验报告.doc
基于FPGA的高精度频率计设计实验一.实验目的1.熟悉数字存储示波器基本工作原理。
2.掌握硬件测频和测周的基本原理。
3.掌握在现有综合实践平台上开发DSO硬件频率U•模块的方案及流程。
二.实验内容1.结合数据采集、存储和触发模块的FPGA代码,理解DSO的基本工作原理。
2.编写FPGA代码完善DSO的频率计模块,实现高精度测频和测周功能。
三.预备知识1.了解综合实践平台硬件结构。
2.熟悉Xilinx ISE Design Suite 13.2开发环境使用方法。
3.熟悉Verilog HDL硬件描述语言的语法及运用。
四.实验设备与工具硬件:测试技术与嵌入式系统综合实践平台,PC机Pentium 100以上,XILINX USB调试下载器。
软件:PC机Win XP操作系统,Xilinx ISE Design Suite 13.2 开发环境五.实验步骤1.打开工程文件SYPT_FPGA.xise2.打开freq_measure.v和period_measure.v文件,先根据定义好的模块端口输入输山信号,结合测频和测周的原理,在提示添加代码处补充代码:a.测频模块(freq_measure.v)测频模块的基本功能是测量闸门吋间内被测信号的脉冲个数。
实现过程如下:(1)由标准时钟计数产生一个预设闸门信号,然后用被测信号同步预设闸门信号产生实际闸门信号;要求:预设闸门时间可根据用户选择信号(select_parameter)在50ms、100ms、Is、10s屮切换。
具体代码如下阁//select gate value: CNT_GATA_VALUEalways @(posedge clkin)begincase (select_parauceter [1:0])2*b00: CNT_GATA_VALUE = 500000; //gate 50ms2*b01: CNT:GATA:VALUE = 1000000; //gate 100ms2*bl0: CNT:GATA:VALUE = 10000000; //gate Is2^11: CNT:GATA:VALUE = 100000000; //gate 10sendcaseend(2)标准时钟和被测信号在实际闸门内计数。
在FPGA上用VHDL实现数字频率计 实验报告
数字系统设计实验报告一、设计要求:1、(1)频率测量范围10Hz~1MHz(2)量程自动转换,量程分为10KHz (1s) 、100KHz (0.1s) 、1MHz (10ms)三档。
转换规则如下:当读数大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大一档;当读数小于0999时,频率计处于欠量程状态,下一次测量时,量程自动减小一档(3)数据采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示计数结果,并将此显示结果保持到下一次计数结束。
(4)用发光二极管显示量程二、方案选则1测量原理:当预置门控信号为高电平时,启动计数器,被测信号(频率为fx) 计数当预置门控信号为低电平时,关闭计数器设在一次预置门控时间Tg内对被测信号计数值为Nx,则fx= Nx / Tg2具体方案:本设计中将2MHz的时钟分三次频,分别作为防抖电路的周期信号、显示模块片选信号、计数及锁存模块闸门信号。
防抖电路滤去窄波,显示模块用模4计数器来分别输出四位测量结果。
计数器通过在0.1s内对输入信号的高电平(发生期)进行计数来得出结果,并且为了达到换挡目的,测量时计六位数,通过结果选择档位进行输出。
二、原理图三、总体电路图四、流程图五、设计清单1、防抖电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY debounce ISPORT(key,cp: IN STD_LOGIC; --复位键imp:OUT STD_LOGIC); --去掉窄波后输出END debounce;ARCHITECTURE base OF debounce ISSIGNAL ql,q2:STD_LOGIC;BEGINPROCESS(cp)BEGINIF cp'event AND cp='1'THENq2<=ql; ql<=key;END IF;END PROCESS;imp<=ql AND NOT q2;END base;时序仿真波形:2、分频电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY dividefre4 ISPORT(cp_2m:IN STD_LOGIC; --2MHzcpl:OUT STD_LOGIC; --200Hzcp2:OUT STD_LOGIC; --25Hzcp3:OUT STD_LOGIC); --5HzEND dividefre4;ARCHITECTURE behavior OF dividefre4 IS SIGNAL tout:INTEGER RANGE 0 TO 4999; --5000分频SIGNAL toutl:INTEGER RANGE 0 TO 7; --8分频SIGNAL tout2:INTEGER RANGE 0 TO 39; --40分频SIGNAL cp_1:STD_LOGIC;SIGNAL cp_2:STD_LOGIC;SIGNAL cp_3:STD_LOGIC;SIGNAL cp:STD_LOGIC;BEGINPROCESS(cp_2m) –分出400Hz时钟BEGINIF(cp_2m'event AND cp_2m='1')THENIF tout=4999 THENtout<=0;ELSE tout<=tout+1;END IF;IF tout=2499 THENcp<='0';ELSE cp<='1';END IF;END IF;END PROCESS;PROCESS(cp) --200Hz时钟BEGINIF(cp'event AND cp='1')THENcp_1<=NOT cp_1;END IF;END PROCESS;PROCESS(cp_1) --25Hz时钟和5HzBEGINIF(cp_1'event AND cp_1='1')THENIF toutl=7 THEN toutl<=0;ELSE toutl<=toutl+1;END IF;IF toutl=3 THENcp_2<='1';ELSIF toutl=7 THEN cp_2<='0'; --8分频得25Hz END IF;IF tout2=39 THEN tout2<=0; --40分频得5HzELSE tout2<=tout2+1;END IF;IF tout2=39 THENcp_3<='1';ELSIF tout2=19 THEN cp_3<='0';END IF;END IF;END PROCESS;cpl<=cp_1;cp2<=cp_2;cp3<=cp_3;END behavior;仿真波形:(因原程序所分频倍数太大,所以这里将5000倍分频降至50倍)3、计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY fretest ISPORT(enable:IN STD_LOGIC; --使能cp3:IN STD_LOGIC; --闸门INput:IN STD_LOGIC; --被测信号reset:IN STD_LOGIC; --复位信号overflow:OUT STD_LOGIC; --大于1000kHzPlay0,playl,play2,play3:OUT INTEGER RANGE 0 TO 9;decimal:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点,即档位END fretest;ARCHITECTURE behavior OF fretest ISSIGNAL r0_1,r1_1,r2_1,r3_1,r4_1,r5_1:INTEGER RANGE 0 TO 9;BEGINPROCESS(INput,enable,reset,cp3)BEGINIF enable='0'THEN NULL; --不测量ELSIF(input'event AND input='1')THEN --检测被测信号IF reset='1'THEN --同步复位,高电平有效overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSIF cp3='0'THEN --闸门为0时清零Overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSE --闸门为高电平计数r0_1<=r0_1+1;IF r0_1=9 THEN r1_1<=r1_1+1;r0_1<=0;IF(r1_1=9)THEN r2_1<=r2_1+1;r1_1<=0;IF(r2_1=9)THEN r3_1<=r3_1+1;r2_1<=0;IF(r3_1=9)THEN r4_1<=r4_1+1;r3_1<=0;IF(r4_1=9)THEN r5_1<=r5_1+1;r4_1<=0;IF(r5_1=9)THEN r5_1<=0;overflow<='1'; --大于1000kHz END IF;END IF;END IF;END IF;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(r5_1,r4_1)BEGINIF r5_1=0 AND r4_1=0 THEN --为小于9999Hz时play0<=r0_1;playl<=r1_1;play2<=r2_1;play3<=r3_1;decimal<="100";ELSIF r5_1=0 THEN --为几十kHz时play0<=r1_1;playl<=r2_1;play2<=r3_1;play3<=r4_1;decimal<="010";ELSE --为几百kHz时play0<=r2_1;playl<=r3_1;play2<=r4_1;play3<=r5_1;decimal<="001";END IF;END PROCESS;END behavior;仿真波形4、锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY frelatch ISPORT(reset:IN STD_LOGIC; --复位cp3:IN STD_LOGIC; --时钟Overflow: IN STD_LOGIC; --大于1000kHz表示play0,playl,play2,play3:IN INTEGER RANGE 0 TO 9;decimal:IN STD_LOGIC_VECTOR(2 DOWNTO 0);--小数点overlatch:OUT STD_LOGIC; --大于1000kHzp0latch,pllatch,p21atch,p31atch:OUT INTEGER RANGE 0 TO 9; delatch:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点END frelatch;ARCHITECTURE behavior OF frelatch ISBEGINPROCESS(cp3,reset)BEGINIF reset='1'THENoverlatch<='0';p0latch<=0;pllatch<=0;p21atch<=0;p31atch<=0;delatch<=decimal;ELSIF cp3'event AND cp3='0'THENoverlatch<=overflow;p0latch<=play0;pllatch<=playl;p21atch<=play2;p31atch<=play3;delatch<=decimal;END IF;END PROCESS;END behavior;仿真波形5、显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY display ISPORT( cpl:IN STD_LOGIC; --时钟overflow:IN STD_LOGIC; --高于1000kHz标志p0,p1,p2,p3:IN INTEGER RANGE 0 TO 9;--BCD码输入 show:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7段码输出 sel:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--位扫描码END dISplay;ARCHITECTURE behavior OF display ISSIGNAL count: INTEGER RANGE 0 TO 3;SIGNAL sel_1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(cpl)BEGINIF(cpl'event AND cpl='1') THENIF count=3 THEN count<=0;ELSEcount<=count+1;END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN 0=>sel_1<="1110"; --第0位WHEN 1=>sel_1<="1101"; --第1位WHEN 2=>sel_1<="1011"; --第2位WHEN 3=>sel_1<="0111"; --第3位END CASE;END PROCESS;PROCESS(overflow,sel_1)BEGINIF(overflow='1')THENshow<="0110111"; --高于1000kHz,显示HELSIF(sel_1(0)='0')THEN --第0位数码管译码CASE p0 ISWHEN 0=>show<="1111110";--显示0,a-gWHEN 1=>show<="0110000";--1WHEN 2=>show<="1101101";--2WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(1)='0')THEN --第1位译码 CASE p1 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111"; WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(2)= '0')THEN --第2位译码 CASE p2 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(3)='0')THEN --第3位译码 CASE p3 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;END IF;END PROCESS; sel<=sel_1; END behavior; 仿真波形。
基于fpga的数字频率计的设计
基于fpga的数字频率计的设计下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!基于FPGA的数字频率计的设计摘要本文介绍了一种基于FPGA的数字频率计的设计方法。
EDA实训:基于FPGA的数字频率计课程报告
EDA课程设计报告题目:基于FPGA的数字频率计专业班级:姓名:乱弹的枇杷时间:2014.11.05~2014.12.24 指导教师:廖老师完成日期:2014年12月26日基于FPGA数字频率计的设计任务书1.设计任务与要求设计一个基于FPGA数字频率计,要认真并准确地理解有关要求,完成系统设计。
设计要求:(1)频率测量:频率10Hz~9999Hz方波信号;(2)周期测量:频率10Hz~9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率1KHz的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;2.设计内容(1)设计VHDL代码源文件;(2)编译综合;(3)下载程序,片上测试;3.编写设计报告写出设计的全过程,附上有关资料和程序,有心得体会。
题目:基于FPGA的数字频率计一、设计目的在生产实践和科学实验中,经常需要测量信号的频率和周期。
数字频率计图1 数字频率计系统总体设计框图系统功能描述:本次设计基于FPGA开发板Storm_I_1C3_V1.0使用Altera 公司的器件Cyclone系列1P1C3T144C8,晶振频率50MHz来设计一个数字频率计,能测量并用四位数码管显示频率为10Hz~9999Hz方波信号的频率和周期且对两种不同LED灯指示,还能自身产生1KHz方波信号并进行频率自校。
因为时间和个人能力的限制,我们组没能完成周期测量部分。
我们所完成的数字频率计具有4位显示,能自动根据7位十进制计数的结果自动选择有效数据的高4位进行动态显示的功能,其中小数点表示单位为KHz。
由于目前频率测量的方法很多,但在设计中考虑各种因素,我们采用数字电路中最广泛使用的直接测频法,即在确定的闸门信号内记录被测信号的脉冲个数。
包括分频模块、计数模块、数据处理模块、数码管译码显示模块等模块。
2. 分频模块设计在设计时我们可利用FPGA开发板上固定时钟信号50MHz分频产生我们所需要的脉冲信号,若所需脉冲信号频率为f,则需对其进行N分频,其中50=。
基于FPGA占空比检测系统
北华大学电子系统工程实习报告——基于FPGA的脉冲占空比测量系统设计学院:电气信息工程学院专业:电子信息工程班级:姓名:学号:指导教师:实习日期: 2015。
9.07—2015。
9目录1实习题目 (1)2实习目的与要求 (1)3实习内容 (1)4实习原理 (2)4。
1Multisim 软件 (2)4。
2Quartus II 软件 (2)4.3ModeSim软件 (3)4.4UA741CN芯片 (3)5 系统硬件电路设计与程序流程设计 (3)5。
1系统电压放大硬件电路设计 (3)5。
2系统软件程序流程设计 (3)6 系统调试与仿真 (5)6。
1实验步骤 (5)6.2系统仿真 (6)7实验结论与分析 (6)8实习心得 (8)9参考文献 (8)附录程序代码及电路原理图 (9)附录程序代码 (9)电路原理图 (13)PCB图 (14)实物图 (14)1实习题目基于FPGA矩形脉冲占空比测量系统。
2实习目的与要求在两周的实习中,需掌握verilog语言的使用,提高模拟电路设计的能力,掌握FPGA器件基本使用方法,掌握波形发生器及示波器等仪器的使用方法,通过方案设计来对测量系统进行逐步实现,最终完成实习。
实习要求如下:1.被测信号为矩形波,频率范围为1Hz~5MHz;2.被测信号峰峰值电压范围为50mV~1V;3。
被测脉冲信号占空比的范围为10%~90%;4。
显示的分辨率为0.1%,测量相对误差的绝对值不大于0.01。
系统框图如图2。
1所示:图2.1 系统架构图3实习内容1。
在模拟电路部分利用运算放大器对50mV~1V电压进行放大,所以需要设计出电压放大电路,仿真完成后,并作出实物;2.在数字电路部分利用quartus II 11。
0软件进行设计,用verilog语言进行编辑程序,用ModelSim进行时序仿真,直至占空比测量满足误差位置;3.在时序仿真完成后,加上按键控制,数码管显示模块,BCD码转换模块,在对管脚进行正确分配后,下到FPGA中对系统进行测试,在实际情况下对系统进行调试。
FPGA1-99MHZ数字频率计可测量占空比资料
物理与机电工程学院课程设计报告课程名称:电子系统设计专业班级:2009级电子信息工程(2)班学生姓名:吴仁路学号:2009041636指导教师:赖义汉完成时间:2012年9月28日报告成绩:评阅意见:评阅教师日期目录一、设计任务与要求 (1)二、方案设计与论证 (1)方案一 (1)方案二 (2)三、硬件电路设计 (2)四、软件电路设计 (3)1.分频器模块 (3)2.十进制计数器模块 (3)3. 占空比测量模块 (4)4. 扫描显示锁存模块 (4)5.显示译码器模块 (4)6. 3线8线译码器模块 (4)五、仿真过程与仿真结果 (5)1、十进制计数模块的仿真结果。
(5)2、分频模块的仿真结果 (5)3、占空比模块的仿真结果 (5)4、3-8译码模块的仿真结果 (6)5、显示模块的仿真结果 (6)6、顶层模块的仿真结果 (6)六、安装与调试 (7)七、结论与心得 (9)八、参考文献 (10)附录一:VHDL源程序 (10)附录二:原理图及PCB (19)基于FPGA数字频率计一、设计任务与要求1、设计一个能测量方波信号频率的频率计。
2、测量的频率范围是1Hz 5MHz。
3、结果用十进制数显示。
4、扩展部分:测量输入方波信号的占空比并显示出来。
二、方案设计与论证频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。
闸门时间可以根据需要取值,大于或小于1 s都可以。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1 s作为闸门时间,此测量方法称为直接测频法。
由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。
进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。
基于FPGA的简易数字频率计
基于FPGA的简易数字频率计第一篇:基于FPGA的简易数字频率计EDA 简易数字频计设计性实验 2008112020327 ** 电子信息科学与技术物电电工电子中心2009年5月绘制2008.6.10 湖北师范学院电工电子实验教学省级示范中心电子版实验报告简易数字频率计设计一.任务解析通过对选择题的分析,认为该简易数字频率计应该能达到以下要求:1.准确测出所给的方波信号的频率(1HZ以上的信号)。
2.在显示环节上,应能实现高位清零功能。
3.另外还有一个总的清零按键。
二.方案论证本实验中所做的频率计的原理图如上图所示。
即在一个1HZ时钟信号的控制下,在每个时钟的上升沿将计数器的数据送到缓冲器中保存起来,再送数码管中显示出来。
第2页,共11页湖北师范学院电工电子实验教学省级示范中心电子版实验报告在本实验中,用到过几中不同的方案,主要是在1HZ时钟信号的选择和计数器清零环节上:1.在实验设计过程中,考滤到两种1HZ时钟信号其波形如下图所对于上术的两种波形,可以调整各项参数来产生两种1HZ时钟信号。
最后通过实验的验证发现第二种波形对于控制缓冲器获得数据和控制计数器清零更易实现。
并且,用第二种波形做为时钟信号,可以在很短的高电平时间内对计数器清零,在低电平时间内让计数器计数,从面提高测量的精度。
而用第一种波形则不易实现这个过程。
2.在计数器的清零过程中,也有两个方案,分别是能通过缓冲器反回一个清零信号,另一个是在时钟的控制下进行清零。
最终通过实验发现,用时钟进行清零更易实现。
因为如果用缓冲器反回一个清零信号,有一个清零信号归位问题,即当缓冲器反回一个低电平清零信号时,计数器实现清零,但不好控制让缓器冲的清零信号又回到高电平,否则计数器就一直处于清零状态面不能正常计数了。
三.实验步骤通过上分析后,实验分为以下几步:1.1HZ时钟信号的产生(产生该信号的模块如下):module ones(clk,clkout);input clk;output clkout;parameter parameter N=24000000;n=24;第3页,共11页湖北师范学院电工电子实验教学省级示范中心电子版实验报告reg [n:0]cnt;reg clkout;always @(posedge clk)begin if(cnt==N)else end endmodule begin cnt=0;clkout=1;clkout=0;endend begin cnt=cnt+1;最终产生的信号的波形:2.计数模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA的数字频率计设计学院:专业:班级:姓名:学号:审阅老师:评分:目录一、课程设计目的 (3)二、设计任务 (3)三、功能要求与技术指标 (3)四、数字频率计工作原理概述 (3)五.数字频率计实现方法 (4)六.结论与误差分析 (11)七.VHDL程序: (12)一、课程设计目的熟悉EDA工具,掌握用VHDL语言进行数字系统设计的基本方法和流程,提高工程实践能力。
二、设计任务设计一数字频率计,用VHDL语言描述,用QuartusII工具编译和综合,并在实验板上实现。
三、功能要求与技术指标1.基本功能要求(1)能够测量出方波的频率,其范围50Hz~50KHz。
(2)要求测量的频率绝对误差±5Hz。
(3)将测量出的频率以十进制格式在实验板上的4个数码管上显示。
(4)测量响应时间小于等于10秒。
以上(1)~(4)基本功能要求均需实现。
2.发挥部分(1)提高测量频率范围,如10Hz~100KHz或更高、更低频率,提高频率的测量绝对值误差,如达到±1Hz。
(2)可以设置量程分档显示,如X1档(显示范围1Hz~9999Hz),X10档(显示范围0.001KHz~9.999KHz),X100档(显示范围0.100KHz~999.9KHz)...可以自定义各档位的范围。
量程选择可以通过按键选择,也可以通过程序自动选择量程。
(3)若是方波能够测量方波的占空比,并通过数码管显示。
以上(1)~(3)发挥功能可选择实现其中的若干项。
四、数字频率计工作原理概述1.数字频率计简介在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
而数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。
2.常用频率测量方法:方案一采用周期法。
通过测量待测信号的周期并求其倒数,需要有标准倍的频率,在待测信号的一个周期内,记录标准频率的周期数,这种方法的计数值会产生最大为±1个脉冲误差,并且测试精度与计数器中记录的数值有关,为了保证测试精度,测周期法仅适用于低频信号的测量。
方案二采用直接测频法。
直接测频法就是在确定的闸门时间内,记录被测信号的脉冲个数。
由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。
进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。
由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。
五.数字频率计实现方法本文采用方案二直接测频法进行设计,具体实施方法如下:1.直接测频法:采用一个标准的基准时钟,在单位闸门时间(1s)里对被测信号的脉冲数进行计数,即为信号的频率。
由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。
进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量相对误差为Tx/T=Tx=1/Fx。
由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。
2.具体设计流程:1). 基本功能部分:(1). 原理概述:○1利用FPGA实验板的基准时钟50M分频产生一个1Hz的脉冲方波作为闸门信号;○2当待测信号的上升沿到来时,利用四个个十进制计数器(即最高能记到9999次数)对其上升沿进行计数;○3计数的同时不断把数锁存,并送到数码管显示部分显示;○4当1Hz闸门信号的上升沿到来时,对锁存送到显示部分的数据用十进制显示到四位数码管,一旦显示后就把四个计数器的值清零,计数器重新对待测信号上升沿计数并锁存,直到1Hz闸门信号的下个上升沿到来时在把这次闸门时间内记到的数据送去数码管显示。
○5如此循环,实现对不是固定频率的待测信号的频率每秒更新一次的功能。
(2)设计原理时序图:1Hz2). 扩展功能部分:(1). 原理概述:一、分档显示部分○1在基本功能的计数部分增加至八个计数器(即最高能记到99.999999M次数)对待测信号上升沿进行计数;○2对记到的数据按优先级由最高位往低位判断,若第七位有进位,则表示第八个计数器有计数,故要锁存最高四位计数器内容并送数码管显示,若为第六位数码管有进位,则显示次高四位计数器内容,以此类推;○3判断相应的档位的同时给每个档位一个变量赋值,用于判断小数点的位置。
以KHZ为单位,则四位数码管最高能显示9999Khz。
○4若显示最高四位计数器内容(即是X10000档(10~99.99MHZ)),由于已超出四位数码管显示范围,则可以用按键显示最低四位计数器内容,同时让DS1(千位)数码管小数点亮。
如图所示显示的频率为25MHZ(25000.000HZ):未按键时显示最高四位数字;按住按键S5显示低四位数字○5若未超出四位数码管显示范围,则按照如下显示小数点:X1000档(1~9999khz)只显示个位小数,X100档(0.1~999.9khz)只显示十位小数点,X10档(0.01~99.99khz)只显示百位小数点,X10档(0.01~99.99khz)只显示百位小数点,X1档(0.001~9.999khz)只显示千位小数点。
显示效果如下图所示:显示频率1953.13KHZ也可按住按键S5显示其余低位显示频率6.103HZ(误差±1HZ)显示频率6HZ二、占空比部分○1利用基准时钟产生一个10MHZ的频率用于标准计数信号;○2在1HZ闸门信号上升沿到来时,10MHZ计数信号开始计数,同时在待测信号为高电平时,用七个计数器对10MHZ信号的上升沿次数计数,低电平时不计数;○3当1HZ闸门信号的下个上升沿到来时,10MHZ计数信号刚好计数10M次(1s时间),此时取待测信号高电平期间七个计数器的最高四位的数据锁存并送数码管显示,显示时数码管DS2(百位)小数点亮,所得结果即为待测信号的占空比(单位为%),如下图所示:按下按键 S6显示占空比(50.00%)(2). 测量占空比设计原理时序图六. 结论与误差分析1. 频率测量部分:(1). 结论:能测到待测信号的频率范围理论上为1HZ~99.999999MHZ ,实际测试时最高只用过25MHZ 的频率进行测试,结果相差±1Hz ,达到设计要求。
(2). 误差分析:由于采用直接测频法,1S 闸门时间通常不是待测信号的整数倍,因此计数值也产生最大为±1个脉冲误差。
设待测信号脉冲周期为Tx,频率为Fx ,当测量时间为T=1s 时,测量相对误差为Tx/T=Tx=1/Fx 。
所以,直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。
2. 占空比测量部分:(1). 结论:高频时对占空比在5%~95%的待测信号测试误差为±0.5%,最高能测试到25MHZ 的占空比;在低频时测量的占空比有较大误差。
1Hz标准计数信号10MHZ ○1计上升沿次数10M 次(1s 时间)(2). 误差分析:由于1S闸门时间内用10MHZ的基准信号在待测信号的高电平是计数,故误差产生的原因有一下两点:○1待测信号进入闸门的状态随机(可能是高电平,也可能是低电平),所以对高频信号,测量到的占空比误差比较小;对低频信号误差较为明显,若进出闸门的状态同为高电平,则在1S闸门时间内对高电平的状态就有多计数,结果偏高;若进出闸门的状态同为低电平,则在1S闸门时间内对高电平的状态就少计数,结果偏低。
○2待测信号进入闸门的状态随机,且1S闸门时间通常不是待测信号的整数倍,以10MHZ信号作为基准信号计数10M次上升沿作为待测信号在1S时间内整数个周期的时间,本身只是个近似值,所以对高频时误差较小,低频时有较大误差。
七.VHDL程序:--********************************************************library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity frequency_meter isport(clk ,d0,d1 :in std_logic;clkx :in std_logic;wei :out std_logic_vector(3 downto 0);led :out std_logic_vector(7 downto 0));end entity frequency_meter;--********************************************************Architecture abc of frequency_meter issignal led1, led2, led3, led4 :std_logic_vector(7 downto 0):="11000000";signal ge ,shi, bai, qian :integer range 0 to 10:=0;signal clk_1 :std_logic :='1'signal clk_0, clk_1hz, clk_10m, freq12k : std_logic;signal temp : std_logic_vector(22 downto 0);begin--**********p0**产生10mHZ频率*****************************p0 : process(clk) isvariable counter0 :integer :=0;beginif (clk'event and clk='1' ) thencounter0:=counter0+1;if (counter0=25) thenclk_0<=not clk_0;counter0:=0;end if;end if;clk_10m<=clk_0;end process p0;--************p1**产生1HZ频率*****************************p1 : process(clk) isvariable counter1 :integer :=0;beginif (clk'event and clk='1' ) thencounter1:=counter1+1;if (counter1=25000000) thenclk_1<=not clk_1;counter1:=0;end if;end if;clk_1hz<=clk_1;end process p1;--************p2**分频出12k频率用于数码管位选扫频*********p2 : process(clk) isbeginif (clk'event and clk='1' ) thentemp<=temp+1;end if;freq12k<=temp(11); --12207Hzend process p2;--*************p3**主程序(显示,分档,占空比测量)************ p3 : process(clk,clk_1hz,clkx) isvariable counter2,counter3 :integer :=0;variable aa,bb,cc,dd,ee,ff,gg,hh,za,zb,zc,zd,ze,zf,c,d,e,f:integer range 0 to 10:=0;variable temp2,temp3,temp4,temp5:integer range 0 to 10:=0;variable dip0,dip1,dip2,dip3,dip4,dip5,dip6,dip7 :integer :=0;variable clr :integer:=0;begin---------------**p3_1--计数显示**-----------------------------------if(clkx'event and clkx='1')thenaa:=aa+1;if(aa=10)thenaa:=0;bb:=bb+1;if(bb=10)thenbb:=0;cc:=cc+1;if(cc=10)thencc:=0;dd:=dd+1;if(dd=10)thendd:=0;temp2:=1;--------temp2ee:=ee+1;if(ee=10)thenee:=0;temp3:=1;--------temp3ff:=ff+1;if(ff=10)thenff:=0;temp4:=1;--------temp4gg:=gg+1;if(gg=10)thengg:=0;temp5:=1;--------temp5hh:=hh+1;if(hh=10)thenhh:=0;end if;end if;end if;end if;end if;end if;end if;end if;-------------------**p3_2--分档显示**-------------------------------if(d0='0')then----------按键按下显示占空比,否则显示频率---- ge<=c;shi<=d;bai<=e;qian<=f;dip2:=1;------------只显示百位小数点-------elsif(d0='1')thenif(temp5=1)then--------X10000档(~99.999999mhz)----------- -------超出四个数码管显示范围,可以按键显示--- ge<=ee;---------最低四位,同时只显示千位小数点-----shi<=ff;bai<=gg;qian<=hh;dip5:=1;elsif(temp4=1)then------X1000档(1~9999khz)只显示个位小数点ge<=dd;shi<=ee;bai<=ff;qian<=gg;dip4:=1;elsif(temp3=1)then----X100档(0.1~999.9khz)只显示十位小数点ge<=cc;shi<=dd;bai<=ee;qian<=ff;dip3:=1;elsif(temp2=1)then----X10档(0.01~99.99khz)只显示百位小数点ge<=bb;shi<=cc;bai<=dd;qian<=ee;dip2:=1;else --------X1档(0.001~9.999khz)只显示千位小数点ge<=aa;shi<=bb;bai<=cc;qian<=dd;dip1:=1;end if;end if;------------------**p3_3--显示低位**--------------------------------if(d1='0')thendip6:=1;------小于X10000档的低四位不显示小数点---- if(dip5=1)thenge<=aa;shi<=bb;bai<=cc;qian<=dd;dip6:=0;------X10000档的高位不显示小数点-------dip7:=1;------X10000档的低位千位显示小数点-----elsif(dip4=1)thenge<=0;shi<=aa;bai<=bb;qian<=cc;elsif(dip3=1)thenge<=0;shi<=0;bai<=aa;qian<=bb;elsif(dip2=1)thenge<=0;shi<=0;bai<=0;qian<=aa;elsege<=0;shi<=0;bai<=0;qian<=0;end if;elsif(d1='1')thendip6:=0;dip7:=0;end if;end if;--------------------**p3_4---占空比**-------------------------------if(clk_10m'event and clk_10m='1')thencounter2:=counter2+1;if(counter2=1000000)then---10mhz频率,计数到1000000为1s-- c:=zc;--------停止检测高电平并锁存高四位计数器值------d:=zd;e:=ze;f:=zf;end if;end if;if(clkx='1')then--------测待测方波高电平------if(clk_10m'event and clk_10m='1')thencounter3:=counter3+1;za:=za+1;if(za=10)thenza:=0;zb:=zb+1;if(zb=10)thenzb:=0;zc:=zc+1;if(zc=10)thenzc:=0;zd:=zd+1;if(zd=10)thenzd:=0;ze:=ze+1;if(ze=10)thenze:=0;zf:=zf+1;if(zf=10)thenzf:=0;end if;end if;end if;end if;end if;end if;end if;end if;-------------------**p3_4--数码管显示部分**------------------------- if(clk_1hz'event and clk_1hz='1')then-----1s显示一次频率----- -------**小数点显示**------if(dip7=1)thenled4(7)<='1';led3(7)<='1';led2(7)<='1';led1(7)<='0';elsif(dip5=1 or dip6=1)thenled4(7)<='1';led3(7)<='1';led2(7)<='1';led1(7)<='1';elsif(dip4=1)thenled4(7)<='0';led3(7)<='1';led2(7)<='1';led1(7)<='1';elsif(dip3=1)thenled4(7)<='1';led3(7)<='0';led2(7)<='1';led1(7)<='1';elsif(dip2=1)thenled4(7)<='1';led3(7)<='1';led2(7)<='0';led1(7)<='1';elsif(dip1=1 )thenled4(7)<='1';led3(7)<='1';led2(7)<='1';led1(7)<='0';end if;---------**显示数字**---------------- Case qian iswhen 0=>led1(6 downto 0)<="1000000"; when 1=>led1(6 downto 0)<="1111001"; when 2=>led1(6 downto 0)<="0100100"; when 3=>led1(6 downto 0)<="0110000"; when 4=>led1(6 downto 0)<="0011001"; when 5=>led1(6 downto 0)<="0010010"; when 6=>led1(6 downto 0)<="0000010"; when 7=>led1(6 downto 0)<="1111000"; when 8=>led1(6 downto 0)<="0000000"; when 9=>led1(6 downto 0)<="0010000";when others=>led1(6 downto 0)<="0000000"; end case;case bai iswhen 0=>led2(6 downto 0)<="1000000"; when 1=>led2(6 downto 0)<="1111001"; when 2=>led2(6 downto 0)<="0100100"; when 3=>led2(6 downto 0)<="0110000"; when 4=>led2(6 downto 0)<="0011001"; when 5=>led2(6 downto 0)<="0010010"; when 6=>led2(6 downto 0)<="0000010"; when 7=>led2(6 downto 0)<="1111000"; when 8=>led2(6 downto 0)<="0000000"; when 9=>led2(6 downto 0)<="0010000"; when others=>led2(6 downto 0)<="0000000"; end case;case shi iswhen 0=>led3(6 downto 0)<="1000000"; when 1=>led3(6 downto 0)<="1111001"; when 2=>led3(6 downto 0)<="0100100"; when 3=>led3(6 downto 0)<="0110000"; when 4=>led3(6 downto 0)<="0011001"; when 5=>led3(6 downto 0)<="0010010"; when 6=>led3(6 downto 0)<="0000010"; when 7=>led3(6 downto 0)<="1111000"; when 8=>led3(6 downto 0)<="0000000"; when 9=>led3(6 downto 0)<="0010000"; when others=>led3(6 downto 0)<="0000000"; end case;case ge iswhen 0=>led4(6 downto 0)<="1000000"; when 1=>led4(6 downto 0)<="1111001"; when 2=>led4(6 downto 0)<="0100100"; when 3=>led4(6 downto 0)<="0110000"; when 4=>led4(6 downto 0)<="0011001"; when 5=>led4(6 downto 0)<="0010010"; when 6=>led4(6 downto 0)<="0000010"; when 7=>led4(6 downto 0)<="1111000"; when 8=>led4(6 downto 0)<="0000000"; when 9=>led4(6 downto 0)<="0010000"; when others=>led4(6 downto 0)<="0000000"; end case;clr:=1;---------显示完后清零------end if;-----**计数器清零**-----if(clr=1)thenaa:=0;bb:=0;cc:=0;dd:=0;ee:=0;ff:=0;gg:=0;hh:=0;za:=0;zb:=0;zc:=0;zd:=0;ze:=0;zf:=0;dip1:=0;dip2:=0;dip3:=0;dip4:=0;dip5:=0;temp2:=0;temp3:=0;temp4:=0;temp5:=0;counter2:=0;counter3:=0;clr:=0;------退出清零---end if;end process p3;--*************p4**数码管扫描****************************** p4 : process(clk) isvariable counter4 :integer range 0 to 3:=0; beginif(freq12k'event and freq12k='1') thencounter4:=counter4+1;case counter4 iswhen 0 => wei <= "0111"; led <= led1;when 1 => wei <= "1011"; led <= led2;when 2 => wei <= "1101"; led <= led3;when 3 => wei <= "1110"; led <= led4;when others => null;end case;end if;end process p4;end architecture abc;21/ 21。