F题 简易多功能计数器文档格式.docx
《F题 简易多功能计数器文档格式.docx》由会员分享,可在线阅读,更多相关《F题 简易多功能计数器文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
![F题 简易多功能计数器文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/8/975bf442-0146-48ff-a00a-8e6404a8ef03/975bf442-0146-48ff-a00a-8e6404a8ef031.gif)
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
被测方波经过分频
被测方波没有经过分频
量化时钟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)
elseif(curr_s==hold&
&
sig_sel==0&
cnt<
1_0000)
=1;
else
=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%的精度要求,不同频率范围内的周期求倒数后,小数点后需精确到的位数要求不一样,我们通过寻求第一位有效数字的位置,推测出小数点的位置,(如下表所示)根据相应位