电子系统课程设计简易频率计.docx
《电子系统课程设计简易频率计.docx》由会员分享,可在线阅读,更多相关《电子系统课程设计简易频率计.docx(25页珍藏版)》请在冰豆网上搜索。
![电子系统课程设计简易频率计.docx](https://file1.bdocx.com/fileroot1/2023-2/1/d98ff4f9-91df-436f-8eb2-d2df3097ebdf/d98ff4f9-91df-436f-8eb2-d2df3097ebdf1.gif)
电子系统课程设计简易频率计
河南科技大学
课程设计说明书
课程名称_现代电子系统课程设计__
题目_简易数字频率计设计_
学院__电子信息工程学院____
班级__
学生姓名_______
指导教师______
日期___2011年12月16日__
课程设计任务书
(指导教师填写)
课程设计名称现代电子系统课程设计学生姓名专业班级
设计题目简易数字频率计设计
一、课程设计目的
掌握高速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
指导教师签字:
2011年11月28日
摘要
频率计是数字电路中的一个典型应用,是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,频率测量在科技研究和实际应用中的作用日益重要。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言。
将使整个系统大大简化。
提高整体的性能和可靠性。
在本文中,我们设计了一个简易数字频率计。
主要分为如下几个部分:
●A/D模块:
用VHDL语言写一个状态机,控制ADC0809芯片正常工作,使输入的被测模拟信号经过ADC0809芯片处理,转化为数字信号。
●比较整形模块:
将A/D转换出来的数字信号通过比较,高于阈值的为1低于阈值的为0从而将八位数字信号转换为脉冲便于频率计算。
●频率测量模块:
常用的频率测量方法有很多。
有计数法和计时法等,具体的方案论证将在下面进行。
●占空比计算模块:
计算脉冲波占空比,具体的方案论证将在下面进行。
●选择显示模块:
设置一个二选一电路,通过一个按键控制四位数码管显示的内容是频率还是占空比。
关键词:
数字频率计、模块、占空比、数字信号、测量、阈值
任务解析……………………………….……………………3
总体方案与比较论证…………………………………………4
方案选择………………………………………………………6
频率测量方法方案论证….………………..…………….……6
系统结构….……...…....……...…………….…………….……9
A/D模块设计……………….……..…………………………10
比较整形模块设计……………………….…………………..12
频率测量模块设计…………………………………………..13
占空比计算模块设计………………………………………..14
选择显示模块设计………………………………………......15
硬件验证……………………...……………………………...16
误差分析…………………………………...………………...17
心得体会…………………………..….……………………...18
参考文献……………………………………………...………19
任务解析
本次课程设计的主要任务就是利用VHDL语言设计一个简易数字频率计。
频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值及脉冲的占空比。
其扩展功能可以实现自动切换量程,使整形时,以实现扩宽被测信号的幅值范围。
数字频率计的整体系统原理框图如图1,被测信号为外部输入信号,送入测量电路经过数字整形、测量计算、数据锁存和送显。
就完成了频率计的基本功能,控制选择用来实现频率的计算频率和计算占空比功能的选择。
图1
根据简易频率计设计的任务书可知这次的频率计的性能指标如下:
一、信号波形:
正弦波、三角波和矩形波。
二、率范围分二档:
Hz档和kHz档
a.被测信号的频率范围为1~20kHz,用4位数码管显示数据。
b.测量结果直接用十进制数值显示。
c.被测信号可以是正弦波、三角波、方波,幅值1~3V不等。
d.具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。
e.当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。
三、发挥部分
a.修改设计,实现自动切换量程。
b.构思方案,使整形时,以实现扩宽被测信号的幅值范围
总体方案与比较论证
数字频率计在具体是现实时,可以采用单片机或者FPGA来实现,具体有如下方案:
方案一:
采用FPGA与单片机为核心来实现,可以利用FPGA来实现在单片机系统中的计数部分。
这样可以节省单片机的系统资源,考虑到在下面的相移网络设计中也需要利用单片机和FPGA,但单片机的系统资源相对有限,因此我们建议在这里单片机主要用于控制,而FPGA则可以用来进行计数之类的事情。
简单原理图如图2
图2
方案二:
分离元件设计方案:
本方案利用大量数字芯片,通过各种逻辑关系构成,但由于芯片无编程性,实现难度较大,只能完成部分功能,同时电路复杂。
在实际应用中存在很多问题。
方案三:
全部利用FPGA来实现,即利用FPGA产生时钟。
由于FPGA的工作频率比单片机的高很多,因此可以考虑直接利用FPGA产生信号的高频参考频率,FPGA处理速度快,得到的频率,占空比相对稳定,精度高,容易实现高频测量。
缺点是硬件较为复杂,实现控制相对复杂。
简单原理图如图3
图3
方案选择:
方案一虽然可行,但是由于在实验室现有的FPGA实验板上无法将单片机运用在系统中,因此不能用。
方案二在理论上和现有的硬件基础上都能实现,但是复杂度高因此也不能用。
方案三不仅符合此次课程设计的要求,且在实验室的条件下均能实现,所以我们选择方案三作为本次课程设计的方案。
频率测量方法方案论证
数字频率测量的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下有两种测量方法:
:
一种方法是计数法,就是在一定闸门时间内测量被测信号的脉冲个数;另外一种是计时法。
方案一:
计数法
计数法是将被测信号通过一个定时闸门加到计数器进行计数的方法,如果闸门打开的时间为T,计数器得到的计数值为N1,则被测频率为f=N1/T。
改变时间T,则可改变测量频率范围。
如图4所示。
设在T期间,计数器的精确计数值应为N,根据计数器的计数特性可知,N1的绝对误差是N1=N+1,N1的相对误差为δN1=(N1-N)/N=1/N。
由N1的相对误差可知,N的数值愈大,相对误差愈小,成反比关系。
因此,在f以确定的条件下,为减少N的相对误差,可通过增大T的方法来降低测量误差。
当T为某确定值时(通常取1s),则有f1=N1,而f=N,故有f1的相对误差:
δf1=(f1-f)/f=1/f
从上式可知f1的相对误差与f成反比关系,即信号频率越高,误差越小;而信号频率越低,则测量误差越大。
因此测频法适合用于对高频信号的测量,频率越高,测量精度也越高。
方案二:
计时法
计时法又称为测周期法,计时法是用被测信号来控制闸门的开闭,而将标准时基脉冲通过闸门加到计数器,闸门在外信号的一个周期内打开,这样计数器得到的计数值就是标准时基脉冲外信号的周期值,然后求周期值的倒数,就得到所测频率值。
首先把被测信号通过二分频,获得一个高电平时间是一个信号周期T的方波信号;然后用一个一直周期T1的高频方波信号作为计数脉冲,在一个信号周期T的时间内对T1信号进行计数,如图5所示。
图5
若在T时间内的计数值为N2,则有:
T2=N2*T1f2=1/T2=1/(N2*T1)=f1/N2
N2的绝对误差为N2=N+1。
N2的相对误差为δN2=(N2-N)/N=1/N
T2的相对误差为δT2=(T2-T)/T=(N2*T1-T)/T=f/f1
从T2的相对误差可以看出,周期测量的误差与信号频率成正比,而与高频标准计数信号的频率成反比。
当f1为常数时,被测信号频率越低,误差越小,测量精度也就越高。
根据本设计要求的性能与技术指标,首先需要确定能满足这些指标的频率测量方法。
有上述频率测量原理与方法的讨论可知,计时法适合于对低频信号的测量,而计数法则适合于对较高频信号的测量。
但由于用计时法所获得的信号周期数据,还需要求倒数运算才能得到信号频率,而求倒数运算用
VHDL语言实现起来更占用系统资源且可能带来更大误差,因此,计时法不适合本实验要求。
测频法的测量误差与信号频率成反比,信号频率越低,测量误差就越大,信号频率越高,其误差就越小。
如果用测频法所获得的测量数据,将闸门时间设置为一秒时,不需要进行任何换算,计数器所计数据就是信号频率。
用VHDL语言实现起来更加容易,调整时也更为方便。
因此,本次课程设计所用的频率测量方法是计数法。
系统结构
根据本次课程设计的要求,我将这次的频率计功能实现分为五个模块:
1、A/D模块
2、比较整形模块
3、频率测量模块
4、占空比计算模块
5、选择显示模块
系统结构如图6:
图6
为了节省系统资源我们的频率测量模块与占空比计算模块都用频率为3MHz的基准信号。
下面是各个模块的具体描述与功能:
A/D模块设计
A/D模块的主要功能就是控制ADC0809芯片正常工作进行被测模拟信号的采集和数字化的过程,ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
其主要控制信号:
START是转换启动信号,高电平有效;ALE是3位通道选择地址信号的锁存信号。
当模拟量送至某一输入端,由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号;在EOC的上升沿后,若使输出使能信号OE为高电平,则打开三态缓冲期,把转换好的8位数据结果输至数据总线。
其实按照本次课程设计的要求,此次频率计应该使用一个高速AD芯片,但是由于实验条件,我们只能用0809这个慢速的AD,所以本次课程设计的测频范围就大大缩小了,测频范围大概只能从1Hz到4KHz。
ADC0809的工作过程:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上,至此ADC0809的一次转换结束。
下面是控制ADC0809采样状态图:
图7
用VHDL语言写了一个状态机来控制ADC0809正常工作采集转化被测信号,下面是A/D模块的封装图以及仿真波形图:
图8
图9
由仿真图可也看出状态机能够控制ADC0809芯片正常工作完成被测信号的数字化处理。
比较整形模块设计
比较整形模块的输入信号是经过0809数字化的被测信号。
比较整形模块的作用就是将输入的八位信号转化为误差较小的高低电平,形成脉冲信号。
原理就是在设置一个阈值,当输入的信号高于这个阈值时输出高电平,当输入的信号低于阈值时输出低电平。
这样就可以把被测的信号转化为脉冲信号,然后送入频率计算电路就能方便地计算出被测信号的频率。
阈值的设置与被测信号的幅度有关,任务书要求幅值是1-3V,所以我们取1V设置阈值,当1V满足时,3V也自然满足。
因为1/5*255=51,所以我们将阈值设为’00100000’,小于50,满足设计要求。
其形成的封装图及仿真波形图如下:
图10
D为八位输入
CLKIN为输出信号
图11
图12
如图11、图12所示,当输入信号高于’00100000’时,输出信号CLKIN是高电平,当输入信号低于’00100000’时,输出信号CLKIN是低电平。
所以比较整形模块能够正常工作,完成输入信号的整形转化为脉冲信号。
频率测量模块设计
频率测量模块有两个输入信号,一个是从比较整形电路输出的整形后的脉冲信号,这个是被测信号。
另外一个是基准频率,用来进行测量被测频率使用。
频率测量模块的工作过程大致是:
将基准频率进行分频,得到一个周期为2秒的方波,利用方波的电平为正的半个周期作为闸门信号,在半个周期内利用计数器计算被测频率的个数,所得的脉冲个数就是被测信号的频率。
然后将所得个数送出给后面的选择模块。
其中频率计数具有自动切换量程的功能,有两个档位一个是Hz档,一个是KHz档。
因为用四个数码管显示但是ADC0809是慢速芯片,频率范围1Hz到4KHz,所以为了实现自动换量程功能,当被测频率超过1000Hz就切换为KHz档了,所以在实验箱上验证时最高位的数码管一般不会显示数字。
下面是模块的封装图以及波形仿真图:
图13
图14
由于软件工具的限制,测频功能的自动换挡功能仿真起来比较困难,要求的频率过高,软件仿真较慢,易出错,所以仅仿真验证了了频率计数的功能。
占空比计算模块设计
占空比计算模块是用来计算被测信号为方波时的占空比。
占空比为在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。
这个模块我是这么实现的,将比较整形后的方波信号作为一个输入信号,再输入一个高频脉冲信号作为基准信号,最好要远远高于被测信号的频率,这样才能更好更准确测量被测脉冲信号的占空比。
将被测信号输入后二分频后得到一个周期是原被测信号二倍的信号,然后利用原被测信号的半个周期的高电平以及二分频后的信号的半个周期的高电平作为两个闸门信号T1、T2,分别记录这两个闸门信号下基准信号的个数A1、A2,然后用A1除以A2就能得到被测脉冲信号的占空比了。
特别注意的是这个模块内要加入一个锁存器,否则占空比计算后的数值输出到数码管会不停的闪烁。
下面是占空比模块的封装图以及波形仿真图:
图15
图16
输入信号是占空比为72%的脉冲信号,仿真结果为72%,占空比计算模块能够正常工作。
选择显示模块设计
选择显示模块就是一个二选一电路,频率测量模块的四个输出以及占空比计算模块的两个输出都作为选择显示模块的输入,还有一个输入信号由按键控制。
用来控制选择显示模块的输出是频率测量模块的输出信号还是占空比计算模块的两个输出。
选择显示模块的作用就是,因为实验箱在模式5的状态下,由于适用ADC0809,占用了三个数码管,所以占空比及频率不能同时用数码管显示,要用四个数码管显示频率就必须通过选择显示模块来控制。
当按键没有按下的时候四个数码管显示的是频率,当按键按下后数高两位数码管显示占空比,低两位数码管为零。
下面是选择显示模块的封装图以及波形仿真图:
图17
图18
由图可以看到二选一模块能够完成既定功能。
硬件验证:
一、频率测量
波形
方波
正弦波
三角波
输入频率(hz)
输出频率(hz)
10
10
11
15
500
500
501
501
3000
3000
2998
2588
二、占空比测试
输入占空比(%)
显示占空比(%)
70
70
60
59
50
50
40
41
30
32
误差分析
1、频率测量误差分析:
由于ADC0809芯片是一个低速的AD芯片,所以方波的频率在4khz以下,测量较为准确,超过4khz就会出现较大的误差。
正弦波的频率在11hz-3000hz之间测量的较为准确。
三角波的频率在15hz-1800hz之间测量的较为准确。
这与AD的转换速度及精度有一定关系,频率的测量方法也影响着频率测量的精确度。
所以如果使用
高速AD,并且测量高频与低频时使用适用与不同情况的频率测量方法,可以有效降低误差。
2、占空比测量误差分析:
由表可见,占空比整体测量比较准确,误差并不是特别大。
通过提高占空比计算模块的基准频率,增长闸门时间可以减小误差。
心得体会
这次现代电子系统课程设计的题目是简易数字频率计。
通过这次的课程设计,我对频率计以及硬件描述语言的应用有了更深的认识。
虽然以前的数字逻辑电路的课程设计也是频率计,但那个频率计是通过芯片与电路的连接实现的最基本的频率计功能,并没有更深入去考虑一个频率计需要注意的各种问题例如如何完美实现频率计各项性能指标还有频率计精度提高的问题等。
这次课程设计与开学之初的电子设计自动化的课程设计虽然有类似之处,但是比开学的那个课程设计要求要更高。
我在开学初的课程设计的题目是利用FPGA实现一个数字钟。
在那次设计中,我遇到非常多的问题,基本模块都是磕磕绊绊写了出来,而且在写顶层文件的时候,我用的是元件例化语句将各个模块连接起来,中间用到了三十多个中间信号,自己记起来乱七八糟的,最后还是都写到了一张纸上才全部分清,勉强将数字钟的功能实现。
所以这个课程设计,我先将各个模块一一认真实现,然后将各个模块生成封装,然后用原理图连线的方法完成了总体的连线。
这个方法既简单又清晰,能够看清整个频率计工作流程原理,十分容易理解以及修改,不必再去用复杂的元件例化语句节省了我不少的时间。
当然在这次实验过程中也暴露出不少问题,频率测量方法选择不恰当,测量的误差较大,比较整形模块的阈值设置我想了好久都没有想明白,最后还是在同学的耐心讲解下才明白了阈值的选择规则。
最后频率计完成前的最后一个问题就是占空比的显示问题,当时做好之后一看占空比显示不停闪烁,本来没什么思路,后来听老师给另外一个同学讲解的时候说是加一个寄存器就能解决了,给占空比计算模块加入了锁存器果然解决了占空比闪烁的问题。
总的来说,这次的课设过程中遇到了不少的问题,但还是完成了任务书要求的功能。
最大的收获就是,我对VHDL语言的应用更加熟悉,大学四年来我觉得我学的最好的就是C语言和VHDL硬件描述语言了,并且语言的应用也在实验与课程设计中不断进步。
参考文献:
(1)《现代电子系统设计》浙江大学出版社何小艇主编
(2)《EDA技术使用教程》科学出版社潘松编著
(3)《VHDL硬件描述语言与数字逻辑电路设计》西安电子科技大学出版社侯伯亨刘凯顾新编著
(4)《现代电子系统设计实验指导书》河南科技大学齐晶晶李娜主编
附录
课程设计程序:
AD模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYAD0809IS
PORT(CLK,EOC:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
ALE,START,OE,ADDA,LOCK0:
OUTSTD_LOGIC;
--ADDA位地址输入线,用于选通8路模拟输入中的一路
--ALE:
地址锁存允许信号,输入,高电平有效
--START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)
--OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDAD0809;
ARCHITECTUREBEHAVOFAD0809IS
TYPESTATESIS(ST0,ST1,ST2,ST3,ST4);
SIGNALCURRENT_STATE,NEXT_STATE:
STATES:
=ST0;
SIGNALREGL:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK:
STD_LOGIC;
BEGIN
ADDA<='1';
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;
ENTITYBJIS
PORT(D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CLKIN:
OUTSTD_LOGIC);
ENDENTITYBJ;
ARCHITECTUREONEOFBJIS
BEGIN
PROCESS(D)
BEGIN
IFD>"00010000"THEN
CLKIN<='1';
ELSECLKIN<='0';
ENDIF;
ENDPROCESS;
ENDONE;
频率测量模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYPLIS
PORT(CLK3M:
INSTD_L