基于CPLD与51单片机的数字频率计的设计_第1页
基于CPLD与51单片机的数字频率计的设计_第2页
基于CPLD与51单片机的数字频率计的设计_第3页
基于CPLD与51单片机的数字频率计的设计_第4页
基于CPLD与51单片机的数字频率计的设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告项目名称:基于CPLD与51单片机的数字频率计的设计组 员: 赵 聪(2012128089) 关珊珊(2012128022) 谢叶青(2012128068) 成民民(2012128011)刘 慧(2012128040)马商牟司(2012128044) 指导老师:张 静基于CPLD与51单片机的数字频率计的设计摘要:频率测量是电子测量领域中重要的也是基本物理的测量量之一。基于传统频率测量原理的频率计的测量精度将随被测频率信号频率的下降而下降,在实际应用中有较大的局限性,而基于CPLD与51单片机的数字频率计采用等精度测量方法,利用CPLD实现了频率、周期、占空比的测量计数。基于CPL

2、D与51单片机的数字频率计的设计采用自上向下的设计方法,用STC12C5A60S2单片机作为系统的主控部件,实现整个电路的测试信号控制、数据运算处理、键盘扫描和控制液晶的显示输出。复杂可编程逻辑器件CPLDEPM240完成各种时序逻辑控制、计数功能。本系统实现了测频范围为0.1Hz10MHz,测频精度:测频全域相对误差恒为百万分之一;脉宽测试范围0.1s1s;测试精度0.01s ;占空比测试范围199,测试精度1%。关键字:数字频率计;CPLD;STC12C5A60S2;EDA技术;EPM240目 录1引言12总体方案的分析和设计12.1 测频原理分析12.1.2 基于CPLD与51单片机的数

3、字频率计原理22.1.3误差分析32.2 数字频率计的系统设计43 硬件设计与设计53.1 电源部分电路53.2按键检测及蜂鸣器电路53.3单片机最小系统63.4 CPLD测频模块63.4.1 测频/测周期的实现63.4.2. 控制部件设计73.4.3 计数部件设计73.5 液晶显示模块94 软件设计与实现104.1 CPLD软件设计104.1.1 CPLD模快实现的功能104.1.2 标准频率测试计数器104.1.3 测脉宽逻辑114.2单片机软件设计114.2.1单片机的编程与流程图115性能测试与误差分析155.1 性能测试 155.2 误差分析166 结束语16参考文献16附 录171

4、引言数字频率计是通信设备、视、音频等科研项目生产领域不可缺少的重要测量仪器1。基于传统频率测量原理的频率计的测量精度将随被测频率信号频率的下降而下降,在实际应用中有较大的局限性。如果要求只使用一种测量方法而对整个频率范围内的频率信号的测量都能达到同样的精度,就只能采用等精度频率测量方法。而基于CPLD与51单片机的数字频率计不但能在整个频率测量区域内保持恒定的频率测量精度,且具有较高的频率测量精度。因此,等精度频率测量技术在现实的应用非常广泛。基于CPLD与51单片机的数字频率计的设计采用自上向下的设计方法,用STC12C5A60S2单片机作为系统的主控部件,实现整个电路的测试信号控制、数据运

5、算处理、键盘扫描和控制液晶的显示输出。复杂可编程逻辑器件CPLDEPM240完成各种时序逻辑控制、计数功能,在Ouartus II平台上用Verilog硬件描述语言设计以及编译,调试,仿真和下载3。本系统实现了测频范围为0.1Hz10MHz,测频精度:测频全域相对误差恒为百万分之一;脉宽测试范围0.1s1s;测试精度0.01s ;占空比测试范围199,测试精度1%。2总体方案的分析和设计2.1 测频原理分析2.1.1频率测量方案方案一:周期频率测量法。通过测量被测信号的周期,由公式求出待测信号的频率。这种频率测量方法需要有标准倍的频率信号,在待测信号的一个周期内,对提供的标准信号进行周期计数。

6、这种方法的计数值会产生最大为±1个脉冲误差,并且测试精度与计数器中记录的数值有关,为了保证频率的测量精度,周期测量法仅适用于频率较低的待测信号的频率测量。方案二:直接频率测量法。直接率测量的方法就是在确定的单位时间内,检测被测信号的脉冲数。由于设置的单位时间通常不是被测频率信号的周期的整数倍数,这种测量方法的脉冲计数也会产生最大为±1个脉冲误差。当我们进一步分析测量误差:设待测信号脉冲周期为,频率为,当测量时间为时,测量准确度为,由上面的推导可知直接频率测量的准确度与被测信号的频率有关:当被测信号的频率越高则测量精度也就越高,反之频率的测量精度也越低。因此直接频率测量的方法

7、一般只适合测量频率较高的被测信号,不能满足在整个频率段内测量精度保持不变的要求。方案三:等精度频率测量法,测量的精度保持一个定值,不随所测信号频率的变化而变化。在快速测量的要求下,如果要得到较高的频率测量精度,那么必须采用较高频率的标准信号。由于单片机本身时钟频率不高,同时受到若干指令运算的限制,测频速度较慢,无法满足高精度、高速的测频要求;而采用集成度高、速度快的现场可编程门阵列CPLD能够实现高精度、高速的频率测量。综上所述,选择方案三。2.1.2 基于CPLD与51单片机的数字频率计原理基于CPLD与51单片机的数字频率计测频方法:它的闸门时间的大小不是固定的,可以人为自己设定闸值时间,

8、但是在测量的时候实际闸门时间是被测信号周期的整数倍,即与被测信号同步3。其测频原理说明图如下图所示。在测量过程当中,用两个计数器分别对被测频率信号和标准脉冲信号同时计数。首先给出闸门使能信号(预置闸门开启信号为上升沿)4,这时两个计数器并不开始计数,而是等到之后被测信号的上升沿到来时,两个计数器才真正开始计数。然后等待预置闸门信号关闭(这里是下降沿)5,两个计数器并没有立即停止计数,而是等到之后被测信号的上升沿到来时才同时结束两个计数器的计数,完成一次测量。可以看出,在这个测量过程中,实际两个计数器计数的闸门时间t与之前预置闸门时间t1并不是完全的等同,但这个两个时间差值不会超过被测频率信号的

9、一个周期。图2.1 等精度测频测量原理波形图图2.2 等精度测频实现原理图 2.1.3误差分析假设在一次测量中,实际闸门时间为t,对标准信号的计数值为,计数器对被测信号的计数值为。标准信号的频率为,则被测信号的频率如式(2-1): (2-1)由式(1)可知,若忽略标频的误差,则等精度测频可能产生的相对误差如式(2-2): (2-2)其中为被测信号频率的准确值。在测量中,由于计数的起停时间都是由该信号的上升沿触发的,在闸门时间t内对的计数无误差();对的计数最多相差一个数的误差,即,其测量频率如式(2-3): (2-3)将式(1)和(3)代入式(2),并整理如式(2-4): (2-4)由上式可以

10、看出,等精度频率测量法测量频率的相对误差与被测周期信号的频率大小无关,仅与预置闸门时间长短和标准信号频率大小有关,即实现了在整个测试的频率段内的等精度测量。有上式,可得闸门时间越长,标准频率越高,频率测量的相对误差就越小。因此,为了得到较高的频率测量精度,标准频率可由稳定度好、精度高的高频率晶体振荡器产生7。同时,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度。由上面的分析,本设计运用高速的CPLD和单片机相结合的设计机构。用高速的CPLD完成都待测信号和标准频率信号的计数;利用单片机来完成各种数据的计算和液晶显示等控制功能。2.2 数字频率计的系统设计由于单片

11、机的运算能力强,速度较慢,CPLD的速度快但是运算能力有限,故本设计采用CPLD与单片机组合的测量方法,本设计主要包括CPLD测频部分,单片机数据处理以及LED显示部分,整体结构框图如下图。图2.3 系统结构图3 硬件设计与设计3.1 电源部分电路通过MINIUSB口输入5V电压一路直接给单片机的需要5V的电路供电。另外,在5V输出端引出一路通过AMS1117降压稳压芯片转换,得到3.3V电压输出,供CPLD和液晶模块使用。图3.1 电源部分电路图3.2按键检测及蜂鸣器电路 这部分主要有两块:一个是按键模块,另一个是蜂鸣器驱动模块。通过按键的识别来处理频率测量,占空比测量或者周期测量,蜂鸣器鸣

12、响作为按键按下提示。图3.2按键识别与蜂鸣器驱动部分电路图3.3单片机最小系统 本电路是系统中央控制部分,实现对按键的识别,控制液晶显示,以及控制和采集得到CPLD的数据。图3.3单片机最小系统3.4 CPLD测频模块CPLD部分主要是计数部分。在测量频率时计数器是对被测信号和标准信号进行计数,在测量占空比时计数完成分别在待测信号的高电平对标准信号计数和低电平对标准信号计数。图3.4 CPLD部分电路3.4.1 测频/测周期的实现 (1)令TF=0,选择等精度测频,然后在CONTRL的CLR端加一个正脉冲信号已完成测试电路的初始化。 (2)由预置门控信号将CONTRL的START端置高电平,预

13、置门开始定时,此时又被测信号的上沿打开计数器CNT1进行计数,同时使标准频率信号进入计数器CNT2。 (3)预置门定时结束信号把CONTRL的START端置为低电平(由单片机来完成),在被测信号的下一个脉冲的上沿到来时,CNT1停止计数,同时关断CNT2对fs的计数。 (4)计数结束后,CONTRL的EEND端将输出低电平来指示测量计数结束,单片机得到此信号后,即可利用ADRC(P2.1),ADRA(P2.0)分别读回CNT1和CNT2的计数值,并根据等精度测量公式进行运算,计算出被测信号的频率或周期值。 图3.5 频率测量演示 图3.6 周期测量演示3.4.2. 控制部件设计如图所示,当D触

14、发器的输入端START为高点平时,若FIN端来一个上升沿,则Q端变为高电平,导通FIN到CLK1和FSD到CLK2,同时EEND被置为高电平作为标志;当D触发器的输入端START为低电平时,若FIN端输入一个脉冲上沿,则FIN到CLK1与FSD到CLK2的信号通道被切断。图 3.7测频与测周期控制部分电路 3.4.3 计数部件设计图中的计数器CNT1/CNT2是32位二进制计数器,通过DSEL模块的控制,单片机可分为4次将其32位数据全部读出。 3.4.4 脉冲宽度测量和占空比测量模块设计根据上述脉宽测量原理,设计如图所示的电路原理示意图图3.8 CONTRL2子模块内部结构测量脉冲宽度的工作

15、步骤如下:(1) 向CONTRL2和CLR端送一个脉冲以便进行电路的工作状态初始化。(2) 将GATE的CNL端置高电平,表示开始冒充宽度测量,这时CNT2的输入信号为FSD。(3) 在被测脉冲的上沿到来时,CONTRL2的PUL端输出高电平,标准频率信号进入计数器CNT2。(4) 在被测脉冲的下沿到来时,CONTRL2的PUL端输出低电平,计数器CNT2被关断。(5) 由单片机读出计数器CNT2的结果,并通过上述测量原理公式计算出脉冲宽度。CONTRL2子模块的主要特点是:电路设计保证了只有CONTRL2被初始化后才能工作,否侧PUL输出始终为零。 只有在先检测到上沿后PUL才能为高电平,然

16、后在检测到下沿时,PUL输出为低电平;ENND输出高电平以便通知单片机测量计数已经结束;如果先检测到下沿,PUL输出低电平;在检测到上沿并紧接一个下沿后,CONTRL2不再发生变化直接下一个初始化信号到来。占空比的测量方式是通过测量脉冲宽度记录CNT2的计数值N1。然后将输入信号反相。,在测量脉冲宽度,测得CNT2计数值N2则可以计算出: (3.1)图 3.9 占空比测量演示3.5 液晶显示模块本设计中,液晶显示部分用的是能够显示汉字的价格便宜的Nokia5110液晶作为显示器。Nokia5110液晶显示器由48行X84列输出,所有的显示功能集成在一块芯片上,包括 LCD 电压及偏置电压发生器

17、,并且只须很少外部元件,采用 CMOS 工艺,且功耗小。使用的是串行总线外部连线少。管脚与功能表如下表:表3.1 管脚与功能表管脚编号管脚名称功能1RST复位2CE片选3DC数据/指令选择4DIN串行数据线5CLK串行时钟线63.3V电源正极7LIGHT背光控制,接地时背光灯亮8GND电源负极4 软件设计与实现4.1 CPLD软件设计4.1.1 CPLD模快实现的功能当SPUL信号为高电平时系统允许完成频率测量,首先CLR一个正脉冲是内部的32位数据清零,再将CL置为高电平,此时斌没有开始计数,当被测信号出现上升沿时SPULP=1,计数器才开始对被测信信号和标准信号计数,等待一会再将CL置0,

18、计数并未停止,知道待测信号的出现上升沿为止START=0;计数结束标志。当SPUL信号为低电平时人、允许占空比测量,此时CL和CLR的功能发生了变化,当CL=1时测量信号高电平的脉宽,当CL=0时,测量信号低电平的脉宽,CLR变为1时系统初始化,由1变为0时启动计数,而允许计数的条件此后的第一个脉宽。状态信号EEND变为1是作为计数完成告诉单片机。图4.1 EDA设计总体电路4.1.2 标准频率测试计数器 100MHz的标准频率信号源可通过锁相环倍频从CPLD内部获得,接入CPLD。如图4.2所示。图4.2 标准频率测试计数器4.1.3 测脉宽逻辑 在测脉宽阶段SPUL被设置成0,当由低电平变

19、到高电平时指示脉宽计数结束。图4.3 测脉宽逻辑编程后的软件仿真图如下:图4.4 CPLD频率测量仿真图4.2单片机软件设计4.2.1单片机的编程与流程图单片机的编程主要采用的是从上到下的编程设计方法,主要有三块:一、主函数的编程;二、中断及按键识别的编程;三、显示函数编程;四、频率测量函数编程。主函数编程思路是:首先初始化相关外围器件,然后在主循环里面循环执行显示函数。流程图如下:图4.5主函数流程图按键识别函数的编程思路是:本设计用到了5个按键,K1到K4四个按键分别标记执行4个过程函数,通过按键按下设置标识F=x(1.2.3.4)。按键K5为启动暂停按键,在周期测量,占空比测量和频率测量

20、中实现开始测量和暂停读数的功能。程序流程图如下: 图4.6按键识别函数流程图显示函数的编程思路为:在显示函数中判断标识F=x(1.2.3.4)执行相应的过程函数。K=1主界面显示,K=2频率测量及液晶显示,K=3周期测量及液晶显示,K=4占空比测量及显示,K=5启动与暂停。程序流程图如下:图4.7显示函数流程图频率测量函数的编程思路是:单片机给CPLD一个频率测量信号,CPLD开始频率测量,检测等待知道测量完成,读取相应的信号。计算输出此时的频率。流程图如下:图4.8 频率测量函数流程图5性能测试与误差分析5.1 性能测试用信号发生器做信号源,用一个示波器测量信号频率,同时也用我们设计的等精度

21、频率计测量信号发生器输出信号的频率,表2是该频率计在不同的输入信号频率下的测量数据。表5.1 频率测量数据实际频率示波器测量值测量频率作品测量误差相对误差 5051.15224.0%750755.2760101.3%200020002.0K00.0%300k300.2k302.2k2.2k0.7%500k503.5k505.6k5.6k1.1%1M999.8k998.7k1.3k0.1%10M10.1M9.9M0.1M1.0%表5.2 周期测量数据信号源频率示波器测量值测量周期作品测量误差相对误差100Hz10.0ms10.2ms0.2ms2.0%10KHz100.0us100.1us0.1u

22、s0.1%100KHz10.1us9.9us0.2us2.0%1MHz999.8ns1.0us0.2ns0.2%表5.3 占空比测量数据信号源显示占空比测量占空比作品测量误差相对误差10%8.6%1.4%14%19%17.7%1.3%6.8%37%36.9%0.1%0.3%50%50.4%0.4%0.8%66%66.1%0.1%0.2%85%85.0%0.0%0.0%90%89.9%0.1%0.1%5.2 误差分析: 1.在实际测量中,被测信号有时不一定能达到仿真时的效果,在闸门打开的时候,由于CPLD各内部逻辑单元延时的不一致,从而不能使标准信号与被测信号同时计数,也会导致误差。 2.单片机

23、在产生门宽信号时其上升沿与下降沿建立的时间过长,每次产生的门宽信号不一样,产生误差。6 结束语 该频率计经软硬设计,各项功能到达预定目标。本作品的特点克服了传统的测频法和测周期法的不足,能在频率范围变化较大时,都有比较高的测量精度具有相对测量误差与被测信号的频率无关;增大Tpr或Fs可以增大Ns,减小测量误差,提高测量精度;测量精度与预置门宽度和标准频率有关,与被测信号的频率无关,预置门和常规测频闸门时间相同而被测信号频率不同的情况下,等精度测量法的精度不变。系统拓展:由于时间和实验室条件有限,还存在一些不足,需要进一步的完善和改进。系统用方波信号源,直流电源;应进一步提高系统的精度。参考文献

24、1 吴小所.等精度频率计的研究与设计J.中国新技术新产品,2011, (24)2 潘明,龚然礼.等精度测频仪的低成本微控制器实现J.广西科学院学报,2004, 20(4)3 张琼,杜祖升.等精度测频的VerilogHDL实现C.全国抗恶劣环境计算机第十七届学术年会,20074 李红丽,马耀锋.基于FPGA的多功能等精度频率计的设计J.中州大学学报 ,2010, 27(6)5 蔡教武.一种基于等精度测频原理的频率计J.电子测试,2007, (11) 附 录1 总体电路图2单片机程序2.1主函数程序#include"12c5a60s2.h"#include"displ

25、ay.h"#include"keyscan.h"void main()LCD_init();bee=1;Interrupt_Init();while(1) display();2.2 按键中断识别函数#include"keyscan.h"unsigned char K=1,F=0;void di()bee=0;delayms(100);bee=1;void Interrupt_Init() /中断初始化EA =1; /开总中断EX0=1; /开外部中断0IT0=0; /低电平触发方式void Keyscan_INT0() interrupt 0

26、 /INT0处理函数(按键的识别)if(key_1=0)delayms(15);if(key_1=0)di();K=1;F=0; while(!key_1);if(key_2=0)delayms(15);if(key_2=0)di();K=2;F=0; while(!key_2);if(key_3=0)delayms(15);if(key_3=0)di();K=3;F=0; while(!key_3);if(key_4=0)delayms(15);if(key_4=0)di();K=4;F=0;while(!key_4);if(key_5=0)delayms(15);if(key_5=0)di

27、();F=F;while(!key_5);2.3周期占空比测量函数#include"cpld.h"#include"zzy.h"unsigned long read_pl()uint i,j,temp;unsigned long N1=0,N2=0,DATA1=0,DATA2=0;CLL=0;CLR=0;SPUL=1;CLR=1;delay(10);CLR=0;delay(50);CLL=1;delay(25000);/delay(10000);CLL=0;while(START);/delay(50000);for(i=0;i<4;i+)temp

28、=P0;temp=(temp&0xf8)|i);SEL=temp;DATA1=DATA;for(j=0;j<i;j+)DATA1=DATA1*256 ;N1+=DATA1;for(i=4;i<8;i+)temp=P0;temp=(temp&0xf8)|i);SEL=temp;DATA2=DATA;for(j=4;j<i;j+)DATA2=DATA2*256 ;N2+=DATA2;SPUL=0;return (Fs/N1)*N2;unsigned int read_zkb() unsigned long N1=0,N2=0,DATA1=0,DATA2=0;uch

29、ar i,j,temp;SPUL=0;CLR=0;CLL=0;delay(1000);CLR=1;delay(1000);CLR=0;while(!EEND);/delay(50000);for(i=0;i<4;i+)temp=P0;temp=(temp&0xf8)|i);SEL=temp;DATA1=DATA;for(j=0;j<i;j+)DATA1=DATA1*256 ;N1+=DATA1;delay(100);CLL=1;delay(1000);CLR=1;delay(1000);CLR=0;while(!EEND);/delay(50000);for(i=0;i&l

30、t;4;i+)temp=P0;temp=(temp&0xf8)|i);SEL=temp;DATA2=DATA;for(j=0;j<i;j+)DATA2=DATA2*256 ;N2+=DATA2;return (N2*1000/(N1+N2);3 CPLD程序module ABC (BCLK,TCLK,CLR,CL,SPUL,START,EEND,SEL,DATA);input BCLK;input TCLK,CLR;input CL;input SPUL;output START,EEND;input 2:0 SEL;output 7:0 DATA;reg 31:0 BZQ,TSQ;reg ENA;wire PUL;wire MA,EEND,START,BENA;wire CLK1,CLK2,CLK3;reg Q1,Q2,Q3;wire 1:0 SS;always (posedge BCLK or posedge CLR)begin if(CLR=1'b1)BZQ<=321'b0;else if(BENA=1'b1)BZQ<=BZQ+1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论