基于单片机的等精度频率计设计.docx
《基于单片机的等精度频率计设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的等精度频率计设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的等精度频率计设计
摘要
本文主要论述了利用FPGA(FieldProgrammableGateArray,现场可编程门阵列)进行测频计数,单片机实施控制实现频率计的设计过程。
该频率计利用等精度的设计方法,克服了基于传统测频原理的频率计的测量精度随被测信号频率的下降而降低的缺点。
等精度的测量方法不但具有较高的测量精度,而且在整个频率区域保持恒定的测试精度。
设计中用一块FPGA芯片(型号为CycloneⅡ的EP2C5T144C8N)完成各种时序逻辑控制、计数功能。
在QuartusⅡ平台上,用VHDL语言编程完成了FPGA的软件设计、编译、调试、仿真和下载。
用STC89C52RC单片机作为系统的主控部件,实现整个电路的测试信号控制,数据运算处理和控制数码管的显示输出。
系统将单片机的控制灵活性及FPGA芯片的现场可编程性相结合,不但大大缩短了开发研制周期,而且使本系统具有结构紧凑、体积小,可靠性高,测频范围宽、精度高等优点。
文章详细论述了系统自上而下的设计方法及各部分硬件电路组成及单片机、FPGA的软件编程设计。
使用杭州康芯KX-7C5T型EDA实验开发与电子设计学习板为主的实验环境下,配合单片机最小系统对软硬件进行仿真和验证,达到了较高的测量精度和测量速度。
关键词:
FPGA,VHDL,频率计,单片机,STC89C52RC
目录
摘要I
第一章概论1
1.1课题研究的目的和意义1
1.2测量原理1
1.3系统设计指标3
第二章硬件电路设计5
2.1系统顶层电路设计5
2.2FPGA测频模块逻辑设计5
2.3单片机主控模块6
2.4外围电路设计8
第三章软件设计11
3.1QuartusII概述11
3.2VHDL语言简介12
3.3频率计FPGA模块的顶层设计12
3.4频率计FPGA模块的仿真14
3.5单片机的C语言编程15
第四章系统测试17
4.1测频精度分析17
4.2实验测试数据18
第五章总结19
致谢21
参考文献23
第一章概论
1.1课题研究的目的和意义
测频一直以来都是电子和通讯系统工作的重要手段之一。
高精度的测频仪有着广泛的市场前景。
以往的测频仪都是在低频段利用测周期的方法、高频段用测频率的方法,其精度往往会随着被测频率的下降而下降。
基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。
所以等精度频率计有研究的价值。
1.2测量原理
等精度测频法:
其实现方法可用主控结构图1-1和波形图1-2来说明。
图1-1等精度频率计主控结构图
计数允许周期
Tpr
图1-2频率计测控时序
图1-1中的“预置门信号”CL由单片机发出,CL的时间宽度对测频精度几乎没有影响,在此设其宽度为Tpr。
BZH和TF模块是两个可控的32位高速计数器,EN为它们的技术允许信号端,高电平有效。
标准频率信号从BZH的时钟输入端BCLK输入,设其频率为Fs;经放大整形后的被测信号从与BZH相似的32位计数器TF的时钟输入端TCLK输入,设其真实频率值为Fxe,被测频率为Fx。
测频原理说明如下:
测频开始前,首先发出一个清零信号CLR,使两个计数器和D触发器清零,同时通过信号EN,禁止两个计数器计数。
这是一个初始化操作。
如果系统启动不能正常清零,可以由外部的按键强制清零。
然后由单片机发出允许测频信号,即令预置门控信号CL为高电平(把图1-1和图1-2结合起来看),这时D触发器要一直等到被测信号的上升沿通过时Q端才被置1(即令START为高电平),与此同时,将同时启动计数器BZH和TF,进入图1-2所示的“计数允许周期”。
在此期间,BZH和TF分别对被测信号(频率为Fx)和标准频率信号(Fs=100MHz)同时计数。
当Tpr秒后,预置门信号被单片机置为低电平,但此时两个计数器仍没有停止计数,一直等到随后而至的被测信号的上升沿到来时,才通过D触发器将这两个计数器同时关闭。
由图1-2可见,CL的宽度和发生的时间都不会影响这样一个事实,计数使能信号(START)允许计数的周期总是恰好等于待测信号TCLK的完整周期数,这正是确保TCLK在任何频率条件下都能保持恒定精度的关键。
而且,CL宽度的改变以及随机的出现时间造成的误差最多只有BCLK信号的一个时钟周期,但是BCLK是倍频后的100MHz信号,则任何时刻的绝对测量误差只有亿分之一秒。
被测频率值为Fx,标准频率为Fs,设在一次预置门时间Tpr中对被测信号计数值为Nx,对标准信号的计数值为Ns,则下式成立:
Nx/Fx=Ns/Fs……………………①
由此式可推得:
Fx=(Fs×Nx)/Ns…………………②
最后通过控制SEL选择信号和64位至8位的多路选择器MUX64-8,将计数器BHZ和TF中两个32位数据分8次读入单片机并按式②进行计算和结果显示。
1.3系统设计指标
设计并制作出一种数字频率计,其技术指标如下:
(1)频率测量范围:
0.1Hz—128MHz;
(2)输入电压幅度:
>300mV;
(3)输入信号波形:
任意周期方波信号;
(4)显示位数:
8位LED数码管显示;
(5)电源:
220V、50Hz。
第二章硬件电路设计
2.1系统顶层电路设计
等精度数字频率计涉及到的计算包括加、减、乘、除,耗用的资源比较大,用一般中小规模的FPGA芯片难以实现。
因此,我们选择单片机和FPGA的结合来实现。
电路系统原理图如图2-1所示,其中单片机完成整个测量电路的测试控制、数据处理和显示输出;FPGA完成测频功能。
显示电路采用7段LED动态显示,由单片机P2口直接驱动。
图2-1系统原理图
等精度频率计主要由由以下几个部分构成:
①信号放大整形电路:
用于对待测信号进行放大整形,以便作为FPGA的输入信号。
②测频电路:
是测频的核心模块,由FPGA担任。
③单片机模块:
用于控制FPGA的测频操作和读取测频数据,并发出相应数据处理。
安排单片机的P0口直接读取测试数据。
控制命令从P1口或是P3的相关口线发出。
④20MHz的标准频率信号源:
本模块采用倍频技术,倍频出一个100MHz标准频率信号源,产生100MHz的标准频率给FPGA使用。
⑤数码管显示模块:
采用8个7段LED动态显示,使用P2口作为段信息的输出,使用P1口的低四位控制串行移位寄存器的三个输入及CLK端,实现LED的动态扫描。
2.2FPGA测频模块逻辑设计
根据图1-1和图1-2以及测频原理说明,可以比较容易地写出相应的VHDL功能描述。
图2-2为VHDL描述的RTL电路图(图中spul为外部清零信号,由按键输入)。
与单片机的接口按照如下方式连接:
1单片机的P0口接8位数据DATA[7..0],负责读取测频数据;
2START信号输出到单片机的P3.2口线,通过中断的方式来判断计数是否结束,以确定何时可以读取数据;
3P1.6,P1.5和P1.4与SEL[2..0]相接,用于控制多路数据选择器,当SEL分别为“000”、“001”、“010”、“011”时,由低8位到高8位读出标准频率计数值;当SEL分别为“100”、“101”、“110”、“111”时,由低8位到高8位读出待测频率计数值。
图2-2等精度频率计FPGA部分的RTL电路图
4P3.3接清零信号CLR,高电平有效。
每一个测频周期开始,都应该首先清零。
5P1.7接预置门控信号CL,CL是由定时器T0产生的一个周期为2S的方波信号,即每隔1S钟左右测试一次频率,频率低于1Hz后,测频的间隔会大于1S钟,特别是待测频率为0.1Hz时,每隔10S钟测试一次。
2.3单片机主控模块
STC89C52RC单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
其封装有LQFP44,PDIP40,PLCC44及PQFQ44,本设计中所使用的是PDIP40封装,图形如图2-3所示。
图2-3STC89C52RC单片机PDIP40封装图
STC89C52RC单片机特点如下:
⑴、增强型6时钟/机器周期、12时钟/机器周期任意设置。
⑵、工作电压:
5.5~3.4V(5V单片机)/2.0~3.8V(3V单片机)。
⑶、工作频率:
0~40MHz,相当于普通8051单片机;实际使用范围为0~80MHz。
⑷、8KB片内Flash程序存储器,擦写次数10万次以上。
⑸、片上集成512BRAM数据存储器。
⑹、通用I/O口(32/36个),复位后为:
P1、P2、P3、P4是弱上拉/准双向口(与普通MCS-51I/O口功能一样);P0口是开漏输出口,作为总线扩展时用,不用加上拉电阻;P0口作为I/O口用时,需加上拉电阻。
⑺、ISP在系统可编程,无需专用编程器/仿真器,可通过串口(P30/P31)直接下载用户程序,8KB程序3s即可完成一片。
⑻、芯片内置EEPROM功能。
⑼、硬件看门狗(WDT)。
⑽、共3个16位定时器/计数器,兼容普通MCS-51单片机的定时器,其中定时器T0还可以当成2个8位定时器使用。
⑾、外部中断4路,下降沿中断或低电平触发中断,掉电模式可由外部中断唤醒。
⑿、全双工异步串行口(UART),兼容普通8051单片机的串口。
⒀、工作温度范围:
0℃~75℃/-40℃~+85℃。
除此之外,STC89C52RC单片机自身还有很多独特的优点:
⑴、加密性强,无法解密。
⑵、超强抗干扰。
主要表现在:
高抗静电(ESD保护),可以轻松抗御2KV/4KV快速脉冲干扰(EFT测试),宽电压、不怕电源抖动,宽温度范围为-40℃~+85℃,I/O口经过特殊处理,单片机内部的电源供电系统、时钟电路、复位电路及看门狗电路经过特殊处理。
⑶、三大降低单片机时钟对外部电磁辐射的措施:
禁止ALE输出;如选6时钟/机器周期,外部时钟频率可降一半;单片机时钟振荡器增益可设为1/2gain;
⑷、超低功耗:
掉电模式,典型电流损耗<0.1μA;空闲模式,典型电流损耗为2mA;正常工作模式,典型电流损耗4mA~7mA。
2.4外围电路设计
1、电源模块
整个电路的供电电源如图2-4所示,220V交流经变压、整流、滤波后,由一片78L05三端稳压器向系统提供+5V电压信号。
图2-4电源模块
2、LED数码管显示电路
本设计中采用LED数码管动态显示。
8位数码管采用两个4位一体的共阳型数码管组成;段信息使用单片机的P2控制;为了节约口线,在位的控制上,采用了一片74LS138芯片,把A,B,C三个脚分别用P1.0、P1.1及P1.2控制,此外把6号脚接单片机P1.3脚,用来控制数码管的亮灭。
电路图如图2-5所示。
图2-5LED数码管显示电路
3、其他电路
单片机的时钟电路由12MHz的晶振提供。
FPGA的标准频率信号由20MHz的有源晶振提供。
被测信号经过放大整形电路调理后输入。
第三章软件设计
3.1QuartusII概述
QuartusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大可编程逻辑器件供应商之一。
QuartusII在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX十plusII的更新换代产品,其界面友好,使用便捷。
在QuartusII上可以完成FPGA开发的整个流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
Altera的QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为AlteraDSP开发包进行系统模型设计提供了集成综合环境。
QuartusII设计工具完全支持VHDL,Verilog的设计流程,其内部嵌有VHDL,Verilog逻辑综合器。
QuartusII也可以利用第三方的综合工具,如LeonardoSpectrum,SynplifyPro,FPGACompilerII,并能直接调用这些工具。
同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。
此外,QuartusII与MATLAB和DSPBuilder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
QuartusII包括模块化的编译器。
编译器包括的功能模块有分析/综合器(Analysis&Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(TimingAnalyzer)、设计辅助模块(DesignAssistant)、EDA网表文件生成器(EDANetlistWriter)和编辑数据接口(CompilerDatabaseInterface)等。
可以通过选择StartCompilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。
还可以通过选择CompilerTool(Tools菜单),在CompilerTool窗口中运行该模块来启动编译器模块。
在CompilerTool窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。
此外,QuartosII还包含许多十分有用的LPM(LibraryofParameterizedModules)模块,它们是复杂或高级系统构建的重要组成部分,在SOPC设计中被大量使用,也可在QuartosII普通设计文件一起使用。
Altera提供的LPM函数均基于Altera器件的结构做了优化设计。
在许多实用情况中,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能。
例如各类片上存储器、DSP模块、LVDS驱动器、PLL以及SERDES和DDIO电路模块等。
QuartusII编译器支持的硬件描述语言有VHDL(支持VHDL'87及VHDL'97标准)、VerilogHDL及AHDL(AlteraHDL),AHDL是Altera公司自己设计、制定的硬件描述语言,是一种以结构描述方式为主的硬件描述语言,只有企业标准。
QuartusII允许来自第三方的EDIF文件输入,并提供了很多EDA软件的接口,QuartusII支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块(元件)进行调用,从而解决了原理图与HDL混合输入设计的问题。
在设计输入之后,QuartusII的编译器将给出设计输入的错误报告。
QuartusII拥有性能良好的设计错误定位器,用于确定文本或图形设计中的错误。
对于使用HDL的设计,可以使用QuartusII带有的RTLViewer观察综合后的RTL图。
在进行编译后,可对设计进行时序仿真。
在作仿真前,需要利用波形编辑器编辑一个波形激励文件,用于仿真验证时的激励。
编译和仿真经检测无误后,便可以将下载信息通过QuartusII提供的编程器下载入目标器件中了。
3.2VHDL语言简介
20处纪80年代后期,美国国防部开发的VHDL语言(VHS工C硬件描写语言,VHSIC是非常高度迅速综合的电路的缩写)是工EEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。
VHDL语言覆盖面广,描述能力强,能支持硬件的设计子验证、综合和测试,是一种多层次的硬件描述语言。
其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述。
这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。
运用VHDL语言设计系统一般采用自顶向下分层设计的方法,首先从系统级功能设计开始,对系统高层模块进行行为描述和功能仿真。
系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。
3.3频率计FPGA模块的顶层设计
在本测频系统中,对标准频率信号和被测信号进行测试功能的工作由FPGA来完成。
其硬件电路的实现在前面已述,其软件部分由VHDL语言实现。
下面将给出由VHDL语言实现的顶层模块程序。
频率计测试模块GW.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYGWIS
PORT(BCLK:
INSTD_LOGIC;--标准频率时钟信号
TCLK:
INSTD_LOGIC;--待测频率时钟信号
CLR:
INSTD_LOGIC;--清零和初始化信号
CL:
INSTD_LOGIC;--预置门信号
SPUL:
INSTD_LOGIC;--清零,由按键产生信号
START:
OUTSTD_LOGIC;--起始计数标识信号
SEL:
INSTD_LOGIC_VECTOR(2DOWNTO0);
DATA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDGW;
ARCHITECTUREbehavofGWIS
SIGNALBZQ:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALTSQ:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALENA,PUL:
STD_LOGIC;--计数使能、脉宽计数使能
BEGIN
START<=ENA;
DATA<=BZQ(7DOWNTO0)WHENSEL="000"ELSE
BZQ(15DOWNTO8)WHENSEL="001"ELSE
BZQ(23DOWNTO16)WHENSEL="010"ELSE
BZQ(31DOWNTO24)WHENSEL="011"ELSE
TSQ(7DOWNTO0)WHENSEL="100"ELSE
TSQ(15DOWNTO8)WHENSEL="101"ELSE
TSQ(23DOWNTO16)WHENSEL="110"ELSE
TSQ(31DOWNTO24)WHENSEL="111";
BZH:
PROCESS(SPUL,BCLK,CLR,ENA)
BEGIN
IF(SPUL='1')THENBZQ<=(OTHERS=>'0');
ELSIF(CLR='1')THENBZQ<=(OTHERS=>'0');
ELSIFBCLK'EVENTANDBCLK='1'THEN
IFENA='1'THENBZQ<=BZQ+1;
ENDIF;
ENDIF;
ENDPROCESS;
TF:
PROCESS(SPUL,TCLK,CLR,ENA)
BEGIN
IF(SPUL='1')THENTSQ<=(OTHERS=>'0');
ELSIF(CLR='1')THENTSQ<=(OTHERS=>'0');
ELSIFTCLK'EVENTANDTCLK='1'THEN
IFENA='1'THENTSQ<=TSQ+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(TCLK,CLR)
BEGIN
--IF(SPUL='1')THENENA<='0';
IFCLR='1'THENENA<='0';
ELSIFTCLK'EVENTANDTCLK='1'THENENA<=CL;
ENDIF;
ENDPROCESS;
ENDbehav;
图3-1频率计测试模块
3.4频率计FPGA模块的仿真
对频率计测试模块编译,仿真结果如图3-2所示。
图3-2频率计测试仿真波形
从图3-2可以看出,CLR一个正脉冲后,系统被初始化。
然后CL被置为高电平,但这时两个计数器并未开始计数(start=‘0’),直到此后被测信号TCLK出现一个上升沿,START=‘1’时2个计数器同时启动分别对被测信号和标准信号开始计数,其中BZQ和TSQ分别为标准频率计数器和被测频率计数器的计数值。
由图可见,在CL变为低电平后,计数器仍未停止,直到TCLK出现一个上升沿为止,这时START=‘0’,可作为单片机了解计数器结束的标识信号。
仿真波形中TCLK和BCLK的周期分别设置为10us和500ns。
由图可见,计数结果是,对TCLK的计数值是3,对BCLK的计数值为60。
通过控制SEL就能按照8个8位将计数器中的32位数读入单片机中进行计算。
由公式Fx=(Fs×Nx)/Ns=2MHz×3/60=0.1MHz,也就是周期为10us,可以验证图1-1描述的等精度测频的功能完全正确。
3.5单片机的C语言编程
单片机在该系统中,主要是完成整个测量电路的测试控制、数据处理和显示输出。
系统启动后,如不能正常测试,可以由按键强制性清零。
主程序不断的扫描显示程序,并扫描计数结束标识START是否为零,一旦为零,立即把FPGA的两个计数器技术结果取出、计算,把计算的结果送去显示。
在资源的分配上,除了用于控制FGPA的外,P2口用来进行LED数码管段信息的处理;P1口的低四位用来控制LED数码管的位(其中P1.0,P1.1,P1.2控制74LS138的三个输入端A,B,C实现3-8译码,P1.3控制74LS138的CLR端,用以实现位的关和开);P3.5,P3.6,P3.7控制测频后的单位显示(P3.5是MHz,P3.6是KHZ)。
主程序主要是用来显示和测频,流程图如图3-3所示。
图3-3单片机主程序流程图
第四章系统测试
4.1测频精度分析
由第一章所述的测量原理可知,本系统的测频公式为:
Fx=(Fs×Nx)/Ns
其误差分析如下:
设所测频率值为Fx,其真实值为Fxe,标准频率为Fs。
在一次测量中,由于Fx计数的起停时间都是由该信号的上跳沿触发的,在Tpr时间内Fx的计数Nx无误差;此时内的计数Ns最多相差一个脉冲,即|⊿Ns|≤1则:
Fx/Nx=Fs/Ns
Fxe/Nx=Fs/(Ns+⊿Ns)
由此推得:
Fx=(Fs/Ns)×Nx
Fxe=[Fs/(Ns+⊿Ns)]×Nx
根据相对误差公式有:
⊿Fxe/Fxe=|Fxe-Fx|/Fxe
可以得:
⊿Fxe/Fxe=|⊿Ns|/Ns
∵|⊿Ns|≤1∴|⊿Ns|/Ns≤1/Ns
即相对误差⊿Fxe/Fxe≤1/Ns
又Ns=Tpr×Fs
由此可知:
(1)相对测量误差与频率无关;
(2)增大Tpr或提高Fs,可以增大Ns,减少测量误差,提高测量精度;
(3)本测频系统的测量精度与预置门宽度和标准频率有关,与被测信号的频率无关。
在预置门时间和常规测频闸门时间相同而被测信号频率不同的情况下,本测频系统所采用的测量方法的测量精度不变。
为了恒定测量精度,可采用高频率稳定度和高精度晶体振荡器作标准频率发生器。
本系统选用了20MHz的有源晶振,通过倍频技术倍频到100MHz。
4.2实验测试数据
在系统设计好后,利用FPGA在不同的引脚上发出标准的频率值进行测量,