F题 简易多功能计数器.docx

上传人:b****6 文档编号:4715952 上传时间:2022-12-07 格式:DOCX 页数:37 大小:386.88KB
下载 相关 举报
F题 简易多功能计数器.docx_第1页
第1页 / 共37页
F题 简易多功能计数器.docx_第2页
第2页 / 共37页
F题 简易多功能计数器.docx_第3页
第3页 / 共37页
F题 简易多功能计数器.docx_第4页
第4页 / 共37页
F题 简易多功能计数器.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

F题 简易多功能计数器.docx

《F题 简易多功能计数器.docx》由会员分享,可在线阅读,更多相关《F题 简易多功能计数器.docx(37页珍藏版)》请在冰豆网上搜索。

F题 简易多功能计数器.docx

F题简易多功能计数器

2008年F题简易多功能计数器

本文论述了电子计数式简易多功能计数器的原理、设计、应用及误差特性。

以ATmega128单片机为控制核心,由FPGA模块、键盘输入模块、液晶显示模块、温度测量模块等功能模块组成,实现了周期

  

简易多功能计数器(F题)

参赛学生:

宗露  林荣逸 吕彦锋信息科学与工程学院

参赛学校:

哈尔滨工业大学(威海)

指导老师:

毛兴鹏

摘要

随着科学技术的发展,频率和时间测量的意义已日益显著,不仅与人们日常生活息息相关,而且在当代高科技中更是显得重要。

可编程逻辑器件和EDA计数给今天的硬件系统设计者实现了强而有力的工具,使得电子系统设计方法发生了质的变化。

本文论述了电子计数式简易多功能计数器的原理、设计、应用及误差特性。

本计数器以ATmega128单片机为控制核心,由FPGA模块、键盘输入模块、液晶显示模块、温度测量模块等功能模块组成,实现了周期、频率、时间间隔的测量等功能。

在设计方法上,由传统的“电路设计—硬件搭试—焊机”的传统方式到“功能设计—软件模拟—下载”的电子自动化模式,以软件设计为主,硬件设计为辅的指导思想,将复杂硬件软件化,从而大大提高了系统设计的灵活性和稳定性。

关键字:

电子计数式,测量精度,可编程逻辑器件,AVR单片机,门控信号

Multi-functionCounter

ABSTRACT

TheFPGA(FieldProgrammableGateArray)providesafast,accurateandflexiblesolutionfordigitalsystemdesign.Thispaperdiscussesthedesignflow,schemeselection,anderrorcontrolandanalysisofamulti-functioncounter.BasedonATmega128asthemicrocontroller,itconsistsoftheFPGAmodule,keyboardmodules,liquidcrystaldisplay(LCD)modules,temperaturemeasurementmoduleetc.Thissystemcanbeappliedintheperiod,frequency,intervalmeasurements.Asforthedesignmethods,the"functionaldesign-softwaresimulation-Download"electronicautomaticmodetakestheplaceofthetraditional"circuitdesign-hardwaretestride-welder"methods.ItmainlydependsontheEDATools,supplementedbythehardwaredesignandinthiswayitsimplifiesthehardwaredesign,greatlyimprovingtheflexibilityandstabilityofthesystem.

Keywords:

FrequencyMeter,PeriodMeter,Counter,MeasurementAccuracy,FPGA,AVR

目录

正文

1.1设计要求

1.1.1基本设计要求--------------------------------------------------------------------1

1.1.2发挥设计要--------------------------------------------------------------------1

1.2测量原理

1.2.1频率测量原理--------------------------------------------------------------------1

1.2.2时间间隔--------------------------------------------------------------------1

1.2.3系统测量原--------------------------------------------------------------------2

1.3系统总体方案

1.3.1系统总体方案的比较与--------------------------------------------------------------------2

1.3.2系统总框图--------------------------------------------------------------------3

1.4各模块硬件电路实现

1.4.1FPGA模块--------------------------------------------------------------------3

1.4.1.1频率测量--------------------------------------------------------------------3

1.4.1.2时间间隔测量--------------------------------------------------------------------4

1.4.1.3其他--------------------------------------------------------------------5

1.4.2信号预处理--------------------------------------------------------------------6

1.4.3AD采样测幅值--------------------------------------------------------------------7

1.4.4温度测量模块--------------------------------------------------------------------7

1.4.5键盘输入模块--------------------------------------------------------------------7

1.4.6液晶显示模块--------------------------------------------------------------------7

1.4.7语音报时模块--------------------------------------------------------------------7

1.4.8自制电源--------------------------------------------------------------------7

1.4.9浮点数除法运算--------------------------------------------------------------------8

1.5系统软件设计

2.5.1主程序流程图--------------------------------------------------------------------8

2.5.2界面设计--------------------------------------------------------------------9

1.6测试与结果分析

2.6.1参数测量结果-------------------------------------------------------------------10

2.6.2误差与结果分析-------------------------------------------------------------------11

1.7设计总结-------------------------------------------------------------------12

1.8参考资料-------------------------------------------------------------------12

附录

1.1元件清单-------------------------------------------------------------------13

1.2电路设计原理图及相关仿真结构-------------------------------------------------------------------13

1.3源程序代码-------------------------------------------------------------------13

正文

1.1设计要求

1.1.1基本设计要求

(1)具有测量周期、频率、时间间隔的功能;

(2)可以用键盘选择上述三种功能;

(3)周期、时间间隔测量:

0.1mS~1S,误差≦0.1%;频率测量:

1Hz~200KHz,误差0.1%;

(4)能够显示至少六位数码,并自制计数器电源

1.1.2发挥设计要求

(1)周期、时间间隔测量:

1µS~10S,误差≦0.1%;频率测量:

0.01Hz~10MHz,误差≤0.1%;

(2)可以记忆10个历史测量数据,且能够随时查看;

(3)实现语音报数功能,并且显示被测信号的峰值;

(4)其他(如温度、时间等功能)。

1.2测量原理

1.2.1频率测量原理

原理一般可分为模拟法和电子计数法两种,电子计数法具有测量精度高、速度快、自动化程度高、操作简单等优点而应用更为广泛。

图1—频率测量原理图

示,由晶振分频及门控制电路得到具有固定宽度Ts的方波脉冲作为门控信号,加到闸门的控制端,控制闸门开、闭的时间。

设被测信号频率为Fx,¬¬,门控信号持续时间为TS,计数器计数为N。

测频时,将计数器置零,待门控信号来到后打开闸门,允许被测脉冲通过,计数器开始计数,只到门控信号结束,闸门关闭,停止计数。

此时Fx=N/TS。

可见,此种测量方法中门控信号的选取是关键,门控信号决定了所测频率的准确程度,如测量低频信号时,在门控信号持续的时间内计数器计数较小,测量误差较大。

1.2.2时间间隔测量原理

时间间隔测量可分为连续时间测量和单次测量。

连续测量用于周期信号的多次测量,然后通过取平均值以达到较高的测量精度;单次测量就是以随机的一次测量为基础,其测量原理图1——2所示:

 

图1—周期测量原理图

设量化时钟的频率为T0,待测脉冲上升沿到来时量化时钟的初始计数为M,下一次待测脉冲上升沿到来时量化时钟技术为M,T1、T2为待测脉冲上升沿与下一个量化时钟脉冲上升沿之间的时间间隔,则时间间隔为Tx=(N-M)*T0+T1-T2。

这种测量方法是测量Tx内的时钟量化时钟个数,对于高频信号而言,Tx时间内计数器计入量化时钟个数较小,测量误差较大。

此种测量方法以被测信号本身作为门控信号,通过测量门控信号中的量化信号个数得出时间间隔。

 1.2.3本系统测量原理的选择

比较以上两种测量方法,前者(以下简称测频法)是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被测信号的频率。

测频法的测量精度取决于闸门时间和被测信号频率。

当被测信号频率较低时将产生较大的误差,除非闸门时间取得很大(即要求晶振分频倍数大,使门控信号能够达到足够小的频率)。

后者(以下简称测周法)是以给定信号为门控信号,通过测量门控信号时间内通过的量化信号的个数换算出时间间隔的。

测周法的测量精度取决于被测信号的周期和计时的精度,当被测信号频率较高时,计时精度的要求就很高了。

实际上,测周法和测频法都存在一个字的技术误差问题:

测频法存在门控信号内一个被测信号的脉冲个数误差,测周法存在一个被测信号内量化信号脉冲个数误差。

为了提高系统测量精度,我们采用任何一种方法测量都应该保证计数个数N足够大。

因此,对于周期测量分为高频档和低频档。

低频信号直接测量,高频信号则先通过分分频器分频,转化为低频信号后,按照低频档的方法测量。

对于频率测量,依然分成高频、低频两档。

对于低频信号我们采去测周法,然后根据公式f=1/T,计算出低频频率。

由于单片机做浮点运算的精度有限,在编写单片机程序时,还应该注意采取有效算法控制运算精度。

1.3系统总体方案

1.3.1系统总体方案的比较与论证

方案一:

传统51单片机和集成计数器。

传统51单片机功能简单,易于控制而且操作方便,但是工作速度慢,对于题中高频信号的测量会引起致命误差,而且传统51单片机片内资源不丰富,I/O口数量很少,需要通过8155扩展端口。

对于集成计数器,测量高频信号时,计数值可达100000000,以10位计数器(74LS160)为例,需串联8个,单片机的外围电路非常复杂,同时复杂的外接电路会影响整个系统的响应时间,导致很大误差。

方案二:

高性能AVR单片机与FPGA。

高性能AVR单片机是在传统51单片机的基础上发展起来的,它继承了传统51单片机的优点,并在此基础上有所提高。

AVR单片机凭借高速、低功耗、丰富的片类资源等强大功能得到了广泛的应用。

通过对FPGA的编程将复杂而庞大的外部硬件计数电路软件化,FPGA内自带的50MHz有源晶振保证了整个系统的响应速度,系统稳定性得到提高,误差减小。

1.3.2系统总方框图

如下图所示,FPGA完成测量功能,AVR控制液晶显示、温度测量、语音报时、峰值测量、键盘输入等功能。

图3—系统总框图

1.4各模块硬件实现

1.4.1FPGA部分

FPGA部分由频率测量模块、周期/时间间隔测量模块、SPI通信模块,PLL等子模块组成。

1.4.1.1频率测量模块

 

图4—频率测量模块

频率测量模块由分频模块、门控模块,BCD计数模块和数据锁存模块组成。

其中分频模块将FPGA开发板的50M的时钟分频为2Hz门控时钟。

门控模块收门控时钟的上升沿,对BCD计数器的使能(enable)、清零(clr)和数据锁存(lck)信号的时序进行控制图5所示。

值得注意的是,本频率测量模块使用的BCD计数器而不是普通二进制计数器。

BCD码很大程度上方便了单片机将其转换成字符型数据,最终显示在LCD上。

我们发现,二进制码转BCD码的算法较为复杂,同时占用的FPGA的片内资源也较多,故直接采用BCD计数方法。

图5—频率测量时序图

1.4.1.2周期/时间间隔测量模块

周期测量使用两个状态机(主状态机和sig_sel状态机)实现。

对于低频信号(signal_x),我们直接计算其一个周期包含的量化时钟的数目。

对高频信号,将其通过分频器分频后再计算包含的量化时钟的数目。

由sig_sel状态机选择被量化的信号。

(如图6所示)

为达到精度0.01%的要求,每个signal时钟需包含大于10000个量化时钟。

因此,我们对周期小于100us的信号进行1000倍分频。

图6—自动转量程原理图

时间间隔测量原理与周期测量相同。

区别在于时间间隔测量为单次测量,周期测量为连续测量。

单脉冲周期无频率而言,故不能经过分频器(sig_sel始终为0)。

为区别周期测量和时间间隔测量这两种模式,本模块引入一个模式选择信号(mode)当mode=1时为侧周期模式,当mode=0是为测时间间隔模式。

主状态机:

测量一次上图中signal信号周期需要用3个signal的方波的周期。

每一个signal周期对应一种状态,每种状态下执行不同的操作。

状态转换图以及各状态的功能如表1所示。

表1—状态机功能

控制时钟

被测方波(signal)的上升沿Hold,或者rst信号的下降沿:

idle

周期计数器(cnt)清零,hold状态计数器(cnt_hold)*清0,

idle状态计数器(cnt_idle)*计数

hold

周期计数器(cnt)计数,idle状态计数器(cnt_idle)清0

counting

周期计数器(cnt)保持,hold状态计数器(cnt_hold)计数

 *设置hold状态计数器和idle状态计数器的目的是避免出现被测信号的频率过低而又被1000倍分频导致的电路所死(长时间处于idle或hold状态)的情况。

sig_sel状态机:

sig_sel状态用于控制被测方波是否经过分频,起到了扩大量程和提高测量精度的作用。

sig_sel两个状态的功能如下表2所示

表2—功能表

1

被测方波经过分频

0

被测方波没有经过分频

控制时钟

量化时钟clk_10M,或者rst信号的下降沿:

 

sig_sel状态机的verilog描述:

always@(posedgeclk)

begin

if(rst==0||mode==0)

sig_sel<=0;

elseif(cnt>=1_0000_000||cnt_hold>=1_0000_000||cnt_idle>=1_0000_000)

sig_sel<=0;

elseif(curr_s==hold&&sig_sel==0&&cnt<1_0000)

sig_sel<=1;

else

sig_sel<=sig_sel;

end

计数器:

周期测量同时使用BCD码计数器和二进制计数器。

二进制值用于状态的判断和转换。

BCD码方便了单片机处理和显示数据,这与频率测量模块相同。

 

图8—ATmega128与FPGASPI通信

本接口模块中所需实现的逻辑功能是,从机FPGA在主机ATmega128提供的CLK时钟信号下,按照SPI接口规范,按照SPI时序图的规范接受数据,然后执行测量对象选择、液晶显示等操作。

其工作流程如下,ATmega128通过MOSI向FPGA发送数据(该数据低八位储存地址信息,高八位储存数据信息,FPGA对地址译码,选择合适的数据输入端),AVR在load端产生下降沿,FPGA将相应数据读入寄存器中,当CS=0,load=1的情况下,在每一个SCLK时钟的上升沿,移位寄存器的数值左移一位。

数据就通过MISO送到MCU中。

图9—SPI时序图

(2)量化时钟周期的选择

合适的量化时钟周期可以简化运算的复杂程度,提高测量效率。

我们选择10ns为量化时钟信号,计算简单,而且保证了测量精度。

1.4.2信号预处理

系统中计数是以上升沿或下降沿为标准的,因此一般信号需通过电压比较器整形为方波信号。

FPGA中的计数器是边沿触发而不是电平触发,整形后波形边沿的陡峭程度显得非常重要。

对于方波信号,我们应根据实际情况整形或者直接通过稳压管稳压后测量相关参数。

对高频信号,我们采用精密TTL比较器MAX941,该比较器具有低功耗、超高速(可达10ns)等优点,可以满足本系统中对高频信号的整形要求。

对于低频信号,经比较器整形后,由于采样速度快,进过比较处理后边沿的陡峭程度受到很大制约,在某种程度上影响了FPGA中计数器对这种非陡峭边沿的识别,从而导致测量中的计数误差。

对于低频信号,我们采取可以外接其它整形电路(如施密特整形,滞回比较器整形等)以弥补MAX941的不足。

1.4.3AD采样测幅

幅度测量采用ATmega128自带的AD转换器,对被测信号(初始信号)对此采样,每次采样与前一次采样比较,保留最大采样值,即可换算出信号的峰值。

显然,对于高频信号,由于AD转化器采样速度的限制,所测峰值误差较大。

1.4.4温度测量模块

方案一:

采用热电偶或者热敏电子作为感温元件,但热电偶需要冷端补偿,电路设计复杂,热敏电阻虽然精度较高,但需要标准稳定的电阻匹配才能使用,而且重复性、可靠性都比较差。

方案二:

采用集成温度传感器DS18B20,该传感器结构简单,不需要外接电路,数据传输用one—wire总线,可用一根I/O数据线既供电又传输数据,在-10~+85℃范围内精度为±0.5℃,且分辨率较高,重复性和可靠性好。

显然,我们采用方案二。

1.4.5键盘输入模块

键盘输入有独立键盘和矩阵键盘两种选择。

对于单片机最小板自带的8个独立按键而言完全可以实现本系统的要求。

但是对于同样的端口,矩阵键盘多了一倍的按键,易于通过多余的按键实现扩展功能的手动控制,例如,单片机接受到某一按键信号后会执行温度测量并且显示温度的程序,接受到另一按键信号会执行峰值测量并显示的程序。

本系统中按键的设置如下:

选择测量对象?

周期,频率,时间间隔;选择需储存记忆数据;是否显示峰值;是否温度测量;是否语音报数;是否返回主界面;返回上一页等。

1.4.6液晶显示模块

2402液晶模块,24行*2列字符显示,并行8/4数据通信,可以满足本系统中至少显示六位的要求。

我们假期已经调过液晶显示的模块,利用C语言模块的可移植性,直接将模块移植过来,根据实际情况更改数组内容,即可实现测量参数的显示。

1.4.7语音报数模块

语音报时使产品与使用者进行良性的互动,大大提高了本测量系统的竞争能力。

我们选用智能型640秒语音录放模块实现语音报数功能。

该模块由麦克风、喇叭、语音芯片及应外围电路组成。

该模块具有话筒录音、线路录音、直接驱动喇叭、支持按键和三线串口控制模式、断点信息不丢失等特点。

对于本计数器中的报数功能,我们可以按照如下操作:

ATmega128单片机通过SPI外串行总线端口给语音模块发送FB+XXH(定时录音模式),然后通过麦克风将数据依次录音,存在合适的地址中,方便播放时寻找合适音频信号。

单片机将FPGA测得的数据按照相对应的规律,找到语音模块中的地址,并发送FCH+XXH(播放模式),从而实现语音报数功能

1.4.8自制电源

本系统中FPGA、ATmega128、电压比较器等器件都需要合适的直流电源供电,因此我们自制了相应的直流电源。

如下图所示,将输出的220V交流信号经变压器降压,整流桥整流,电容滤波,7805、7905等集成稳压器稳压,从而得到满足相应要求的直流电源

图10—电源原理图

1.4.9浮点数除法运算的实现

测频法存在门控信号内一个被测信号的脉冲个数误差,对于高频信号而言,门控信号内通过的被测信号脉冲的个数足够大,一个脉冲的缺失,对测量结构不产生影响;对低频信号而言,门控信号内通过的被测信号脉冲个数很小,一个脉冲的缺失会引起很大的误差,故对低频信号我们采用测周期的方法,通过求倒数换算出周期。

求倒数换算周期,浮点数的除法运算及浮点数显示是本设计中的两大难点。

对于0.1%的精度要求,不同频率范围内的周期求倒数后,小数点后需精确到的位数要求不一样,我们通过寻求第一位有效数字的位置,推测出小数点的位置,(如下表所示)根据相应位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1