一. 簡介
本例為FPGA之旅設(shè)計99例中的第十五例,本例將介紹如何使用超聲波模塊,進行測距。這個模塊在智能小車中使用的比較多,使用起來比較方便,僅需四個引腳即可驅(qū)動。
二. 超聲波測距方法
先來了解一下模塊的四個引腳
VCC:接3.3V - 5V 供電
GND:接地
Trig:控制超聲波進行測距引腳,默認為高電平,當(dāng)其拉高后,模塊啟動超聲波測距。
Echo:用于表示超聲波發(fā)送到接收到的時間,默認為低電平,高電平表示超聲波在空氣中傳播的時間。
從圖中,可以很清
楚地看到模塊的工作原理。
首先,F(xiàn)PGA先將Trig引腳拉高10us,通知模塊啟動超聲波測距。然后模塊內(nèi)部發(fā)出8個40khz的脈沖,即發(fā)送超聲波,這個FPGA是不需要管的。發(fā)送完成之后,Echo就拉高,直到接收到返回到的超聲波,拉高時間表示離物體的距離。通過下面格式可以轉(zhuǎn)換到CM。
D =(拉高時間 * 聲速(340M/S)) /2
除以二是以為從發(fā)送到接收,一個來回。
三. 代碼實現(xiàn)
通過上面的工作原理圖可以看出,狀態(tài)機一共可以分為以下幾個狀態(tài)
空閑態(tài) : 沒有測距請求時,所處的狀態(tài)
trig態(tài) : 當(dāng)測距請求到來時,所處的狀態(tài),這個狀態(tài)中,會將trig信號拉高
echo態(tài): 當(dāng)trig態(tài)結(jié)束的時候,轉(zhuǎn)入echo態(tài),這個狀態(tài)中,將會檢測echo信號高電平的持續(xù)時間
結(jié)束態(tài) :echo信號變?yōu)榈碗娖降臅r候,進入結(jié)束態(tài),并且根據(jù)echo高電平的持續(xù)時間,計算距離
localparam S_IDLE = 'd0;localparamS_SEND_Trig='d1;localparam S_WATI_Echo = 'd2;localparamS_END='d3;
主要代碼是狀態(tài)的轉(zhuǎn)移以及trig態(tài)的計數(shù)和echo高電平計數(shù),代碼如下。
always@(posedge sys_clk or negedge rst_n)begin if( rst_n == 1'b0) trig_cnt <= 'd0; ?else if (state == S_SEND_Trig) ? ?trig_cnt <= trig_cnt + 1'b1; ?else ? ?trig_cnt <= 'd0;end always@(posedge sys_clk or negedge rst_n)begin ?if( rst_n == 1'b0) ? ?echo_cnt <= 'd0; ?else if(state == S_WATI_Echo && echo == 1'b1) ? ?echo_cnt <= echo_cnt + 1'b1; ?else if(state == S_END) ? ?echo_cnt <= echo_cnt; ?else ? ?echo_cnt <= 'd0;end
這基本上完成了全部驅(qū)動代碼的編寫,模塊比較簡單,下面通過signal tap抓取一下波形圖
-
引腳
+關(guān)注
關(guān)注
16文章
1193瀏覽量
50409 -
高電平
+關(guān)注
關(guān)注
6文章
148瀏覽量
21366 -
超聲波模塊
+關(guān)注
關(guān)注
1文章
21瀏覽量
13500
原文標(biāo)題:FPGA實現(xiàn)超聲波測距
文章出處:【微信號:FPGA之旅,微信公眾號:FPGA之旅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論