1、F题 简易多功能计数器2008年F题 简易多功能计数器时间:2009-04-09 09:35来源:竞赛组委会 作者:哈工大威海宗露等 点击: 1598次本文论述了电子计数式简易多功能计数器的原理、设计、应用及误差特性。以ATmega128单片机为控制核心,由FPGA模块、键盘输入模块、液晶显示模块、温度测量模块等功能模块组成,实现了周期 简易多功能计数器(F题) 参赛学生: 宗 露林荣逸吕彦锋 信息科学与工程学院 参赛学校:哈尔滨工业大学(威海) 指导老师:毛兴鹏 摘要 随着科学技术的发展,频率和时间测量的意义已日益显著,不仅与人们日常生活息息相关,而且在当代高科技中更是显得重要。可编程逻辑器
2、件和EDA计数给今天的硬件系统设计者实现了强而有力的工具,使得电子系统设计方法发生了质的变化。本文论述了电子计数式简易多功能计数器的原理、设计、应用及误差特性。本计数器以ATmega128单片机为控制核心,由FPGA模块、键盘输入模块、液晶显示模块、温度测量模块等功能模块组成,实现了周期、频率、时间间隔的测量等功能。在设计方法上,由传统的“电路设计硬件搭试焊机”的传统方式到“功能设计软件模拟下载”的电子自动化模式,以软件设计为主,硬件设计为辅的指导思想,将复杂硬件软件化,从而大大提高了系统设计的灵活性和稳定性。 关键字:电子计数式 ,测量精度 ,可编程逻辑器件 ,AVR单片机,门控信号 Mul
3、ti-function Counter ABSTRACT The FPGA(Field Programmable Gate Array) provides a fast, accurate and flexible solution for digital system design. This paper discusses the design flow, scheme selection, and error control and analysis of a multi-function counter. Based on ATmega128 as the microcontrolle
4、r, it consists of the FPGA module, keyboard modules, liquid crystal display (LCD) modules, temperature measurement module etc. This system can be applied in the period, frequency, interval measurements. As for the design methods, the functional design - software simulation - Download electronic auto
5、matic mode takes the place of the traditional circuit design - hardware test ride - welder methods. It mainly depends on the EDA Tools, supplemented by the hardware design and in this way it simplifies the hardware design, greatly improving the flexibility and stability of the system. Key words: Fre
6、quency Meter, Period Meter, Counter, Measurement Accuracy, 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.1 FPGA模块-3 1.4.1.1 频率测量-3 1.4.1.2时间间隔测量-4 1.4.1.3 其他-5 1.4.2信号预处理-6 1.4.3
7、AD采样测幅值-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)具有测量周期、频率、时间间隔的功能;
8、(2)可以用键盘选择上述三种功能; (3)周期、时间间隔测量:0.1mS1S,误差0.1%;频率测量:1Hz200KHz,误差0.1%; (4)能够显示至少六位数码,并自制计数器电源 1.1.2 发挥设计要求 (1)周期、时间间隔测量:1S10S,误差0.1%;频率测量:0.01Hz10MHz,误差0.1%; (2)可以记忆10个历史测量数据,且能够随时查看; (3)实现语音报数功能,并且显示被测信号的峰值; (4)其他(如温度、时间等功能)。 1.2测量原理 1.2.1 频率测量原理 原理一般可分为模拟法和电子计数法两种,电子计数法具有测量精度高、速度快、自动化程度高、操作简单等优点而应用更
9、为广泛。图1频率测量原理图 示,由晶振分频及门控制电路得到具有固定宽度Ts的方波脉冲作为门控信号,加到闸门的控制端,控制闸门开、闭的时间。设被测信号频率为Fx,,门控信号持续时间为TS,计数器计数为N。测频时,将计数器置零,待门控信号来到后打开闸门,允许被测脉冲通过,计数器开始计数,只到门控信号结束,闸门关闭,停止计数。此时Fx=N/TS。可见,此种测量方法中门控信号的选取是关键,门控信号决定了所测频率的准确程度,如测量低频信号时,在门控信号持续的时间内计数器计数较小,测量误差较大。 1.2.2 时间间隔测量原理 时间间隔测量可分为连续时间测量和单次测量。连续测量用于周期信号的多次测量,然后通
10、过取平均值以达到较高的测量精度;单次测量就是以随机的一次测量为基础,其测量原理图12所示:图1周期测量原理图设量化时钟的频率为T0,待测脉冲上升沿到来时量化时钟的初始计数为M,下一次待测脉冲上升沿到来时量化时钟技术为M,T1、T2为待测脉冲上升沿与下一个量化时钟脉冲上升沿之间的时间间隔,则时间间隔为Tx=(N-M)*T0+T1-T2。这种测量方法是测量Tx内的时钟量化时钟个数,对于高频信号而言,Tx时间内计数器计入量化时钟个数较小,测量误差较大。此种测量方法以被测信号本身作为门控信号,通过测量门控信号中的量化信号个数得出时间间隔。1.2.3 本系统测量原理的选择比较以上两种测量方法,前者(以下
11、简称测频法)是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被测信号的频率。测频法的测量精度取决于闸门时间和被测信号频率。当被测信号频率较低时将产生较大的误差,除非闸门时间取得很大(即要求晶振分频倍数大,使门控信号能够达到足够小的频率)。后者(以下简称测周法)是以给定信号为门控信号,通过测量门控信号时间内通过的量化信号的个数换算出时间间隔的。测周法的测量精度取决于被测信号的周期和计时的精度,当被测信号频率较高时,计时精度的要求就很高了。实际上,测周法和测频法都存在一个字的技术误差问题:测频法存在门控信号内一个被测信号的脉冲个数误差,测周法存在一个被测信号内量化信号脉冲个数误差。为了提高
12、系统测量精度,我们采用任何一种方法测量都应该保证计数个数N足够大。因此,对于周期测量分为高频档和低频档。低频信号直接测量,高频信号则先通过分分频器分频,转化为低频信号后,按照低频档的方法测量。对于频率测量,依然分成高频、低频两档。对于低频信号我们采去测周法,然后根据公式f=1/T,计算出低频频率。由于单片机做浮点运算的精度有限,在编写单片机程序时,还应该注意采取有效算法控制运算精度。1.3系统总体方案 1.3.1系统总体方案的比较与论证 方案一:传统51单片机和集成计数器。 传统51单片机功能简单,易于控制而且操作方便,但是工作速度慢,对于题中高频信号的测量会引起致命误差,而且传统51单片机片
13、内资源不丰富,I/O口数量很少,需要通过8155扩展端口。对于集成计数器,测量高频信号时,计数值可达100000000,以10位计数器(74LS160)为例,需串联8个,单片机的外围电路非常复杂,同时复杂的外接电路会影响整个系统的响应时间,导致很大误差。 方案二:高性能AVR单片机与FPGA。 高性能AVR单片机是在传统51单片机的基础上发展起来的,它继承了传统51单片机的优点,并在此基础上有所提高。AVR单片机凭借高速、低功耗、丰富的片类资源等强大功能得到了广泛的应用。通过对FPGA的编程将复杂而庞大的外部硬件计数电路软件化,FPGA内自带的50MHz有源晶振保证了整个系统的响应速度,系统稳
14、定性得到提高,误差减小。 1.3.2 系统总方框图 如下图所示,FPGA完成测量功能,AVR控制液晶显示、温度测量、语音报时、峰值测量、键盘输入等功能。 图3系统总框图 1.4 各模块硬件实现 1.4.1 FPGA部分 FPGA部分由频率测量模块、周期/时间间隔测量模块、SPI通信模块,PLL等子模块组成。 1.4.1.1 频率测量模块 图4频率测量模块 频率测量模块由分频模块、门控模块,BCD计数模块和数据锁存模块组成。其中分频模块将FPGA开发板的50M的时钟分频为2Hz门控时钟。门控模块收门控时钟的上升沿,对BCD计数器的使能(enable)、清零(clr)和数据锁存(lck)信号的时序
15、进行控制图5所示。 值得注意的是,本频率测量模块使用的BCD计数器而不是普通二进制计数器。BCD码很大程度上方便了单片机将其转换成字符型数据,最终显示在LCD上。我们发现,二进制码转BCD码的算法较为复杂,同时占用的FPGA的片内资源也较多,故直接采用BCD计数方法。 图5频率测量时序图 1.4.1.2 周期/时间间隔测量模块 周期测量使用两个状态机(主状态机和sig_sel状态机)实现。 对于低频信号(signal_x),我们直接计算其一个周期包含的量化时钟的数目。对高频信号,将其通过分频器分频后再计算包含的量化时钟的数目。由sig_sel状态机选择被量化的信号。(如图6所示) 为达到精度0
16、.01%的要求,每个signal时钟需包含大于10000个量化时钟。因此,我们对周期小于100us的信号进行1000倍分频。 图6自动转量程原理图 时间间隔测量原理与周期测量相同。区别在于时间间隔测量为单次测量,周期测量为连续测量。单脉冲周期无频率而言,故不能经过分频器(sig_sel始终为0)。为区别周期测量和时间间隔测量这两种模式,本模块引入一个模式选择信号(mode)当mode=1时为侧周期模式,当mode=0是为测时间间隔模式。 主状态机: 测量一次上图中signal信号周期需要用3个signal的方波的周期。每一个signal周期对应一种状态,每种状态下执行不同的操作。状态转换图以及
17、各状态的功能如表1所示。表1状态机功能 控制时钟被测方波(signal)的上升沿Hold,或者rst信号的下降沿:idle周期计数器(cnt)清零,hold状态计数器(cnt_hold)*清0,idle状态计数器(cnt_idle)*计数hold周期计数器(cnt)计数,idle状态计数器(cnt_idle)清0counting周期计数器(cnt)保持,hold状态计数器(cnt_hold)计数*设置hold状态计数器和idle状态计数器的目的是避免出现被测信号的频率过低而又被1000倍分频导致的电路所死(长时间处于idle或hold状态)的情况。 sig_sel状态机: sig_sel状态用
18、于控制被测方波是否经过分频,起到了扩大量程和提高测量精度的作用。 sig_sel两个状态的功能如下表2所示 表2功能表 1被测方波经过分频0被测方波没有经过分频控制时钟量化时钟clk_10M,或者rst信号的下降沿:sig_sel状态机的verilog描述: always (posedge clk) begin if(rst=0 | mode=0) sig_sel=1_0000_000 | cnt_hold=1_0000_000 | cnt_idle=1_0000_000) sig_sel=0; else if (curr_s=hold & sig_sel=0 & cnt1_0000) sig
19、_sel=1; else sig_sel=sig_sel; end 计数器: 周期测量同时使用BCD码计数器和二进制计数器。二进制值用于状态的判断和转换。BCD码方便了单片机处理和显示数据,这与频率测量模块相同。图8ATmega128与FPGASPI通信 本接口模块中所需实现的逻辑功能是,从机FPGA在主机ATmega128提供的CLK时钟信号下,按照SPI接口规范,按照SPI时序图的规范接受数据,然后执行测量对象选择、液晶显示等操作。其工作流程如下,ATmega128通过MOSI向FPGA发送数据(该数据低八位储存地址信息,高八位储存数据信息,FPGA对地址译码,选择合适的数据输入端),AV
20、R在load端产生下降沿,FPGA将相应数据读入寄存器中,当CS=0,load=1的情况下,在每一个SCLK时钟的上升沿,移位寄存器的数值左移一位。数据就通过MISO送到MCU中。 图9SPI时序图 (2)量化时钟周期的选择 合适的量化时钟周期可以简化运算的复杂程度,提高测量效率。我们选择10ns为量化时钟信号,计算简单,而且保证了测量精度。 1.4.2信号预处理 系统中计数是以上升沿或下降沿为标准的,因此一般信号需通过电压比较器整形为方波信号。FPGA中的计数器是边沿触发而不是电平触发,整形后波形边沿的陡峭程度显得非常重要。 对于方波信号,我们应根据实际情况整形或者直接通过稳压管稳压后测量相
21、关参数。 对高频信号,我们采用精密TTL比较器MAX941,该比较器具有低功耗、超高速(可达10ns)等优点,可以满足本系统中对高频信号的整形要求。 对于低频信号,经比较器整形后,由于采样速度快,进过比较处理后边沿的陡峭程度受到很大制约,在某种程度上影响了FPGA中计数器对这种非陡峭边沿的识别,从而导致测量中的计数误差。对于低频信号,我们采取可以外接其它整形电路(如施密特整形,滞回比较器整形等)以弥补MAX941的不足。 1.4.3 AD采样测幅 幅度测量采用ATmega128自带的AD转换器,对被测信号(初始信号)对此采样,每次采样与前一次采样比较,保留最大采样值,即可换算出信号的峰值。显然
22、,对于高频信号,由于AD转化器采样速度的限制,所测峰值误差较大。 1.4.4 温度测量模块 方案一:采用热电偶或者热敏电子作为感温元件,但热电偶需要冷端补偿,电路设计复杂,热敏电阻虽然精度较高,但需要标准稳定的电阻匹配才能使用,而且重复性、可靠性都比较差。 方案二:采用集成温度传感器DS18B20,该传感器结构简单,不需要外接电路,数据传输用onewire总线,可用一根I/O数据线既供电又传输数据,在-10+85范围内精度为0.5,且分辨率较高,重复性和可靠性好。 显然,我们采用方案二。 1.4.5键盘输入模块 键盘输入有独立键盘和矩阵键盘两种选择。对于单片机最小板自带的8个独立按键而言完全可
23、以实现本系统的要求。但是对于同样的端口,矩阵键盘多了一倍的按键,易于通过多余的按键实现扩展功能的手动控制,例如,单片机接受到某一按键信号后会执行温度测量并且显示温度的程序,接受到另一按键信号会执行峰值测量并显示的程序。 本系统中按键的设置如下:选择测量对象?周期,频率,时间间隔;选择需储存记忆数据;是否显示峰值;是否温度测量;是否语音报数;是否返回主界面;返回上一页等。 1.4.6 液晶显示模块 2402液晶模块,24行*2列字符显示,并行8/4数据通信,可以满足本系统中至少显示六位的要求。我们假期已经调过液晶显示的模块,利用C语言模块的可移植性,直接将模块移植过来,根据实际情况更改数组内容,
24、即可实现测量参数的显示。 1.4.7 语音报数模块 语音报时使产品与使用者进行良性的互动,大大提高了本测量系统的竞争能力。 我们选用智能型640秒语音录放模块实现语音报数功能。该模块由麦克风、喇叭、语音芯片及应外围电路组成。该模块具有话筒录音、线路录音、直接驱动喇叭、支持按键和三线串口控制模式、断点信息不丢失等特点。对于本计数器中的报数功能,我们可以按照如下操作:ATmega128单片机通过SPI外串行总线端口给语音模块发送FB+XXH(定时录音模式),然后通过麦克风将数据依次录音,存在合适的地址中,方便播放时寻找合适音频信号。单片机将FPGA测得的数据按照相对应的规律,找到语音模块中的地址,并发送FCH+XXH(播放模式),从而实现语音报数功能 1.4.8自制电源 本系统中FPGA、ATmega128、电压比较器等器件都需要合适的直流电源供电,因此我们自制了相应的直流电源。如下图所示,将输出的220V交流信号经变压器降压,整流桥整流,电容滤波,7805、7905等集成稳压器稳压,从而得到满足相应要求的直流电源 图10电源原理图 1.4.9浮点数除法运算的实现 测频法存在门控信号内一个被测信号的脉冲个数误差,对于高频信号而言,门控信号内通过的被测信号脉冲的个数足够大,一个脉冲的缺失,对测量结构不产生影响;对低频信号而言,门控信号内通过的被
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1