基于CPLD的数字频率计的设计.docx
- 文档编号:5964886
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:19
- 大小:236.29KB
基于CPLD的数字频率计的设计.docx
《基于CPLD的数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《基于CPLD的数字频率计的设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于CPLD的数字频率计的设计
基于CPLD的数字频率计的设计
摘要频率是电子技术中最基本的参数之一,与其他电参量的测量方案及结果关系非常密切。
其中数字频率计在各方面领域都有很广泛的运用,随着科技的发展与生活的提高,数字频率计的需求也将大大提升。
目前直接测频方法有两种:
测频法和测周期法。
测频法是在确定的时间Tw内,记录被测信号的变化周期数Nx,则测得的频率为:
fx=Nx/Tw。
测周期法需有标准信号频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数。
则测得的频率为:
fx=fs/Ns。
本课题主要选择以CPLD为核心器件,VHDL为编程语言,采用测频法设计一个简单实用的数字频率计,以计数器、译码器为核心,由内部分频输入信号、信息锁存、数字显示等功能模块组成,可以实现简单的频率测量。
关键词CPLD,频率计,计数,仿真波形
ABSTRACT
Frequencyofelectronictechnologyinoneofthemostbasicparameters,andotherelectricalparametersandresultsofthemeasurementschemeveryclosely.Inwhichallaspectsofdigitalfrequencymeterinthefieldhaveaverywidelyused,withthedevelopmentoftechnologyandlifeimproved,thedemandfordigitalfrequencymeterwillalsobegreatlyenhanced.
Directmeasurementofthecurrentfrequencyintwoways:
frequencymeasurementmethodandtestcyclemethod.FrequencymeasurementmethodisindeterminingthetimeTw,therecordnumberofcyclesthesignalchangesinNx,thenthemeasuredfrequencyis:
fx=Nx/Tw.Theneedforstandardtestcycleapproachsignalfrequencyfs,acycleintheTxsignalundertest,Therecordednumberofcyclesthestandardfrequency.Themeasuredfrequencyis:
fx=fs/Ns.ThemainsubjectchosenasthecoredeviceCPLD,VHDLasaprogramminglanguage,frequencymeasurementmethodusingasimpleandpracticaldesignofdigitalfrequencymetertocounter,decodercore,fromtheinnerpartofthefrequencyoftheinputsignal,theinformationislatched,figuresshowotherfunctionalmodules,asimplefrequencymeasurementcanbeachieved.
KeyWords:
CPLDFrequencyCounterCountSimulationwaveform
一、绪论
1.1课题背景及其意义
1.1.1设计背景
转眼间大学的学习生涯即将结束,为了检验对这四年所学知识掌握运用的程度,针对电子信息专业课程的要求,培养出能利用所学理论知识与实践相结合,能独立思考,锻炼动手等方面的能力,基于个人爱好及所掌握的知识,本设计选择基于CPLD的数字频率计的设计。
1.1.2设计目标
(1)频率测量范围:
1——9999Hz。
(2)输入被测信号幅度Vi<100mV。
(3)测量1s时间内的脉冲数。
(4)测量误差<5%。
1.1.3设计意义
因电子技术的飞跃发展,由分立电子元件及其所构成的相关功能单元,已开始渐渐被功能更强大、性能更稳定、使用更方便的集成芯片所取代。
由集成芯片和一些外围电路构成的各种自动测量、控制、显示电路广泛应用于各类电子产品和设备。
数字系统、设备已广泛应用于各个领域,更新换代速度可谓日新月异。
数字频率计便是其中一员,在通信测量设备系统中它是必不可少的测量仪器,可用于测量各种波形的频率,在生产应用中可以测量产品的数量等,总之数字频率计的应用离不开我们的生活。
1.2设计思路
1.2.1软件方面
通过Quartus
设计与仿真的方法,设计各个模块方案,编出适合的程序,软件仿真通过后,与硬件电路连接起来,不断编译与调试,直到软硬件资源能配合起来为止。
重点研究在于设计出合理的方案。
1.2.2硬件方面
以CPLD芯片EPM240为核心与数码管显示器共同搭建完整的硬件电路,通过下载已调试好的程序到硬件电路中,实现对输入信号频率的测量。
1.3数字频率计的发展
从传统的电子测量仪器来看,示波器用于频率测量得出的测量精度比较低,误差也比较大。
频谱仪能准确的测量被测信号频率并显示它的频谱,但其测量速度比较慢,不能实时快速的跟踪捕捉到被测信号频率的变化。
与此相比,频率计能够快速的、准确的捕捉到被测信号频率的变化,因此频率计拥有广泛的应用范围。
在生产制造企业中,频率计广泛的应用于生产线的生产测试中。
它能快速捕捉到晶体振荡器输出频率的变化,所以通过频率计的测量,可以准确迅速的发现有故障的晶振产品,确保产品质量安全。
在计量实验室中,频率计用于对各种电子测量设备的本地振荡器进行校准。
在无线通讯测试领域中,频率计既可以用来对无线通讯基站的主时钟进行校准,也可以用来对无线电台的跳频信号和频率调制信号进行分析。
得益于大规模、超大规模数字集成电路技术、数据通信技术以及单片机技术的结合,数字频率计发展进入了智能化和微型化的崭新阶段。
其功能得到了进一步的扩大,除了测量频率、频率比、周期、时间、相位、相位差等功能外,还具有自捡、自校、自诊断、数理统计、计算方均根值、数据存储和数据通信等功能。
此外,还能测量电压、电流、阻抗、功率和波形等。
1.3.1数字频率计的分类
目前数字频率计的种类很多,其功能和用途也很广,所以按照仪器的功能划分可分为通用型与专用型。
按频率段分类可分为低、中、高和微波频率计之分。
(1)按功能分类如表1-1所示:
表1-1功能分类
通用型
是一种具有多种测量功能、多种用途的万能计数器。
它可测量频率、周期、多周期平均值、时间间隔、累加计数、计时等;若配上相应插件,就可测相位、电压、电流、功率、电阻等电量;配上适当的传感器,还可进行长度、重量、压力、温度、速度等非电量的测量。
专用型
指专门用来测量某种单一功能的计数器。
如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、予置计数器、差值计数器、倒数计数器等,用于工业和白控技术等方面。
(2)按数字频率计频段分类如表1-2所示:
表1-2频段分类
低速频率计数器
最高计数频率<10MHz
中速频率计数器
最高计数频率10—100MHz
高速频率计数器
最高计数频率>100MHz
微波频率计数器
测频范围1—80GHz或更高
1.4数字频率计的相关概念
1 频率测量范围
数字频率计的测频范围,低端大部分从10Hz开始;高端则以不同型号的频率计而异。
2 周期测量范围
数字频率计最大的测量周期,一般为10s,可测周期的最小时间,依不同类型的频率计而定。
对于低速通用频率计最小时间为1ms;对中速通用频率计可小到0.1ms。
3 晶体振荡器的频率稳定度
晶体振荡器的频率稳定度,是决定频率计测量误差的一个重要指标。
可用频率准确度、日波动、时基稳定度、秒级频率稳定度等指标,来描述晶体振荡器的性能。
4 输入灵敏度
输入灵敏度是指在侧频范围内能保证正常工作的最小输入电压。
目前通用频率计一般都设计二个输入通道,即A通道和B通道。
对于4通道来说,灵敏度大多为50mV。
灵敏度高的数字频率计可达30mV、20mV。
5 输入阻抗
输入阻抗由输入电阻和输入电容两部分组成。
输入阻抗可分为高阻和低阻。
1.5数字频率计实现的主要方法
数字频率计主要实现方法有直接式、锁相式、直接数字式和混合式四种,本设计使用的是直接测频方法,所以其他实现方法在此不多加以分析。
直接测频方法有两种:
测频法和测周期法,还有一种等精度测频法,它是在直接测量法的基础上发展起来的,它的闸门时间与被测信号同步,通常用于高频信号的测量。
测频法是在确定的时间Tw内,记录被测信号的变化周期数Nx,则测得的频率为:
fx=Nx/Tw。
测周期法需有标准信号频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数。
则测得的频率为:
fx=fs/Ns。
但这两种测量方法的计数值都会产生±1个字的误差。
二、设计内容
本设计采用复杂可编程逻辑器件(CPLD)为控制核心,通过VHDL语言编程,下载烧写实现。
其主要组成部分有分频模块、时基控制模块、计数器模块、锁存器模块、译码显示控制模块电路等。
通过内部脉冲信号的分频,一部分分为128Hz、512Hz和1024Hz三种频率作为输入信号,另一部分作为时基控制信号,控制计数器模块和锁存器模块,最终通过译码显示器模块把数据输送给数码管显示。
各个功能模块之间的关系如图2-1所示:
图2-1模块关系图
三、设计方案步骤
3.1信号输入
由于硬件资源有限,输入信号是通过脉冲信号内部分频得到的,待测信号为:
128Hz、512Hz和1024Hz,外接1~9999Hz的输入频率亦可,把待测信号接入输入端口,即可实现对频率的测量。
3.2时基控制模块
通过该模块产生计数允许信号EN和清零信号CLR,还有锁存信号LOCK,分别控制计数器模块和锁存器模块。
时基控制模块如图3-1所示:
图3-1时基控制模块图
时基控制模块仿真如图3-2所示:
图3-2时基控制模块仿真图
3.3分频器模块
分频器在整个电路中起到了两个用途。
一部分给时基控制模块,另一部分作为输入信号。
在此设计四个分频器模块,一个提供1Hz脉冲给时基控制模块工作,另外三个分频器模块输出得到128Hz、512Hz和1024Hz作为输入信号。
分频器模块如图3-3所示:
图3-3分频器模块图
3.4计数器模块
当清零信号CLR给计数器清零和EN使能信号有效后,计数器开始对待测信号计数,通过计算1S时间内的计数结果即为待测信号的频率。
计数器模块如图3-4所示:
图3-4计数器模块图
计数器模块仿真如图3-5所示:
图3-5计数器模块仿真图
3.5锁存器模块
它的作用是:
在测量过程中不刷新新的数据,把当前的数据状态存储起来,提供给需要该数据的模块直到解锁状态。
锁存器模块如图3-6所示:
图3-6锁存器模块图
锁存器模块仿真如图3-7所示:
图3-7锁存器模块仿真图
3.6译码器模块
译码模块的功能是将数码变换成需要的数码。
译码器的输出状态是其输入变量各种组合的结果。
译码器的输出可以用来驱动或控制系统其他模块,也可驱动显示器,显示数字。
译码器模块如图3-8所示:
图3-8译码器模块图
3.7调试
3.7.1软件调试
1.打开QuartusII软件,新建工程文件,新建VHDL文件,输入相应代码。
然后保存—>编译,提示没有错误后便可以仿真了。
2.新建波形文件,进入操作界面,先点击edict菜单,设置endtime,一般情况大概设为10us,由于软件本身的缘故,endtime值不应该设的太小,否则延时会很大,影响效果。
3.7.2硬件调试
软件仿真无误后,就可以与硬件相连。
在这之前的先设置好管脚。
点击“assingmengt”菜单的“pinplanner”把管脚设置好,确定无误后编译。
关闭puartus软件,将频率计接入电脑,按提示安装。
重新打开软件,点击菜单“tools”中的”granmmer”确定接好USB接口。
调试结果如图3-9,图3-10和图3-11所示,分别表示测得的频率为128Hz、512Hz和1024Hz:
图3-9
图3-10
图3-11
四、设计总结
此次选择基于CPLD的数字频率计毕业设计的初衷是:
之前也学习接触了与CPLD相关的基础知识,但是自己设计实际动手起来的条件是没有的,本人也对CPLD方面的设计比较感兴趣,所以想通过此次毕业设计锻炼自己的动手能力,更好的把理论知识与实践联系起来,巩固、加深个人对电子设计方面的兴趣。
设计过程中使用了QuartusII软件。
这个软件前几年已经学习使用过但还不是很熟练,通过老师与同学多次指导,经过多次反复操作最终基本掌握了它的使用方法。
使我更加熟练掌握了编辑输入图形设计文件、编译设计文件、仿真设计文件及编程下载设计文件等各种不同的文件设计。
因为各种原因,我们设计之前准备确实不是很充足,包括心理上还有自身能力上,所以自然的就造成了把时间花费在许多不必要的事情上,我建议以后学校能够在课堂外利用更多时间培训同学们相关的实践动手能力,让同学们提前有所准备,更加透彻学习与了解专业相关的知识与技能,相信同学们再次接触到设计之类时就不会忙手忙脚的了。
总的来说通过这次毕业设计让我更加深刻的明白,理论上的知识与实际情况总是相差比较大的,做任何事情都不能想这是理所当然的,要通过自己亲身体会才能明白其中的奥秘。
五、参考文献
1.阎石主编,数字电子技术基础(第五版),高等教育出版社。
3.曹昕燕,周凤臣,聂春燕编著,EDA技术实验与课程设计,清华大学出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.潘松、黄继业编著,EDA技术实用教程(第三版),科学出版社。
8.刘洪喜,陆颖编著,VHDL电路设计实用教程,清华大学出版社。
9.付家才主编,EDA工程实践技术,化学工业出版社。
六、附录
6.1附录1总电路图
总体电路如图6-1所示:
图6-1总体电路图
6.2附录2程序代码
6.2.1时基控制模块程序代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityctrlis
port(clk:
instd_logic;
lock:
outstd_logic;
en:
outstd_logic;
clr:
outstd_logic);
end;
architectureartofctrlis
signalq:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifq="1111"then
q<="0000";
else
q<=q+"1";
endif;
endif;
en<=notq(3);
lock<=q(3)andnot(q
(2))andq
(1);
clr<=q(3)andq
(2)andnot(q
(1));
endprocess;
endart;
6.2.2分频器模块程序代码
(FPQ部分):
Libraryieee;
Useieee:
std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityfpqis
Port(clk_32mhz:
instd_logic;
Clk_1hz:
out_std_logic);
end;
Architectureoneoffpqis
begin
Process(clk_32mhz)
variabler:
std__logic:
='0';
Variableq:
ubteger:
=0;
begin
Ifclk_32mhz'eventandclk_32mhz='1'then
Ifq=2097151thenr:
=notr;q:
=0;
Elseq:
=q+1;
endif;
clk_1hz<=r;
endif;
Endprocess;
Endone;
(FPQ128部分):
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityfpq_128is
port(clk_32mhz:
instd_logic;
cld_128hz:
outstd_logic);
end;
architectureoneoffpq_128is
begin
process(clk_32mhz)
Variabler:
std_logic:
='0';
variableq:
integer:
=0;
begin
ifclk_32mhz'eventandclk_32mhz='1'then
ifq=131071thenr:
=notr;q:
=0;
elseq:
=q+1;
endif;
clk_128hz<=r;
Endif;
Endprocess;
Endone;
(FPQ512部分):
Libraraieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityfpq_512is
port(clk_32mhz:
instd_logic;
clk_512hz:
outstd_logic);
end;
Architectureoneoffpq_512is
begin
process(clk_32mhz)
Variabler:
std_logic:
='0';
Variableq:
integer:
=0;
begin
ifclk_32mhz'eventandclk_32mhz='1'then
ifq=32767thenr:
=notr;q:
=0;
elseq:
=q+1;
endif;
clk_512hz<=r;
Endif;
endprocess;
endone;
(FPQ1024部分):
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityfpq_1024is
port(clk_32mhz:
instd_logic;
clk_1024hz:
outstd_logic);
end;
Architectureoneoffpq_1024is
begin
process(clk_32mhz)
variabler:
std_logic:
='0';
variableq:
integer:
=0;
begin
ifclk_32mhz'eventandclk_32mhz='1'then
ifq=16383thenr:
=notr;q:
=0;
elseq:
=q+1;
Endif;
clk_1024hz<=r;
endif;
endprocess;
endone;
6.2.3计数器模块程序代码
(1)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycountis
port(clk:
instd_logic;
en:
instd_logic;
clr:
instd_logic;
qa,qb,qc,qd:
bufferstd_logic_vector(3downto0));
end;
architectureartofcountis
componentcb10
port(clk,en,clr:
instd_logic;
count10:
bufferstd_logic_vector(3downto0));
endcomponent;
signalclk2:
std_logic;
signalclk3:
std_logic;
signalclk4:
std_logic;
begin
clk2<=notqa(3);
clk3<=notqb(3);
clk4<=notqc(3);
u1:
cb10portmap(clk,en,clr,qa);
u2:
cb10portmap(clk2,en,clr,qb);
u3:
cb10portmap(clk3,en,clr,qc);
u4:
cb10portmap(clk4,en,clr,qd);
endart;
(2)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycb10is
port(clk,en,clr:
instd_logic;
count10:
bufferstd_logic_vector(3downto0));
endcb10;
architectureartofcb10is
begin
process(clk,clr,en)
begin
ifclr='1'then
count10<="0000";
elsifrising_edge(clk)then
if(en='1')then
ifcount10="1001"then
count10<="0000";
else
count10<=count10+'1';
endif;
endif;
endif;
endprocess;
endart;
6.2.4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 数字频率计 设计