FPGA和单片机多功能等精度频率计设计方案.docx
《FPGA和单片机多功能等精度频率计设计方案.docx》由会员分享,可在线阅读,更多相关《FPGA和单片机多功能等精度频率计设计方案.docx(20页珍藏版)》请在冰豆网上搜索。
FPGA和单片机多功能等精度频率计设计方案
封面
作者:
PanHongliang
仅供个人学习
基于FPGA和单片机的多功能等精度频率计设计
摘要
基于传统测频原理的频率计的测量精度将随着被测信号频率的下降而降低,在实用中有很大的局限性,而等精度频率计不但有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。
运用等精度测量原理,结合单片机技术设计了一种数字频率计,由于采用了屏蔽驱动电路及数字均值滤波等技术措施,因而能在较宽定的频率范围和幅度范围内对频率,周期,脉宽,占空比等参数进行测量,并可通过调整闸门时间预置测量精度。
选取的这种综合测量法作为数字频率计的测量算法,提出了基于FPGA的数字频率计的设计方案。
给出了该设计方案的实际测量效果,证明该设计方案切实可行,能达到较高的频率测量精度。
关键词等精度测量,单片机,频率计,闸门时间,FPGA
ABSTRACT
Alongwithismeasuredbasedonthetraditionalfrequencymeasurementprinciplefrequencymetermeasuringaccuracythesignallingfrequencythedropbuttoreduce,inispracticalhastheverybiglimitation,butandsoontheprecisionfrequencymeternotonlyhasteachesthehighmeasuringaccuracy,moreovermaintainstheconstanttestprecisionintheentirefrequencymeasurementregion.Usingandsoontheprecisionsurveyprinciple,unifiedthemonolithicintegratedcircuittechnicaldesignonekindofnumeralfrequencymeter,becausehasusedtheshieldactuationelectriccircuitandtechnicalmeasureandsoondigitalaveragevaluefilter,thuscouldincomparedinthefrequencyrangeandthescopescopewhichthewidthdecidedtothefrequency,thecycle,thepulsewidth,occupiedparameterandsoonspatialratiocarriesonthesurvey,andmightthroughtheadjustmentstrobetimeinitializationmeasuringaccuracy.Selectionthiskindofsynthesismeasuredthemensurationtookthedigitalfrequencymeterthesurveyalgorithm,proposedbasedontheFPGAdigitalfrequencymeterdesignproposal.Hasproducedthisdesignproposalactualsurveyeffect,provedthisdesignproposalispracticalandfeasible,canachievethehighfrequencymeasurementprecision
KeywordsPrecisionsurvey,microcontroller,frequencymeter,strobetime,fieldprogrammablegatearray
1绪论
测量频率是电子测量技术中最常见的测量之一。
不少物理量的测量,如时间、速度等都涉及到或本身可转化为频率的测量。
目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。
而在实际工程中,并不是对所有信号的频率测量都要求达到非常高的精度。
目前,有三种常用的数字频率的测量方法:
直接测量法(以下称M法)、周期测量法(以下称T法)和综合测量法(以下称M/T法)。
M法是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被测信号的频率。
T法是通过测量被测信号一个周期时间计时信号的脉冲个数,然后换算出被测信号的频率。
这两种测量法的精度都与被测信号有关,因而它们属于非等精度测量法。
而M/T法它通过测量被测信号数个周期的时间,然后换算得出被测信号的频率,克服了测量精度对被测信号的依赖性。
M/T法的核心思想是通过闸门信号与被测信号同步,将闸门时间τ控制为被测信号周期长度的整数倍。
测量时,先打开预置闸门,当检测到被测信号脉冲沿到达时,标准信号时钟开始计数。
预置闸门关闭时,标准信号并不立即停止计数,而是等检测到被测信号脉冲沿到达时才停止,完成被测信号整数周期的测量。
测量的实际闸门时间与预置闸门时间可能不完全相同,但最大差值不超过被测信号的一个周期。
2系统设计方案
2.1系统设计方案的选择
根据频率计的设计要求,我们可将整个电路系统划分为几个模块,频率测量模块,周期测量模块,脉宽测量模块,和占空比测量模块。
标准频率发生电路采用高频率稳定度和高精度的晶镇作为标准频率发生器。
如图所示。
各模块的实现均有几种不同的设计方案。
图2.1频率计组成模块框图
2.1.1频率测量模块
①直接测频法:
把被测频率信号经脉冲整形电路处理后加到闸门的一个出入端,只有在闸门开通时间T(以秒计)内,被计数的脉冲送到十进制计数器进行计数;设计数器的值为N,则可得到被测信号频率为f=N/T,经分析,本测量在低频率的相对测量误差较大,即在低频段不能满足本设计的要求。
②组合测频法:
这种方法可以在一定程度上弥补方法
(1)中的不足,但是难以确定最佳分测点,且电路实现较复杂。
③倍频法:
是指把频率测量范围分成多个频段,使用倍频技术,根据频段设置倍频系数,将经整形的低频信号进行倍频后在进行测量,对高频段则直接进行测量。
倍频法较难实现。
④等精度测频法:
其实现方式可用图2.2来说明。
图中,预置门控信号是宽度为TPR的一个脉冲,CNT1和CNT2是两个可控计数器。
标准频率信号从CNT1的时钟输出端CLK输入,其频率为fs,经整形后的被测信号从CNT2的时钟输入端CLK输入,设其实际频率为fx;当预置门控信号为高时,经整形后的被测信号的上升沿通过D触发器的Q端同时启动计数器CNT1和CNT2。
CNT1和CNT2分别对被测信号(频率为fs)和标准频率信号(频率为fx)同时计数。
当预置门信号为低时,随后而至的被测信号的上升沿将两个计数器同时关闭。
设在一次预置门时间Tpr内对被测信号的计数值为Nx,对标准信号的计数值为Ns。
则下式成立:
fx/Nx=fs/Ns
由此推得:
fx=fs*Nx/Ns
图2.2等精度测频法原理框图
若所测频率值为fx,其真实值为fxe,标准频率为fs,一次测量中,由于fx计数的起停时间都是该信号的上跳沿触发的,因此在Tpr时间内对fx的计数Nx无误差,在此时间内的计数Ns最多相差一个脉冲,即fx/Nx=fs/Ns,则下式成立:
fxe/Nx=fs/Ns+△et
可分别推得fx=fs*Nx/Nsfxe=fs*Nx/Ns+△et
根据相对误差的公式有:
△fxe/fxe=fxe-fx/fxe
经整理可得到:
△fxe/fxe=△et/Ns
因△et≤1,故△fxe/fxe≤1/NsNs=Tpr*fs
根据以上分析,我们可知等精度测频法具有三个特点:
1,相对测量误差与被测频率的高低无关;2,增大Tpr或fs可以增大Ns,减少测量误差,提高测量精度;3,测量精度与预置门宽度和标准频率有关,与被测信号的频率无关,在预置门和常规测频闸门时间相同而被测信号频率不同的情况下,等精度测量法的测量精度不变;
经过综合考虑,结合设计需求,选用第④种方案,即用等精度测频法来实现本设计频率测量。
2.1.2周期测量模块
①直接周期测量法:
用被测信号经放大整形后形成的方波信号直接控制计数门控电路,使主门开放时间等于信号周期Tx,时标为Ts的脉冲在主门开放时间进入计数器。
设在Tx期间计数值为N,可以根据以下公式来算得被测信号周期:
Tx=N*Ts经误差分析,可得结论:
用该测量法测量时,被测信号的频率越高,测量误差越大。
②等精度周期测量法:
该方法在测量电路和测量精度上与等精度测量完
全相同,只是在进行计算时公式不同,在周期1/T代换频率f即可,其计算公式为Tx=Ts*Ns/Nx从降低电路的复杂度及提高精度(特别是高频)上考虑,本设计拟采用方法②测量被测信号的周期。
2.1.3脉宽测量模块
在进行脉冲宽度测量时,首先经信号处理电路进行处理,限制只有信号的50%幅度及其以上部分才能输入数字测量部分。
脉冲边沿被处理得非常陡峭,然后送入测量计数器进行测量。
测量电路在检测到脉冲信号的上升沿时打开计数器,在下降沿是关闭计数器,设脉冲宽度为Twx,计算公式为:
Twx=Nx/fs。
3系统总体设计方案
等精度数字频率计涉及到的计算包括加,减,乘,除,耗用的资源比较大,用一般中小规模CPLD/FPGA芯片难以实现。
因此,我们选择单片机和CPLD/FPGA的结合来实现。
电路系统原理框图如图所示,其中单片机完成整个测量电路的测试控制,数据处理和显示输出;CPLD/FPGA完成各种测试功能;键盘信号由AT89C51单片机进行处理,它从CPLD/FPGA读回计数数据并进行运算,向显示电路输出测量结果;显示器电路采用七段LED动态显示,由8个芯片74LS164分别驱动数码管。
系统的基本工作方式如下:
①P0是单片机与FPGA的数据传送通信口,P1口用于键盘扫描,实现各测试功能的转换;P2口为双向控制口。
P3口为LED的串行显示控制口;系统设置5个功能键:
占空比,脉宽,周期,频率,和复位。
②7个LED数码管组成测量数据显示器,另一个独立的数码管用于状态显示。
③BCLK为测频标准频率为50MHz信号输入端,由晶体震荡源电路提供。
④待测信号经放大整形后输入CPLD/FPGA的TCL
4CPLD/FPGA测频专用模块的VHDL程序设计
4.1测频模块逻辑结构
利用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测频模块逻辑图
4.2各模块功能和工作步骤如下:
4.2.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的计数值,并根据精度测量公式进行运算,计算出被测信号的频率或周期值。
4.2.2控制部件设计
如图所示,当D触发器的输入端START为高电平时,若FIN端来一个上升沿,则Q端变为高电平,导通FIN-CLK1和FSD-CLK2,同时EEND被置为高电平作为标志;当D触发器的输入端START为低电平时,若FIN端输入一个脉冲上沿,则FIN-CLK1与FSD-CLK2的信号通道被切断。
图4.2测频与测周期控制部分电路
计数部件设计
图中的计数器CNT1/CNT2是32位二进制计数器,通过DSEL模块的控制,单片机可分4次将其32位数据全部读数。
4.2.3脉冲宽度测量和占空比测量模块设计
根据上述脉宽测量原理,设计如图(CONTRL)所示的电路原理示意图。
该信号的上沿和下沿信号对应于未经处理时的被测信号50%幅度时的上沿和下沿.被测信号从FIN端输入,CLR为初始化信号图4.3脉冲宽度测量原理图
1测量脉冲宽度的工作步骤如下:
2向CONTRL的CLR端送一个脉冲以便进行电路的工作状态初始化.
3将GATE的CNL端置高电平,表示开始脉冲宽度测量,这时CNT2的输入信号为FSD.
4在被测脉冲的上沿到来时,CONTRL2的PUL端输出高电平,标准频率信号进入计数器CNT2.
5在被测脉冲的下沿到来时,CONTRL2的PUL端输出低电平,计数器CNT2被关断.
6由单片机读出计数器CNT2的结果,并通过上述测量原理公式计算出脉冲宽度.
CONTRL2子模块的主要特点是:
电路的设计保证了只有CONTRL2被初始化后才能工作,否则PUL输出始终为零.只有在先检测到上沿后PUL才为高电平,然后在检测到下沿时,PUL输出为低电平:
ENDD输出高电平以便通知单片机测量计数已经结束:
如果先检测到下沿,PUL并无变化。
在检测到上沿并紧接一个下沿后,CONTRL2不再发生变化直到下一个初始化信号到来.占空比的测量方法是通过测量脉冲宽度记录CNT2的计数值N1,然后将输入信号反相,再测量脉冲宽度,没得CNT2计数值N2则可以计算出:
占空比=N1/(N1+N2)*100%
4.2.4电路显示模块
系统硬件电路中,单片机MCU与FPGA进行数据交换占用了P0口、P1口和P3口,因此数据显示电路的设计采用静态显示的方式,显示电路由8个共阳极七段数码管和8片1位串入8位并出的74LS164芯片组成。
图4.4显示电路图
这种显示方式不仅占用单片机端口少,而且充分利用了单片机的资源,容易掌握其编码规律,简化了软件编程,在实验过程中,也体现出较高的可靠性。
数据显示电路如图4.4所示。
74LS164是一种8位高速串入/并出的移位寄存器,随着时钟信号的高低变化,串行数据通过一个2输入与门同步的送入,使用独立于时钟的主控复位端让寄存器的输出端变为低电平,并且采用肖特基钳位电路以达到高速运行的目的。
并且还具有以下的特点:
①典型的35MHZ移位频率;②异步主控复位;③门控串行输入;④同步数据传输;⑤采用钳位二极管限制高速的终端;⑥静电放电值大于3500V。
在本系统中,74LS164的连接方式为:
74LS164的输出Q0~Q7分别接LED数码管的dp、g、f、e、d、c、b、a,并且Q7连接下一个74LS164的A,B端,时钟CLK连接单片机的TXD端,第一片芯片的AB端连接单片机的RXD端,74LS164芯片的主控复位端接高电平VCC。
在这种状态下,数码管的编码如下表所示。
4.2.5数码管的编码表
显示数码
段码
显示数码
段码
0
0c0h
8
80h
1
0f9h
9
90h
2
0a4h
A
88h
3
0b0h
B
83h
4
99h
C
0c6h
5
92h
D
0a1h
6
82h
E
86h
7
0f8h
F
8eh
5单片机控制与运算程序的设计
5.1AT89C51RC单片机简介
AT89C5lRC是在AT89C52基础上开发的新型高档单片机。
它的主要特性是:
片内含有32KB的Flash程序存储器,擦写周期为1000次。
片内数据存储器内含512字节的RAM;
具有可编程32线I/O口(P0,P1,P2和P3口);
具有3个可编程定时器T0,T1和T2;
中断系统是具有8个中断源、6个中断矢量、2级中断优先权的中断结构;
具有一个全双工UART串行口;
低功耗工作方式为空闲模式和掉电模式;
具有双数据指针DPTR0和DPTR1;
具有3级程序锁定位;
具有硬件看门狗定时器WDT;
AT89C51RC工作电源为4.0~5.5V(AT89LV51RC为2.7~5.5V);
AT89C51RC最高工作频率为33MHZ(AT89LV51RC为12MHZ);
具有断电标志POF.
与AT89C52相比,AT89C5lRC具有如下特点:
程序存储器由8KB增加到32KB;
片内数据存储器由256字节增加到512字节;
数据指针由1个增加到2个;
增加了看门狗定时器,CPU在执行程序过程中,由于瞬时的干扰使程序陷入死循环环状态,WDT(WatchdogTimer)是使CPU摆脱这种困境而自动恢复的一种方法;
退出掉电方式由单纯硬件复位方式增加到硬件复位和中断两种方式;
新增加了断电标志POF.
89C51RC的内部框图
图5.189C51RC的内部框图
引脚排列及功能
AT89C51RC有3种封装形式:
PDIP.PLCC和TQFP.PDIP封装的引脚排列如图所示。
图5.2AT89C51RC引脚图
1 I/O口线
P0口——8位、漏极开路的双向1/O口。
当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。
在编程时,P0口可用于接收指令代码宇节;在程序校验时,P0口可输出指令字节(这时需要加外部上拉电阻)。
P0口也可作通用I/O口使用.但需加上拉电阻.变为准双向口。
当作为普通输入时,应将输出锁存器置1.PO口可驱动8个TTL负载.
P1口——8位、准双向I/O口,具有内部上拉电阻。
P1口是为用户准备的1/O双向口。
在编程和校验时,可用做输入低8位地址。
用做输入时,应先将输出锁存器置1.P1口可驱动4个TTL负载。
P1.0P1.1替代功能
引 脚
替代功能
说 明
P1.0
T2
定时器2的外部事件输入端;可编脉冲输出端
P1.1
T2EX
定时器2的捕捉/重装触发器输入端定时器2的计数方向控制端
P2口——8位、准双向1/O口.具有内部上位电阻.
当使用片外存储器或外扩1/O口时.P2口输出高8位地址。
在编程/校验时.P2口可接收高字节地址和某些控制信号。
P2口也可作普通I/O口使用。
用做输入时,应先将输出锁存器置1.P2口可驱动4个TTL负载。
P3口——8位、准双向1/O口,具有内部上拉电阻。
P3口可作为普通1/O口。
用做输入时,应先将输出锁存器置1.在编程/校验时.P3口接收某些控制信号。
它可驱动4个TTL负载。
P3口还提供各种替代功能。
P3口替代功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(记时器0外部输入)
P3.5
T1(记时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
2.控制信号线
RST——复位输入信号,高电平有效。
在振荡器稳定工作时,在RST脚施加两个机器周期(即24个晶振周期)以上的高电平,将器件复位。
/VPP——外部程序存惜器访问允许信号EA(ExternalAccessEnable)。
当信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H~FFFFH;当接地时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。
在编程时,该引脚可接编程电压(AT89C51的VPP为5V或12V;AT89LV51的VPP为12V)。
在编程校验时,该引脚可接VCC。
——片外程序存储器读选通信号用PSEN(ProgramStoreEnable),低电平有效。
在片外程序存储器取指期间,当有效时,程序存储器的内容被送至PO口(数据总线);在访问外部RAM时,无效。
AIE/——低字节地址锁存信号AlE(AddresslatchEnable)。
在系统扩展时,AlE的下降沿将PO口输出的低8位地址锁存在外接的地址锁存器中,以实现低字节地址和数据的分时传送。
此外,ALE端连续输出正脉冲.频率为晶振频率的1/6,可用做外部定时脉冲使用。
但要注意,每次访问外RAM时要丢失一个ALE脉冲。
在编程期间,该引脚输入编程脉冲()。
3.电原线
VCC——电源电压输入。
GND——接地。
4.外部晶振引线
XTAL1——片内振荡器反相放大器和时钟发生线路的输入端。
使用片内振荡器时,连接外部石英晶体和微调电容。
XTAL2——片内振荡器反相放大器的输出端。
当使用片内振荡器时,外接石英晶体和微调电容。
当使用外部振荡器时,引脚XTAL1接收外振荡器信号,XTAIL2悬空。
AT89C5lRC有两种低功耗节电模式:
空闲模式和掉电模式。
1.空闲模式
应用软件使PCON中的IDL=l,系统便可进入空闲模式.由于PCON不可位寻址,进入空闲模式可采用如下指令:
MOVA,PCON
SETBACC,0;IDL=l
MOVPCON,A
系统进入空闲模式后,CPU处于休眠状态.振荡器和片内外围单元(中断系统、定时器、I/O口、串行口)仍然有效.片内RAM和SFR中的内容保留不变。
退出空闲模式有两种方法:
任何一个有效的中断和便件复位.退出空闲模式后,IDL由片内硬件自动清0。
2.掉电模式
执行一条指令,使PD=1,系统便进入掉电模式。
进入掉电模式后,振荡器停止工作.掉电模式下.片内RAM和SPR中的内容保持不变.
退出掉电模式有两种方法:
硬件复位和允许的外部低电平中断(INT0和INT1)。
硬件复位过程不改变片内RAM的内容,但要重新设量SFR的内容.仅当VCC恢复到正常操作值,且振荡器达到稳定后,复位有效.
复位退出掉电模式时,系统首先从断点处恢复执行程序,直到复位控制逻辑有效。
这个