• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

Quartus超聲波測距設計verilog代碼青創(chuàng)QC-FPGA開發(fā)板

06/05 15:55
267
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-23122010543Y46.doc

共1個文件

名稱:Quartus超聲波測距設計verilog代碼青創(chuàng)QC-FPGA開發(fā)板

軟件:Quartus

語言:Verilog

代碼功能:

超聲波測距設計:

控制超聲波測距模塊數碼管顯示測量結果,單位mm

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在青創(chuàng)QC-FPGA開發(fā)板驗證,青創(chuàng)QC-FPGA開發(fā)板如下,其他開發(fā)板可以修改管腳適配:青創(chuàng)QC-FPGA開發(fā)板.png

演示視頻:

設計文檔:

1. 超聲波測距原理

超聲波模塊采用HC-SR04

超聲波測距模塊工作原理

(1)采用IO口trig觸發(fā)測距,給至少10us的高電平信號(本代碼設計為15us);

(2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回;

(3)有信號返回,通過IO口echo輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。測試距離=(高電平時間*聲速(340M/S))/2;

(4)本模塊使用方法簡單,一個控制口發(fā)一個10US以上的高電平,就可以在接收口等待高電平輸出。一有輸出就可以開始計時,當此口變?yōu)榈碗娖綍r停止計時,根據計時值即可算出距離。

2. 工程文件

3. 程序文件

4. 程序編譯

5. RTL圖

6. Testbench

7. 仿真圖

整體仿真圖

上圖為整體仿真圖即整體仿真圖的局部放大圖,可以看到發(fā)出trig觸發(fā)信號,給至少10us的高電平信號,然后從echo端口接收到一段高電平。測出的距離值通過數碼管顯示。

超聲波測距模塊

可以看到發(fā)出trig觸發(fā)信號,給15us的高電平信號,然后從echo端口接收到一段高電平,對高電平的時間進行計時,計數值為10000,一個計數為20ns,10000即對應200000ns,換算出的距離值為34mm。

數碼管顯示模塊

將距離值進行顯示,4個數碼管依次選通(低電平選通),顯示距離值的千、百、十、個位。圖中距離34mm顯示為0034。

部分代碼展示:

//超聲波測距模塊
module?Ultrasonic?(
input?clk_50M,
input?reset_n,
input?echo,//接收距離高電平
output?reg?trig,//發(fā)送15us脈沖
output?[15:0]?distance//輸出距離
);
reg?[31:0]?clk_10Hz_count=32'd0;
always@(posedge?clk_50M)
if(reset_n==0)
clk_10Hz_count<=32'd0;
else
if(clk_10Hz_count>=32'd5000000)//計數5000000次就是5000000分頻,50MHz分頻到10Hz
clk_10Hz_count<=32'd0;
else
clk_10Hz_count<=clk_10Hz_count+32'd1;
always@(posedge?clk_50M)
if(reset_n==0)
trig<=0;
else
if(clk_10Hz_count>32'd1?&&?clk_10Hz_count<32'd750)//750*20ns=15000ns=15us
trig<=1;//發(fā)送15us高電平
else
trig<=0;
reg?[31:0]?echo_count=32'd0;
reg?[31:0]?echo_count_buf=32'd0;
reg?echo_buf1=0;
reg?echo_buf2=0;
always@(posedge?clk_50M)
begin
echo_buf1<=echo;
echo_buf2<=echo_buf1;
end
wire?echo_posedge;//echo信號上升沿
assign?echo_posedge=echo_buf1?&?~echo_buf2;
always@(posedge?clk_50M)
if(echo_posedge)begin
echo_count<=32'd0;
echo_count_buf<=echo_count;//緩存echo高電平計數
end
else
if(echo_buf2==1)begin
echo_count<=echo_count+32'd1;
echo_count_buf<=echo_count_buf;
end
assign?distance=echo_count_buf*34/10000;
endmodule

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=377

  • 2-23122010543Y46.doc
    下載

相關推薦