基於FPGA的頻率檢測與LCD顯示


配套FPGA開發板(含該設計的工程代碼):https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id=17848039135

基於FPGA的信號測頻器說明文檔

 

  1. 設計要求

利用FPGA設計一個信號測頻器,要求:

(1)測量脈沖信號;

(2)頻率測量1-10MHz以及占空比10%-99% 精確到1%;

(3)將測出頻率和占空比顯示在LCD1602上;

 

  1. 設計方案

FPGA設計主要分為三個大模塊來設計:1.被測信號產生模塊;2.被測信號檢測模塊;3.數字顯示模塊。設計框圖如圖 1所示。

圖 1 基於FPGA的信號測頻器設計框圖

  1. 被測信號產生模塊

該模塊主要是用來產生被測信號,可以在模塊中設置被測信號的頻率和占空比。采用的方法是對系統時鍾進行計數分頻產生被測信號。這部分也采用了一個PLL,輸出一個100MHz的時鍾作為檢測模塊的采樣時鍾。該部分涉及的模塊:signal_gen模塊和PLL模塊。

 

  1. 被測信號檢測模塊

該模塊對被測信號進行檢測的方法是等精度測頻法:

(1)被測信號頻率檢測

檢測被測信號的頻率,通過在外部使能信號有效時(即一段時間內),計數系統時鍾脈沖數Ns與被測信號脈沖數Nd,若系統時鍾頻率為Fs,被測信號頻率為Fd,則有Fs/Ns=Fd/Nd 最后有Fd=(Fs/Ns)·Nd。

(2)被測信號占空比檢測:

檢測被測信號的占空比,利用系統時鍾,在外部使能信號有效時(即一段時間內),計數被測信號的正脈寬數Np和負脈寬數Nn,則占空比ducy=Np/(Np+Nn)*100%。

該部分涉及的模塊:signal_detect模塊。

 

 

 

 

 

  1. 數字顯示模塊

該模塊主要分為兩個部分:一個部分是把檢測的頻率碼轉換為十進制BCD碼,采用這種方法雖然會提高運算時間,但卻可以大大節省FPGA的資源(面積與速度的折衷);另外一個部分是驅動LCD1602進行顯示。這里給出二進制碼轉換為十進制BCD碼的幾個步驟(以8bit二進制碼為例):    1.將二進制碼左移一位(或者乘2);2.找到左移后的碼所對應的個,十,百位;3.判斷在個位,十位和百位的碼是否大於等於5;4.繼續重復以上三步直到移位8次后停止;5.如果是則該段碼加3。該部分涉及的模塊:BCD2to10模塊和lcd1602模塊。

 

最終在FPGA的RTL視圖如圖 2所示:

圖 2 基於FPGA的信號測頻器的RTL視圖

  1. 仿真測試

對設計進行Modelsim仿真測試,仿真采用一個近似於1MHz、占空比近似於50%的信號進行測試。在仿真中,我們可以發現經過檢測之后的頻率為980392Hz,占空比為49%。BCD轉換模塊分別每一位提取了出來,供LCD1602顯示。如圖 3所示。

圖 3 Modelsim仿真測試

  1. 板級實驗

對設計進行板級實驗,采用的FPGA是大西瓜的Logic3 FPGA開發套件。實驗結果如圖 4所示。在誤差允許范圍內,LCD1602可以准確把被測信號的頻率及占空比顯示出來。這里注意的是,由於為了檢測到1Hz的信號,故設計中延長了LCD顯示的刷新周期,所以在一開始LCD顯示屏會有一個短時間的閃屏,最后才會穩定下來。

 

圖 4 板級實驗結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM