版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、光电与通信工程学院课程设计报告书课 设 名 称: 等精度频率计 年级专业及班级: 姓 名: 学 号: 一、课程设计目的 1、进一步熟悉 Quartus 的软件使用方法,熟悉 keil 软件使用; 2、 熟悉单片机与可编程逻辑器件的开发流程及硬件测试方法; 3、掌握等精度频率计设计的基本原理。 4、掌握独立系统设计及调试方法,提高系统设计能力。 实验设备 EDA最小系统板一块(康芯) 、PC机一台、示波器一台、信号发生器一台、万用表一个。 二、设计任务 利用单片机与FPGA设计一款等精度频率计, 待测脉冲的检测及计数部分由FPGA实现,FPGA的计数结果送由单片机进行计算,并将最终频率结果显示在
2、数码管上。要求该频率计具有较高的测量精度,且在整个频率区域能保持恒定的测试精度,具体指标如下: a)具有频率测试功能:测频范围 100Hz5MHz。测频精度:相对误差恒为基准频率的万分之一。 b)具有脉宽测试功能:测试范围 10s1s,测试精度:0.1s。 c)具有占空比测试功能:测试精度1%99%。 d)具有相位测试功能。 (注:任务a 为基本要求,任务 b、c、d 为提高要求) 三、基本原理 基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低, 在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个频率区域能保持恒定的测试精度。 3.1 等精度测频原理 等精度
3、频率计主控结构如图 1 所示 预置门控信号 CL 选择为 0.11s 之间(通过测试实验得出结论:CL 在这个范围内选择时间宽度对测频精度几乎没有影响) 。BZH 和 TF 分别是 2 个高速计数器,BZH 对标准频率信号(频率为 Fs)进行计数,设计数结果为 Ns;TF 对被测信号(频率为Fx)进行计数,计数结果为 Nx,则有 MUX64-8 模块并不是必须的,可根据实际设计进行取舍。分析测频计测控时序,着重分析 START的作用,完成等精度频率计设计。 3.2 FPGA 模块 FPGA模块所要完成的功能如图 1 所示,由于单片机的速度慢,不能直接测量高频信号,所以使用高速 FPGA 为测频
4、核心。100MHZ 的标准频率信号由FPGA 内部的 PLL 倍频实现,待测信号 TCLK 为方波,由信号发生器给出待测方波信号(注意:该方波信号带有直流偏置,没有负电压,幅值3.3V) 。预制门控信号 CL 由单片机发出,BRNA 和 ENA 分别是 BZH 与 TF 两个计数器的计数允许信号端。FPGA 将允许计数时间内的 BZH、TF 的运行结果送入单片机进行最后的计算。 顶层文件如下:2以下是把20M 5倍频的设置,利用FPGA内部的PLL。电路需要100M标准频率信号,FPGA提供20M的频率,所以需要建立PLL模块,使之五杯频,得到所需的100M信号。 功能仿真设置:下图是波形仿真
5、的结果:3.3 单片机模块单片机模块完成对整个测频系统的控制,包括对FPGA的控制以及数码管的显示控制。测频允许信号由单片机发出,并且单片机的P0 口负责循环读取FPGA发送过来的测频结果数据(BZH、TF两个计数器的计数结果,每次传送8位数据),P2负责发送控制信号,单片机可以通过结束信号了解测频记数是否结束,以确定何时开始读取数据。附上康芯原理图截图:四、实验现象占空比五、心得体会这周课程设计的题目是等精度频率计的设计,由于书本上有一段程序,所以一开始只是将书上的程序和显示波形研究了一下。当到课程设计的时候,将书上程序敲入并实现效果后有点茫然的感觉。于是,我又仔仔细细地分析了一遍设计原理,
6、从新改变了输入的代码,加上自己的思路,并能自己添加预置控制信息CL模块。原本我还想将测试频率显示在数码管上,但是最终没能实现,这应该是我的一个遗憾吧。设计中,我感受到了硬件描述语言的强大,我可以几乎不用考虑硬件条件,将代码导入就可实现功能。不要总想着去依靠书本上的原题或者是他人,自己思考的做出来的,才算是自己真正收获的。本次实验最大的收获莫过于,独立系统的去完成一项任务。在其中我查阅了大量的资料,尤其是数字电路、quarters软件使用说明、EDA设计等方面的资料。 通过本次学习使我对时序电路有了更深的理解,具体体现在复位、计数、锁存多环节的控制上。同时,在这次实验中,我第一次联合单
7、片机和EDA一起完成一个项目。EDA充分的发挥其高频工作的特点,使得频率测量的上限很高。单片机则在整个系统中充当控制及数据处理的作用设计的优点及缺点 本频率计最大优点在于它的高精度。信号频率的测量,不受闸门信号精度的影响。在被测信号送入计数器之前,先通过D触发器,使闸门信号和被测信号同步,有效地避免了±1误差。不仅如此,本频率计对100HZ至5MHZ的全域相对误差均小于百万之一。 当然,本频率计也存在缺点。在频率计的设计中,乘法器为32位,除法器采用64位,资源占用率太
8、大。单片机处理32位数据的方式有待改进,要是它变得更优化 六、系统设计步骤及程序,结果 FPGA:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EQUALFRECOUNT ISPORT(BCLK,TCLK:IN STD_LOGIC;DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);EN:IN STD_LOGIC;ADDRESS:IN STD_LOGIC_VECTOR(3 DOWNTO 0);END EQUALFRECOUNT;ARCHITECTUR
9、E ARCH OF EQUALFRECOUNT ISSIGNAL EN2,WIDE_TEST:STD_LOGIC;SIGNAL WIDE_COUNT,B_COUNT,T_COUNT:STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL SAVE_WIDE,SAVE_B,SAVE_T:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINPROCESS(EN,TCLK)BEGINIF RISING_EDGE(TCLK) THENEN2<=EN;ELSE NULL;END IF;END PROCESS;PROCESS(EN2,TCLK,BCLK)BEGIN
10、IF EN2='1' THENIF RISING_EDGE(TCLK) THENIF T_COUNT=X"FFFF_FFFF" THENT_COUNT<=(OTHERS=>'1');ELSE T_COUNT<=T_COUNT+1;SAVE_T<=T_COUNT+1;-SAVE T_COUNTEND IF;ELSE NULL;END IF;IF FALLING_EDGE(TCLK) THENIF WIDE_TEST='0' THENWIDE_COUNT<=B_COUNT;WIDE_TEST<=
11、'1'ELSE SAVE_WIDE<=WIDE_COUNT;-SAVE WIDE_COUNTEND IF;END IF;IF RISING_EDGE(BCLK) THENIF B_COUNT=X"FFFF_FFFF" THENB_COUNT<=(OTHERS=>'1');ELSE B_COUNT<=B_COUNT+1;SAVE_B<=B_COUNT+1;-SAVE B_COUNT IN SAVE_BEND IF;ELSE NULL;END IF;ELSE-WHEN ENA=0,WE OUTPUT THE DATA
12、 AND RESET THE COUNTER.WIDE_COUNT<=(OTHERS=>'0');B_COUNT<=(OTHERS=>'0');T_COUNT<=(OTHERS=>'0');WIDE_TEST<='0'END IF;END PROCESS;PROCESS(ADDRESS,EN2,SAVE_T,SAVE_B,SAVE_WIDE,BCLK)BEGINIF RISING_EDGE(BCLK) THENIF EN2='0' THEN-USE SOME CONSTAN
13、TS TO TESTCASE ADDRESS IS WHEN X"0"=>DATA_OUT<=SAVE_T(7 DOWNTO 0);WHEN X"1"=>DATA_OUT<=SAVE_T(15 DOWNTO 8);WHEN X"2"=>DATA_OUT<=SAVE_T(23 DOWNTO 16);WHEN X"3"=>DATA_OUT<=SAVE_T(31 DOWNTO 24);WHEN X"4"=>DATA_OUT<=SAVE_B(7
14、 DOWNTO 0);WHEN X"5"=>DATA_OUT<=SAVE_B(15 DOWNTO 8);WHEN X"6"=>DATA_OUT<=SAVE_B(23 DOWNTO 16);WHEN X"7"=>DATA_OUT<=SAVE_B(31 DOWNTO 24);WHEN X"8"=>DATA_OUT<=SAVE_WIDE(7 DOWNTO 0);WHEN X"9"=>DATA_OUT<=SAVE_WIDE(15 DOWNTO
15、8);WHEN X"A"=>DATA_OUT<=SAVE_WIDE(23 DOWNTO 16);WHEN X"B"=>DATA_OUT<=SAVE_WIDE(31 DOWNTO 24);WHEN OTHERS=>NULL;END CASE;ELSE NULL;END IF;ELSE NULL;END IF;END PROCESS;END ARCH;单片机:/* *.c文件,文件名:EqualFre_main.c *各模块的流程控制*/#include "EqualFre_main.h"int main(v
16、oid)communicationInit_Ex();while(1)mode = getMode_Ex(); /确定选择的模式askForData_Ex(); /请求数据if(HOLD_DATA_MODE != mode) /表示没有固定数据时,则载入数据loadData();disData(); /数据显示/数据载入static void loadData()fre = getFre_Ex();wide = getWide_Ex();duty = getDuty_Ex();/*数据显示中:wData(uchar) 传入的参数意义0 - 9 数字0-910 - 19 跟了点号的0-920暗选
17、*/static void disDelay()/显示延时uchar data x,y;for(x=250;x>0;x-)for(y=50;y>0;y-);/数据显示-总控static void disData()switch(mode)case SHOW_FRE_MODE:disFre(); disDelay(); break;case SHOW_WIDE_MODE: disWide();disDelay();break;case SHOW_DUTY_MODE:disDuty(); disDelay(); break;default:break;/*static void dis
18、Fre()uchar data i;for(i=0;i<8;i+)wData_Ex(1);static void disWide()uchar data i;for(i=0;i<8;i+)wData_Ex(2);static void disDuty()uchar data i;for(i=0;i<8;i+)wData_Ex(3);*/数据显示-显示频率,单位Hz或MHz(双模式)static void disFre()uchar data dataTemp8,i;ulong data freTemp = fre;/为了显示1位小数,这里已经将频率扩大10倍uchar dat
19、a flag = 0;/消零标志位if(1000000 <= freTemp)/当频率值大于1M时,使用兆显示模式freTemp /= 100000;/0.00MHzfor(i=2;i<8;i+)/数据从低位到高位装入数据暂存器dataTemp,这里保留2位, 用于显示nH(即MHz)dataTempi = (uchar)(freTemp%10);freTemp /= 10;dataTemp4 += 10;/取2位小数,这里是加入小数点dataTemp1 = 21;/ndataTemp0 = 22;/Helsefor(i=1;i<8;i+)dataTempi = (uchar
20、)(freTemp%10);freTemp /= 10;dataTemp2 += 10;dataTemp0 = 22;/Hfor(i=0;i<8;i+)/数据从高位到低位显示,并进行高位消零操作if(0 != dataTemp7-i)flag = 1;if(0=dataTemp7-i)&&(0=flag)dataTemp7-i = 20;wData_Ex(dataTemp7-i); /显示数据/数据显示-显示脉宽,单位us,意味着最大只能测1MHz的频率static void disWide()uchar data dataTemp8,i;ulong data wideT
21、emp = wide;uchar data flag = 0;for(i=0;i<8;i+)dataTempi = (uchar)(wideTemp%10);wideTemp /= 10;for(i=0;i<8;i+)/数据从高位到低位显示,并进行高位消零操作if(0 != dataTemp7-i)flag = 1;dataTemp1|=10;if(0=dataTemp7-i)&&(0=flag)dataTemp7-i = 20;wData_Ex(dataTemp7-i);/数据显示-显示占空比static void disDuty()uchar data data
22、Temp4,i;uint data dutyTemp = duty;for(i=0;i<4;i+)dataTempi = (uchar)(dutyTemp%10);dutyTemp /= 10;dataTemp2 += 10;wData_Ex(20);/补4个暗选wData_Ex(20);wData_Ex(20);wData_Ex(20);for(i=0;i<4;i+)wData_Ex(dataTemp3-i);/* *.h文件,文件名:EqulaFre_SGMDisplay.h *SGM显示模块,用于显示由主程序传过来的数据 *硬件资源:164时钟端-P3.1164数据端-P3.
23、0 */#ifndef _EQUALFRE_SGMDISPLAY_H_H_#define _EQUALFRE_SGMDISPLAY_H_H_#include<reg52.h>#include<intrins.h>#define uchar unsigned charsbit sgm_clk=P31; /164时钟端sbit sgm_data=P30; /164数据端static uchar code num = /从低位到高位,高电平有效0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,/数字0-90xfd,0x61,0
24、xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7,/带点号的0-90x00,0x2a,0x6e/暗选,n,h;/接口函数void wData_Ex(uchar ); /在数码管上显示数据#endif/* *.c文件,文件名:EqualFre_SGMDisplay.c */#include "EqualFre_SGMDisplay.h"/接口函数void wData_Ex(uchar index)uchar data i,byte;byte = numindex;for(i=0;i<8;i+)sgm_clk = 0;sgm_data = (b
25、it)(byte>>i)&0x01);_nop_();sgm_clk = 1;_nop_();/* *.c文件,文件名:EqualFre_modeFromKey.c */#include "EqualFre_modeFromKey.h"/*内部函数*/按键检测延时static void keyDelay()uchar data x,y;for(x=100;x>0;x-);for(y=200;y>0;y-) ;/按键扫描static void keyScan() /选择模式if(0 = Key_Mode)keyDelay();if(1 = Ke
26、y_Mode) return ;switch(mode)case SHOW_FRE_MODE: /测频率mode = SHOW_WIDE_MODE; /下一次测的是脉宽break;case SHOW_WIDE_MODE: /测脉宽mode = SHOW_DUTY_MODE; /下一次测的是占空比break;case SHOW_DUTY_MODE: /测占空比mode = SHOW_FRE_MODE; /下一次测的是频率break;default:mode = SHOW_FRE_MODE;break;while(0 = Key_Mode) ;keyDelay();if(0 = Key_Hold_
27、Data)keyDelay();if(1 = Key_Hold_Data) return ;mode = HOLD_DATA_MODE; /按下Key_Hold_Data,即为P11时,数据保持不变while(0 = Key_Hold_Data);keyDelay();/*接口函数*uchar getMode_Ex(void)/返回mode,确定选择的模式keyScan();return mode;/* *.h文件,文件名:equalFre.h *模式控制模块,通过键盘来控制模式的选择,并将所选模式传递给函数 *所使用的硬件资源: 频率显示、脉宽显示、占空比显示的切换建-P1.0 测试值保持键
28、 - P11 */#ifndef _EQUALFRE_MODEFROMKEY_H_H_#define _EQUALFRE_MODEFROMKEY_H_H_#include<reg52.h>#define SHOW_FRE_MODE 0#define SHOW_WIDE_MODE 1#define SHOW_DUTY_MODE 2#define HOLD_DATA_MODE 3#define uchar unsigned charsbit Key_Mode = P10; /实现频率显示,脉宽显示,占空比显示的转化sbit Key_Hold_Data = P11; /将测得的数值定住s
29、tatic uchar data mode;/内部函数static void keyDelay(); /按键检测延时static void keyScan(); /按键扫描/接口函数uchar getMode_Ex(void); /在数码管上显示数据#endif/* *.h文件,文件名:EqulaFre_communication.h *通信模块,用于和FPGA通信,获取频率、脉宽、占空比的原始数据。 *并将处理好数据传给主程序 *所使用的硬件资源: 地址线0-P2.0 地址线1-P2.1 地址线2-P2.2 地址线3-P2.3 测频标志位-P2.4 数据线-P0 定时器T0 */#ifnde
30、f _EQUALFRE_COMMUNICATION_H_H_#define _EQUALFRE_COMMUNICATION_H_H_#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define ulong unsigned long#define uint unsigned int#define MY_TH0 0x5d/对于20Mhz晶振来说,25ms#define MY_TL0 0x3d#define FREE_TIME 80/空闲时间,即让FPGA测频率的时间,50ms*FREE_TIM
31、E#define DATA_IN P0#define BASE_FRE 100000000 /FPGA的基准频率sbit address0 = P20;sbit address1 = P21;sbit address2 = P22;sbit address3 = P23;sbit TEST_EN = P24;/当它为1表示测频结束static ulong data fre,wide;static uint data duty;/内部函数static ulong getSourceData(uchar ); /从FPGA中获得基准信号,被测信号的数据/接口函数void communication
32、Init_Ex(void);void askForData_Ex(void); /请求数据ulong getFre_Ex(void); /计算频率值ulong getWide_Ex(void); /计算脉宽值uint getDuty_Ex(void); /计算占空比#endif/* *.c文件,文件名:EqualFre_communication.c */#include "EqualFre_communication.h"/从FPGA那里获得频率、脉宽、占空比的原始值static ulong getSourceData(uchar sourceKind)uchar dat
33、a byte0,byte1,byte2,byte3;ulong data temp = 0;byte0 = byte1 = byte2 = byte3 = 0;switch(sourceKind)case 1:/被测信号T值address3 = 0; address2 = 0; address1 = 0; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte0 = DATA_IN;address3 = 0; address2 = 0; address1 = 0; address0 = 1;_nop_();_nop_();_nop_
34、();_nop_();/FPGA反应时间byte1 = DATA_IN;address3 = 0; address2 = 0; address1 = 1; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte2 = DATA_IN;address3 = 0; address2 = 0; address1 = 1; address0 = 1;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte3 = DATA_IN;break;case 2:/基准信号B值address3 = 0; addres
35、s2 = 1; address1 = 0; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte0 = DATA_IN;address3 = 0; address2 = 1; address1 = 0; address0 = 1;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte1 = DATA_IN;address3 = 0; address2 = 1; address1 = 1; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间
36、byte2 = DATA_IN;address3 = 0; address2 = 1; address1 = 1; address0 = 1;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte3 = DATA_IN;break;case 3:/脉宽W值address3 = 1; address2 = 0; address1 = 0; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte0 = DATA_IN;address3 = 1; address2 = 0; address1 = 0; address0 = 1;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte1 = DATA_IN;address3 = 1; address2 = 0; address1 = 1; address0 = 0;_nop_();_nop_();_nop_();_nop_();/FPGA反应时间byte2 = DATA_IN;address3 = 1; address2 = 0; address1 = 1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度婴幼儿奶粉生产许可证与资质审核合同2篇
- 2024成年子女父母离异财产分割合同一
- 家电企业社会责任与产品安全保障
- 2024融资居间合同模板:银行信贷融资居间服务2篇
- 《中部地区农村信用合作联社竞争力评价研究》
- 《基于内压式点滴输液智能监控系统的研究》
- 2025版绿色能源项目贷款到期续借及环保承诺合同3篇
- 二零二五年度安置房项目竣工验收及交付使用协议2篇
- 二零二五年度建筑木工雕刻艺术创作合同3篇
- 天文知识教育培养孩子的科学兴趣
- 天冬化学成分
- 2024项目经理讲安全课
- 中国共产主义青年团团章
- 采购原材料年终总结
- 2024-2030年中国隧道建设行业前景展望及投资规划分析报告
- 2024-2025学年人教版初中物理九年级全一册期中复习(易错60题)(解析版)
- 环保验收课件教学课件
- 工程造价基础知识课件
- 毛概学习通超星期末考试答案章节答案2024年
- 保安员考试模拟800题及答案
- DB11T 1678-2019 城市轨道交通广告设施设置规范
评论
0/150
提交评论