简易数字频率.docx
《简易数字频率.docx》由会员分享,可在线阅读,更多相关《简易数字频率.docx(18页珍藏版)》请在冰豆网上搜索。
简易数字频率
简易数字频率计设计报告
姓名:
专业:
自动化
班级:
10306203
学号:
10306203
学院:
机械与电子工程系
2013年11月29号
1、课题设计的任务
本课程设计要求利用一般电路元件来设计出一个简易的数字频率计,实现的功能是测量1Hz-1MHz的信号,本电路为一般常用频率计,本电路的一般设计思路主要涉及到的问题有:
频率计时钟的设计、被测波形的变换、信号闸门、计数以及计数器的清零、锁存、显示等问题,即将信号利用基准时钟信号进行截取单位时间内的脉冲个数,然后进行计数,从而完成频率计的功能。
2、课题设计的目的
训练学生综合运用学过的变流电路原理的基础知识,独立进行查找资料、选择方案、设计电路、撰写报告,进一步加深对变流电路基本理论的理解,提高运用基本技能的能力,为今后的学习和工作打下坚实的基础。
培养学生提出问题、分析问题、解决问题的能力;提高学生的专业素质,这对于工科学生贯彻工程思想起到十分重要的作用。
3、课程设计的总体要求
(1)频率测量
a.测量范围信号:
方波、正弦波;幅度:
0.5V~5V;频率:
1Hz~1MHz
b.测量误差≤0.1%
(2)周期测量
a.测量范围信号:
方波、正弦波;幅度:
0.5V~5V;频率:
1Hz~1MHz
b.测量误差≤0.1%
(3)脉冲宽度测量
a.测量范围信号:
脉冲波;幅度:
0.5V~5V;脉冲宽度≥100μs
b.测量误差≤1%
(4)显示器
十进制数字显示,显示刷新时间1~10秒连续可调,对上述三种测量功能分别用不同颜色的发光二极管指示。
(5)具有自校功能,时标信号频率为1MHz。
(6)自行设计并制作满足本设计任务要求的稳压电源。
4、课程设计的方案
一)、系统设计方案
根据系统设计要求,需要实现一个4位十进制数字频率计,其原理框图如图1所示。
主要由脉冲发生器电路、测频控制信号发生器电路、待测信号计数模块电路、锁存器、七段译码驱动电路及扫描显示电路等模块组成。
图1数字频率计组成原理框图
由于是4位十进制数字频率计,所以计数器CNT10需用4个,7段显示译码器也需用4个。
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
为此,测频控制信号发生器F_IN_CNT应设置一个控制信号时钟CLK,一个计数使能信号输出端EN、一个与EN输出信号反向的锁存输出信号LOCK和清零输出信号CLR。
若CLK的输入频率为1HZ,则输出信号端EN输出一个脉宽恰好为1秒的周期信号,可以作为闸门信号用。
由它对频率计的每一个计数器的使能端进行同步控制。
当EN高电平时允许计数,低电平时停止计数,并保持所计的数。
在停止计数期间,锁存信号LOCK的上跳沿将计数器在前1秒钟的计数值锁存进4位锁存器LOCK,由7段译码器译出并稳定显示。
设置锁存器的好处是:
显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,清零信号CLR对计数器进行清零,为下1秒钟的计数操作作准备。
二)、单元电路设计:
1.时基产生与测频时序控制电路模块
时基产生与测频时序控制电路主要产生计数允许信号EN、清零信号CLR和锁存信号LOCK。
时基产生电路:
图2时基产生模块顶层图
其VHDL程序清单如下:
--CLK_SX_CTRL
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCLK_SX_CTRLIS
PORT(CLK:
INSTD_LOGIC;
LOCK:
OUTSTD_LOGIC;
EN:
OUTSTD_LOGIC;
CLR:
OUTSTD_LOGIC);
END;
ARCHITECTUREARTOFCLK_SX_CTRLIS
SIGNALQ:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'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;
测频时序控制电路:
为实现系统功能,控制电路模块需输出三个信号:
一是控制计数器允许对被测信号计数的信号EN;二是将前一秒计数器的计数值存入锁存的锁存信号LOCK;三是为下一个周期计数做准备的计数器清零信号CLR。
上述三个信号产生的顺序是:
先提供计数信号,这种信号使计数器在1s提供锁存信号,这种信号对计数值进行锁存;最后是发出清零信号,这种信号可对计数器清零。
计数器清零结束后又可重新计数,计数进入第二个周期。
不难看出,控制电路模块实际上就是一个控制器,它需要一个周期为1s的信号作为产生并控制控制器输出的时基信号CLK0。
控制电路模块中控制器及端口如图3所示:
图3测频时序控制模块顶层图
其VHDL程序清单如下:
--F_IN_CNT.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYF_IN_CNTIS
PORT(CLK:
INSTD_LOGIC;
EN:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
QA,QB,QC,QD:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDF_IN_CNT;
ARCHITECTUREARTOFF_IN_CNTIS
COMPONENTCNT10
PORT(CLK,EN,CLR:
INSTD_LOGIC;
COUNT10:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
SIGNALS2:
STD_LOGIC;
SIGNALS3:
STD_LOGIC;
SIGNALS4:
STD_LOGIC;
BEGIN
S2<=NOTQA(3);
S3<=NOTQB(3);
S4<=NOTQC(3);
U1:
CNT10PORTMAP(CLK,EN,CLR,QA);
U2:
CNT10PORTMAP(S2,EN,CLR,QB);
U3:
CNT10PORTMAP(S3,EN,CLR,QC);
U4:
CNT10PORTMAP(S4,EN,CLR,QD);
ENDART;
2.待测信号脉冲计数电路模块
待测信号脉冲信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。
在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。
如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通控制信号EN的宽度为100ms,那么待测信号的频率等于计数结果的10倍。
该模块将对输入信号进行十进制计数。
它虽然由多个十进制计数器组成,但采用CPLD后,设计时只要先制作一个单个的十进制计数器,然后再将多个结构相同的单个十进制计数器在CPLD内部进行连接就可组合成为一个完整的计数电路模块。
为实现系统功能,十进制计数器需要设置三个输入端:
即被测信号输入端CLK、计数器状态清零端CLR和计数器工作使能端EN。
需要设置四个输出端,即COUNT0、COUNT1、COUNT2和COUNT3,并由这四个输出端输出四位BCD码来表示十进制数。
需要说明,上述十进制计数器都是满10进1,且进位时计数器清零并重新计数。
计数电路模块中的单个计数器符号及端口功能如图4所示:
图4待测信号脉冲计数模块顶层图
其VHDL程序清单如下:
--CNT10.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,EN,CLR:
INSTD_LOGIC;
COUNT10:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCNT10;
ARCHITECTUREONEOFCNT10IS
BEGIN
PROCESS(CLK,CLR,EN)
BEGIN
IFCLR='1'THEN
COUNT10<="0000";
ELSIF(CLK'EVENTANDCLK='1')THEN
IF(EN='1')THEN
IFCOUNT10="1001"THEN
COUNT10<="0000";
ELSE
COUNT10<=COUNT10+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDONE;
3.锁存与译码显示控制电路模块
锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。
其功能是对四位BCD码进行锁存并且转换成为对应的4组七段码,用于驱动数码管。
锁存电路模块
该模块可使系统显示电路的工作稳定而可靠,避免计数电路模块清零时引起显示闪烁的现象。
锁存电路模块是由多个锁存器组成。
每个锁存器都是用来锁存与其单独相连的计数器的输出数据。
由于每个锁存器锁存的都是4位2进代码表示的十进制数,其功能完全相同,因此只需要设计制作一个锁存器就可连接组合成一个锁存电路模块。
为实现系统功能,锁存器需设置四个数据输入端:
即QA、QB、QC和QD,并由它们输入计数器的计数值。
需设置一个使锁存器工作的使能端L0CK。
还需设置四个锁存数据的输出端:
即LEDA、LEDB、LEDC和LEDD。
锁存电路模块中单个锁存器的符号及端口功能如图5所示。
图54位锁存模块顶层图
其VHDL程序清单如下:
--LOCK.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLOCKIS
PORT(LOCK:
INSTD_LOGIC;
QA,QB,QC,QD:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LEDA,LEDB,LEDC,LEDD:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREARTOFLOCKIS
SIGNALL0,L1,L2,L3:
STD_LOGIC_VECTOR(3DOWNTO0);
COMPONENTSEG7
PORT(BCD:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDCOMPONENT;
BEGIN
PROCESS(LOCK)
BEGIN
IF(LOCK'EVENTANDLOCK='1')THEN
L0<=QA;
L1<=QB;
L2<=QC;
L3<=QD;
ENDIF;
ENDPROCESS;
U0:
SEG7PORTMAP(L0,LEDA);
U1:
SEG7PORTMAP(L1,LEDB);
U2:
SEG7PORTMAP(L2,LEDC);
U3:
SEG7PORTMAP(L3,LEDD);
ENDART;
译码电路模块:
该模块可对表示转换后的十进制数的4位2进制代码进行编码,此模块可直接连接数码管驱动器,从而驱动数码管显示出相应阿拉伯数字等字符。
与上述电路模块设计一样,它也只需要先设计一个单个的译码器,然后通过连接组合就可构成系统的译码电路模块,从而实现系统的译码功能。
为实现系统的功能,单个译码器需要设置4个数据输入端:
即BCD0、BCD1、BCD2和BCD3,并由这些端口输入锁存电路模块输出的4位2进制数据。
需要设置7个输出端:
即DOUT、DOUT1、DOUT2、DOUT3、DOUT4、DOUT5和DOUT6,它们分别连接7段数码管的7个显示输入端。
译码电路模块中单个译码器符号及端口功能如图6所示:
图67段译码显示模块顶层图
其VHDL程序清单如下:
--SEG7
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSEG7IS
PORT(bcd:
INSTD_LOGIC_VECTOR(3DOWNTO0);
dout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDSEG7;
ARCHITECTUREaOFSEG7IS
BEGIN
PROCESS(bcd)
BEGIN
CASEbcdIS
WHENx"0"=>dout<="0111111";
WHENx"1"=>dout<="0000110";
WHENx"2"=>dout<="1001011";
WHENx"3"=>dout<="1000111";
WHENx"4"=>dout<="0110110";
WHENx"5"=>dout<="1101101";
WHENx"6"=>dout<="1111101";
WHENx"7"=>dout<="0000111";
WHENx"8"=>dout<="1111111";
WHENx"9"=>dout<="1101111";
WHENOTHERS=>dout<="0000000";
ENDCASE;
ENDPROCESS;
ENDa;
4.扫描电路模块:
由于本次硬件下载中所使用的EDA试验箱只支持一位七段数码显示,所以在最后显示部分需要设计扫描电路,使得4位数字同时显示出来。
四个数码管分别由选通信号k0~k3来选择。
被选通的数码管显示数据。
其中CLK为扫描时钟;SG为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a七个段;BT是位选控制信号。
程序中CNT4是一个计数器,作为扫描计数信号,由进程P2生成;进程P3是7段译码查表输出程序。
其模块顶层原理图如图7所示:
图7扫描显示模块顶层原理图
其VHDL程序清单如下:
---SCAN.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSCANIS
PORT(CLK:
INSTD_LOGIC;
LEDA:
INSTD_LOGIC_VECTOR(6DOWNTO0);
LEDB:
INSTD_LOGIC_VECTOR(6DOWNTO0);
LEDC:
INSTD_LOGIC_VECTOR(6DOWNTO0);
LEDD:
INSTD_LOGIC_VECTOR(6DOWNTO0);
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDSCAN;
ARCHITECTUREONEOFSCANIS
SIGNALCNT4:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALa:
INTEGERRANGE0TO3;
BEGIN
P1:
PROCESS(CNT4)
BEGIN
CASECNT4IS
WHEN"00"=>BT<="0001";a<=0;
WHEN"01"=>BT<="0010";a<=1;
WHEN"10"=>BT<="0100";a<=2;
WHEN"11"=>BT<="1000";a<=3;
WHENOTHERS=>null;
ENDCASE;
ENDPROCESSP1;
P2:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THENCNT4<=CNT4+1;
ENDIF;
ENDPROCESSP2;
P3:
PROCESS(a)
BEGIN
CASEaIS
WHEN0=>SG<=LEDD;
WHEN1=>SG<=LEDC;
WHEN2=>SG<=LEDB;
WHEN3=>SG<=LEDA;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP3;
ENDONE;
三)、各模块设计仿真:
1.时基产生与测频时序控制电路仿真
图8时基产生与测频时序控制电路仿真
2.十进制加法计数器仿真
图9十进制加法计数器电路仿真
3.待测信号脉冲计数器仿真
图10待测信号脉冲计数器电路仿真
4.译码显示电路仿真
图11译码显示电路仿真
5.锁存与译码显示控制电路仿真
图12锁存与译码显示控制电路仿真
6.扫描电路仿真
图13扫描显示电路仿真
7.简易数字频率计整个系统仿真
图14简易数字频率计系统仿真
四.简易数字频率计顶层原理图
图15简易数字频率计顶层原理图
5、实验心得
通过这次设计,我受益匪浅。
毕业设计是一次综合性的实践,它将各种知识结合到一起综合运用到实践上来扩展、弥补、串联所学的知识。
通过本次毕业设计我得到了很多收获。
首先,了解了单片机的基本知识和在控制领域的作用和地位。
其次掌握了C语言的编写程序,学会了使用PROTUTES和KEIL的仿真来实现,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类型。
再次,在精神方面锻炼了思想、磨练了意志。
面对存在的困难首先分析问题根据目的要求确定可实现的部分,定出那不准的方面找同学和老师讨论研究,再完善、再修改、再发现问题、再解决培养了自己的耐心、恒心及遇事不乱的精神。
总之,我明白了理论和实践之间存在的距离只有靠不断的思考不断的动手才能将所学的知识真正运用到实践上来。
在毕业设计中我的很多方面的能力都得到了提高,尤其在单片机软件编程方面让我感触颇深。
我个人认为软件设计是个即灵活又细腻的工作,它要求耐心和细心去不断完善,同时还需要有良好的逻辑思维能力。
通过这次毕业设计,我分析问题和解决问题的能力有所提高,也巩固了所学的知识,加深了对理论知识的理解,更重要的是锻炼自己的独立性,为我今后的工作和学习打下坚实的基础。
6、参考文献
1.康华光主编电子技术基础(数字部分),高等教育出版社
2.阎石主编电子技术基础(数字部分),清华大学出版社
3.岩石主编电子技术基础数字部分(第五版),高等教育出版社
4.张毅刚主编单片机原理及应用(第2版),高等教育出版社