课程设计频率测量仪设计.docx
《课程设计频率测量仪设计.docx》由会员分享,可在线阅读,更多相关《课程设计频率测量仪设计.docx(21页珍藏版)》请在冰豆网上搜索。
课程设计频率测量仪设计
摘要
本文介绍了一种自顶向下分层设计多功能数字频率计的设计方法。
该频率计采用VHDL硬件描述语言编程以MAX+PLUSⅡ为开发环境,极大地减少了硬件资源的占用。
数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。
该数字频率计的测量范围为l0Hz~10MHz,响应时间小于等于15秒;其测试结果由4只七段数码管稳定显示,测量误差小于等于1%。
仿真波形与分析结果表明,所设计的电路通过硬件仿真能够满足数字频率计的功能要求,具有理论与实践意义,实现了电子电路自动化的过程。
数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。
关键词:
VHDL数字频率计EDAMAX+PLUSⅡ
第一章概述
第一节课题研究背景
数字频率计是电子测量与仪表技术最基础的电子仪表类别之一,数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,而且它是数字电压必不可少的部件。
当今数字频率计不仅是作为电压表、计算机、天线电广播通讯设备、工艺过程自动化装置。
多种仪表仪器与家庭电器等许多电子产品中的数据信息输出显示器反映到人们眼帘。
集成数字频率计由于所用元件少、投资少,体积小,功耗低,且可靠性高,功能强,易于设计和研发,使得它具有技术上的实用性和应用的广泛性。
不论从我们用的彩色电视机、电冰箱,DVD,还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。
现在频率计已是向数字智能方向发展,即可以很精确的读数也精巧易于控制。
数字频率计已是现在频率计发展的方向,它不仅可以很方便的读数,而且还可以使频率的测量范围和测量准确度上都比模拟先进.而且频率计的使用已是很多的方面,数字卫星、数字通讯等高科技的领域都有应用,今天数字频率计的发展已经不仅仅是一个小电子产品的发展也是整个民族乃至整个国家的发展,所以频率计的发展是一个整体的趋势。
而从民族产业上来说,我们在这种产业中还落后于西方发达国家,这将会关系到民族产业的兴衰。
所以我们必须很重视当前的情况,学习发达国家的先进技术以发展本国的产业。
第二节设计概述
所谓频率,就是周期信号在单位时间(1s)里变化的次数。
本数字频率计的设计思路是:
(一)根据频率计的测频原理,可以选择合适的时基信号对输入被测信号脉冲进行计数,实现测频的目的。
(二)根据数字频率计的基本原理,本文设计方案的基本思想是分为三个模块来实现其功能,即时基产生与测频时序控制电路模块、待测信号脉冲计数电路模块和锁存与译码显示控制电路模块,并且分别用VHDL对其进行编程,实现计数电路、锁存电路、显示电路等。
第三节设计原理
众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。
因此,频率检测是电子测量领域最基本的测量之一。
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1s作为闸门时间。
数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1.1所示。
第二章VHDL程序语言和FPGA简介
一VHDL程序语言介绍:
VHDL语言描述能力强,覆盖面广,抽象能力强,可读性好,既能被人容易读懂又能被计算机识别。
VHDL语言中设计实体,程序包,涉及库,为设计人员重复利用别人的设计提供了技术手段。
当电路系统采用VHDL语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点:
一.采用自上而下的设计方法。
即从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。
在设计的过程中,对系统自上而下分成三个层次进行设计:
第一层次是行为描述。
第二层次是RTL方式描述。
第三层次是逻辑综合。
二.系统可大量采用PLD芯片。
利用VHDL语言设计数字系统时,可以根据硬件电路的设计需要,自行利用PLD设计自用的ASIC芯片,而无须受通用元器件的限制。
三.采用系统早期仿真。
在系统设计过程中要进行三级仿真。
这三级仿真贯穿系统设计的全过程,从而可以在系统设计的早期发现设计中存在的问题,大大缩短系统设计的周期。
四.降低了硬件电路设计难度。
在传统的设计方法中,往往要求设计者在设计电路之前写出该电路的逻辑表达式或真值表(或时序电路的状态表)。
而利用VHDL语言设计硬件电路时,就可以使设计者免除编写逻辑表达式或真值表之苦,从而大大缩短了设计的周期。
五.主要设计文件是用VHDL语言编写的源程序。
与传统的电路原理图相比,使用VHDL源程序有许多好处:
其一是资料量小,便于保存。
其二是可继承性好。
其三是阅读方便。
二FPGA简介
FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
三VHDL在FPGA中的运用
近30年来,由于微电子学和计算机科学的迅速发展,给EDA(电子设计自动化)行业带来了巨大的变化。
可以说EDA产业已经成为电子信息类产品的支柱产业。
就FPGA和CPLD开发而言,比较流行的HDL主要有VerilogHDL、VHDL、ABEL-HDL和AHDL等,其中VHDL和VerilogHDL因适合标准化的发展方向而最终成为IEEE标准。
随着电子技术的高速发展,CPLD的出现以其高速、高可靠性、串并行工作方式等突出优点在电子设计中广泛应用,并代表着未来EDA设计的方向。
CPLD的设计采用了高级语言(如VHDL语言),进一步打破了软硬件之间的界限,加速了产品的开发过程。
采用先进的CPLD(复杂可编程逻辑器件)取代传统的标准集成电路、接口电路也是电子技术发展的必然趋势。
EDA(电子设计自动化)代表了当今电子设计技术的最新发展方向,它的基本特征是:
设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终目标器件。
采用VDHL编程设计实现的数字频率计,除被测信号的整形部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现,整个设计过程变得十分透明、快捷和方便。
四软件组成
MAX+PLUSⅡ软件采用模块化结构,包括设计输入、项目处理、项目校验和器件编程4个部分,所有这些部分都集成在一个可视化的操作环境下。
(一)设计输入
MAX+PLUSⅡ的设计输入方法有多种,主要包括文本设计输入、原理图输入、波形设计输入等多种方式。
另外,还可以利用第三方EDA工具生成的网表文件输入
(二)项目处理
设计处理的任务就是对项目进行编译(Compile),编译实际就是将设计者编写的设计改为可以用于生产的“语言”。
编译器通过读入设计文件并产生用于编程、仿真和定时分析的输出文件来完成编译工作。
MAX+PLUSⅡ提供的编译软件,只需简单的操作。
(三)项目校验
MAX+PLUSⅡ提供的设计校验过程包括仿真和定时分析,项目编译后,为确保设计无误,要再用专用软件进行仿真。
如果发现了错误,则应对设计输入进行部分修改直至无误。
(四)器件编程
MAX+PLUSⅡ通过编程器(DeviceProgrammer)将编译器生成的编程文件编程或配置到AlteraCPLD器件中,然后加入实际激励信号进行测试,检查是否达到了设计要求?
在设计过程中,如果出现错误,则需要重新回到设计输入阶段,改正错误或调整电路后重复上述过程。
五设计流程
使用MAX+PLUSⅡ进行可编程逻辑器件开发主要包括4个阶段:
设计输入、编译处理、验证(包括功能仿真、时序仿真、和定时分析)和器件编程,流程如图
第三章系统分析
第一节数字频率计的设计任务及要求
设计一个四位十进制的数字频率计,要求具有以下功能:
(一)测量范围:
1Hz~10kHz。
(二)测量误差
1%。
(三)响应时间
15s。
(四)显示时间不少于1s。
(五)具有记忆显示的功能,即在测量的过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。
等精度测量法
等精度测量法的机理是在标准频率比较测量法的基础上改变计数器的计数开始和结束与闸门门限的上升沿和下降沿的严格关系。
当闸门门限的上升沿到来时,如果待测量信号的上升沿未到时两组计数器也不计数,只有在待测量信号的上升沿到来时,两组计数器才开始计数;当闸门门限的下降沿到来时,如果待测量信号的一个周期未结束时两组计数器也不停止计数,只有在待测量信号的一个周期结束时两组计数器才停止计数。
这样就克服了待测量信号的脉冲周期不完整的问题,其误差只由标准频率信号产生,与待测量信号的频率无关。
最大误差为正负一个标准频率周期,即Δt=±1/f0。
由于一般标准信号频率都在几十兆赫兹以上,因此误差小于10-6HZ。
考虑到精度问题这次我们选择了等精度方法,具体实现逻辑框图如图一
图一
首先按键发出一个清零信号CLR,使2个32bit的计数器和D触发器置0,然后按键再发出允许测频命令,即使预置门控信号GATE为高电平,这时D触发器要一直等到被测信号的上升沿通过时,Q端才被置1,即使计数器1和计数器2的EN同时为1,将启动计算器计数,系统进入计算允许周期。
这时,计数器1和2分别对被测信号和标准频率信号同时计数。
当Tc秒过后,预置门控信号被D触发器置为低电平,但此时2个32bit的计数器仍然没有停止计数,一直等到随后而至的被测信号的上升沿到来时,才通过D触发器将这2个计算器同时关闭。
由图所示的测频时序图可见,GATE的宽度和发生的时间都不会影响计数使能信号允许计数的周期总是恰好等于待测信号XCLK的完整周期,这正是确保XCLK在任何频率条件下都能保持恒定测量精度的关键。
因为,此时GATE的宽度Tc改变以及随机的出
现时间造成的误差最多只有基准时钟BCLK信号的一个时钟周期。
第二节模块的划分
根据系统设计要求,系统设计采用自顶向下的设计方法,系统的组成框图如图3.1所示,包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路模块和锁存与译码显示控制电路模块。
(一)时基产生与测频时序控制电路模块
时基产生与测频时序控制电路的主要产生计数允许信号EN、清零信号CCLR和锁存信号LOCK。
(二)待测信号脉冲计数电路模块
待测信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。
在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。
如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通信号EN的宽度为100ms,那么待测信号的频率等于计数结果
10。
(三)锁存与译码显示控制电路模块
锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。
锁存与译码显示电路的功能是对四位BCD码进行锁存,并转换为对应的4组七段码,用于驱动数码管。
四Bin转BCD码模块
由于要求数码管10进制输出,因此需要一个二进制转bcd码的模块。
操作是这样的:
用两个寄存器,一个32bit,一个40bit,分别存bin码和有待实现的bcd码。
接下来,逐位将BIN的最高位移入BCD的最低位。
同时,将BCD的40位寄存器按每四位划成一块,我们称之为个十百千好了。
但记住,个,十,百,千等都有4个bit位。
1.将bin[31](bin是bin[31:
0])移入bcd[0]。
这样,bin[31]就变成了原来的bin[30],bin[0]=0。
2.分别检查个十百千里存的数是不是大于等于5(按二进制换十进制那样换算),如果是,加3。
3.重做1,2直到全部移进去。
第三节设计分析
一测频模块逻辑结构
利用VHDL程序设计的测频模块逻辑结构如图所示,其中有关的接口信号规定如下:
①TP(P2.7):
TF=0时等精度测频;TF=1时测脉宽;
②CLR/TRIG(P2.6):
当TF=0时系统全清零功能;当TF=1时CLRTRIG的上跳沿将启动CNT2,进行脉宽测试计数;
③ENDD(P2.4):
脉宽计数结束状态信号,ENDD=1计数结束;
④CHOICE(P3.2):
自校/测频选择,CHOICE=1测频;CHOICE=0自校;
⑤START(P2.5):
当TF=0时,作为预置门闸,门宽可通过键盘由单片机控制,START=1时预置门开;当TF=1时,START有第二功能,此时,当START=0时测负脉宽,当START=1时测正脉宽。
利用此功能可分别获得脉宽和占空比数据。
⑥EEDN(P2.3):
等精度测频计数结束状态信号,EEND=0时计数结束。
⑦SEL[P2.2](P2.2,P2.1,P2.0):
计数值读出选通控制;当SEL[2.0]=“000”,“001”,“010”...“111”时,将CNT1,CNT2的计数值分8次,每次读出8位,并传达到单片机的P0口。
图4.1测频模块逻辑图
二各模块功能和工作步骤如下:
(一)测频/测周期的实现
被测信号脉冲从CONTRL模块的FIN端输入,标准频率信号从CONTRL的FSD端输入,CONTRL的CLR是此模块电路的工作初始化信号输入端。
在进行频率或周期测量时,其工作步骤如下:
①令TF=0,选择等精度测频,然后再CONTRL的CLR端加一正脉冲信号以完成测试电路状态的初始化。
②由预置门控信号将CONTRL的START端置高电平,预置门开始定时,此时由被测信号的上沿打开计数器CNT1进行计数,同时使标准频率信号进入计数器CNT2。
③预置门定时结束信号把CONTRL的START端置为低电平(由单片机来完成),在被测信号的下一次脉冲的上沿到来时,CNT1停止计数,同时关断CNT2对FS的计数。
④计数结束后,CONTRL的EEND端将输出低电平来指示测量计数结束,单片机得到此信号后,即可利用ADRC(P2.2),ADRB(P2.1),ADRA(P2.0)分别读回CNT1和CNT2的计数值,并根据精度测量公式进行运算,计算出被测信号的频率或周期值。
(二)控制部件设计
如图所示,当D触发器的输入端START为高电平时,若FIN端来一个上升沿,则Q端变为高电平,导通FIN-CLK1和FSD-CLK2,同时EEND被置为高电平作为标志;当D触发器的输入端START为低电平时,若FIN端输入一个脉冲上沿,则FIN-CLK1与FSD-CLK2的信号通道被切断。
图4.2测频与测周期控制部分电路
计数部件设计
图中的计数器CNT1/CNT2是32位二进制计数器,通过DSEL模块的控制,单片机可分4次将其32位数据全部读数。
(三)脉冲宽度测量和占空比测量模块设计
根据上述脉宽测量原理,设计如图(CONTRL)所示的电路原理示意图。
该信号的上沿和下沿信号对应于未经处理时的被测信号50%幅度时的上沿和下沿.被测信号从FIN端输入,CLR为初始化信号图4.3脉冲宽度测量原理图
测量脉冲宽度的工作步骤如下:
1向CONTRL的CLR端送一个脉冲以便进行电路的工作状态初始化.
2将GATE的CNL端置高电平,表示开始脉冲宽度测量,这时CNT2的输入信号为FSD.
3在被测脉冲的上沿到来时,CONTRL2的PUL端输出高电平,标准频率信号进入计数器CNT2.
4在被测脉冲的下沿到来时,CONTRL2的PUL端输出低电平,计数器CNT2被关断.
5由单片机读出计数器CNT2的结果,并通过上述测量原理公式计算出脉冲宽度.
(四)电路显示模块
系统硬件电路中,单片机MCU与FPGA进行数据交换占用了P0口、P1口和P3口,因此数据显示电路的设计采用静态显示的方式,显示电路由8个共阳极七段数码管和8片1位串入8位并出的74LS164芯片组成。
图4.4显示电路图
这种显示方式不仅占用单片机端口少,而且充分利用了单片机的资源,容易掌握其编码规律,简化了软件编程,在实验过程中,也体现出较高的可靠性。
数据显示电路如图4.4所示。
第四章各功能模块基于VHDL的设计
第一节时基产生与测频时序控制电路模块的VHDL源程序
程序ctrl.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCTRLIS
PORT(CLK:
INSTD_LOGIC;-系统时钟
LOCK:
OUTSTD_LOGIC;-锁存信号
EN:
OUTSTD_LOGIC;-计数允许信号
CLR:
OUTSTD_LOGIC);-清零信号
END;
ARCHITECTUREARTOFCTRLIS
SIGNALQ:
STD_LOGIC_VECTOR(3DOWNTO0);-定义变量
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN-检测时钟上升沿
IFQ="1111"THEN
Q<="0000";-计数大于15,清零
ELSE
Q<=Q+'1';-允许计数
ENDIF;
ENDIF;
EN<=NOTQ(3);
LOCK<=Q(3)ANDNOT(Q
(2))ANDQ
(1);
CLR<=Q(3)ANDQ
(2)ANDNOT(Q
(1));
ENDPROCESS;
ENDART;
程序主要讲述了由时钟信号产生计数允许信号、清零信号和锁存信号,而且限定了响应时间为不超过15s。
第二节待测信号脉冲计数电路模块的VHDL源程序
一十进制加法计数器的VHDL源程序
程序cb10.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCB10IS
PORT(CLK,EN,CLR:
INSTD_LOGIC;
COUNT10:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-
计数输信号
ENDCB10;
ARCHITECTUREARTOFCB10IS-结构体
BEGIN
PROCESS(CLK,CLR,EN)
BEGIN
IFCLR='1'THEN
COUNT10<="0000";-计数器清零
ELSIFRISING_EDGE(CLK)THEN-检测时钟上升沿
IF(EN='1')THEN-检测是否允许计数
IFCOUNT10="1001"THEN
COUNT10<="0000";-计数值满9清零
ELSE
COUNT10<=COUNT10+'1';-允许计数
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
程序主要讲述了十进制加法计数器的使用,在符合了一定的标准以后十进制的使用,在计数器满9后清零。
二待测信号脉冲计数器的VHDL源程序
程序count.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK:
INSTD_LOGIC;-待测时钟信号
EN:
INSTD_LOGIC;-计数选通控制信号
CLR:
INSTD_LOGIC;-计数器清零信号
QA,QB,QC,QD:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-结果输出信号
END;
ARCHITECTUREARTOFCOUNTIS
COMPONENTCB10-元件CB10引用说明语句
PORT(CLK,EN,CLR:
INSTD_LOGIC;
COUNT10:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-计数输出信号
ENDCOMPONENT;
SIGNALCLK2:
STD_LOGIC;
SIGNALCLK3:
STD_LOGIC;
SIGNALCLK4:
STD_LOGIC;
BEGIN
CLK2<=NOTQA(3);
CLK3<=NOTQB(3);
CLK4<=NOTQC(3);
U1:
CB10PORTMAP(CLK,EN,CLR,QA);-元件引用例示
U2:
CB10PORTMAP(CLK2,EN,CLR,QB);-元件引用例示
U3:
CB10PORTMAP(CLK3,EN,CLR,QC);-元件引用例示
U4:
CB10PORTMAP(CLK4,EN,CLR,QD);-元件引用例示
ENDART;
第三节锁存与译码显示控制电路模块的VHDL源程序
一译码显示电路的VHDL源程序
程序bcd7.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYBCD7IS
PORT(BCD:
INSTD_LOGIC_VECTOR(3DOWNTO0);-BCD输入信号
LED:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));-七段译码输出信号
END;
ARCHITECTUREARTOFBCD7IS
BEGIN
LED<="0111111"WHENBCD="0000"ELSE
-对照七段字形显示译码器真值表
"0000110"WHENBCD="0001"ELSE
"1011011"WHENBCD="0010"ELSE
"1001111"WHENBCD="0011"ELSE