基于FPGA脉冲宽度测量仪.docx
《基于FPGA脉冲宽度测量仪.docx》由会员分享,可在线阅读,更多相关《基于FPGA脉冲宽度测量仪.docx(12页珍藏版)》请在冰点文库上搜索。
基于FPGA脉冲宽度测量仪
EDA课程报告
课题:
脉冲宽度测量仪
班级:
电信0901
姓名:
XXX
指导老师:
XXX
XXXX年XX月XX日
主要任务:
采用EDA技术,设计一个能测量脉冲信号宽度的系统。
系统图如下:
基本要求:
(1)脉冲信号宽度的测量精度为±1ms。
(2)脉冲信号宽度的测量范围为0~10s。
(3)调试过程中可以用按键模拟脉冲信号。
(4)测量值用5位数码管显示(可以采用静态显示)。
(5)输入信号为标准TTL电平。
(6)调试中既可以采用正脉冲,也可以采用负脉冲(任选其一)。
(7)必须先进行前仿真,并打印出仿真波形。
(8)按要求写好设计报告(设计报告内容包括:
引言,方案设计与论证,总体设计,各模块设计,调试与数据分析,总结)。
一、引言
在电子技术及其应用领域中,常需要对各种系统工作的时间特性进行分析测量,如图一给出的这种时间特性示意图,其中t表示时间脉冲宽度,即指脉冲起始时间和终止时间的持续时间。
T表示一个工作周期,即从脉冲的一个上升沿到下一个上升的时间。
图一 脉冲宽度与周期
在测量与仪器仪表领域,经常需要对数字信号的脉冲宽度进行测量,如转速传感器、外部系统的门控与选通脉冲,以及PWM(脉冲宽度调制)输入的频率等。
因此可以说脉冲宽度和周期是关于脉冲的重要指标。
无论是模似电路还是数字电路,往往都需要对脉冲宽度进行测量。
二、方案设计与论证
方案一:
基于单片机AT89C51的设计
利用定时器的门控信号GATE进行控制可以实现脉冲宽度的测量。
对定时器T1来讲,如果GATE=0,必须使软件控制位TR1=1,且INT1为高电平方可启动定时器T1,即定时器T1的启动要受外部中断请求信号INT1的影响。
利用此特点,被测脉冲信号从INT1端引入,其上升沿启动T1计数,下降沿停止T1计数。
定时器的计数值乘以机器周期即为脉冲宽度。
图二中给出了脉冲宽度测量的原理图。
图二 方案一原理图
方案二:
基于定时/计数器的设计
计数法测量脉冲周期原理框图如图三所示,被测信号为方波脉冲,以此方波脉冲控制门控电路,使主门开放时间等于被测信号周期TX,由晶体振荡器(或经分频电路)输出周期为TS的时标脉冲在主门开放时间进入计数器,这种测量方法将被测信号周期TX与TS时标进行比较,若在TX期间内,计数器的计数值为N,则TX=NTS为被测信号的周期。
图三 方案二原理框图
当计数脉冲来自高稳定度晶体振荡器,且振荡周期比被测脉冲宽度小2个以上数量级时,该方法的准确度很高。
计数器法可能产生的最大误差绝对值不超过计数脉冲周期。
方案三:
基于FPGA的设计
随着EDA技术的迅速发展,在EDA软件平台上,根据硬件描述语言VHDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合、优化、布局线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作成了脉冲测量的发展方向。
采用此种发法,设计者的工作仅限于利用软件的方式来完成对系统硬件功能的描述,在EDA工具的帮助下和应用相应的FPGA/CPLD器件,就可以得到最后的设计结果。
通常采用脉冲计数法,即在待测信号的高电平或低电平用一高频时钟脉冲进行计数,然后根据脉冲的个数计算待测信号宽度,如图四所示。
待测信号相对于计数时钟通常是独立的,其上升、下降沿不可能正好落在时钟的边沿上,因此该法的最大测量误差为一个时钟周期。
例如采用50MHz的高频时钟,最大误差为20ns。
图四 方案三原理图
分析可知,上述三种方案都能较准确的测得脉冲的宽度。
经比较方案三的优势更明显,所以选择方案三来设计。
三、总体设计
基本原理
根据设计要求,系统的输入信号有:
系统时钟信号CLK,系统复位信号CLR,脉冲输入信号P_IN,计数输出端。
当检测到P_IN端有脉冲输入时检测模块就会输出1,否则为0,输给计数模块的EN端,当各位累计到9时,会向十位进位,以此类推到万位。
最后由数码管显示脉冲的宽度。
图五 简易原理框图
系统总框图
系统组成方框图六所示,它由外部输入模块、检测模块和显示模块三部分组成。
检测模块是整个系统的核心,它由计数模块、控制模块、计量模块和译码显示模块构成。
图六 总框图
四、各模块设计及程序
顶层模块
图七顶层模块图
分频模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpingis
port(
Clk:
instd_logic;
Clk1:
outstd_logic;
Clk2:
outstd_logic
);
endfenping;
architecturebehaveoffenpingis
signaldiv2clk:
std_logic;
begin
process(Clk)
begin
ifClk'eventandclk='1'then
div2clk<=notdiv2clk;
Clk1<=notdiv2clk;Clk2<=div2clk;
endif;
endprocess;
endbehave;
脉冲检测模块
libraryieee;
useieee.std_logic_1164.all;
entityjianceis
port(
P_IN:
instd_logic;
EN_OUT:
outstd_logic);
endjiance;
architecturebehaveofjianceis
begin
process(P_IN)
begin
if(P_IN='1')thenEN_OUT<='1'; ---实现检测,若有脉冲就输出1
elseEN_OUT<='0';---否则为0
endif;
endprocess;
endbehave;
计数器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt10is
port(ENA:
instd_logic;
CLK:
instd_logic;
CLR:
instd_logic;
CQ:
outstd_logic;
Qout:
outstd_logic_vector(3downto0)
);
endcnt10;
architectureartofcnt10is
signalCQI:
STD_LOGIC_VECTOR(3downto0);
begin
U1:
process(CLK,CLR,ENA,CQI)
BEGIN
IFCLR='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI="1001"THENCQI<="0000";
ELSECQI<=CQI+'1';
ENDIF;
ENDIF;
ENDIF;
Qout<=CQI;
ENDPROCESSU1;
U2:
PROCESS(CQI)
BEGIN
IFCQI="1001"THENCQ<='1';
elseCQ<='0';
endif;
endprocessU2;
ENDart;
3/8译码器模块
libraryieee;
useieee.std_logic_1164.all;
entityYM3_8is
port(A1:
instd_logic_vector(2downto0);
WW,QW,BW,SW,GW:
OUTSTD_LOGIC);
endYM3_8;
architecturey3_8YofYM3_8is
signalS:
std_logic_vector(2downto0);
signalQ:
std_logic_vector(4downto0);
begin
S<=A1;
withSselect
Q<="11110"when"000",
"11101"when"001",
"11011"when"010",
"10111"when"011",
"01111"when"100",
"ZZZZZ"whenothers;
WW<=Q(4);QW<=Q(3);BW<=Q
(2);SW<=Q
(1);GW<=Q(0);
endy3_8Y;
七段码译码器模块
libraryieee;
useieee.std_logic_1164.all;
entityseg7is
port(QA,QB,QC,QD:
instd_logic;
G,F,E,D,C,B,A:
OUTSTD_LOGIC);
endseg7;
architectureseg7ofseg7is
signalS:
std_logic_vector(3downto0);
signalQ:
std_logic_vector(6downto0);
begin
S<=QD&QC&QB&QA;
withSselect
Q<="0111111"when"0000",
"0000110"when"0001",
"1011011"when"0010",
"1001111"when"0011",
"1100110"when"0100",
"1101101"when"0101",
"1111101"when"0110",
"0000111"when"0111",
"1111111"when"1000",
"1101111"when"1001",
"ZZZZZZZ"whenothers;
G<=Q(6);F<=Q(5);E<=Q(4);D<=Q(3);C<=Q
(2);B<=Q
(1);A<=Q(0);
endseg7;
五、调试及数据分析
波形仿真图
图八波形仿真图
数据分析表
实际值(s)
测量值(s)
1
0.5333
0.5335
2
1.6700
1.6704
3
3.5800
3.5805
4
5.5250
5.5247
5
7.5004
7.5010
6
9.9950
9.9945
六、结论
经过调试及结果分析,设计满足任务要求。
脉冲信号宽度的测量精度符合±1ms,测量范围为0~10s。
附:
参考文献
[1]梁勇主编.EDA技术教程.北京:
人民邮电出版社.2010
[2]刘英.脉宽的测量和参数分析.电子信息对抗技术.2007
[3]吴大正.信号与线性系统分析.高等教育出版社.2005
[4]阎石.数字电子技术基础.第四版.北京:
高等教育出版社,1998
[5]韩焱,张艳花,王康谊.数字电子技术基础.北京:
电子工业出版社.2009
[6]樊昌信,曹丽娜.通信原理.北京:
国防工业出版.2007
[7]李玮.示波器的使用与检测技巧.北京:
化学工业出版社.2008
[8]巨小宝,崔晓俊,山燕妮.脉冲宽度测量新技术.电讯工程.1998
[9]彭文竹.基于8253的脉冲周期测量电路的设计及实现.现代计算机.2010
[10]路立平,杜峰,鹿晓力.电脉冲宽度的数模混合测量法.郑州轻工业学院学报(自然科学版).2003
[11]刘竹琴,白泽生.一种基于单片机的数字频率计的实现.现代电子技术.2010
[12]穆兰.单片微型计数机原理及接口技术.北京:
机械工业出版社,1997
[13]朱正为.EDA技术与应用.北京:
清华大学出版社,2005
[14]曾繁泰,陈美金.VHDI程序设计.北京:
清华大学出版社,2005
[15]郭照南.电子技术与EDA技术课程设计.中南大学出版社,2002
[16]陈立,王厚军,田书林等.现代测试技术[M].成都:
电子科技大学出版社,2002