1. 程式人生 > >基於FPGA的頻率檢測與LCD顯示

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

大於 等精度測頻 pll info 技術 進制 測試 方案 mod

基於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 板級實驗結果

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