基于FPGA的等精度数字频率计设计.docx

(50页)

'基于FPGA的等精度数字频率计设计.docx'

《基于FPGA的等精度数字频率计设计.docx》由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关《基于FPGA的等精度数字频率计设计.docx》文档请在ope平台t搜索。

1、摘要频率是常用的物理量,工程中很多物理量的测量,如时间测量、速度控制等,都可转化为频率测量。此外,还经常遇到以频率为参数的测量信号,例如流量、转速等。所以频率测量方法的研究越来越受到重视。基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低, 在实用中有较大的局限性, 而等精度频率计不但具有较高的测量精度, 而且在整个频率区域能保持恒定的测试精度。本课题设计的等精度数字频率计是采用当今电子设计领域流行的EDA技术,以FPGA为核心,配合STC89C51单片机。同时,采用等精度测频原理,实现了0.01Hz--50MHz信号频率的等精度频率测量。此外,该系统还实现测量周期、脉宽、占空比等功能。设计中用一块FPGA芯片EP2C5Q208C8完成各种时序逻辑控制、计数功能。在Ouartus II平台上,用VHDL语言编程完成FPGA的软件设计、编译、调试、仿真和下载。用STC89C51。

2、单片机作为系统的主控部件,实现整个电路的测试信号控制、数据运算处理、键盘扫描和控制数码管的显示输出。系统将单片机STC89C51的控制灵活性及FPGA芯片的现场可编程性相结合,不但大大缩短了开发研制周期,而且使本系统具有结构紧凑、体积小,可靠性高,测频范围宽、精度高等优点。关键词:频率计;EDA技术;FPGA;单片机AbstractFrequency is commonly used physical quantity, lots of measurement of physical quantity in the project, such as the measurement of time, the control of velocity, can be changed into the measurement of frequency. Besides, the measured 。

3、signal with a frequency parameter, such as the rate of flow, the rotational speed, is often encountered. So the research of the method of measuring frequency has become more and more significant in the real application.According to the principles of traditional frequency measurement , the measurement accuracy of frequency meter will decrease with the signal frequency decrease .but it has more limi。

4、tations in the real application, equal precision frequency meter not only has high accuracy, but also maintains constant test accuracy in the whole frequency region .With the help of FPGA and cooperating with the single chip computer STC89C51,The digital frequency design in our program has realized the precision measurement of 0.01Hz-50MHz signal frequency by adopting the current EDA technique pre。

5、vailing in the electronic designs and using the principle of multi-period synchrony frequency measurement. Besides, the system can complete the cycle, pulse width, duty cycle measurement function . In this design, using an FPGA chip EP2C5Q208C8 completes a variety of temporal logic control and counting function. In the platform of Ouartus II, using VHDL language completes FPGA software design, com。

6、piler, debugging, simulation, and download. By use of the STC89C51 single chip computer as the main controlling parts, the control of the tested signal, the scan of keyboard and the output display of LED can be realized. The system combines the control flexibility of STC89C51 with programmable performance of FPGA, consequently, not only can it shorten the period of the development and research, bu。

7、t also it has the advantages of compact structure, little volume, high reliability, wide scope and high precision.Keywords:Frequency meter,EDA technique,FPGA, Single chip computer目录摘要 IAbstract II目录 III1 绪论 11.1 本课题的研究背景及意义 11.2 本课题的主要内容 22 系统设计的相关理论 32.1 频率测量方法的研究 32.1.1 常用测频方案 32.1.2 等精度测频原理 32.1.3 等精度测频误差分析 52.2 单片机模块理论及知识 52.2.1 MCS-51单片机结构简介 52.2.2 Keil μvision 3软件概述 72.2.3 Proteus软件概述 72.3 F。

8、PGA模块理论及知识 82.3.1 FPGA原理概述 82.3.2 Quartus II 软件概述 92.3.3 VHDL语言简介及开发优点 113 系统硬件电路设计 133.1 系统顶层电路组成 133.2 被测信号放大整形电路设计 133.3 单片机模块设计 143.3.1 单片机最小系统 143.3.2 键盘接口电路 153.3.3 LED数码管显示电路 173.4 FPGA模块电路设计 183.4.1 基本单元电路 193.4.2 测量与自检选择电路 233.4.3 脉宽控制电路 243.4.4 测频与测周期电路 253.5 单片机与FPGA的相互控制电路 264 系统软件设计 284.1 单片机主程序设计 284.2 复位自检程序设计 284.3 键盘程序设计 294.4 测频子程序设计 304.5 测周期子程序设计 314.6 测脉宽子程序设计 324.7 测占空比子程序设计 。

9、324.8 LED数码管显示子程序设计 335 系统性能分析 345.1 测量范围分析 345.2 测量精度分析 345.3 被测信号幅值分析 34结论 35致谢 36参考文献 37附录一 FPGA程序 38附录二 单片机程序 41461 绪论1.1 本课题的研究背景及意义EDA(Electronic Design Automation——电子设计自动化)代表了当今电子设计技术的最新发展方向,通过VHDL(Very High Speed Integrated Circuit Hardware Description Language)硬件描述语言的设计,用FPGA(Field-Programmable Gate Array——现场可编程门阵列)来实现小型电子设备的设计,是开发仪器仪表的主流。据统计,目前发达国家在电子产品开发中EDA工具的利用率已达很高,而大部分的FPGA已采用HDL(Ha。

10、rdware Description Language——硬件描述语言)设计。由于VHDL已成为IEEE标准,目前的EDA工具可以使ASIC系统的行为、功能、算法用VHDL描述直接生成FPGA器件,使设计者将精力集中于设计构思,提高了设计效率,同时也利于设计的分解、交流和重用。随着微电子技术和计算机技术的发展,可编程逻辑器件,EDA技术,SOPC等新概念和新技术层出不穷,新技术的应用迅速渗透到电子、通信、信息、汽车制造等领域,有力的推动了社会生产力的发展和社会信息化程度的提高。目前,市场上的频率计厂家可分为三类:中国大陆厂家、中国台湾厂家、欧美厂家。其中,欧美频率计厂家所占有的市场份额最大。欧美频率计厂家主要有:Pendulum Instruments和Agilent科技。Pendulum Instruments公司是一家瑞典公司,总部位于瑞典首都斯德哥尔摩。Pendulum公司源于Phi。

11、lips公司的时间、频率部门,在时间频率测量领域具有40多年的研发生产经历。Pendulum Instruments公司常规频率计型号主要有:CNT-91、CNT-90、CNT-81、CNT-85。同时,Pendulum Instruments公司还推出铷钟时基频率计CNT-91R、CNT-85R。以及微波频率计CNT-90XL(频率测量范围高达60G)。Agilent科技公司是一家美国公司,总部位于美国的加利福尼亚。Agilent科技公司成立于1939年,在电子测量领域也有着70多年的研发生产经历。Agilent科技公司的常规频率计信号主要有:53181A、53131A、53132A。同时,Agilent科技公司还推出微波频率计:53150A,53151A,53152A(频率测量范围最高可达46G)。基于FPGA的等精度频率计有运算速度快、系统较稳定、测量范围广等特点。其中主要应用到ED。

12、A(电子设计自动化)技术。伴随着集成电路技术的发展,EDA逐渐成为重要的设计手段。已经广泛应用于模拟与数字电路系统等许多领域。EDA是一种实现电系统或电子产品自动化设计的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机为工作平台,促进了工程发展。本设计利用FPGA进行测频计数,单片机实施控制,实现频率计的设计过程。该频率计利用等精度的设计方法,克服了基于传统测频原理的频率计的测量精度随被测信号频率的下降而降低的缺点。等精度的测量方法不但具有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。1.2 本课题的主要内容随着EDA(Electronics Design Automation)技术的发展和可编程逻辑器件的广泛应用,传统的自下而上的数字电路设计方法、工具、器件已远远落后于当今技术的发展。基于EDA技术正在承担起越来越多的数。

13、字系统设计任务。本设计主要论述了利用FPGA进行测频计数,单片机实施控制,实现多功能频率计的过程,使得频率计具有了测量精度高、功能丰富、控制灵活等特点。该频率计依照等精度的测量原理,克服了传统计数器测频原理随被测信号频率下降而降低的缺点。等精度测量方法不但具有较高的精度,而且在整个频率域保持恒定的测量精度。该频率计利用FPGA来实现对频率、周期、脉宽、占空比的测量计数,由单片机实现对系统的控制、数据的显示、数据运算及数制转换等功能。本课题的主要工作包括以下几项内容:(1)简述了本课题研究的背景和意义。(2)详细地论述了系统设计的相关理论,主要包括等精度频率计的测频原理、单片机和FPGA应用平台的介绍。(3)完成了频率计的系统硬件电路的设计,同时完成了基于数字硬件电路设计平台QuartusⅡ的FPGA硬件电路设计,FPGA模块用来完成高速计数器的功能;单片机完成测试控制、数据处理、键盘输入控。

14、制、数码管显示控制等功能,并对整个系统进行总体控制。(4)用C语言完成了系统中单片机控制的的软件设计。(5)对频率计的系统性能进行分析,通过分析得出,本设计的测频范围是0.01Hz~50MHz,测量精度为百万分之一,被测信号的幅度为0.2mv-5v。 本文分5章介绍了基于FPGA的等精度数字频率计的设计原理、设计步骤,性能分析等。2 系统设计的相关理论2.1 频率测量方法的研究2.1.1 常用测频方案在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中等精度测量频率具有精度高、使用方便、测量迅速,以及便于现测量、过程自动化等优点,是频率测量的重要手段之一。普通测频有两种方式:一是间接测频法,二是直接测频法。方案一:采用间接测频法,即周期法。通过测量待测信号的周期并求其倒数,需要有标准频率的信。

15、号,在待测信号的一个周期内,记录标准频率的周期数,这种方法的计数值会产生最大为±1个脉冲误差,并且测试精度与计数器中记录的数值有关,为了保证测试精度,测周期法仅适用于低频信号的测量。方案二:采用直接测频法。直接测频法就是在确定的闸门时间内,记录被测信号的脉冲个数。由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量准确度为&=Tx/T=1/Fx。由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。因此直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的测量精度保持不变的要求。方案三:采用等精度频率测量法,测量精度保持恒定,不随所测信号的变化而变化。在快速测量的要求下,要保证较高精度的测频,必须采用较高的标。

16、准频率信号。单片机受本身时钟频率和若干指令运算的限制,测频速度较慢,无法满足高速、高精度的测频要求;而采用高集成度、高速的现场可编程门阵列FPGA为实现高速、高精度的测频提供了保证。综上所述,本设计所采用的测频方法就是等精度频率测量法,下面我们将对等精度频率测量法做进一步介绍。2.1.2 等精度测频原理等精度测频方法是在直接测频方法的基础上发展起来的。它的闸门时间不是固定的值,而是被测信号周期的整数倍,即与被测信号同步,因此,避免了对被测信号计数所产生±1个字误差,并且达到了在整个测试频段的等精度测量。其测频原理如图2.1所示。在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。首先给出闸门开启信号(预置闸门上升沿),此时计数器并不开始计数,而是等到被测信号的上升沿到来时,计数器才真正开始计数。然后预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来。

17、时才结束计数,完成一次测量过程。可以看出,实际闸门时间t与预置闸门时间t1并不严格相等,但差值不超过被测信号的一个周期[1]。图2.1 等精度测频原理波形图等精度测频的实现方法可简化为图2.2所示。CNT1和CNT2是两个可控计数器,标准频率信号从CNT1的时钟输入端CLK输入;经整形后的被测信号从CNT2的时钟输入端CLK输入。当预置门控信号为高电平时,经整形后的被测信号的上升沿通过D触发器的Q端同时启动CNT1和CNT2。CNT1、CNT2同时对标准频率信号和经整形后的被测信号进行计数,分别为NS与NX。当预置门信号为低电平的时候,随后而来的被测信号的上升沿将使两个计数器同时关闭,所测得的频率为(FS/NS)*NX。则等精度测量方法测量精度与预置门宽度和标准频率有关,与被测信号的频率无关。在预置门时间和常规测频闸门时间相同而被测信号频率不同的情况下,等精度测量法的测量精度不变。图2.2。

18、 等精度测频实现原理图2.1.3 等精度测频误差分析设在一次实际闸门时间t中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。标准信号的频率为fs,则被测信号的频率如式(2-1):fx=(Nx/Ns)·fs (2-1)由式2-1可知,若忽略标频fs的误差,则等精度测频可能产生的相对误差如式(2-2): δ=(|fxe-fx|/fxe)×100% (2-2)其中fxe为被测信号频率的准确值。在测量中,由于fx计数的起停时间都是由该信号的上升沿触发的,在闸门时间t内对fx的计数Nx无误差(t=NxTx);对fs的计数Ns最多相差一个数的误差,即|ΔNs|≤1,其测量频率如式(2-3):fxe=[Nx/(Ns+ΔNs)]·fs (2-3)将式(2-1)和(2-3)代入式(2-2),并整理如式(2-4):δ=|ΔNs|/Ns≤1/Ns=1/(t·fs) (2-4)由上式可以看出,测量频率的。

19、相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。闸门时间越长,标准频率越高,测频的相对误差就越小。标准频率可由稳定度好、精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度[2]。2.2 单片机模块理论及知识2.2.1 MCS-51单片机结构简介MCS-51单片机分为51和52两个系列,包括80c51、87c51、80c52、87c52等典型产品型号,它们的结构基本相同,主要差别仅在片内存储器、计数器。中断源的配置有所不同,其中52子系列在存储器容量、计数器和中断源数量都高于51子系列。考虑到本设计采用STC89C51,这里将以80c51为例进行介绍[3]。MCS-51单片机的内部结构包含了作为微型计算机必需的基本功能部件,如CPU、RAM、ROM、定时/计数器和可编程并行I/O口、。

20、可编程串行口等。这些功能部件通常都挂靠在单片机内部总线上,通过内部总线穿送数据信息和控制信息。其基本内部结构如图2.3所示。图2.3 MCS-51单片机内部基本结构80C51单片机内部资源主要包括:8位中央处理器;片内振荡器和时钟电路;4KB片内程序存储器(ROM);128字节的片内RAM;2个16位定时/计数器;可寻址64KB外部程序存储器和64KB数据存储空间的控制电路;4个8位双向I/O口;1个全双工串行口;5个中断源;80C51单片机采用40引脚双列直插式封装形式,其引脚分布如图2.4所示。(1)电源及晶振引脚(4只)----- VCC、GND、XTALL1、XTAL2;(2)控制引脚(4只)-----PSEN、ALE、EA、RST;(3)并行I/O口引脚(32只)----P0.0-P0.7、P1.0-P1.7、P2.0-P2.7、P3.0-P3.7。图2.4 80c51单片机引脚。

21、图2.2.2 Keil μvision 3软件概述Keil是德国Keil Software公司出品的单片机集成开发软件,该软件支持51单片机的所有变种。Keil 提供了包括C编译器、宏汇编、连接器、库管理及一个功能强大的仿真调试器在内的完整开发方案,并通过一个集成开发环境(μVision 3)将这些部分组合在一起。Keil单片机集成开发软件可以运行在Windows98/NT/2000及XP等操作系统下。μVision 3软件界面包括4大组成部分,即菜单工具栏、项目管理窗口、文件窗口和输出窗口。其软件开发流程为:(1)创建一个项目,从器件库中选择目标器件,配置工具设置;(2)用C语言或汇编语言创建源程序;(3)用项目管理器生成应用;(4)修改源程序中的错误;(5)测试,连接应用。2.2.3 Proteus软件概述Proteus软件是英国Labcenter公司开发的电路及单片机系统设计与仿真软。

22、件。Proteus软件可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能。Proteus软件是目前唯一能对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原形时可以对系统进行调试、测试和验证。Proteus软件大大提高了企业的产品开发率,降低了开发风险。由于Proteus软件逼真、真实的协同仿真功能,它也特别适合于作为配合单片机课堂教学和实验的学习工具。Proteus软件提供了30多个元器件库、7000余种元器件。元器件涉及电阻、电容、二极管、三极管、变压器、继电器、各种放大器、各种激励源、各种微控制器、各种门电路和各种终端等。Proteus软件还提供有交直流电压表、逻辑分析仪、示波器、定时/计数器和信号发生器等测试信号工具,用于电路测试。Proteus软件主要由两个设计平台组成:(1)ISIS(Intell。

23、igent Schematic Input System)原理图设计与仿真平台,它用于电路原理图的设计以及交互式仿真。(2)ARES(Advanced Routing And Editing Software)高级布线和编辑软件平台,它用于印制电路板的设计,并产生输出文件。2.3 FPGA模块理论及知识2.3.1 FPGA原理概述FPGA器件具有高密度、高速率、系列化、标准化、小型化、多功能、低功耗、低成本,设计灵活方便,可无限次反复编程,并可现场模拟调试验证等特点。使用FPGA器件,可在较短地时间内完成一个电子系统地设计和制作,缩短了研制周期,达到快速上市和进一步降低成本的要求[4]。FPGA具有掩模可编程门阵列地通用结构,它由排成阵列的逻辑功能块组成,由可编程的互连资源连接这些逻辑功能块来实现不同的设计。FPGA由可配置逻辑块(CLB-Configurable Logic Block)。

24、、输入/输出模块(IOB-I/O Block)和互连资源(IR-Interconnect Resource)三部分组成。可配置逻辑块CLB是实现用户功能的基本单元,它们通常规则地排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源(IR)包括各种长度的连线线段和一些可编程连接开关, 它们将各个CLB之间或CLB、 IOB之间以及IOB之间连接起来,构成特定功能的电路。 (1)可配置逻辑块 (CLB)一般有三种结构形式: ① 查找表结构; ② 多路开关结构; ③ 多级与非门结构。CLB是FPGA地主要组成部分,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。(2)输入/输出模块(IOB)IOB主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。其结构如下图所示。每个IOB控制一个引脚,它们。

25、。c; clr:in std_logic; q:out std_logic);end dcq;architecture rtl of dcq isbeginprocess(clk)beginif clr='1' then q<='0'; elsif (rising_edge(clk)) then q<=d; end if;end process;end rtl;(2)32位计数器程序---tc32.vhd(sc32.vhd类似于tc32.vhd,不再写出)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tc32 isport( tclk,tena,clr:in std_logic; q:buffer std_l。

26、ogic_vector(31 downto 0) );end tc32;architecture rtl of tc32 isbeginprocess(tclk,clr)beginif(clr='1') then q'0');elsif (tclk'event and tclk='1') then if(tena='1')then q<=q+1; end if;end if; end process; end rtl;(3)MUX64_8选择器程序--mux64_8.vhdlibrary ieee;use ieee.std_logic_1164.all;entity mux64_8 isport( sel:in std_logic_vector(2 downto 0); din1:in std_logic_vector(31 downto 0); din2:in std_logic_。

27、vector(31 downto 0); q:out std_logic_vector(7 downto 0) );end mux64_8;architecture mux_arch of mux64_8 issignal din:std_logic_vector(63 downto 0);beginprocess(din,sel)begindinqqqqqqqqzz<=b;end case;end process; end behavier;(5)ss1模块程序—ss1.vhdlibrary ieee;use ieee.std_logic_1164.all;entity ss1 isport( q1,q2:in std_logic; pl,eend:out std_logic);end ss1;architecture behavier of ss1 isbeginprocess(。

28、q1,q2) begin if (q1='1' and q2='0')then pl<='1'; else pl<='0'; end if; if (q1='1' and q2='1')then eend<='1'; else eend<='0'; end if; end process;end behavier;附录二 单片机程序#include#include#define uchar unsigned char#define uint unsigned int#define ulong unsigned long//#define fs=50000000;float ip3,ip6,ip7; //用于存放计算结果//uchar data in[8],out[8]; //用于存放转换后要输出的结果//bit flag; //用于判断单片机读数结束//bit fl。

29、ag0; //用于控制所测脉宽正负和频率测量的连续与否//ulong data *ip1=&in[0],*ip2=&in[4]; //用于将八个uchar数转换为两个ulong型数据//uchar data kv=1; //用于读取键值//uchar data dt,dt1; //用于控制定时器定时//ulong data zkb; //用于暂存占空比中的正脉宽值//uchar bdata dd;uchar data ok; //用于自检时向out数组赋值//uchar data so; //控制输出字符//sbit p20=P2^0; //接cl//sbit p21=P2^1; //接clr//sbit p22=P2^2; //接sel[0] //sbit p23=P2^3; //接sel[1] //sbit p24=P2^4; //接sel[2] //sbit p25=P2^5; //。

30、接spul//sbit p27=P2^7; //接as////////////////////////////////////////////////////////////函数声明///////////////////////////////////////////////////////////////fuwei(); jianpan(); zhuanhuan(); shuchu(); cepin(); maikuan(); zhankongbi(); lianxu();cepindushu(); pinlvjisuan(); zhouqijisuan(); zhankongbijisuan();maikuanjisuan();///////////////////////////////////////////////////////////主程序//////////////////。

31、///////////////////////////////////////////////main(){fuwei();while(1){ while(flag==1){ip6=*ip1; ip7=*ip2; flag=0; switch(kv) {case 0:{cepindushu();pinlvjisuan(); if(ip7>ip6) break; } case 1:{cepindushu();zhouqijisuan(); if(ip7>ip6) break;} case 2:{cepindushu();maikuanjisuan(); if(ip6==0) break;} case 3:{zhankongbijisuan(); break;} default:break;}shuchu();}}}/////////////////////////////////。

32、/////////////定时器1中断处理子程序///////////////////////////////////////////////////TT1() interrupt 1{uchar i=0;for(i=0;i++;i<8) out[i]=p1&0x1f;if(i==8) shuchu();}//////////////////////////////////////////////外部中断0中断处理子程序////////////////////////////////////////////int0() interrupt 0 //外部中断判断键值子程序//{ p21=0; //计数器清0//p21=1;kv=P1&0x07; //读取键值//switch(kv) //判断键值//{case 1:cepin();break; //频率测量//case 2:cepin(。

33、);break; //周期测量// case 3:maikuan();break; //脉宽测量// case 4:zhankongbi();break; //占空比测量// case 5:lianxu();break; //设置脉宽测量的正负号和频率测量的连续与否?// case 6:fuwei();break; default:break;}}///////////////////////////////////////////////////频率测量控制子程序////////////////////////////////////////////////////cepin() //频率测量子程序//{ p25=1; //spul置1测频//p20=0; //cl先置0//p21=0; p21=1; //计数器清0//TH0=0X00; TL0=0X00; //定时器0赋初值//TR0。

34、=1; //T0运行控制位置一//p20=1; //cl=1//}//////////////////////////////////////////////////////定时器0中断处理子程序//////////////////////////////////////////TT0()interrupt 1 //定时器0定时中断/控制预置门宽度//{ dt=dt+1;if(dt==6){p20=0; cl=0; dt=0;}else{ TH0=0x00; TL0=0x00; TR0=1; //T0继续运行//}}//////////////////////////////////////////////外部中断1处理子程序/////////////////////////////////////////////////////int1()interrupt 2 //外部中断1子程序,设。

35、置测量结束标志位//{ flag=1; }////////////////////////////////////////////脉宽测量控制子程序///////////////////////////////////////////////////////////maikuan() //脉宽测量子程序//{ if(flag==1) //判断需测脉宽的正负//{p20=1; p25=0; }else {p20=0; p25=0;}}////////////////////////////////////脉宽测量正负及频率测量连续控制子程序///////////////////////////////////lianxu() //脉宽测量正负控制子程序//{ flag0=!flag0 }///////////////////////////////////////////////占空比测量控。

36、制子程序/////////////////////////////////////////////////////zhankongbi() //占空比的测量子程序//{ flag0=1; //分别测出正负脉宽的宽度用来计算占空比//maikuan(); cepindushu();ip6=*ip1; flag0=0;maikuan(); cepindushu(); *ip2=*ip1; *ip1=ip6;}/////////////////////////////////////////////////计数器计数值读取子程序///////////////////////////////////////////////cepindushu() //测量频率读数//{ uchar bdata i; uchar bdata j;for(i=0x00;i<=0x07;i++){ j=0x8f&。

37、P2; i=i<>4; in[i]=P0;}}//////////////////////////////////////////////////////频率计算子程序/////////////////////////////////////////////////////pinlvjisuan() //频率计算公式//{ ip3=(5000000/ip6)*ip7; }////////////////////////////////////////////////////////周期计算子程序//////////////////////////////////////////////////////zhouqijisuan() //周期计算公式//{ ip3=ip6/(50000000*ip7); } /////////////////////////////////////。

38、///////////////////脉宽计算子程序//////////////////////////////////////////////////////maikuanjisuan() //脉宽计算//{ ip3=ip6/50000000; } //////////////////////////////////////////////////////占空比计算子程序///////////////////////////////////////////////////zhankongbijisuan() //占空比计算//{ ip3=ip7/(ip7+ip6); }/////////////////////////////////////////////////////////数制转换子程序///////////////////////////////////////////////。

39、//////zhuanhuan(){ float ip3=0.1234567;float data czheng; //存放计算结果中的整数部分//ulong data zheng;uchar data outwei=7; //用于控制十进制数的存储位置//ulong data qz=1; //用于整数十进制的转换//ulong data qz1;uchar data weishu; //判断结果整数部分的位数//uchar data wei,wei1,wei2;float data ip4;zheng=(ulong)czheng; //将实型数zheng强制转换为ulong型// if(zheng>=10000000) weishu=8;else if(zheng>=1000000) weishu=7;else if(zheng>=100000) weishu=6;el。

40、se if(zheng>=10000) weishu=5;else if(zheng>=1000) weishu=4;else if(zheng>=100) weishu=3;else if(zheng>=10) weishu=2;else if(zheng>=1) weishu=1;else weishu=0;for(wei=1;wei<=weishu;wei++){ for(wei1=2;wei1<=weishu-wei2;wei1++) {qz=qz*10;}qz1=qz;out[outwei]=(uchar)(zheng/qz); //乘方怎么表示?//qz=1;zheng=zheng%qz1;outwei=outwei-1;wei2=wei2+1;}outwei=outwei+1;if(weishu==0){outwei=outwei-1。

41、; out[outwei]=0x10;}}////////////////////////////////////////////////////////数据输出子程序//////////////////////////////////////////////////////shuchu(){ SCON=0x00; ES=1; SBUF=out[so];while(so<=7){if(so==7) {so=0; ES=0; if(kv==0&&flag==0) cepin(); }}}///////////////////////////////////////////////串行口中断处理子程序/////////////////////////////////////////////////////ss()interrupt 4{ TI=0; so=so+1; SBUF=out[s。

42、o];}/////////////////////////////////////////////////////////复位程序////////////////////////////////////////////////////////////////fuwei(){ TMOD=0x21; //定时器0,1分为工作方式1,2//TCON=0x03; //外部中断触发方式均为下降沿触发//SCON=0x00; //串口工作方式0//IE=0x8f; //中断允许设置//IP=0x10; //中断优先级设置//TH1=0x05; //定时器1初始化并运行//TL1=0x05;TR1=1;shuchu(); //串行输出显示将与显示BCD数据同时输出//p27=1; //as选择自校验//p21=0; //清0//p21=1;flag0=1; //一次测频//cepin();while(flag==0) //读数没结束/测量前是否也应该将标志位flag初始化//{; }cepindushu();p27=0; //as恢复测频//flag=0; //为1时结束测量//if(*ip1==*ip2&&*ip1!=0) //两计数器相等且不为0//{ for(ok=0;ok<=7;ok++) out[ok]=0x08;}else{ for(ok=0;ok<=7;ok++) out[ok]=0x0a;}ok=0; shuchu();}。

关 键 词:
频率计 设计 fpga 精度 数字 基于
 ope平台t所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于FPGA的等精度数字频率计设计.docx
链接地址: /s-62276166.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给ope平台t发消息,QQ:3074922707 - 联系我们

本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。本站是网络服务平台方,若您的权利被侵害,侵权客服QQ:3074922707 欢迎举报。

3074922707@qq.com 2017-2027 网站版权所有

 

收起
展开