基于FPGA的數(shù)字頻率計實驗報告(能測占空比)_第1頁
基于FPGA的數(shù)字頻率計實驗報告(能測占空比)_第2頁
基于FPGA的數(shù)字頻率計實驗報告(能測占空比)_第3頁
基于FPGA的數(shù)字頻率計實驗報告(能測占空比)_第4頁
基于FPGA的數(shù)字頻率計實驗報告(能測占空比)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、基于FPGA的數(shù)字頻率計設計學院:專業(yè):班級:學號:審閱老師:評分:目錄一、課程設計目的3二、設計任務3三、功能要求與技術(shù)指標3四、數(shù)字頻率計工作原理概述4五數(shù)字頻率計實現(xiàn)方法4六結(jié)論與誤差分析11七VHDL程序:12一、課程設計目的熟悉EDA工具,掌握用VHDL語言進行數(shù)字系統(tǒng)設計的基本方法和流程,提高工程實踐能力。二、設計任務設計一數(shù)字頻率計,用VHDL語言描述,用QuartusII工具編譯和綜合,并在實驗板上實現(xiàn)。三、功能要求與技術(shù)指標1. 基本功能要求(1) 能夠測量出方波的頻率,其圍50Hz50KHz。(2) 要求測量的頻率絕對誤差±5Hz。(3) 將測量出的頻率以十進制格

2、式在實驗板上的4個數(shù)碼管上顯示。(4) 測量響應時間小于等于10秒。以上(1)(4)基本功能要求均需實現(xiàn)。2. 發(fā)揮部分(1) 提高測量頻率圍,如10Hz100KHz或更高、更低頻率,提高頻率的測量絕對值誤差,如達到±1Hz。(2) 可以設置量程分檔顯示,如X1檔(顯示圍1Hz9999Hz),X10檔(顯示圍0.001KHz9.999KHz),X100檔(顯示圍0.100KHz999.9KHz).可以自定義各檔位的圍。量程選擇可以通過按鍵選擇,也可以通過程序自動選擇量程。(3) 若是方波能夠測量方波的占空比,并通過數(shù)碼管顯示。以上(1)(3)發(fā)揮功能可選擇實現(xiàn)其中的若干項。四、數(shù)字頻

3、率計工作原理概述1. 數(shù)字頻率計簡介在電子技術(shù)中,頻率是最基本的參數(shù)之一,并且與許多電參量的測量方案、測量結(jié)果都有十分密切的關(guān)系,因此頻率的測量就顯得更為重要。而數(shù)字頻率計是采用數(shù)字電路制成的實現(xiàn)對周期性變化信號的頻率的測量。2. 常用頻率測量方法:方案一采用周期法。通過測量待測信號的周期并求其倒數(shù),需要有標準倍的頻率,在待測信號的一個周期,記錄標準頻率的周期數(shù),這種方法的計數(shù)值會產(chǎn)生最大為±1個脈沖誤差,并且測試精度與計數(shù)器中記錄的數(shù)值有關(guān),為了保證測試精度,測周期法僅適用于低頻信號的測量。方案二采用直接測頻法。直接測頻法就是在確定的閘門時間,記錄被測信號的脈沖個數(shù)。由于閘門時間通

4、常不是待測信號的整數(shù)倍,這種方法的計數(shù)值也會產(chǎn)生最大為±1個脈沖誤差。進一步分析測量準確度:設待測信號脈沖周期為Tx,頻率為Fx,當測量時間為T=1s時,測量相對誤差為Tx/T=Tx=1/Fx。由此可知直接測頻法的測量準確度與信號的頻率有關(guān):當待測信號頻率較高時,測量準確度也較高,反之測量準確度也較低。五數(shù)字頻率計實現(xiàn)方法本文采用方案二直接測頻法進行設計,具體實施方法如下:1. 直接測頻法:采用一個標準的基準時鐘,在單位閘門時間(1s)里對被測信號的脈沖數(shù)進行計數(shù),即為信號的頻率。由于閘門時間通常不是待測信號的整數(shù)倍,這種方法的計數(shù)值也會產(chǎn)生最大為±1個脈沖誤差。進一步分析

5、測量準確度:設待測信號脈沖周期為Tx,頻率為Fx,當測量時間為T=1s時,測量相對誤差為Tx/T=Tx=1/Fx。由此可知直接測頻法的測量準確度與信號的頻率有關(guān):當待測信號頻率較高時,測量準確度也較高,反之測量準確度也較低。2. 具體設計流程:1). 基本功能部分:(1). 原理概述:利用FPGA實驗板的基準時鐘50M分頻產(chǎn)生一個1Hz的脈沖方波作為閘門信號;當待測信號的上升沿到來時,利用四個個十進制計數(shù)器(即最高能記到9999次數(shù))對其上升沿進行計數(shù);計數(shù)的同時不斷把數(shù)鎖存,并送到數(shù)碼管顯示部分顯示;當1Hz閘門信號的上升沿到來時,對鎖存送到顯示部分的數(shù)據(jù)用十進制顯示到四位數(shù)碼管,一旦顯示后

6、就把四個計數(shù)器的值清零,計數(shù)器重新對待測信號上升沿計數(shù)并鎖存,直到1Hz閘門信號的下個上升沿到來時在把這次閘門時間記到的數(shù)據(jù)送去數(shù)碼管顯示。如此循環(huán),實現(xiàn)對不是固定頻率的待測信號的頻率每秒更新一次的功能。(2)設計原理時序圖:1Hz閘門信號然后計數(shù)器清零clr=1,重新計數(shù)鎖存計數(shù)值,并送數(shù)碼管顯示1秒時間寬度待測信號清零信號clr 2). 擴展功能部分:(1). 原理概述:一、分檔顯示部分在基本功能的計數(shù)部分增加至八個計數(shù)器(即最高能記到99.999999M次數(shù))對待測信號上升沿進行計數(shù);對記到的數(shù)據(jù)按優(yōu)先級由最高位往低位判斷,若第七位有進位,則表示第八個計數(shù)器有計數(shù),故要鎖存最高四位計數(shù)器

7、容并送數(shù)碼管顯示,若為第六位數(shù)碼管有進位,則顯示次高四位計數(shù)器容,以此類推;判斷相應的檔位的同時給每個檔位一個變量賦值,用于判斷小數(shù)點的位置 。以KHZ為單位,則四位數(shù)碼管最高能顯示9999Khz。若顯示最高四位計數(shù)器容(即是X10000檔(1099.99MHZ)),由于已超出四位數(shù)碼管顯示圍,則可以用按鍵顯示最低四位計數(shù)器容,同時讓DS1(千位)數(shù)碼管小數(shù)點亮。如圖所示顯示的頻率為25MHZ(25000.000HZ):未按鍵時顯示最高四位數(shù)字;按住按鍵S5顯示低四位數(shù)字若未超出四位數(shù)碼管顯示圍,則按照如下顯示小數(shù)點:X1000檔(19999khz)只顯示個位小數(shù),X100檔(0.1999.9

8、khz)只顯示十位小數(shù)點,X10檔(0.0199.99khz)只顯示百位小數(shù)點,X10檔(0.0199.99khz)只顯示百位小數(shù)點,X1檔(0.0019.999khz)只顯示千位小數(shù)點。顯示效果如下圖所示:顯示頻率1953.13KHZ也可按住按鍵S5顯示其余低位顯示頻率6.103HZ(誤差±1HZ)顯示頻率6HZ二、占空比部分利用基準時鐘產(chǎn)生一個10MHZ的頻率用于標準計數(shù)信號;在1HZ閘門信號上升沿到來時,10MHZ計數(shù)信號開始計數(shù),同時在待測信號為高電平時,用七個計數(shù)器對10MHZ信號的上升沿次數(shù)計數(shù),低電平時不計數(shù);當1HZ閘門信號的下個上升沿到來時,10MHZ計數(shù)信號剛好計

9、數(shù)10M次(1s時間),此時取待測信號高電平期間七個計數(shù)器的最高四位的數(shù)據(jù)鎖存并送數(shù)碼管顯示,顯示時數(shù)碼管DS2(百位)小數(shù)點亮,所得結(jié)果即為待測信號的占空比(單位為%),如下圖所示:按下按鍵 S6顯示占空比(50.00%)(2). 測量占空比設計原理時序圖1Hz閘門信號計數(shù)器清零clr=1,重新計數(shù)高電平時才計數(shù),并送數(shù)碼管顯示1秒時間寬度待測信號標準計數(shù)信號10MHZ計上升沿次數(shù)10M次(1s時間)六 結(jié)論與誤差分析1. 頻率測量部分:(1). 結(jié)論:能測到待測信號的頻率圍理論上為1HZ99.999999MHZ,實際測試時最高只用過25MHZ的頻率進行測試,結(jié)果相差±1Hz,達到

10、設計要求。(2). 誤差分析:由于采用直接測頻法,1S閘門時間通常不是待測信號的整數(shù)倍,因此計數(shù)值也產(chǎn)生最大為±1個脈沖誤差。設待測信號脈沖周期為Tx,頻率為Fx,當測量時間為T=1s時,測量相對誤差為Tx/T=Tx=1/Fx。所以,直接測頻法的測量準確度與信號的頻率有關(guān):當待測信號頻率較高時,測量準確度也較高,反之測量準確度也較低。2. 占空比測量部分:(1). 結(jié)論:高頻時對占空比在5%95%的待測信號測試誤差為±0.5%,最高能測試到25MHZ的占空比;在低頻時測量的占空比有較大誤差。(2). 誤差分析:由于1S閘門時間用10MHZ的基準信號在待測信號的高電平是計數(shù),

11、故誤差產(chǎn)生的原因有一下兩點:待測信號進入閘門的狀態(tài)隨機(可能是高電平,也可能是低電平),所以對高頻信號,測量到的占空比誤差比較?。粚Φ皖l信號誤差較為明顯,若進出閘門的狀態(tài)同為高電平,則在1S閘門時間對高電平的狀態(tài)就有多計數(shù),結(jié)果偏高;若進出閘門的狀態(tài)同為低電平,則在1S閘門時間對高電平的狀態(tài)就少計數(shù),結(jié)果偏低。待測信號進入閘門的狀態(tài)隨機,且1S閘門時間通常不是待測信號的整數(shù)倍,以10MHZ信號作為基準信號計數(shù)10M次上升沿作為待測信號在1S時間整數(shù)個周期的時間,本身只是個近似值,所以對高頻時誤差較小,低頻時有較大誤差。七VHDL程序:-*library ieee;use ieee.std_lo

12、gic_1164.all;use ieee.std_logic_unsigned.all;entity frequency_meter isport(clk ,d0,d1:in std_logic;clkx:in std_logic;wei :out std_logic_vector(3 downto 0); led :out std_logic_vector(7 downto 0) );end entity frequency_meter;-*Architecture abcof frequency_meter issignal led1,led2,led3,led4 :std_logic_

13、vector(7 downto 0):="11000000" signal ge,shi,bai,qian :integer range 0 to 10:=0; signal clk_1 :std_logic :='1' signal clk_0,clk_1hz,clk_10m,freq12k: std_logic;signal temp: std_logic_vector(22 downto 0);begin-*p0*產(chǎn)生10mHZ頻率* p0:process(clk)isvariable counter0 :integer:=0; beginif (cl

14、k'event and clk='1' ) then counter0:=counter0+1; if (counter0=25) then clk_0<=not clk_0;counter0:=0; end if; end if; clk_10m<=clk_0; end process p0;-*p1*產(chǎn)生1HZ頻率* p1:process(clk)isvariable counter1 :integer:=0; beginif (clk'event and clk='1' ) then counter1:=counter1+1;

15、if (counter1=25000000) then clk_1<=not clk_1;counter1:=0; end if; end if; clk_1hz<=clk_1; end process p1;-*p2*分頻出12k頻率用于數(shù)碼管位選掃頻* p2:process(clk)isbeginif (clk'event and clk='1' ) then temp<=temp+1; end if; freq12k<=temp(11); -12207Hz end process p2;-*p3*主程序(顯示,分檔,占空比測量)* p3:p

16、rocess(clk,clk_1hz,clkx)isvariable counter2,counter3 :integer :=0;variable aa,bb,cc,dd,ee,ff,gg,hh,za,zb,zc,zd,ze,zf,c,d,e,f:integer range 0 to 10:=0;variable temp2,temp3,temp4,temp5:integer range 0 to 10:=0;variable dip0,dip1,dip2,dip3,dip4,dip5,dip6,dip7 :integer :=0;variable clr :integer:=0;begin

17、-*p3_1-計數(shù)顯示*-if(clkx'event and clkx='1')thenaa:=aa+1; if(aa=10)thenaa:=0;bb:=bb+1;if(bb=10)thenbb:=0;cc:=cc+1;if(cc=10)thencc:=0;dd:=dd+1;if(dd=10)thendd:=0;temp2:=1;-temp2ee:=ee+1;if(ee=10)thenee:=0;temp3:=1;-temp3ff:=ff+1;if(ff=10)thenff:=0;temp4:=1;-temp4gg:=gg+1;if(gg=10)thengg:=0;te

18、mp5:=1;-temp5hh:=hh+1;if(hh=10)thenhh:=0;end if;end if; end if;end if;end if;end if;end if;end if; -*p3_2-分檔顯示*-if(d0='0')then-按鍵按下顯示占空比,否則顯示頻率-ge<=c;shi<=d;bai<=e;qian<=f;dip2:=1;-只顯示百位小數(shù)點-elsif(d0='1')thenif(temp5=1)then-X10000檔(99.999999mhz)- -超出四個數(shù)碼管顯示圍,可以按鍵顯示-ge<=

19、ee;-最低四位,同時只顯示千位小數(shù)點-shi<=ff;bai<=gg;qian<=hh;dip5:=1;elsif(temp4=1)then-X1000檔(19999khz)只顯示個位小數(shù)點ge<=dd;shi<=ee;bai<=ff;qian<=gg;dip4:=1;elsif(temp3=1)then-X100檔(0.1999.9khz)只顯示十位小數(shù)點ge<=cc;shi<=dd;bai<=ee;qian<=ff;dip3:=1;elsif(temp2=1)then-X10檔(0.0199.99khz)只顯示百位小數(shù)點g

20、e<=bb;shi<=cc;bai<=dd;qian<=ee;dip2:=1;else-X1檔(0.0019.999khz)只顯示千位小數(shù)點ge<=aa;shi<=bb;bai<=cc;qian<=dd;dip1:=1;end if;end if;-*p3_3-顯示低位*-if(d1='0')thendip6:=1;-小于X10000檔的低四位不顯示小數(shù)點-if(dip5=1)thenge<=aa;shi<=bb;bai<=cc;qian<=dd;dip6:=0;-X10000檔的高位不顯示小數(shù)點-dip7

21、:=1;-X10000檔的低位千位顯示小數(shù)點-elsif(dip4=1)thenge<=0;shi<=aa;bai<=bb;qian<=cc;elsif(dip3=1)thenge<=0;shi<=0;bai<=aa;qian<=bb;elsif(dip2=1)thenge<=0;shi<=0;bai<=0;qian<=aa;elsege<=0;shi<=0;bai<=0;qian<=0;end if;elsif(d1='1')thendip6:=0;dip7:=0;end if;e

22、nd if; -*p3_4-占空比*-if(clk_10m'event and clk_10m='1')thencounter2:=counter2+1;if(counter2=1000000)then-10mhz頻率,計數(shù)到1000000為1s-c:=zc;-停止檢測高電平并鎖存高四位計數(shù)器值-d:=zd;e:=ze;f:=zf;end if;end if;if(clkx='1')then-測待測方波高電平-if(clk_10m'event and clk_10m='1')thencounter3:=counter3+1;za:

23、=za+1;if(za=10)thenza:=0;zb:=zb+1;if(zb=10)thenzb:=0;zc:=zc+1;if(zc=10)thenzc:=0;zd:=zd+1;if(zd=10)thenzd:=0;ze:=ze+1;if(ze=10)thenze:=0;zf:=zf+1;if(zf=10)thenzf:=0;end if;end if;end if;end if;end if;end if;end if;end if;-*p3_4-數(shù)碼管顯示部分*-if(clk_1hz'event and clk_1hz='1')then-1s顯示一次頻率-*小數(shù)點

24、顯示*-if(dip7=1)thenled4(7)<='1'led3(7)<='1'led2(7)<='1'led1(7)<='0'elsif(dip5=1 or dip6=1)thenled4(7)<='1'led3(7)<='1'led2(7)<='1'led1(7)<='1'elsif(dip4=1)thenled4(7)<='0'led3(7)<='1'led2(7)&

25、lt;='1'led1(7)<='1'elsif(dip3=1)thenled4(7)<='1'led3(7)<='0'led2(7)<='1'led1(7)<='1'elsif(dip2=1)thenled4(7)<='1'led3(7)<='1'led2(7)<='0'led1(7)<='1'elsif(dip1=1 )thenled4(7)<='1'led

26、3(7)<='1'led2(7)<='1'led1(7)<='0'end if;-*顯示數(shù)字*-Case qian iswhen 0=>led1(6 downto 0)<="1000000"when 1=>led1(6 downto 0)<="1111001"when 2=>led1(6 downto 0)<="0100100"when 3=>led1(6 downto 0)<="0110000"whe

27、n 4=>led1(6 downto 0)<="0011001"when 5=>led1(6 downto 0)<="0010010"when 6=>led1(6 downto 0)<="0000010"when 7=>led1(6 downto 0)<="1111000"when 8=>led1(6 downto 0)<="0000000"when 9=>led1(6 downto 0)<="0010000&qu

28、ot;when others=>led1(6 downto 0)<="0000000"end case;case bai iswhen 0=>led2(6 downto 0)<="1000000"when 1=>led2(6 downto 0)<="1111001"when 2=>led2(6 downto 0)<="0100100"when 3=>led2(6 downto 0)<="0110000"when 4=>led2(6

29、 downto 0)<="0011001"when 5=>led2(6 downto 0)<="0010010"when 6=>led2(6 downto 0)<="0000010"when 7=>led2(6 downto 0)<="1111000"when 8=>led2(6 downto 0)<="0000000"when 9=>led2(6 downto 0)<="0010000"when others

30、=>led2(6 downto 0)<="0000000"end case; case shi iswhen 0=>led3(6 downto 0)<="1000000"when 1=>led3(6 downto 0)<="1111001"when 2=>led3(6 downto 0)<="0100100"when 3=>led3(6 downto 0)<="0110000"when 4=>led3(6 downto 0)<

31、;="0011001"when 5=>led3(6 downto 0)<="0010010"when 6=>led3(6 downto 0)<="0000010"when 7=>led3(6 downto 0)<="1111000"when 8=>led3(6 downto 0)<="0000000"when 9=>led3(6 downto 0)<="0010000"when others=>led3(6 downto 0)<="0000000"end case;case ge iswhen 0=>led4(6 downto 0)<="1000000"when 1=>led4(6 downto 0)<="1111001"when 2=>led4(6 downto 0)<="0100100"when 3=>led4(6 downto 0)<="0110000"when 4=>led4(6 downto 0)<="001100

溫馨提示

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

最新文檔

評論

0/150

提交評論