勇敢的芯伴你玩轉Altera FPGA連載91:基于數碼管顯示的超聲波測距回響脈寬計數 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD ![]() 本實例是8.7節“數碼管驅動實例”和9.1節“基于SignalTapII的超聲波測距調試”兩個實例代碼的集成整合,將超聲波測距的回響脈沖以時鐘周期計數值的形式顯示到數碼管上。 如圖10.1所示,本實例同樣是以10us計數器產生的10us脈沖TRIG給超聲波測距模塊,然后以10us為單位計算超聲波測距模塊返回的回響信號ECHO的高電平保持時間。采集到的ECHO高電平脈沖保持周期(以10us為單位)將以16進制方式顯示到數碼管上。 ![]() 圖10.1 超聲波測距顯示實例功能框圖 如圖10.2所示,本實例一共5個模塊,頂層模塊cy4.v主要對各個子模塊進行例化和連接;pll_controller.v模塊是IP核,例化PLL,產生FPGA內部需要的時鐘信號;clkdiv_generation.v模塊產生10us的基準時鐘使能信號;ultrasound_controller.v模塊對超聲波測距模塊的回響信號進行高脈沖時間計數;seg7.v模塊驅動數碼管顯示。 ![]() 圖10.2 超聲波測距顯示實例模塊層次 連接好下載線,給CY4開發板供電。 打開Quartus II,進入下載界面,將本實例工程下的cy4.sof文件燒錄到FPGA中在線運行。 此時我們在超聲波測距模塊前面擺放平整的障礙物,可以看到數碼管上的16進制數據會發生變化。基本規律是:障礙物距離超聲波測距模塊近,則數碼管的數值較小;障礙物距離超聲波測距模塊遠,則數碼管的數值較大。 大家可以通過如下的公式計算當前數碼管顯示數據和實際超聲波測距模塊與障礙物距離是否一致。當然了,大家也不用著急,接下來幾節我們就著手進行換算,將16進制先轉換為10進制,然后把下述的公式結果計算出來并顯示在數碼管上。 假設超聲波模塊與障礙物間的距離為S(單位:m),ECHO輸出的高脈沖寬度為T(單位:s),聲速在25°C條件下定義為346(單位:m/s)。那么ECHO脈沖寬度與測試距離的關系如下。 S = (T*346)/2 |