数字频率计 完整课程设计报告.docx
- 文档编号:10174767
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:136.59KB
数字频率计 完整课程设计报告.docx
《数字频率计 完整课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字频率计 完整课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
数字频率计完整课程设计报告
河南科技大学
课程设计说明书
课程名称现代电子系统设计
题目简易数字频率计设计
学院__电信学院______
班级___电信科072_____
学生姓名___王俊_______
指导教师___王勇________
日期___2010-01-08_______
课程设计任务书
(指导教师填写)
课程设计名称现代电子系统课程设计学生姓名专业班级
设计题目简易数字频率计设计
一、课程设计目的
掌握高速AD的使用方法;
掌握频率计的工作原理;
掌握GW48_SOPC实验箱的使用方法;
了解基于FPGA的电子系统的设计方法。
二、设计内容、技术条件和要求
设计一个具有如下功能的简易频率计。
(1)基本要求:
a.被测信号的频率范围为1~20kHz,用4位数码管显示数据。
b.测量结果直接用十进制数值显示。
c.被测信号可以是正弦波、三角波、方波,幅值1~3V不等。
d.具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。
e.当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。
(2)发挥部分
a.修改设计,实现自动切换量程。
b.构思方案,使整形时,以实现扩宽被测信号的幅值范围。
三、时间进度安排
布置课题和讲解:
1天查阅资料、设计:
4天
实验:
3天撰写报告:
2天
四、主要参考文献
何小艇《电子系统设计》浙江大学出版社2008.1
潘松黄继业《EDA技术实用教程》科学出版社2006.10
指导教师签字:
2009年12月14
摘要
在电子技术的应用当中,任何一个电子系统都是有给定的输入信号,然后产生相应的输出信号,在这其中对信号的处理相当复杂,因此就显得对信号的分析尤为重要。
本课程设计正是基于这个考虑,设计一个简易的频率计,对信号的频率和占空比进行测量,从一个方面对信号做出精确的分析。
简易数字频率计的设计是基于FPGA实验开发系统进行的,通过对各个模块的编程,实现相应的功能。
本设计主要由几个部分组成:
模数转换模块,比较模块,频率测量模块以及占空比测量模块。
由于不是在实际生产中的应用,本设计主要实现对正弦波、方波、三角波的频率及占空比的测量。
对输入的信号进行处理,产生相应的脉冲信号,然后再把此脉冲信号作为频率测量和占空比测量模块的输入信号,通过计数及对计数值进行处理,产生相应的输出结果,送给数码管显示,使大家很容易读出一个信号的频率及占空比的具体值。
关键词:
信号、频率、占空比、FPGA、模块
目录
一、任务解析……………………………………
二、系统方案……………………………………
2、1被测信号转换………………………………
2、2频率测量……………………………………
三、系统原理………………………………………
四、模块设计………………………………………
4、1模数转换模块………………………………
4、2比较模块……………………………………
4、3频率测量模块……………………………….
4、4占空比测量模块…………………………….
五.仿真……………………………………………
六、总结和心得体会………………………………
七、参考文献………………………………………
附录一…………………………………………….
附录二…………………………………………….
一.任务解析
本课程设计是制作一个简易的数字频率计,其主要实现的功能:
a.被测信号的频率范围为1~20kHz,用4位数码管显示数据。
b.测量结果直接用十进制数值显示。
c.被测信号可以是正弦波、三角波、方波,幅值1~3V不等。
d.具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。
e.当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。
根据其功能,主要考虑从以下几个方面进行实现:
由于被测信号的产生直接由信号发生器产生,所以不需要考虑对信号发生器的设计。
首先,对被测信号通过AD进行转换,把转换的结果和给定的阈值进行比较,产生相应的脉冲信号。
得到脉冲信号之后,先进行频率测量,给定1S的基准信号,在1S信号内对脉冲信号进行计数,计数的方式采用BCD码,然后把计数结果直接送数码管显示,对应的就是十进制的数值。
然后对脉冲信号进行占空比测量,给定一个高频的基准信号,在脉冲信号的高电平期间对脉冲信号进行计数,把计数结果进行相应的运算,运算结果直接送数码管显示,对应的也是十进制显示。
为了实现占空比精度的要求,在适当的范围内竟可能提高基准信号的频率。
要求对1~20Khz频率的信号进行测量,而数码管显示的才四位,所以必须进行量程切换,本设计是在编程的过程中实现其自动切换,通过一个led灯来表示相应的单位。
对于超量程警告,也是在编程的过程,用得到的被测信号的频率和一个阈值进行比较,把比较的结果也是通过一个led灯指示出来。
通过对任务的解析,结合相应功能的要求,得出简易数字频率计总的原理框图如下:
二.系统方案
由于本课程设计是基于特定的硬件平台,在GW48-SOPC实验开发系统上进行实现。
因此设计的方案也是根据特定的硬件环境而提出来的。
实验中我们需要的被测信号,时基信号以及显示译码都有特定的硬件实现,因此我们不需要过多的考虑。
我们要重点考虑的是被测信号的转换,对被测信号频率的计量以及占空比的计量。
2、1被测信号转换
在实验的过程中我们用于测量和计算的数字量,而被测信号是模拟量,不便于测量和计算,因此要对被测信号进行模拟到数字的转换。
基于我们的硬件平台考虑到有两个方案进行转换。
方案一:
利用高速A/D5510/5540进行转换
A/D5510/5540是美国TI公司生产的新型模数转换器件,它是一种采用CMOS工艺制造的8位高阻抗并行A/D芯片,能提供的最小采样率为20MSPS。
在高速转换的同时能够保持较低的功耗,在推荐工作条件下,A/D5510/5540的功耗仅为130mW。
由于A/D5510/5540不仅具有高速的A/D转换功能,而且还带有内部采样保持电路,从而大大简化了外围电路的设计;同时,由于其内部带有了标准分压电阻,因而可以从+5V的电源获得2V满刻度的基准电压。
A/D5510/5540可应用于数字TV医学图像、视频会议、高速数据转换以及QAM解调器等方面。
A/D5510安装在实验系统配套的GW_ADDA板上,A/D处于使能状态,除了数据线外,任一器件的控制信号线只有时钟线,这有利于高速控制和直接利用MATLAB/DSPBuilder工具的设计。
GW_ADDA板上工作时钟必须由FPGA的I/O口提供,且DAC和ADC的工作时钟是分开的。
无法直接利用MATLAB和DSPBuilder进行自动流程的设计,优点是时钟频率容易变化,且可通过Cyclone中的PLL的到几乎任何时钟频率。
由此即可测试ADC的最高转换频率。
由于A/D5510/5540的转换时间很短,因此可以转换很高频率的信号,满足我们设计要求0-20KHz被测信号信号。
方案二:
利用ADC0809进行转换
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
ADC0809已安装在实验系统上,并且其转换时钟CLK已经事先接有750KHz的频率,ADC0809模拟信号输入通道为8个,但能够使用的仅有IN0、IN1。
相比于AD5510/5540,ADC809我们更为熟悉,在以前的实验中经常使用到,更了解其功能,及使用方法。
但ADC0809的转换速率相对较低。
对比一二两个方案,我个人认为选择二方案比较合适,虽然AD5510/5540转换的速率很高,但是对于我们来说是一个相对陌生的器件,不能很好的使用它。
而对于ADC0809来说,虽然转换速率不是很高,但也几乎能满足设计的要求,况且对于ADC0809比较了解,出现问题容易检查,也便于和下一个模块进行结合,因此选择方案二。
2、2频率的测量
对于频率的测量没有现成的硬件模块,因此对于频率的测量需要我们用VHDL语言进行实现。
对于频率的测量主要考虑有两种实现方案。
方案一:
直接测频法
测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:
fx=Nx/Tw。
测量的过程如图所示,在TW时间内通过计数器记录被测信号脉冲的个数,然后把记录结果锁存,经过运算后,送数码管显示,即为所测频率。
,
方案二:
测周期法
测周期法需要有标准信号的频率fs,这个标准信号应该取一个频率适中的高频信号,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:
fx=fs/Ns。
测量测周期法的过程如上图所示,在待测信号的一个周期Tx内,记录标准信号周期的个数,然后把记录结果锁存,经过运算后,送数码管显示,即为所测频率。
,
比较一二两种方案:
这两种测频率的原理基本一样,都是通过在给定的时间内记录脉冲的个数,经过一定的运算处理,得出结果显示出来。
并且这两种方案的计数值都会产生误差,都与计数器中记录的数值Nx或Ns有关。
但是考虑到用VHDL语言编写乘除的算法比较困难,并且经过乘除运算后所得结果的误差较大,因此选用方案一。
方案一得好处是闸门信号直接可以选择1S的时钟信号,在这1S时间内记录的被测信号脉冲的个数,正好就是被测信号的频率,不再需要进行运算处理。
不但减少编程的难度,而且也减小了实验的误差。
因为侧周期法的标准信号是一个高频信号,在不同的被测信号的脉冲下所造成的误差有很大的不同。
而在1S闸门信号下,记录的脉冲个数,对于所有被测信号的产生的误差基本是一样。
考虑到以上的各因素,我认为方案一是比较理想的选择。
三.系统原理
经过对系统方案的分析,结合具体的实验要求,系统的详细的原理框图如下:
被测信号经信号发生器产生,作为ADC0809的输入信号,ADC0809对输入信号进行采样,保持,转换等一列的处理后,输出8位的数字量。
然后输出的8位数字量作为数字比较器的输入信号和给定的8位阈值进行比较,输出相应的比较结果,即脉冲信号。
这就是前置级对被测信号进行放大,整形得到脉冲信号的原理。
然后把得到的脉冲信号同时作为频率测量模块和占空比测量模块的输入信号。
对于频率的测量,选择方案二的实现方法,把给定1Hz信号进行二分频,得到0.5Hz的信号,即高低电平的保持时间为1S,在高电平期间对脉冲信号进行计数,在低电平期间对计数结果进行锁存,并把计数器清零,等待下一个高电平到来进行计数。
同时把锁存的结果直接送数码管显示。
对于占空比的测量原理和频率的测量基本一样,其区别是先给定一个高频的基准信号,在脉冲信号的高电平期间对基准信号进行计数,并把计数的结果进行锁存。
同时把脉冲信号二分频,在二分频后信号的高电平期间对基准信号进行计数,并把计数结果锁存。
然后利用在脉冲信号高电平期间的计数值和脉冲信号二分频后的高电平期间的计数值进行相除运算,把运算结果进行进制转换,转换成BCD码,直接可以送数码管显示,显示出的两位十进制值,即表示被测信号的占空比。
四.模块设计
本系统除了特定硬件资源外,还需通过软件实现四个模块的设计,分别是:
模数转换模块、比较模块、频率测量模块、占空比测量模块。
4、1模数转换模块
通过编程实现对ADC0809的控制,具体的程序见附录,其控制模块见下图:
D[7..0]是被测信号经过ADC0809转换后的
数字量输出,CLK状态机的工作时钟,EOC
转换结束的标志信号,高电平表示转换结束。
ALE,START,OE,ADDA都是ADC0809的控制
信号,ADDA为模拟通道选择,低电平选择通
道0,ALE为通道地址锁存信号,START为启
动AD转换的信号,OE为ADC0809转换结果输
出的使能信号。
Q[7..0]是最终转换输出的8位数字量,可以
直接送数码管显示。
其具体与ADC0809的连接电路图如下:
模拟信号由IN0输入,通过控制模块对时序,经过ADC0809转换之后,最后转换的结果由Q[7..0]输出。
4、2比较模块
比较模块主要是把ADC0809转换的结果和给定的阈值进行比较,输出产生脉冲信号,得到的脉冲信号就是后面用于频率测量和占空比测量模块的输入信号。
为什么要进行被测信号到脉冲信号的转换呢?
因为我们无法直接对方波之外的被测信号进行频率和占空比的计算。
需要把被测信号转换成脉冲信号,在给定的时间内对脉冲的个数进行计数,从而算出其频率和占空比。
通过编程实现的比较模块见右图:
经过Q[7..0]输出的结果,直接给
d[7..0]做为输入,通过在编写程
序的过程中设定一个阈值,然后用
输入和这个阈值作比较,如果大于
则输出为高电平,小于或等于则输
出为低电平。
fin输出的频率在一定的误差范围
内也就是被测信号的频率。
对于阈值的设定,主要影响正弦波
和三角波经AD转换后所得脉冲信号
的占空比。
而对于方波信号的影响
几乎可以忽略,但是阈值的设定要在一个相对合适的范围内,不能太小也不能太大,本设计中选取的值为“10000000”。
4、3频率测量模块
对于频率的测量原理在前面的方案设计中已经做出很详细的阐述,下面就具体的模块在做一下分析。
clk1为1Hz的时钟信号,fin是经比较
模块的输出信号,在1S的信号下对fin
信号进行计数。
因为计数频率范围为5
位,所以在模块内部编写5个十进制的
计数器,要求低位的计数值溢出信号做
为高位的输入信号,从而显示频率的计
量。
实验要求为用四位数码管显示频率,而
我们计数的结果为五位,因此要考虑到
量程切换。
但是根据的我的设计方案实
验系统上只有三位数码管可用来频率显
示,所以设置了一个量程转换,当千位
的计数值大于零,给出一个输出信号k,表示单位Khz,从而来弥补计数显示为不够的问题。
因为计数器的范围为0-99999Hz,而设计要求的的范围为0-200000Hz,
因此通过万位的计数值和2作比较,当大于时,给出一个buzzer,可以接蜂鸣器用于超量程报警。
计数的结果由cnq1,cnq2,cnq3输出给译码器,在由译码器直接送数码管显示。
例如:
当k=0时,数码管显示为100,即为实际的被测信号的频率就为100Hz,
当k=1时,数码管显示为100时,则实际的频率为10.0Khz.
4、4占空比测量模块
占空比的测量原理在前面也已经做了详细的介绍,下面也就具体的模块做一下深入分析:
clk3M为基准信号,在fin的高电平期间
就对这个基准脉冲信号的个数进行计数,
同时也在fin二分频后的高电平期间对这
个基准信号进行计数,把这两个得到的计
数结果进行相除运算,相除后得到的结果
进行个位和十位分离,然后再进行进制
转换,转换结果由译码器送显。
具体运算的过程如下:
zhankongbi<=ge2*100/shi2;
ge<=conv_std_logic_vector((zhankongbirem10),4);
shi<=conv_std_logic_vector(((zhankongbi/10)rem10),4);
为得到占空比的数码管显示,把zhongkongbi和10求余,结果转换成四位二进制,即求的数码管的个位显示。
把zhongkongbi除以10后再和10求余,结果转换成四位二进制,即求的数码管的十位显示。
五.仿真
各个模块的源程序见附录,对于各个模块的仿真如下:
模数转换模块:
clk为状态机的时钟信号,eoc为转换结束信号,其他均为ADC0809的控制信号。
当eoc变高电平后,转换结果输出,从仿真波形上可以很清晰的看出输出结果为17。
比较模块:
d为比较器输入,设定的阈值为128,当大于或小于128由fin可以很清晰的看出输出的结果,如果被测信号是周期信号,对应的fin输出也是周期信号。
频率测量模块
clk1为1Hz信号,fin是输入的脉冲信号,cnp1,p3为记数频率的结果,图中显示的结果为12.5Khz,没有超过量程。
图为仿真波形,对于超量的频率设定不太容易实现,故仿真结果没有给出。
但在实际的实验中,可以实现这个结果。
占空比模块:
3M的基准信号在试验系统板直接可以给出,但在仿真中也应该给一个较高频率的时钟信号,对于占空比测量,在可以允许的范围内应竟可能的给一个高频的基准信号,因为频率越高输出的占空比结果会越接近真实值。
仿真中给fin是一个占空比为65的方波信号,输出的结果为64基本满足真实值,满足设计要求。
对总的系统仿真:
从仿真波形图可以看出,仿真的结果并不像我所期望的那样,占空比没有显示出来,但在实验系统上下载调试时却能很好的显示出来。
分析其原因,可能是输入信号的设定值不太合适,多次改变输入值,还是得到同样的结果,我想可能是各个模块之间连接有误,或者QuartusII在综合的过程中,综合出现错误,目前这个问题还没有解决。
六.总结与心得体会
本次课程设计很快结束了,但对于课程设计中的点滴依然记忆犹新,从拿到这个选题之后我就在思考,如何实现其设计要求。
由于基础不是很好,对于这个题目,刚开始确实不知道从何下手,不过很快就有了点头序,大致的方向就是通过计数器对脉冲信号进行计数,然后把计数结果进行数值转换,送给数码管显示其频率值及占空比。
这仅仅是一个大致的框架,至于要实现系统的功能,还需要进行一步一步的细化。
对设计要求进行分析,可以把整个系统分成不同的模块,通过对不同模块的设计来实现整个系统的功能。
下面考虑的重点就是对不同模块的设计,对模拟信号转换模块,对转换结果的比较,对频率和占空比的测量。
模块设计这部分的难点就是通过语言来实现模块的功能,功能和语言结合起来,很具有灵活性,特别对于VHDL语言基础不好的我确实是一个挑战。
对程序的编写,仿真调试确实发了不少时间,不过几经修改,虽然不是最完美的程序,但经编译下载后也能实现设计的要求,心里颇感欣慰。
从课程设计开始到结束自己一路走来,确实收获不少东西。
这次的课程设计是众多次课程设计中最认真的一次吧,从设计到编程,再到撰写报告,都是我认真的一步一步做下来的。
这期间我体会到了自己知识的不足,也感受到了成功的喜悦。
通过自己亲自动手参与,更能体会到我们学电子的乐趣,理论知识的学习毕竟是单调无味的。
以后就面临毕业了,可能这样的机会不会太多了,现在或许有些后悔之前对待实验和设计的态度。
这在大学期间最后一次的课程设计,我最大的收获就是一种态度。
只要认真对待,总会有个好的结果的,虽然有些问道到现在还没有解决,但我依然认为我这次设计做的很成功。
至于没有解决的问题,我会尽可能的寻求解决的办法。
七.参考文献
《《现代电子系统设计》》浙江大学出版社何小艇主编
《《EDA技术使用教程》》科学出版社潘松编著
《《VHDL硬件描述语言与数字逻辑电路设计》》
西安电子科技大学出版社侯伯亨编著
附录一:
系统的总电路图
附录二:
模数转换模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYADCINTIS
PORT(D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK:
INSTD_LOGIC;
EOC:
INSTD_LOGIC;
ALE:
OUTSTD_LOGIC;
START:
OUTSTD_LOGIC;
OE:
OUTSTD_LOGIC;
ADDA:
OUTSTD_LOGIC;
LOCK0:
OUTSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDADCINT;
ARCHITECTUREbehavOFADCINTIS
TYPEstatesIS(st0,st1,st2,st3,st4);
SIGNALcurrent_state,next_state:
states:
=st0;
SIGNALREGL:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK:
STD_LOGIC;
BEGIN
ADDA<='0';
Q<=REGL;LOCK0<=LOCK;
COM:
PROCESS(current_state,EOC)BEGIN
CASEcurrent_stateIS
WHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';next_state<=st1;
WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state<=st2;
WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';
IF(EOC='1')THENnext_state<=st3;
ELSEnext_state<=st2;ENDIF;
WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4;
WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;
WHENOTHERS=>next_state<=st0;
ENDCASE;
ENDPROCESSCOM;
REG:
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;
ENDPROCESSREG;
LATCH1:
PROCESS(LOCK)
BEGIN
IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;
ENDPROCESSLATCH1;
ENDbehav;
比较模块:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycompreis
port(d:
instd_logic_vector(7downto0);
fin:
outstd_logic);
endentitycompre;
architectureoneofcompreis
begin
process(d)
begin
ifd>"10000000"then
fin<='1';
elsefin<='0';
endif;
endprocess;
endone;
频率测量模块:
libraryieee;
useieee.std_logic_1164.all;
useieee.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字频率计 完整课程设计报告 完整 课程设计 报告