華中科技大學電子課程設計頻率計_第1頁
華中科技大學電子課程設計頻率計_第2頁
華中科技大學電子課程設計頻率計_第3頁
華中科技大學電子課程設計頻率計_第4頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2015-2016 學年度第二學期電子技術基礎課程設計-數字頻率計設計院系:自動化學院專業:自動化班級:姓名:學號:指導教師:一、設計目的與要求3二、需求分析及創意3三、系統方案及技術路線4四、設計原理51、基本原理52、模塊原理5五、設計內容61、分頻模塊62、方波發生器模塊63、五位十進制計數器模塊74、鎖存模塊96、編譯仿真15六、輸入輸出設計15八、實驗總結171、心得體會172、待改進的問題183、功能擴展19九、參考書目19十、附錄19一、設計目的與要求設計一個數字頻率計,其技術要求如下:(1)測量頻率范圍: 1Hz100kHz。(2)準確度fx/fx2%。(3)測量信號:方波,峰

2、峰值為3V5V。(4)使用數碼管顯示測量的信號頻率(測量低頻信號時可以只顯示測量信號的周期)。二、需求分析及創意頻率計的主要功能是準確測量出待測頻率的頻率、 周期、脈寬及占空比。 在電子技術中,頻率是最基本的參數之一, 并且與許多電參量的測量方案、 測量結果都有十分密切的關系,因此頻率的測量就顯得更為重要。測量頻率的方法有多種 , 其中電子計數器測量頻率具有精度高、 使用方便、 測量迅速,以及便于實現測量過程自動化等優點,是頻率測量的重要手段之一。電子計數器測頻有兩種方式:一是直接測頻法 (高頻 ),即在一定閘門時間內測量被測信號的脈沖個數;二是間接測頻法,如周期測頻法(低頻) 。直接測頻法適

3、用于高頻信號的頻率測量,間接測頻法適用于低頻信號的頻率測量。本設計中分別以圖形設計方法為主和VHDL語言為主的兩種形式進行設計。在這次設計過程中, 我們設計了兩套測量頻率計的方案。 下面分別闡述。 第一種方案,主要是通過一個計數器,在 1 秒時間內,當有待測信號上升沿產生時,開始計數。最后送到顯示模塊顯示。 而占空比,則是通過分別計算高電平時間和低電平時間,從而得到占空比數值。應該說這種方法,更接近于測頻法的思想。通過實驗的檢測,發現與實驗儀器(信號發生器)的最大誤差只有± 10,所以,在測量頻率不是特別大的范圍內, 這種設計方案, 筆者認為應該可以接受。 而第二種方案,則是對于不同

4、大小的頻率, 通過測頻法和測周法, 進行選擇輸出頻率值大小。三、系統方案及技術路線低頻信號的測量(測周期法1HZ10KHZ):所謂頻率就是在單位時間(1s)內周期信號的變化次數。 若在一定時間間隔T 內測得周期信號的重復變化次數為N,則其頻率為 f=N/T,據此,同樣對于低于10KHZ的信號,我們采用測周期法,時標為 50MHZ,其誤差遠遠小于 0.001,故可達到指標要求測周法原理 : 假設基準時鐘信號的周期為Ts(頻率為fs),被測信號的周期我Tw,用被測信號控制測量計數器進行計數,當被測信號一個周期結束后,讓計數器停止計數,若計數器數值為Nx, 被測信號的周期為Tw=Nx*Ts其頻率為f

5、x=fs*Nx這種測頻方法實際上是通過測量被測信號周期后, 再經過換算得到被測信號頻率的,它適合于被測信號原低于基準時鐘信號頻率的場合。 用這種方法測量時,測試精度與計數器中記錄的 Nx 有關,由于被測信號一個周期的時間長度不一定正好為基準時鐘信號周期的整數倍,因此計數器的計數值會產生±1 個值的誤差。高頻信號的測量 (測頻法 10KHZ10MHZ):由于我們很難得到準確的1hz 頻率,故在這里我們采用等精度測量法,這樣就可以不必考慮1s 信號的精確度的影響。閘門時間不是固定值 ,而是被測信號周期的整數倍 ,即與被測信號同步 .因此排除了對被測信號計數所產生的 1 個周期誤差 ,并且

6、達到了在整個測試頻段的等精度測量 .在測量過程中 ,有兩個計數器分別對標準信號和被測信號同時計數 .首先給出閘門開啟信號 (預置閘門上升沿 ),此時計數器并不開始計數 .而是等到被測信號的上升沿到來時 ,計數器才真正開始計數 .然后預置閘門關閉信號 (下降沿到時 ),計數器并不立即停止計數 ,而是等到被測信號的上升沿到來時才開始結束計數 ,完成一次測量過程 .設在一次實際閘門時間 t 中計數器對被測信號的計數值為 Nx,對標準信號的計數值為 Ns, 標準信號的頻率為 fs,則被測信號的頻率為 fx=Nx/Nsfs。由推斷 (此處省略 )得測量頻率的相對誤差 =1/tfs由上式可看出測量頻率的相

7、對誤差與被測信號頻率的大小無關,僅與閘門時間和標準信號頻率有關 .閘門時間越長 ,標準頻率越高測頻的相對誤差就越小 .標準頻率可由穩定性好 ,精度高的高頻率晶振產生 ,在保證測量精度不變的前提下 ,提高標準信號頻率 ,可使閘門時間縮短 ,即提高測試速度 .可實現四、設計原理1、基本原理頻率測量的基本原理是計算每秒鐘內待測信號的脈沖個數。這就要求 sysclk能產生一個 1s 脈寬的周期信號,并對頻率計的每一個計數器cntp 的使能端進行同步控制。當 clK_cnt 高電平時允許計數,并保持其所計的數。在停止計數期間,首先需要一個鎖存信號將計數器在前1s 的計數值鎖存進鎖存器reg中,并由外部的

8、 7 段譯碼器譯出并穩定顯示。原理圖如圖1-1基準信號被測分 頻 模信脈沖形計 數 模量 程 切換模塊成模塊塊清零譯碼模控 制 模塊使能鎖存圖 1-12、模塊原理根據數字頻率計的基本原理,本文設計方案的基本思想是分為五個模塊來實現其功能,即整個數字頻率計系統分為分頻模塊、控制模塊、計數模塊、譯碼模塊和量程自動切換模塊等幾個單元, 并且分別用 VerilogHDL對其進行編程, 實現了閘門控制信號、計數電路、鎖存電路、顯示電路等。五、設計內容1、分頻模塊由于晶體振蕩器提供的為50MHz 的時鐘,而在整個頻率計里將用到周期為2s ,半個周期為 1s 的閘門信號,所以我們在此模塊先分頻產生0.5Hz

9、 的分頻信號。always(posedge sysclk)beginif(cnt=50_000_000)beginclk_cnt<=clk_cnt;cnt<=0;endelsebegincnt<=cnt+1'b1;endend由程序中的clk_cnt<=clk_cnt;cnt<=0;得知會產生我們想要的周期為2s 的clk_int 信號。仿真結果如圖1-2.圖 1-22、方波發生器模塊always(posedge sysclk)beginif(cnt1=500)beginclk_out<=clk_out;cnt1<=0;endelsebegin

10、cnt1<=cnt1+1'b1;endend由于在寢室做測試時缺少了信號發生器,所以添加了一個方波發生的模塊。如上面程序中所示,當出 cnt1=500 時,可以產生 50000HZ的方波,通過改變出 cnt1的數值調出不同頻率的方波從clk_out 輸出到 clkin,進行方波頻率計數。3、五位十進制計數器模塊5 位十進制計數器模塊包含 5 位十進制的計數器, 用來對施加到時鐘脈沖輸入端的待測信號產生的脈沖進行計數, 十進制計數器具有清零控制和進位擴展輸出的功能。always(posedge clkin)beginif(clk_cnt)beginif(cntp1='b10

11、01)begincntp1<='b0000;cntp2<=cntp2+1;if(cntp2='b1001)begincntp2<='b0000;cntp3<=cntp3+1;if(cntp3='b1001)begincntp3<='b0000;cntp4<=cntp4+1;if(cntp4='b1001)begincntp4<='b0000;cntp5<=cntp5+1;if(cntp5='b1001)begincntp5<='b0000;endendendendend

12、elsebegincntp1<=cntp1+1;endend本程序采用的是以累加的方法結合巧妙地if 語句進行四重循環,實現四位十進制不同的高低級別,實現計數。一位十進制原理圖仿真如圖1-3 。圖 1-3五位十進制原理圖仿真如圖1-4 。圖 1-44、鎖存模塊如果計數器輸出直接與譯碼器相連接,那么在計數過程中輸出端則隨輸入脈沖數的增加而不斷跳變, 那么顯示數碼管則也會不斷閃爍跳變,讓人不能看到穩定的輸出,設鎖存器后,則不再跳變,便可清晰讀出計數結果。其生成的功能模塊如圖所示:if(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|

13、cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5<='b0000;end/5、清零復位模塊采用一個開關作為rst 復位信號, 當 rst 置 0 時,5 個 cntq 寄存器賦 0,從而5 個數碼管顯示0,同時

14、5 個計數單元 cntp 也清零,為下次閥門信號時計數做準備。if(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5&

15、lt;='b0000;end/6、譯碼顯示模塊選擇另一個開關作為量程選擇信號rst1 ,當rst1=0時,將cntq1 ,cntq2,cntq3,cntq4的值分別賦給seg1,seg2,seg3,seg3,seg4這4個7位共陽極數碼管顯示的信號(即顯示5 位數頻率的后4 位),當 rst1=1時,將cntq5的值賦給 seg1 ,再把 seg2,seg3,seg4分別置為 所0對應的顯示碼。還有一種顯示方式是吧cntq5 的值直接賦給 led 3:0, 直接用 4 個二極管顯示(用二進制表示)。beginif(rst1)begincase(cntq13:0)4'b0000:

16、begin seg16:0=7'b0000001;end4'b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7'b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7&#

17、39;b0000000;4'b1001:seg16:0=7'b0000100;default:seg16:0='bX;endcasecase(cntq23:0)4'b0000:begin seg26:0=7'b0000001;end4'b0001:seg26:0=7'b1001111;4'b0010:seg26:0=7'b0010010;4'b0011:seg26:0=7'b0000110;4'b0100:seg26:0=7'b1001100;4'b0101:seg26:0=7

18、9;b0100100;4'b0110:seg26:0=7'b1100000;4'b0111:seg26:0=7'b0001111;4'b1000:seg26:0=7'b0000000;4'b1001:seg26:0=7'b0000100;default:seg26:0='bX;endcasecase(cntq33:0)4'b0000:begin seg36:0=7'b0000001;end4'b0001:seg36:0=7'b1001111;4'b0010:seg36:0=7'

19、;b0010010;4'b0011:seg36:0=7'b0000110;4'b0100:seg36:0=7'b1001100;4'b0101:seg36:0=7'b0100100;4'b0110:seg36:0=7'b1100000;4'b0111:seg36:0=7'b0001111;4'b1000:seg36:0=7'b0000000;4'b1001:seg36:0=7'b0000100;default:seg36:0='bX;endcasecase(cntq43:0)

20、4'b0000:begin seg46:0=7'b0000001;end4'b0001:seg46:0=7'b1001111;4'b0010:seg46:0=7'b0010010;4'b0011:seg46:0=7'b0000110;4'b0100:seg46:0=7'b1001100;4'b0101:seg46:0=7'b0100100;4'b0110:seg46:0=7'b1100000;4'b0111:seg46:0=7'b0001111;4'b1000

21、:seg46:0=7'b0000000;4'b1001:seg46:0=7'b0000100;default:seg46:0='bX;endcase/*case(cntq53:0)4'b0000:begin led3:0=4'b0000;end4'b0001:led3:0=4'b0001;4'b0010:led3:0=4'b0010;4'b0011:led3:0=4'b0011;4'b0100:led3:0=4'b0100;4'b0101:led3:0=4'b0101

22、;4'b0110:led3:0=4'b0110;4'b0111:led3:0=4'b0111;4'b1000:led3:0=4'b1000;4'b1001:led3:0=4'b1001;default:led3:0='bX;endcase*/endelsebeginseg46:0=7'b0000001;seg26:0=7'b0000001;seg36:0=7'b0000001;case(cntq53:0)4'b0000:begin seg16:0=7'b0000001;end4

23、9;b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7'b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7'b0000000;4'b1001:seg16:0=7

24、9;b0000100;default:seg16:0='bX;endcaseend6、編譯仿真最后的程序的編譯仿真結果如圖1-5 。圖 1-5六、輸入輸出設計如圖所示各引腳分配七、系統實測從I/O接口分別有兩個輸入波形和輸出波形接口。撥動開關switch0為復位開關,下撥后,再下一個輸入波形上升沿到來時,將會刷新數碼管至0。撥動開關 switch1 為量程顯示開關,上撥時數碼管顯示低4 位數值,下撥時顯示第五位最高位數值。八、實驗總結1、心得體會拿到課設題目后我首先去網上查找了一些關于頻率計的原理, 然后又去找來了我們學校的參考書 verilog hdl 與數字 asic 這部書,了解

25、了測頻法和測周法兩種基本的實驗原理,然后選擇了邏輯較為簡單的測頻法。即在閥門信號1s 高電平內計數被測信號的脈沖個數并且鎖存下來送到數碼顯示管顯示。接著開始復習了一些基礎的verilog 語法,由于大二數電中只是簡單介紹了相關語句,所以這一過程也進行地比較艱辛。主要采用了always 相關語句進行邏輯描述。然后利用大二的一些實驗課件,熟悉了quartus2 的使用方法,如何仿真,調試等等,也熟悉了de0 板子的各個模塊功能和引腳分配。在顯示模塊,也花了一些心思, 開始想用動態譯碼的方法讓數碼管輪流顯示,發現 de0 板子并不支持動態譯碼,于是又改為靜態譯碼,一次性把數值送到4位數碼管。碰到比較

26、麻煩的問題是,題目要求 100kHZ的顯示,這就要求 5 位數碼管了,但是 de0 只有 4 位數碼管。于是想了 3 種解決方法:(1)采用一個量程轉換開關,開始顯示低四位,撥動后顯示最高一位; (2)用 4 位 led 燈來二進制地顯示最高位,數碼管顯示低 4 位;(3)用 10 個 led 燈分別代表 09 數字來顯示最高位,數碼管顯示低 4 位。最后采取的第一種最直觀的方法來進行顯示。在程序基本調試完成仿真后,去了實驗室進行實測后,還有一些小問題,可是實驗室又不再開門, 寢室里又缺少信號發生器, 很頭疼,幸運的是在老師建議下,我又做了一個利用內部時鐘進行方波輸出的模塊,就可以自由進行測試

27、了。最后幾天又繼續完善了相關模塊,添加了復位清零的功能。在最后驗收的過程中我又發現,在信號發生器采用函數輸出時,方波測試會不穩定,甚至出現2倍頻率的情況。而采用同步輸出后測試良好,頻率穩定,當頻率為4772 誤差在± 10hz 內浮動,即誤差為± 0.2%通過本次課程設計,我重新鞏固了自己學的數電和 verilog 等電子相關知識,并且在實踐中更好的進行了掌握。 加強了自己動手, 查找資料, 思考和解決問題的能力。我也懂得了理論與實際相結合, 在設計的過程中遇到問題可以說的上是困難重重,這畢竟是第一次在 de0 板子上做的,難免會遇到各種問題, 同時在設計的過程中也發現了自

28、己的不足之處, 對以前的知識理解的不夠深刻, 掌握的不夠牢固。此次課程設計,學到了很多課內學不到的東西,比如獨立思考解決問題的能力,出現差錯隨機應變的能力,和同學互相討論合作,都受益匪淺,相信今后碰到的實踐項目,自己會更加輕松地完成,更加得心應手。同時也得到了教訓,做事應該趁早完成,不要拖拉,不然地話自己也可以設計出更多功能完善的模塊。在此也給細心指導的老師和其它無私給予幫助的同學致以謝意。2、待改進的問題(1)對于量程溢出的問題,即如果頻率超過 99999hz 或者頻率不足 1hz 的方波,只能錯誤顯示而沒有給出超量程預警。(2)測頻法對于頻率較大的方波,測得結果誤差稍大可以考慮換用測周法。

29、3、功能擴展(1)顯示模塊可以改用另外兩種led 顯示的方法(2)可以設置一個量程預警顯示led,在被測信號頻率超過99999hz 和不足1hz 時給出警示。九、參考書目1. 謝自美主編 . 電子線路設計綜合設計 . 華中科技大學出版社, 20062. 羅杰,謝自美主編 . 電子線路設計 .實驗 .測試(第 4 版).電子工業出版社,2008.43. 羅杰主編 . Verilog HDL 與數字 ASIC 設計基礎 . 華中科技大學出版社,2008.34. FPGA與 SOPC設計教程 -DE2 實踐,張志剛編著,西安電子科技大學出版社, 2007.45. 夏宇聞 . Verilog 數字系統

30、設計教程 . 北京航空航天大學出版社十、附錄源代碼及注釋module cymometer(seg1,seg2,seg3,seg4,sysclk,clkin,rst,clk_out,rst1);/ 頂層模塊output6:0seg1,seg2,seg3,seg4;/4 個 7 位數碼管輸出變量output clk_out;/ 方波輸出信號變量reg clk_out;/ 輸出為寄存器型input sysclk;/ 輸入變量 50M 的時鐘信號input clkin;/ 輸入的測試信號input rst;/ 輸入復位清零信號input rst1;/ 輸入量程轉換顯示信號reg3:0 led;reg6

31、:0seg1,seg2,seg3,seg4;reg25:0cnt;/ 分頻計數變量 1 reg25:0cnt1;/ 分頻計數變量 2 reg clk_cnt;/ 周期 2s 的閥門信號reg3:0cntp1,cntp2,cntp3,cntp4,cntp5;/5 位十進制計數變量reg3:0cntq1,cntq2,cntq3,cntq4,cntq5;/5 位鎖存計數的變量reg3:0dat;always(posedge sysclk)/50M 時鐘信號上升沿到來時執行一次模塊beginif(cnt1=500)beginclk_out<=clk_out;/cnt1 計數到 500 時,clk

32、_out 信號翻轉一次 ,然后清零cnt1<=0;endelsebegincnt1<=cnt1+1'b1;endend/ 方波產生模塊 ,輸出 50000HZ的方波到 clk_out always(posedge sysclk)beginif(cnt=50_000_000)beginclk_cnt<=clk_cnt;cnt<=0;endelsebegincnt<=cnt+1'b1;end/cnt 每計數到 50M 時,clk_cnt 信號翻轉一次 ,然后清零endalways(posedge clkin)beginif(clk_cnt)/ 在閥門信

33、號為高電平時 beginif(cntp1='b1001)/ 個位滿 10進 1begincntp1<='b0000;cntp2<=cntp2+1;/ 個位清零 ,十位加一 if(cntp2='b1001)begincntp2<='b0000;cntp3<=cntp3+1;/ 十位清零 ,百位加一if(cntp3='b1001)begincntp3<='b0000;cntp4<=cntp4+1;/ 百位清零 ,千位加一if(cntp4='b1001)begincntp4<='b0000;cn

34、tp5<=cntp5+1;/ 千位清零 ,萬位加一if(cntp5='b1001)begincntp5<='b0000;/ 萬位清零endendendendendelsebegincntp1<=cntp1+1;/ 個位加一endendelsebeginif(rst=0)/ 復位信號置 0 begincntq1<=0;cntq2<=0;cntq3<=0;cntq4<=0;cntq5<=0;/cntq5 位寄存器清零cntp1<='b0000;cntp2<='b0000;cntp3<='b00

35、00;cntp4<='b0000;cntp5<='b0000;/cntp 5 位計數變量清零endelseif(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;/5 位 cntp 非零時 ,在非閥門時間結果送到 cntq 中 ,同時 cntp 清零 ,為下次計數做準備

36、cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5<='b0000;end/endendalwaysbeginif(rst1)/ 量程開關置一 begincase(cntq13:0)4'b0000:begin seg16:0=7'b0000001;end4'b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7

37、9;b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7'b0000000;4'b1001:seg16:0=7'b0000100;default:seg16:0='bX;endcasecase(cntq23:0)4'b0000:begin seg26:0=7'b0

38、000001;end4'b0001:seg26:0=7'b1001111;4'b0010:seg26:0=7'b0010010;4'b0011:seg26:0=7'b0000110;4'b0100:seg26:0=7'b1001100;4'b0101:seg26:0=7'b0100100;4'b0110:seg26:0=7'b1100000;4'b0111:seg26:0=7'b0001111;4'b1000:seg26:0=7'b0000000;4'b100

39、1:seg26:0=7'b0000100;default:seg26:0='bX;endcasecase(cntq33:0)4'b0000:begin seg36:0=7'b0000001;end4'b0001:seg36:0=7'b1001111;4'b0010:seg36:0=7'b0010010;4'b0011:seg36:0=7'b0000110;4'b0100:seg36:0=7'b1001100;4'b0101:seg36:0=7'b0100100;4'b0110:seg36:0=7'b1100000;4'b0111:seg36:0=7'b0001111;4'b1000:seg36:0=7'b0000000;4'b1001:seg36:0=7'b0000100;default:seg36:0='bX;endcasecase(cntq43:0)4'b0000:begin seg46:0=7'b0000001;end

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論