




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 融資協議書樣式6篇
- 承包水庫養魚標準合同4篇
- 托班衛生健康教育要點
- 社會科學研究方法研究設計
- 項目戰略合作框架協議書模板3篇
- 健康促進課件
- 具體施工內容裝飾合同7篇
- T/ZJSEE 0013.1-2023燃氣機組能耗實測導則第1部分:啟動能耗
- 頂層設計與漸進實踐融合策略
- 壓縮空氣系統施工合同7篇
- TB10092-2017 鐵路橋涵混凝土結構設計規范
- 計算機聯鎖控制系統軟件可靠性與安全性技術保障
- 水利水電工程施工導流設計規范
- 每日工作流程物業保安主管經理
- 供應商應付賬款管理表
- STEM教學設計與實施PPT完整全套教學課件
- 學大教育:上海瑞聚實業有限公司設備年市場租金價值評估項目評估報告
- 思密達能快速治療壓瘡
- 《勒俄特依 彝族古典長詩 中華大國學經典文庫 》讀書筆記思維導圖
- 銑床操作作業指導書
- 醫護人員行為規范與職業禮儀培訓課件
評論
0/150
提交評論