基于FPGA的纳秒量级脉冲宽度精确测量研究

合集下载

基于FPGA的电子秒表设计资料

基于FPGA的电子秒表设计资料

基于FPGA的电子秒表设计摘要简而言之,电子秒表的工作原理就是不断输出连续脉冲给加法计数器,而加法计数器通过译码器来显示它所记忆的脉冲周期个数。

电子秒表是日常生活中比较常见的电子产品。

本设计秒表的逻辑结构主要由74LS00, 555定时器,RS 触发器,74LS90等器件组成。

使用了基本RS触发器作为电子秒表的开关,基本RS触发器属低电平直接触发的触发器,有直接置位,复位的功能。

整个秒表需有一个清零/ 启动信号和一个停止/保持信号装置,以便秒表能随意停止及启动,计数器的输出全都为BCD码输出,方便显示译码器连接。

本设计基于简单易行的原则,秒表显示以0.01s为最小单位,设计时,按照设计任务的次序,将各单元电路逐个进行接线和调试,即分别测试基本RS触发器、时钟发生器及计数器的逻辑功能,待各单元电路工作正常后,再将有关电路逐级连接起来进行测试……,直到测试电子秒表整个电路的功能。

最后进行总结.做到经典而没有缺憾的设计结果。

关键字:74LS00 555定时器 RS触发器 BCD码目录摘要 (1)一、引言 (3)(一)设计的背景 (3)(二)设计实现的基本功能 (4)(三)设计的结构安排 (4)二、系统硬件设计 (5)(一)总体设计 (5)(二)555定时器简简介 (9)(三)基本RS触发器 (10)(四)功能测试 (12)三、系统软件设计 (14)(一) 设计方案 (14)(二)分频模块 (14)(三)计数模块 (16)(四)启停控制模块 (17)(五)显示控制模块 (18)(六)编译仿真 (19)参考文献 (22)致谢 (23)一、引言(一)设计的背景秒表计时器是电器制造,工业自动化控制、国防、实验室及科研单位理想的计时仪器,他广泛应用于各种继电器、电磁开关、控制器、延时器、定时器等的时间测试。

有关电子秒表的发展历史,大致可以分为三个演变阶段。

1、从大型钟向小型钟演变。

2、从小型钟向袋表过度。

3、从袋表向腕表发展。

基于FPGA的高精度脉冲信号参数测量仪设计

基于FPGA的高精度脉冲信号参数测量仪设计

基于FPGA的高精度脉冲信号参数测量仪设计作者:吴正平朱寿羽郭家琪查彬来源:《电子技术与软件工程》2016年第20期摘要针对高精度脉冲信号的幅度、频率、占空比以及上升时间等参数测量的要求,主要是以FPGA为核心处理器,STM32作为人机交互单元,对经过信号处理模块处理过的脉冲信号进行测量、处理,参数设置以及显示。

最终在50 输入阻抗的条件下,能够测量5Hz-10MHz 的脉冲信号;占空比:1%-99%;幅度:0.1V-10V;脉冲上升时间:40-999ns误差绝对值分别小于0.01%、0.1%、0.1%、1%;并在此基础上制作一个标准矩形脉冲信号发生器,各参数范围可调,且精度高,可靠性好,具有很高的应用价值。

【关键词】等精度脉冲 FPGA STM321 引言在目前科技高速发展的大背景下,进而对于脉冲信号测量精度的相关要求也越来越高,对脉冲信号参数测量的仪器应用也越来越广泛。

尤其是在雷达信号等在微弱信号领域以及在检测各种环境下时钟信号时对于脉冲信号检测的精度要求很高,所以说像一些先进的军用侦察机、反潜机只有少数几个国家能够做出来,就是因为这些技术的核心就是对小信号检测的分析处理技术要求十分高。

脉冲信号包含了丰富的高频和低频成分。

在数据采集系统中,通常需要脉冲信号源提供的信号来检测数据采集设备的工作状况。

此外,脉冲信号源产生的信号还可以作为控制信号,用于实现对采集设备的控制。

因此,在实际应用中要准确的测量各种脉冲信号就显得尤为重要。

本文针对的高速脉冲信号的测量要求和方法,采用FPGA为主核心处理器,STM32为人机交互协调控制器,通过外围信号调理和整形电路对被测信号进行放大和整形,便于FPGA的实时准确采样。

同时为了便于系统自校准和对外信号输出需要,本文还特别设计了标准矩形脉冲信号发生器,输出信号频率、幅度、脉宽在较大范围内皆可调,同时将脉冲信号上升时间控制在20ns以内,并且使其过冲不大于1%。

2 系统设计原理及测量方案2.1 系统设计原理高速脉冲信号的测量主要包括对脉冲信号的频率、幅度、占空比、及其上升时间的测量。

基于FPGA脉冲宽度测量仪

基于FPGA脉冲宽度测量仪

目录一、引言 (1)二、方案设计与论证 (2)方案一:基于单片机AT89C51的设计 (2)方案二:基于定时/计数器的设计 (2)方案三:基于FPGA的设计 (3)三、总体设计 (4)基本原理 (4)系统总框图 (4)四、各模块设计及程序 (5)顶层模块 (5)分频模块 (6)脉冲检测模块 (6)计数器模块 (7)3/8译码器模块 (7)七段码译码器模块 (8)五、调试及数据分析 (9)波形仿真图 (9)数据分析表 (9)六、结论 (9)附:参考文献 (10)一、引言在电子技术及其应用领域中,常需要对各种系统工作的时间特性进行分析测量,如图一给出的这种时间特性示意图,其中t表示时间脉冲宽度,即指脉冲起始时间和终止时间的持续时间。

T表示一个工作周期,即从脉冲的一个上升沿到下一个上升的时间。

图一脉冲宽度与周期在测量与仪器仪表领域,经常需要对数字信号的脉冲宽度进行测量,如转速传感器、外部系统的门控与选通脉冲,以及PWM (脉冲宽度调制)输入的频率等。

因此可以说脉冲宽度和周期是关于脉冲的重要指标。

无论是模似电路还是数字电路,往往都需要对脉冲宽度进行测量。

二、方案设计与论证方案一:基于单片机AT89C51的设计利用定时器的门控信号GATE进行控制可以实现脉冲宽度的测量。

对定时器T1来讲,如果GATE=0,必须使软件控制位TR1=1,且INT1为高电平方可启动定时器T1,即定时器T1的启动要受外部中断请求信号INT1的影响。

利用此特点,被测脉冲信号从INT1端引入,其上升沿启动T1计数,下降沿停止T1计数。

定时器的计数值乘以机器周期即为脉冲宽度。

图二中给出了脉冲宽度测量的原理图。

为低时启动T1为高则等待图二方案一原理图方案二:基于定时/计数器的设计计数法测量脉冲周期原理框图如图三所示,被测信号为方波脉冲,以此方波脉冲控制门控电路,使主门开放时间等于被测信号周期 TX ,由晶体振荡器(或经分频电路)输出周期为 TS 的时标脉冲在主门开放时间进入计数器,这种测量方法将被测信号周期TX 与 TS 时标进行比较,若在TX 期间内,计数器的计数值为N,则TX=NTS为被测信号的周期。

基于FPGA的脉冲信号参数测量仪设计

基于FPGA的脉冲信号参数测量仪设计

基于FPGA的脉冲信号参数测量仪设计作者:虞昊迪来源:《数字技术与应用》2017年第03期摘要:本文提出一种脉冲信号参数测量仪的设计方案,介绍以FPGA作为控制核心,实现脉冲信号的幅值、频率、占空比、上升与下降时间参数测量。

本方案测量信号参数的方法是将待测信号经过电阻分压,精密半波整流,ADC直接对运放输出端进行采样,从而测得信号幅值。

待测信号通过高速电压比较器分别与10%、90%峰值比较,比较结果送FPGA,利用FPGA的定时计数功能,获得频率值、占空比以及脉冲信号上升、下降时间tr。

关键词:脉冲信号参数测量仪;FPGA;信号发生器中图分类号:TM935.4 文献标识码:A 文章编号:1007-9416(2017)03-0173-03Abstract:This paper presents a design of pulse parameters tester programme, introduction to FPGA is used to control, achievement of pulse amplitude, frequency, duty cycle, rise and fall time measurement. Measuring method of signal parameters of this programme is to signal to be measured resistance voltage, precision half-wave rectifier, ADC sampling the op-amp output terminal directly, which measured signal amplitude. Signals to be detected by a high-speed voltage comparator separately compared with the peak 10%, 90%, comparing results to FPGA, FPGA timer counting function, access to frequency, duty cycle and the pulse rise and fall time tr。

基于FPGA的脉冲信号参数测量系统设计

基于FPGA的脉冲信号参数测量系统设计

基于FPGA的脉冲信号参数测量系统设计基于FPGA的脉冲信号参数测量系统设计是一种利用FPGA(Field Programmable Gate Array)芯片来实现脉冲信号参数测量的系统。

脉冲信号参数包括脉冲宽度、频率、占空比等,这些参数广泛应用于通信、雷达、无线电和其他各种应用领域中。

该系统的设计包括以下几个方面:一、信号采集和预处理系统需要首先采集脉冲信号,并进行预处理。

采集可以通过连接外部传感器或电路来实现,传感器/电路将信号转换成电压或电流,并通过模拟到数字转换器(ADC)将采样的信号转化成数字信号。

预处理阶段可以包括滤波去噪、放大/衰减等。

二、数字信号处理经过信号采集和预处理后,系统需要对数字信号进行处理,提取脉冲信号的参数。

这可以通过在FPGA上实现一些数字信号处理(DSP)算法来完成。

常见的DSP算法包括傅里叶变换、滤波、边沿检测等。

通过这些算法,系统可以实时地分析脉冲信号,提取出脉冲宽度、频率、占空比等参数。

三、参数显示和输出提取出的脉冲信号参数需要以可视化的方式显示出来,便于用户观察和分析。

可以通过连接显示器或其他输出设备来实现参数的显示。

此外,系统还可以通过串口、以太网等方式输出参数,以便于进一步的数据分析和处理。

四、参数控制和配置系统还可以提供参数控制和配置的功能。

用户可以通过操作面板或其他方式输入参数配置,例如采样率、滤波器类型、显示方式等。

系统可以根据用户配置的参数来调整相应的处理算法和显示方式。

基于FPGA的脉冲信号参数测量系统的设计,可以利用FPGA芯片的高度可编程性和并行计算能力来实现实时处理和高精度的脉冲信号参数测量。

该系统还可以具有较高的灵活性和可扩展性,可以根据不同应用的需求对参数进行定制和调整。

总之,基于FPGA的脉冲信号参数测量系统设计是一种利用FPGA芯片来实现脉冲信号参数测量的系统,通过信号采集和预处理、数字信号处理、参数显示和输出以及参数控制和配置等模块的设计和实现,能够提供高性能和高精度的脉冲信号参数测量功能。

一种基于FPGA的脉冲宽度精确测量方法

一种基于FPGA的脉冲宽度精确测量方法

脉冲计数法就是在待测脉冲宽度 内对 时钟脉冲进
1 引言
在工程应用 中, 经常需要对数字信号 的脉 冲 宽度进行测量 , 笔者在工作 中就需要对 由光信号 转换过来的电信号的脉冲宽度进行测量 。为了更
好地满足工程应用的需 求 , 就需要提高测量 的精 度 。本文正是为适应这一需求设计 出基于 F G PA 的脉冲宽度精确测量方案。
行计数( 一般是对时钟脉冲的上升沿计数 , 下面的 介绍以对上升沿进行计数为例)计数值 Ⅳ与时钟 ,
周期 相乘就可以得到脉冲宽度的数值。这是 比
较简单和常用 的测量脉 冲宽度 的方法 , 这一方法
的误差来源于待测脉冲的前沿和后沿与相邻时钟 上升沿 的时间差 t, , t 最大误差为一个时钟周期
的测量精度 , 时钟频率则需要达到 1G z这在实 H , 际工程中应用起来 比较 困难。本文在脉冲计数法 的基础上 , 出运用数 字移相技 术并结合 F G 提 PA
作者简介 : 晓辉(9 0 ) 男, 仵 18 一 , 工程 师 , 毕业于上海 交通大学 , 究方向: 研 信息处理。
2 4




第3 期
计数值 待 测信号
C LK广一 i 厂—] ] 广— ] 广—- 1 1 厂—] 广—]
1 广r] _ 厂—]
广— ] 厂—] . 厂—] i 广 广—] 广—] 厂—] i 广 5
广—] 厂—] I 可
5 6

厂—]

l 广-]
广]
厂—]
广-]
! n
盯—]
几 门 广 1 几 等效时钟 n ni 门 门 门 J 门 门 门 门 门 门 门 门 门 门 = 门 门 几 门 n 几 21

基于FPGA的脉宽测量

基于FPGA的脉宽测量

FPGA设计基础篇FPGA设计基础篇基于FPGA的脉宽测量著:开源达人时间:2016年12月14日目录1.脉宽测量 (3)1.1简介 (3)1.2代码解析 (3)1.脉宽测量1.1简介脉宽测量:测量出PWM波高电平或低电平的宽度。

主要应用:脉宽调制的解调占空比测量频率测量1.2代码解析脉宽测量案例1:VHDL 案例工程在如下文件夹中(1_Foundation_course_of_FPGA_Design\example\Chapter7\Pulse_width_measu re_VHDL)该案例采用的是1M采样频率,案例采用RTL描述--------------------------------------------------------design name :Pulse_width_measure--use :脉宽测量(脉宽调制的解调占空比测量频率测量)--build time :2016/12/14--version :V0.1--change note :--V0.1 首次建立 2016年12月14日-----------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Pulse_width_measure isport(clk :in std_logic;--系统时钟输入rst :in std_logic;--系统复位输入pulse_in :in std_logic;--脉冲输入pulse_h_reg :out s td_logic_vector(15 downto 0);--脉冲高电平脉宽寄存器pulse_l_reg :out s td_logic_vector(15 downto 0) --脉冲低电平脉宽寄存器);end Pulse_width_measure;architecture Behavioral of Pulse_width_measure issignal pulse_in_d1 :std_logic;--脉冲输入第1级D触发器signal pulse_in_d2 :std_logic;--脉冲输入第2级D触发器signal pulse_posedge :std_logic;--上升沿标志位signal pulse_negedge :std_logic;--下降沿标志位signal pulse_h_counter :std_logic_vector(15 downto 0);--高电平脉宽计数器signal pulse_l_counter :std_logic_vector(15 downto 0);--低电平脉宽计数器signal pulse_h_cache :std_logic_vector(15 downto 0);--高电平脉宽缓存寄存器signal pulse_l_cache :std_logic_vector(15 downto 0);--低电平脉宽缓存寄存器signal sampling :std_logic;--采样频率使能信号signal sampling_counter :integer range 0 to 59;--1M采样频率配置(此参数可配置成不同的采样速度)采样速度在1Mhz时,推荐输入脉冲频率在20HZ~10Khz之间signal reg_en :std_logic;--寄存器输出使能信号signal reg_en_counter :integer range 0 to 2;--脉冲个数监测计数器,脉冲输入一个完整周期后再输出计数器的值,防止起始占空比计算值抖动begin---------------------脉冲输入第1级D触发器代码---------------------process(clk,rst)beginif(rst = '1')thenpulse_in_d1 <= '0';elsif(clk'event and clk = '1')thenpulse_in_d1 <= pulse_in;end if;end process;-------------------------------------------------------------------------------------脉冲输入第2级D触发器代码---------------------process(clk,rst)beginif(rst = '1')thenpulse_in_d2 <= '0';elsif(clk'event and clk = '1')thenpulse_in_d2 <= pulse_in_d1;end if;end process;--------------------------------------------------------------------------------------上升沿下降沿标志位代码----------------------- process(clk,rst)beginif(rst = '1')thenpulse_posedge <= '0';pulse_negedge <= '0';elsif(clk'event and clk = '1')thenif(pulse_in_d2 = '0' and pulse_in_d1 = '1')then--上升沿pulse_posedge <= '1';pulse_negedge <= '0';end if;if(pulse_in_d2 = '1' and pulse_in_d1 = '0')then--下降沿pulse_posedge <= '0';pulse_negedge <= '1';end if;end if;end process;------------------------------------------------------------------------------------------采样频率配置代码------------------------ process(clk,rst)beginif(rst = '1')thensampling <= '0';sampling_counter <= 0;elsif(clk'event and clk = '1')thenif(sampling_counter = 59)then --配置成1Msampling_counter <= 0;sampling <= '1';elsesampling_counter <= sampling_counter + 1;sampling <= '0';end if;end if;end process;--------------------------------------------------------------------------------------高电平脉宽计数器代码------------------------- process(clk,rst)beginif(rst = '1')thenpulse_h_counter <= x"0000";elsif(clk'event and clk = '1')thenif(sampling = '1')thenif(pulse_posedge = '1')thenif(pulse_h_counter = x"ffff")then --脉宽限定,不要超出寄存器范围pulse_h_counter <= x"ffff";elsepulse_h_counter <= pulse_h_counter +1;end if;elsepulse_h_counter <= x"0000";end if;end if;end if;end process;--------------------------------------------------------------------------------------低电平脉宽计数器代码------------------------process(clk,rst)beginif(rst = '1')thenpulse_l_counter <= x"0000";elsif(clk'event and clk = '1')thenif(sampling = '1')thenif(pulse_negedge = '1')thenif(pulse_l_counter = x"ffff")then --脉宽限定,不要超出寄存器范围pulse_l_counter <= x"ffff";elsepulse_l_counter <= pulse_l_counter +1;end if;elsepulse_l_counter <= x"0000";end if;end if;end if;end process;--------------------------------------------------------------------------------------脉宽寄存器寄存代码--------------------------process(clk,rst)beginif(rst = '1')thenpulse_h_cache <= x"0000";pulse_l_cache <= x"0000";elsif(clk'event and clk = '1')thenif(pulse_in_d2 = '0' and pulse_in_d1 = '1')then--上升沿时寄存低电平脉宽pulse_l_cache <= pulse_l_counter;end if;if(pulse_in_d2 = '1' and pulse_in_d1 = '0')then--下降沿时寄存高电平脉宽pulse_h_cache <= pulse_h_counter;end if;end if;end process;------------------------------------------------------------------------------------脉宽寄存器输出代码--------------------------process(clk,rst)beginif(rst = '1')thenpulse_h_reg <= x"0000";pulse_l_reg <= x"ffff";elsif(clk'event and clk = '1')thenif(pulse_l_cache < x"ffff" and pulse_h_cache < x"fff" )thenif( pulse_in_d1 = '0' and pulse_in_d2 = '1')then--下降沿输出,防止占空比计算值抖动pulse_h_reg <= pulse_h_cache + 1;pulse_l_reg <= pulse_l_cache + 1;end if;elsepulse_h_reg <= x"0000"; --超过寄存器限制后占空比为0pulse_l_reg <= x"ffff";end if;end if;end process;end Behavioral;仿真分析:该案例仿真主时钟为60M,采样频率1M对一个20K的方波进行脉宽测量,一个周期后可见高地电平脉宽均为25,仿真结果正确。

基于FPGA的脉冲信号参数测量仪的设计与实现

基于FPGA的脉冲信号参数测量仪的设计与实现

88科技纵览Overview of science■ 王珩 王启强基于FPGA 的脉冲信号参数测量仪的设计与实现摘要:本设计是基本于FPGA 设计制作的一款高精度的脉冲信号参数测量仪。

通过前级辅助电路对原信号进行调理,实现了对频率为1Hz~10MHz、幅值为0.1V~10V 的周期性矩形脉冲信号的频率、占空比、幅值以及上升沿时间等参数的实时测量,并送至数码管显示。

使用msp430f169单片机控制AD9850(DDS)模块产生标准矩形脉冲信号,作为脉冲信号参数测量仪的附加功能。

关键词:FPGA,脉冲信号,msp430f169,AD9850随着科学技术的发展,对脉冲信号的测量要求也越来越高。

尤其在现代战争中电子侦察就是基于迅速准确的脉冲信号参数的测量,所以我们研究脉冲信号参数的测量有重要意义。

本文是基于FPGA 提出的一种脉冲信号参数测量仪的设计。

可以实现小幅度、高频率脉冲信号的测量。

1系统总体设计图1 系统整体框图本系统采用模块化设计,主要分为四个模块,(1)前级信号衰减模块;(2)FPGA 信号处理测量模块,对各功能进行相应的逻辑运算和数据处理。

(3)数码管显示模块,将FPGA 测量的各个功能的数据,通过拨码开关准确的显示。

(4)使用msp430f169单片机控制DDS 模块,产生标准矩形脉冲信号,作为本设计的附加功能。

系统整体框图如图1所示。

2测量原理2.1频率测量原理所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。

基于这一原理可以使用单位时间内对被测信号进行计数的方法求得对该信号的频率测量。

首先,由一个高稳定的石英振荡器和一系列数字分频器组成时基信号发生器,具有固定宽度T 的方波时基信号作为闸门的一个输入端,控制闸门的开放时间,被测信号从闸门另一端输入,被测信号频率为f,闸门宽度T,若在闸门时间内计数器计Z 的脉冲个数为N,则被测信号频率f=N/T Hz。

而门控信号的作用时间T 是非常准确的(由石英振荡器决定)。

基于FPGA的脉冲信号测量仪的设计

基于FPGA的脉冲信号测量仪的设计

link appraisement
柳志远 (1995-),男,汉族,浙江温州人,浙江海洋大学,船舶与机电工
程学院,本科,主要研究方向为信号处理。

图1
析,由这两路方波的相位差就可以计算出上升时间。

占空比测量
待测脉冲信号的占空比参数也可以通过多周期同步测量法测频率参数的同时直接得到如图1所示
系统整体设计
频率为1M
信号幅值测量结果如上,可以看出在固定待测信号频率、占空比其中一个参数的同时改变另一个,且不论高频还是低
3.2.2:幅值为1V
信号占空比测量结果如上,可以看出在固定待测信号频率、幅值其中一个参数的同时改变另一个,且不论是高频还
幅值为1V
信号频率测量结果如上,可以看出在固定待测信号幅值、占空比其中一个参数的同时改变另一个,且不论是高占空比
占空比为50
信号占空比测量结果如上,可以看出在固定待测信号频率、幅值其中一个参数的同时改变另一个,上升时间参数的
图2。

基于FPGA的纳秒级微细电解加工脉冲电源的研制

基于FPGA的纳秒级微细电解加工脉冲电源的研制

基于FPGA的纳秒级微细电解加工脉冲电源的研制梁劲斐;于兆勤;郭钟宁【摘要】To the demand of micro electrochemical machining accuracy, a nanosecond power supply was developed which suitable for micro electrochemical machining. To utilize FPGA inside high-frequency clock to generate high-frequency pulse signal, acquire nanosecond pulse through amplify and chopping. The pulse frequency has wide range to regulate. For short-circuit protection, programming in FPGA to deal with sampling signal and output the feedback signal. When employed this power supply to carry out some experiments,verified the feasibility of the power supply.%针对微细电解加工的精度要求,研制出适合于微细电解加工的纳秒级脉冲电源。

利用FPGA内部的高频时钟产生出高频的脉冲信号,经放大和斩波后得到纳秒级脉冲,脉冲频率调节范围较宽。

采样信号经FPGA内部编程处理后输出反馈信号实现短路保护。

使用该电源进行相关的工艺试验,验证了电源的可行性。

【期刊名称】《机电工程技术》【年(卷),期】2013(000)009【总页数】4页(P87-90)【关键词】微细电解加工;FPGA;纳秒电源【作者】梁劲斐;于兆勤;郭钟宁【作者单位】广东工业大学,广东广州 510006;广东工业大学,广东广州 510006;广东工业大学,广东广州 510006【正文语种】中文【中图分类】TP230 前言随着微机电系统(Micro-Electro-Mechanical Systems,MEMS)的发展,微型复杂结构金属器件的应用范围越来越广,如生物医学和航空领域,因此微细加工技术成为现代工业的一个热点问题。

基于FPGA的脉冲信号参数高精度测量技术研究

基于FPGA的脉冲信号参数高精度测量技术研究
Zh a n g Y i d i
( Wu C o l l e g e o f S o u t h e a s t U n i v e r s i t y ,N a n j i n g , 2 1 1 1 8 9 ,C h i n a )
Ab s t r a c t :T h i s p a p e r p r e s e n t s a p u l s e s i g n l a p a r a me t e r me a s u in r g a p p a r a t u s b a s e d o n F P GA. T h e me a s u in r g a p p a r a t u s c a n
第2 4 卷
第1 期
仪器仪表用户
NS TR UM E NT A T Байду номын сангаас 0N
E I C V o 1 . 2 4
2 01 7 N o .1
2 0 1 7 年1 月
基 于F P GA 的脉 冲信 号参数 高精 度测 量技术研 究
张 一荻
( 东南大学 吴健雄学 院, 南京 2 1 1 1 8 9 )
摘 要 :本文介绍 了一种基 于F P G A的高频 脉冲信号 参数测试 系统 ,可高速 高精度测量 脉冲信号 的幅 度 、频 率 、占 空 比 、上升时 间等 参数 。装置利 用F P G A 的高速和 并行特点 ,实现脉冲信 号参数的高速采集 ;通过与单 片机 之间的 实时通信 ,进 一步增加了数据 的后 处理 能力 ; 采 用等精度测量等 一系列措施 ,有效提 高了测量精度 , 缩短 了测量时 间。实验 结果表明, 研 制的测试仪精度 高 、 可靠性好 、 误 差率低 , 可 用于电信号 参数 测量 、仪器检测等领域 。

基于FPGA的脉冲信号参数高精度测量技术研究

基于FPGA的脉冲信号参数高精度测量技术研究

基于FPGA的脉冲信号参数高精度测量技术研究摘要:随着现代科技的高速发展,对于脉冲信号测量精度和速度的相关要求也越来越高,例如:在电子侦察中,通过对雷达脉冲信号时域参数的高精度测量,可获取脉冲的相应细节,从而完成对目标的识别和定位。

因此,在实际应用中,准确测量各种脉冲信号参数就显得尤为重要。

但目前往往采用传统示波器对脉冲信号进行测试,这样很难达到对脉冲信号参数的全面、准确测量。

针对上述情况,本文设计了一种高速脉冲信号的高精度测试仪,仪器以FPGA为核心,通过与单片机之间的实时通信,可高速、高精度测量脉冲信号的频率、占空比、幅度、上升时间等。

关键词:FPGA;脉冲信号;参数高精度;测量技术1硬件电路设计高精度脉冲信号测试仪由频率信号调理电路、占空比信号调理电路、上升时间信号调理电路、幅值信号调理电路、现场可编程门阵列FPGA、单片微型计算机、显示器和标准矩形脉冲信号发生器等组成,由于FPGA核心频率可以达到几百MHz,并行处理能力强,非常适于处理高速信号,因此FPGA可以高速采集脉冲信号的频率、占空比、幅值、上升时间等数据,并通过与单片机之间的实时通信,将FPGA采集的数据传给单片机,由单片机对数据进行后续处理,再将测量结果在显示器上显示。

单片机采用MSP430单片机,该机在25MHz晶体的驱动下,可实现40ns的指令周期,从而实现数据的快速处理。

选用高速比较器TLV3501,比较器将输入的不同幅值脉冲信号整形成0V~3.3V的方波信号,再输入FPGA。

FPGA在闸门时间内分别对标准时钟信号和被测信号进行计数,然后根据2个计数器的计数值和标准信号的频率,即可计算出被测信号的频率。

为提高仪器灵敏度及频率最大测量范围,设置闸门时间t为1s,标准信号为FPGA所提供1MHz时钟信号。

测量占空比时,分别对被测信号的高电平和低电平用高频时钟脉冲进行计数,根据高、低电平计数值,即可计算出被测信号宽度。

单片机输出10%和90%幅值的2个数值,经D/A转换后输入高速比较器TLV3501,作为比器的2个阀值电压,被测信号电压分别与阀值电压进行比较,得到2路方波信号,将整形后的2路信号送入FPGA,采用测时间间隔的方法可得到上升时间。

基于FPGA的高速高精度频率测量的研究

基于FPGA的高速高精度频率测量的研究

基于FPGA的高速高精度频率测量的研究基于FPGA的高速高精度频率测量的研究摘要:以FPGA为核心的高速高精度的频率测量,不同于常用测频法和测周期法。

本文介绍的测频方法,不仅消除了直接测频方法中对测量频率需要采用分段测试的局际,而且在整个测试频段内能够保持高精度不变。

又由于采用FPGA芯片来实现频率测量,因而具有高集成度、高速和高可靠性的特点。

关键词:频率测量 FPGA 高精度引言在电子测量技术中,测频是最基本的测量之一。

常用的直接测频方法在实用中有较大的局限性,其测量精度随着被测信号频率的下降而降低,并且对被测信号的计数要产生±1个数字误差。

采用等精度频率测量方法具有测量精度,测量精度保持恒定,不随所测信号的变化而变化;并且结合现场可编程门阵列FPGA(Field Programmable Gate Array)具有集成度高、高速和高可靠性的特点,使频率的测频范围可达到0.1Hz~100MHz,测频全域相对误差恒为1/1 000 000,1 测频原理及误差分析常用的直接测频方法主要有测频法和测周期法两种。

(范文先生网收集整理)测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:fx=Nx/Tw。

测周期法需要有标准信号的频率fs,在待测信号的'一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:fx=fs/Ns。

这两种方法的计数值会产生±1个字误差,并且测试精度与计数器中记录的数值Nx或Ns有关。

为了保证测试精度,一般对于低频信号采用测周期法;对于高频信号采用测频法,因此测试时很不方便,所以人门提出等精度测频方法。

等精度测频方法是在直接测频方法的基础上发展起来的。

它的闸门时间不是固定的值,而是被测信号周期的整数倍,即与被测信号同步,因此,测除了对被测信号计数所产生±1个字误差,并且达到了在整个测试频段的等精度测量。

基于FPGA的脉宽测量

基于FPGA的脉宽测量

FPGA设计基础篇FPGA设计基础篇基于FPGA的脉宽测量著:开源达人时间:2016年12月14日目录1.脉宽测量 (3)1.1简介 (3)1.2代码解析 (3)1.脉宽测量1.1简介脉宽测量:测量出PWM波高电平或低电平的宽度。

主要应用:脉宽调制的解调占空比测量频率测量1.2代码解析脉宽测量案例1:VHDL 案例工程在如下文件夹中(1_Foundation_course_of_FPGA_Design\example\Chapter7\Pulse_width_measu re_VHDL)该案例采用的是1M采样频率,案例采用RTL描述--------------------------------------------------------design name :Pulse_width_measure--use :脉宽测量(脉宽调制的解调占空比测量频率测量)--build time :2016/12/14--version :V0.1--change note :--V0.1 首次建立 2016年12月14日-----------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Pulse_width_measure isport(clk :in std_logic;--系统时钟输入rst :in std_logic;--系统复位输入pulse_in :in std_logic;--脉冲输入pulse_h_reg :out s td_logic_vector(15 downto 0);--脉冲高电平脉宽寄存器pulse_l_reg :out s td_logic_vector(15 downto 0) --脉冲低电平脉宽寄存器);end Pulse_width_measure;architecture Behavioral of Pulse_width_measure issignal pulse_in_d1 :std_logic;--脉冲输入第1级D触发器signal pulse_in_d2 :std_logic;--脉冲输入第2级D触发器signal pulse_posedge :std_logic;--上升沿标志位signal pulse_negedge :std_logic;--下降沿标志位signal pulse_h_counter :std_logic_vector(15 downto 0);--高电平脉宽计数器signal pulse_l_counter :std_logic_vector(15 downto 0);--低电平脉宽计数器signal pulse_h_cache :std_logic_vector(15 downto 0);--高电平脉宽缓存寄存器signal pulse_l_cache :std_logic_vector(15 downto 0);--低电平脉宽缓存寄存器signal sampling :std_logic;--采样频率使能信号signal sampling_counter :integer range 0 to 59;--1M采样频率配置(此参数可配置成不同的采样速度)采样速度在1Mhz时,推荐输入脉冲频率在20HZ~10Khz之间signal reg_en :std_logic;--寄存器输出使能信号signal reg_en_counter :integer range 0 to 2;--脉冲个数监测计数器,脉冲输入一个完整周期后再输出计数器的值,防止起始占空比计算值抖动begin---------------------脉冲输入第1级D触发器代码---------------------process(clk,rst)beginif(rst = '1')thenpulse_in_d1 <= '0';elsif(clk'event and clk = '1')thenpulse_in_d1 <= pulse_in;end if;end process;-------------------------------------------------------------------------------------脉冲输入第2级D触发器代码---------------------process(clk,rst)beginif(rst = '1')thenpulse_in_d2 <= '0';elsif(clk'event and clk = '1')thenpulse_in_d2 <= pulse_in_d1;end if;end process;--------------------------------------------------------------------------------------上升沿下降沿标志位代码----------------------- process(clk,rst)beginif(rst = '1')thenpulse_posedge <= '0';pulse_negedge <= '0';elsif(clk'event and clk = '1')thenif(pulse_in_d2 = '0' and pulse_in_d1 = '1')then--上升沿pulse_posedge <= '1';pulse_negedge <= '0';end if;if(pulse_in_d2 = '1' and pulse_in_d1 = '0')then--下降沿pulse_posedge <= '0';pulse_negedge <= '1';end if;end if;end process;------------------------------------------------------------------------------------------采样频率配置代码------------------------ process(clk,rst)beginif(rst = '1')thensampling <= '0';sampling_counter <= 0;elsif(clk'event and clk = '1')thenif(sampling_counter = 59)then --配置成1Msampling_counter <= 0;sampling <= '1';elsesampling_counter <= sampling_counter + 1;sampling <= '0';end if;end if;end process;--------------------------------------------------------------------------------------高电平脉宽计数器代码------------------------- process(clk,rst)beginif(rst = '1')thenpulse_h_counter <= x"0000";elsif(clk'event and clk = '1')thenif(sampling = '1')thenif(pulse_posedge = '1')thenif(pulse_h_counter = x"ffff")then --脉宽限定,不要超出寄存器范围pulse_h_counter <= x"ffff";elsepulse_h_counter <= pulse_h_counter +1;end if;elsepulse_h_counter <= x"0000";end if;end if;end if;end process;--------------------------------------------------------------------------------------低电平脉宽计数器代码------------------------process(clk,rst)beginif(rst = '1')thenpulse_l_counter <= x"0000";elsif(clk'event and clk = '1')thenif(sampling = '1')thenif(pulse_negedge = '1')thenif(pulse_l_counter = x"ffff")then --脉宽限定,不要超出寄存器范围pulse_l_counter <= x"ffff";elsepulse_l_counter <= pulse_l_counter +1;end if;elsepulse_l_counter <= x"0000";end if;end if;end if;end process;--------------------------------------------------------------------------------------脉宽寄存器寄存代码--------------------------process(clk,rst)beginif(rst = '1')thenpulse_h_cache <= x"0000";pulse_l_cache <= x"0000";elsif(clk'event and clk = '1')thenif(pulse_in_d2 = '0' and pulse_in_d1 = '1')then--上升沿时寄存低电平脉宽pulse_l_cache <= pulse_l_counter;end if;if(pulse_in_d2 = '1' and pulse_in_d1 = '0')then--下降沿时寄存高电平脉宽pulse_h_cache <= pulse_h_counter;end if;end if;end process;------------------------------------------------------------------------------------脉宽寄存器输出代码--------------------------process(clk,rst)beginif(rst = '1')thenpulse_h_reg <= x"0000";pulse_l_reg <= x"ffff";elsif(clk'event and clk = '1')thenif(pulse_l_cache < x"ffff" and pulse_h_cache < x"fff" )thenif( pulse_in_d1 = '0' and pulse_in_d2 = '1')then--下降沿输出,防止占空比计算值抖动pulse_h_reg <= pulse_h_cache + 1;pulse_l_reg <= pulse_l_cache + 1;end if;elsepulse_h_reg <= x"0000"; --超过寄存器限制后占空比为0pulse_l_reg <= x"ffff";end if;end if;end process;end Behavioral;仿真分析:该案例仿真主时钟为60M,采样频率1M对一个20K的方波进行脉宽测量,一个周期后可见高地电平脉宽均为25,仿真结果正确。

采用FPGA芯片实现了高精度脉宽测量的方式浅析

采用FPGA芯片实现了高精度脉宽测量的方式浅析

采用FPGA芯片实现了高精度脉宽测量的方式浅析测量领域以及仪表仪器领域中,对数字信号的测量主要便是对其信号脉冲宽度进行测量。

目前使用最多的方式便是脉冲计数的方式,即通过高频时钟脉冲在待测信号的低电平处或者高电平处进行计数,然后依照脉冲数量,通过计算的方式得到信号宽度,待测信号独立于计数时钟,其信号的上升以及下降沿无法同时钟边沿准确的吻合,所以,该方式得到的误差最大值可以达到一个时钟周期。

例如,若是高频时钟为80MHz,那么其最大的误差量可以达到12.5ns。

脉冲计数法的精度也可以通过有效的方式予以提高,其思路如下:首先可以将计数时钟的频率予以提高,其次则是通过时幅转换技术对误差予以降低。

测量误差会随着时钟频率的的提高而减小,但是频率提高,相对便会对芯片的要求有所提高。

例如,若测量误差要求为1ns 时,其时钟频率必须达到1GHz,一般的计数芯片在这种状态下无法正常工作,并且电路板布线以及加工和材料选择都会成为难题。

而使用时幅转换技术就无需对时钟频率有所要求,但是该种方式使用了模拟电路,若是待测频率相对较高,那么测量结果很容易受到噪声的干扰,并且若要求是对信号脉宽进行连续测量,那么电路能否快速反应是该方式需要解决的一大弊病。

而同上述两种方式都不相同的是,文章论述了一种新型的方式,通过数字移相的方式,对脉宽测量精度予以提高。

该方式采用FPGA 芯片,实现了高精度脉宽测量。

1.测量原理两路同频信号以一路作为参考,将另一路以该路信号作为参考,进行滞后或者超前的移动,从而形成相应的相位差,这边是移相。

该种测量方式通常使用延时方法,通过对两数字信号之间产生的相位差以延时长短进行决定,这种测量原理的基础即数字移相技术。

原始计数时钟信号CLK0 通过移相后得到CLK90、CLK180、CLK270。

相位之间依次相差90°,通过这四路时钟信号对四个相同计数器进行同时驱动,从而完成信号计数。

2.系统实现计数时钟之间所具有的相位差是该系统保持正常运行的基础,原始时钟频率通常所具有的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第43卷第5期 2017年5月中国测试CHINA MEASUREMENT &TESTVol.43 No.5May,2017doi 院 10.n857/j.issn.1674-5124.2017.05.002基于FPGA的纳秒量级脉冲宽度精确测量研究于龙洋,刘晔,孙培钦,张耀匀(西安交通大学电气工程学院,陕西西安710049)摘要:为使测量光电开关发出的数字脉冲宽度的精度达到1n s和掌握光电开关的实时工作状态。

该文通过基于 FPGA精确测量法的直接计数法和移相计数法进行测量,得出移相计数法的测量误差在1n s左右,并验证其设计的正确性和有效性。

设计通信系统和上位机软件进行实时监控,通信系统采用成熟的串口 RS232通信方式,用PFGA设 计串口通信模块,实现将数据传输到工控机;再用LabVIEW编写上位机软件,便于工作人员直观观察数据并存储数据到Excel,实验结果证明测量系统可靠、有效。

关键词:纳秒量级;FPGA;串口通信;LabVIEW文献标志码:A文章编号:1674-5124(2017)05-0005-06A nanosecond level measurement method of pulse width based on FPGAYU Longyang,LIU Y e,SUN Peiqin,ZHANG Yaoyun(School of Electrical Engineering,Xi’an Jiaotong University,Xi’an 710049,China)Abstract:In order to make the width of digital pulse generated by photoelectric switch reach the precision of1ns approximately grasp the real-time working state of the photoelectric switch.This paper proposed two FPGA-based accurate measurement methods to measure the precision,directing counting method and phase shift counting method were included.The experiments show that the error of the phase shift counting method is about1ns,which verifies its correctness and effectiveness.The communication system and software of IPC were also designed in this paper.The communication system used a RS232 serial interface and the serial communication module transfers data to the IPC was designed by FPGA;IPC software was written by LabVIEW,which enables the data to be observed intuitively and stored to Excel easily.The experimental results show that the design of the system is correct and effective.Keywords:nanosecond;FPGA;serial communication;LabVIEW0引言随着控制技术的发展,精确监控光电开关的工作 状态是工程实际急需解决的问题,其测量精度达到 纳秒量级也是工业自动化技术发展到一定阶段的需 求。

文献[1]提出的基于DSP结合混沌算法实现的精收稿日期:2016-09-18曰收到修改稿日期:2016-11-20作者简介:于龙洋(1992-),男,陕西宝鸡市人,硕士研究生,专业方向为控制理论与科学。

度测量算法虽然有着广泛的应用前景,但是其系统 非常复杂,且成本高。

文献[2]提到利用铌酸锂晶体的 电光效应,其研制可用于测量纳秒量级脉冲电压的 传感器,但是其误差范围在5耀7 ns,达不到1n s的误 差要求。

文献[3]基于移相技术的脉冲宽度测量方法 能实现纳秒量级测量,且提供了测量数字脉冲的思 路,但所需晶振频率达到250 MHz,且FPGA芯片价 格昂贵,因此本文在此基础上进一步改进其移相技6中国测试2017年5月术算法来降低倍频时钟信号,实现低成本的可靠测 量系统。

论文在脉冲宽度测量方面采用了直接计数 法和移相技术法两种算法,并且设计了 FPGA与上位 机之间的通信。

通信系统采用成熟的串口 RS232通信 方式,LabVIEW在测量领域内是比较普遍的应用软 件,与C++等编程语言相比,其图形化语言易理解,存在一定优势。

1测量原理1.1直接计数法利用FPGA内部锁相环(PLL)模块将外部输人 晶振频率倍频到1GHz,使得周期变为1ns,将其时 钟作为计数器时钟对外部脉冲进行计数,这样其计数 误差最大不会超过1ns。

因此,使用FPGA内部计数 器对锁相环(PLL)倍频的1GHz进行计数从而达到纳 秒量级的精度,再等待光电开关产生的外部脉冲信 号进人[4-6]。

以光电开关产生的正脉冲为例,设置计数 器上升沿触发开始以PLL模块产生的1GHz进行计 数,以夕卜部脉冲的下降沿为结束。

计数结果为外部脉冲 宽度,其误差在1ns左右。

时钟为1GHz,一旦外部脉 冲产生其上升沿将触发计数器开始计数,等待外部脉 冲下降沿到来停止计数器工作,最终计数器累计数值 为测得外部脉冲宽度。

算法整体框图如图1所示。

图1直接计数法由于FPGA内部有许多IP核,如加法器、FIFO、PLL、COUNTER已经集成,不需要进行编程可以直接 设置需要的IP核,为实现各种算法提供了极大便利。

FPGA锁相环模块如图2所示。

PLL模块的inclkO为 外部输人晶振输人端,c0为PLL模块倍频输出端 口。

通过对PLL模块进行设置使c0达到1GHz。

计 数器模块如图3所示。

clock为时钟输人端,与c0相 连,cin为外部脉冲输人端,sclr为清除端,在外部脉 冲下降沿到来之后将计数器清0,以便对下一个到来 的外部脉冲重新计数。

q为32位的计数寄存器,用 于储存计数结果。

将计数器设置为上升沿使能从而 达到本次实验所需要求'为模拟产生一个外部脉冲,在FPGA内部模拟了一个高脉冲来测试搭建的测 量模块,设计了一个脉冲发生器,脉冲发生模块算 法流程如图4所示。

图中a与b为一个常量且a<b,Count为一个不断累积的变量,Sync为模拟脉冲输 出端。

pll1inclk0 inclkO frequency :50.000MHzOperation Mode : NormalClk Ratio Ph(dg)DC(%)c020/10.0050.00inst1 Cyclone IV E图2 PLL模块的配置图3 counter模块的配置图4脉冲发生器算法1.2移相计数法直接计数法使测量精度达到纳秒量级就必须使 用更为高端的FPGA芯片,其性价比不高。

本文介绍 一种基于FPGA的移相计数法,可以用中低端FPGA 实现其精度,从而极大地降低成本[7-8]。

为实现外部脉冲信号纳秒量级精确测量,本文 结合数字移相技术,设计了改进型移相脉冲宽度测 量技术,其优势在于FPGA无需倍频至1GHz,就能 实现1n s的误差精度。

由于FPGA内部锁相环(PLL)设置时钟多输出功能和各输出时钟相位功能,使得多第43卷第5期于龙洋等:基于FPGA的纳秒量级脉冲宽度精确测量研究7个时钟信号输出各产生一定的相位差来等效1GHz 的时钟信号。

原理如图5所示。

外部脉冲时钟45。

—45图5移相计数法测量原理通过FPGA内部锁相环移相功能,FPGA的晶振 所产生的50MHz时钟信号进行相邻信号依次相差 45。

处理,例如以第1路输出时钟信号CLK相位为0毅,那么其他信号则依次为CLK45〇、CLK9〇Q、CLK135。

、CLK180〇、CLK225〇、CLK270〇、CLK315。

,然后用 FPGA 内部锁相环多路输出功能产生这8路时钟信号,原 理如图6所示。

然后将8路信号分别驱动一个计数 器,8个计数器分别用N k N^N s、%、^、%、^和N8表示。

据此可以精确测量出外部脉冲宽度t,其计算 公式为t_N^+ N2+N3+ N4+N5+N6+N7+1= 8 f式中f为8路时钟信号的频率。

对8路时钟信号所驱动的计数器的计数值进行 相加相当于采用了 8倍频的时钟频率为8f的信号 来测量外部脉冲信号,即时钟信号的周期1/8,从而 在不提高时钟频率的情况下实现精度要求,其等效的 时钟信号如图6所示。

由图可见,在计数时钟频率为 125 MHz时,这种测量方法可得到时钟频率为1GHz 的等效时钟,从而使测量精度达到要求,并且大部分 中低端FPGA内部锁相环都可以实现125 MHz的时 钟信号。

文献[3]提到的4路输出移相的方法相当于 PLL模块要输出250 MHz的输出时钟频率,然而这 种频率在中低端FPGA的锁相环倍频不是很稳定,从 而使测量不精确,无法达到要求。

时钟45、—45。

—图6 1GHz等效的8路时钟信号移相测量方法依然在直接计数法的基础上,等 待外部脉冲到来,其上升沿使能8个计数器开始计 数,等到外部脉冲下降沿到来停止计数,将8个计数 值再通过FPGA内部的加法器相加,最终数值为数 字脉冲宽度。

总体算法框图如图7所示。

外部脉冲c0PLL1c4—r-外部晶振-—►PLL2c5c6c7PLL3 c8计数器1计数器2计数器3计数器4计数器5计数器6计数器7计数器8米样频率计数值h图7总体算法实验所使用的FPGA是在ALTERA公司的Quartus I I环境下选用Cyclone IV E系列的EP4CE15F17C8芯片进行设计并仿真[9-11],此芯片锁相环(PLL)模块 最多有5路时钟信号输出,因此必须使用两个锁相环 模块产生8路时钟信号,其中每个锁相环产生4路时 钟信号,第3个锁相环是为了产生采样频率而设置,由于每一路时钟信号的频率为125 MHz,根据香农8中国测试2017年5月采样定理,采样频率必须不低于最大采样信号的2倍, 所以经过多次实验用锁相环3产生300MHz 的采样 频率。

相关文档
最新文档