国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上

這篇具有很好參考價值的文章主要介紹了基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實驗現(xiàn)象

將MAX-10小腳丫FPGA和超聲波模塊HC_SR04插在面包板上,用杜邦線將對應(yīng)的引腳連接好,燒錄程序,小腳丫自帶的數(shù)碼管顯示距離數(shù)據(jù)(單位是厘米)。
基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上,fpga開發(fā)基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上,fpga開發(fā)這張圖拍花了,數(shù)碼管顯示的數(shù)據(jù)是18CM

簡單介紹超聲波測距模塊HC_SR04

HC-SR04是一種基于超聲波的測距模塊。該模塊向前15度內(nèi)發(fā)送超聲波并接收回響,通過發(fā)出超聲波到收到回響的這個時間間隔計算前方的障礙物距離,可以用來給智能小車做障礙物監(jiān)測??商峁?cm- 400cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。

該模塊的時序圖如下:

基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上,fpga開發(fā)該模塊的引腳圖如下:
基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上,fpga開發(fā)
我們在編寫代碼的時候,想要發(fā)出測距命令,需要先保持觸發(fā)信號輸入(trig引腳)為低電平,然后保持大于10us的高電平,再變成低電平即可(時序圖第一行所示)。

發(fā)出測距命令后,回響信號輸出(echo引腳)會保持一段時間的高電平,這個高電平的持續(xù)時間與距離有關(guān)。我們在FPGA編寫代碼測量高電平持續(xù)時間,然后將時間轉(zhuǎn)化為距離即可。

經(jīng)過測試,得到以下結(jié)論:
1、發(fā)送測距的時候,每個脈沖之間的間隔不要過近,我用的間隔是300ms,即每300ms測一次距離,也可以根據(jù)需要修改。
2、接收端高電平時間與距離的關(guān)系式是:距離(cm)= 高電平持續(xù)時間(us)x 0.034cm / 2 (除以2是因為持續(xù)時間是往返時間,除以2才是單程時間)

模塊框圖

我們需要設(shè)計以下模塊:
1、測距信號源模塊,輸入時鐘與復(fù)位,每隔300ms輸出15us高電平。

2、距離計算模塊,輸入時鐘、復(fù)位與回響信號echo,輸出距離(cm)

3、數(shù)據(jù)顯示模塊,將得到的距離可視化,我用的是2個1位數(shù)碼管模塊(小腳丫自帶兩個1位共陰極數(shù)碼管)

4、頂層模塊

框圖如下:

基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上,fpga開發(fā)

模塊編寫

測距信號源

在此模塊,寫一個計時周期為300us的循環(huán)計數(shù)器,當(dāng)計數(shù)器值小于15時輸出高電平,其他時候輸出低電平即可。
代碼如下:

module trigger_send #(
    parameter TIME_1S = 12_000_000
) (
    input   clk ,
    input   rst_n   ,
    output  trigger
);

//1us生成
wire clk_1us;
PLL UPLL(
	.inclk0 (clk),
	.c0 (clk_1us)
);

reg [25:0] cnt_1us;
always @(posedge clk_1us or negedge rst_n) begin
    if (!rst_n) begin
        cnt_1us <= 20'd0;
    end
    else if (cnt_1us == 20'd300_000 - 1)begin
        cnt_1us <= 20'd0;
    end
	 else begin
        cnt_1us <= cnt_1us + 1'b1;
    end
end

assign trigger = cnt_1us < 15 ? 1'b1 : 1'b0;

endmodule

我懶得自己寫1us的計數(shù)器,用鎖相環(huán)生成了一個1MHZ(1us)的時鐘,讓它驅(qū)動計時,你可以不用鎖相環(huán)自己寫1us比特計數(shù),不知道怎么用鎖相環(huán)可以搜一下,很簡單。

距離計算

這個模塊輸入了HC_SR04的回響引腳,要做的就是計算它的高電平持續(xù)時間,并轉(zhuǎn)化為距離數(shù)據(jù)輸出。

這里持續(xù)時間的單位用us最合適,因此同樣生成一個1us時鐘,用這個時鐘監(jiān)測回響信號的上升沿與下降沿。檢測到上升沿,就每過一個時鐘周期就把計時器數(shù)值加1(可以自己設(shè)置上限,表示最大檢測距離);等檢測到下降沿,就把計時器的數(shù)據(jù)保存起來,然后把計時器清空準備下次計時。

拿到保存好的計時后,使用上文提到的公式計算出距離輸出。

代碼如下:

module data_rec #(
    parameter TIME_1S = 12_000_000
) (
    input   clk ,//系統(tǒng)時鐘
    input   rst_n   ,//復(fù)位
    input   rec_data    ,//回響,早知道取名echo了
    output  [11:0] distance	//計算好的距離
);
//鎖相環(huán)生成1us周期時鐘,因為后面的計時單位全是1us,這樣方便
wire clk_1us;
PLL UPLL(
	.inclk0 (clk),
	.c0 (clk_1us)
);

//給回響信號打拍,檢測上升沿下降沿
reg rec_data2;
reg rec_data3;
wire rec_negedge;
wire rec_posedge;
assign rec_negedge = (!rec_data2) && rec_data3;
assign rec_posedge = rec_data2 && (!rec_data3);
always @(posedge clk_1us or negedge rst_n) begin
    if (!rst_n) begin
        rec_data2 <= 1'b0;
    end
    else begin
        rec_data2 <= rec_data;
    end
end
always @(posedge clk_1us or negedge rst_n) begin
    if (!rst_n) begin
        rec_data3 <= 1'b0;
    end
    else begin
        rec_data3 <= rec_data2;
    end
end

//計時啟動標(biāo)志,上升沿啟動,下降沿結(jié)束
reg flag;
always @(posedge clk_1us or negedge rst_n) begin
    if (!rst_n) begin
        flag <= 1'b0;
    end
    else if (rec_posedge)begin
        flag <= 1'b1;
    end
    else if (rec_negedge)begin
        flag <= 1'b0;
    end
    else begin
        flag <= flag;
    end
end

//計時器數(shù)值,flag期間計數(shù),有下降沿就清0,急了多少數(shù)就是保持了多少us,因為是用1us時鐘驅(qū)動的
reg [14:0] cnt_1us;
always @(posedge clk_1us or negedge rst_n) begin
    if (!rst_n) begin
        cnt_1us <= 15'd0;
    end
    else if (rec_negedge)begin
        cnt_1us <= 15'd0;
    end
    else if (flag && cnt_1us < 15'd15_000)begin
        cnt_1us <= cnt_1us + 1'b1;
    end
    else begin
        cnt_1us <= cnt_1us;
    end
end

//因為計時器結(jié)束計時會變0,因此要用另外的變量,在它清0的時候把值保存下來
reg [14:0] high_time;
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        high_time <= 15'd0;
    end
    else if (rec_negedge)begin
        high_time <= cnt_1us ;
    end
    else begin
        high_time <= high_time;
    end
end

//計算距離,Verilog不能直接用浮點數(shù),就這樣實現(xiàn)乘以0.017
//為什么不是0.034看前面
reg [11:0] distance_buf;
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        distance_buf <= 12'd0;
    end
    else begin
        distance_buf <= high_time * 17 / 1000;
    end
end
assign distance = distance_buf;

endmodule

數(shù)碼管模塊

距離模塊的distance就是測到的距離,你拿去數(shù)碼管輸出,串口打印都可以。我的小腳丫自帶兩個1位的共陰極數(shù)碼管,就用它們來顯示,畢竟自己在面包板上給數(shù)碼管插線插電阻還是挺麻煩的。

用的時候取出測的距離的十位個位分別給兩個模塊就行。

1位七段式共陰極數(shù)碼管十進制顯示模塊如下:

module nixietube_1 (
    input   clk,
    input   rst_n,
    input   [3:0]   din, //輸入0-9
    output  drive_out, //使能
    output  [6:0]   _dig, //輸出數(shù)碼管
    output  dot_out //小數(shù)點要亮嗎
);
//dot小數(shù)點輸出
assign dot_out = 1'b0;

//使能,陰極為0
assign drive_out = 1'b0;

//dig段選輸出
parameter   ZER = 7'b0111111,
            ONE = 7'b0000110,
            TWO = 7'b1011011,
            THR = 7'b1001111,
            FOU = 7'b1100110,
            FIV = 7'b1101101,
            SIX = 7'b1111101,
            SEV = 7'b0000111,
            EIG = 7'b1111111,
            NIN = 7'b1101111;
            
reg [6:0]   dig;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        dig <= ZER;
    end
    else begin
        case (din)
            0 : dig <= ZER;
            1 : dig <= ONE;
            2 : dig <= TWO;
            3 : dig <= THR;
            4 : dig <= FOU;
            5 : dig <= FIV;
            6 : dig <= SIX;
            7 : dig <= SEV;
            8 : dig <= EIG;
            9 : dig <= NIN;
            default : dig <= ZER;
        endcase
    end
end

assign _dig = dig;

endmodule

頂層模塊

連起來就可以了,沒什么好說的。

module Ultrasound  (
    input   clk,
    input   rst_n,
    input   rec_data    ,
    output  trigger ,
    output  [6:0]   dig1,
	 output  [6:0]   dig2,
    output  dot1,
	 output  dot2,
	 output  drive1,
	 output  drive2
); 
    trigger_send u_trigger_send(
        .clk (clk),
        .rst_n (rst_n),
        .trigger (trigger)
    );

    wire [11:0] distance;
    data_rec u_data_rec(
        .clk (clk),
        .rst_n (rst_n),
        .rec_data (rec_data),
        .distance (distance)
    );
		
	 nixietube_1 u_nixietube_1(
        .clk (clk),
        .rst_n (rst_n),
        .din    ((distance/10)%10),
        ._dig (dig1),
        .dot_out (dot1),
		  .drive_out (drive1)
    );
	 
	 nixietube_1 u_nixietube_2(
        .clk (clk),
        .rst_n (rst_n),
        .din    ((distance/1)%10),
        ._dig (dig2),
        .dot_out (dot2),
		  .drive_out (drive2)
    );

endmodule  

引腳設(shè)置的時候,兩個數(shù)碼管,時鐘按照小腳丫的原理圖來設(shè)置,trig與echo自己設(shè)置,復(fù)位鍵可以用它自帶的按鈕。

總結(jié)

本次實驗實現(xiàn)了使用FPGA驅(qū)動超聲波模塊HC_SR04,以前在小車比賽見過,但當(dāng)時用的官方提供好的示例代碼?,F(xiàn)在自己也知道如何使用了,可以拿去做很多東西,收獲很大。文章來源地址http://www.zghlxwxcb.cn/news/detail-633324.html

到了這里,關(guān)于基于MAX-10 FPGA 讀取超聲波模塊HC_SR04距離數(shù)據(jù)到數(shù)碼管上的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于FPGA的超聲波測距——數(shù)碼管顯示

    基于FPGA的超聲波測距——數(shù)碼管顯示

    環(huán)境: 1、Quartus18.1 2、vscode 3、板子型號:EP4CE6F17C8N 4、超聲波模塊:HC_SR04 要求: 使用 EP4CE6F17C8開發(fā)板驅(qū)動 超聲波檢測模塊(HC_SR04 ),并將所測得數(shù)據(jù)顯示到開發(fā)板上的數(shù)碼管上 HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超

    2024年02月06日
    瀏覽(18)
  • 基于FPGA的超聲波測距——UART串口輸出

    基于FPGA的超聲波測距——UART串口輸出

    環(huán)境: 1、Quartus18.0 2、vscode 3、板子型號:EP4CE10F17C8 4、超聲波模塊:HC_SR04 要求: 使用 EP4CE10F17C8開發(fā)板驅(qū)動 超聲波檢測模塊(HC_SR04 ),并將所測得數(shù)據(jù)顯示到串口助手上。 HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超聲波發(fā)

    2024年02月14日
    瀏覽(18)
  • 基于FPGA的藍牙遙控,超聲波避障,紅外循跡的智能小車

    基于FPGA的藍牙遙控,超聲波避障,紅外循跡的智能小車

    ? ? ? ? 閑來無事整個小車玩玩,設(shè)想的小車可以有藍牙模塊來控制模式切換,通過發(fā)送指令來更改相對應(yīng)的功能,當(dāng)避障的時候可以自動規(guī)避障礙物,當(dāng)處于紅外循跡時,可以跟隨規(guī)劃的軌跡前線,當(dāng)手動遙控時可以控制前進后退左右轉(zhuǎn)向停止等功能。 ? ? ? ? 先介紹一下

    2024年02月07日
    瀏覽(17)
  • 超聲波測距模塊HC-SR04詳解(基于51單片機)

    超聲波測距模塊HC-SR04詳解(基于51單片機)

    本篇文章是個人整理的包含超聲波測距模塊HC-SR04的基本介紹與基本工作原理以及分別通過LCD1602、數(shù)碼管和串口顯示距離的實例講解與代碼的筆記,部分內(nèi)容來自《HC-SR04超聲波測距模塊說明書》,代碼使用模塊化編輯,部分模塊來自江科大自化協(xié)的51單片機教學(xué)視頻。 希望大

    2023年04月16日
    瀏覽(26)
  • 【嵌入式系統(tǒng)應(yīng)用開發(fā)】FPGA——基于HC-SR04超聲波測距

    【嵌入式系統(tǒng)應(yīng)用開發(fā)】FPGA——基于HC-SR04超聲波測距

    硬件 DE2-115 HC-SR04超聲波傳感器 軟件 Quartus 18.1 使用DE2-115開發(fā)板驅(qū)動HC-SR04模塊,并將所測得數(shù)據(jù)顯示到開發(fā)板上的數(shù)碼管。 HC-SR04 超聲波測距模塊可提供 2cm-400cm的非接觸式距離感測功能,測距精度可達高到 3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。圖1為 HC-SR04 外觀,

    2024年02月08日
    瀏覽(25)
  • 基于STM32的HC_SR04模塊實現(xiàn)超聲波測距(附源碼)

    基于STM32的HC_SR04模塊實現(xiàn)超聲波測距(附源碼)

    本次實驗需要通過STM32與HC_SR04模塊實現(xiàn)實時測距,并將測距信息通過串口顯示在電腦上 原理 超聲波測距原理是在超聲波發(fā)射裝置發(fā)出超聲波,它的根據(jù)是接收器接到超聲波時的時間差,與雷達測距原理相似。 超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時開始計時

    2024年02月11日
    瀏覽(20)
  • 基于51單片機驅(qū)動HC-SR04超聲波模塊(LCD1602顯示)

    基于51單片機驅(qū)動HC-SR04超聲波模塊(LCD1602顯示)

    點擊圖片購買 HC- SR04+是一款寬電壓工作的超聲波測距模塊。模塊外形尺寸及軟件與老版本 HC- SR04完全兼容;可以與老版本HC SR04無縫切換。低至3V的低工作電壓, 使其與3.3V供電的MCU可以直接連接。 特點 探測角度: 15° 采用工業(yè)級MCU,工作溫度:-20C~80C 探測距離:5V:2cm-- 450cm;3.3V: 2c

    2024年02月02日
    瀏覽(23)
  • 基于STM32的超聲波HC-SR04和紅外測距模塊測量距離的實驗對比(HAL庫)

    基于STM32的超聲波HC-SR04和紅外測距模塊測量距離的實驗對比(HAL庫)

    ????????前言: 本文主要是為了 日常普通場合 下測距做的 對比實驗 ,本實驗主要包含 2種模塊 : 超聲波測距模塊 (HC-SR04)和 紅外測距模塊 (SHARP GP2Y0A21YK0F)。兩種模塊不管是測距原理和編程實驗方式都是不相同的,其測距效果也存在很大差異。感興趣的讀者朋友,

    2023年04月27日
    瀏覽(40)
  • 輸入捕獲模塊的使用–超聲波測距

    輸入捕獲模塊的使用–超聲波測距

    @(MSP432P401R) 輸入捕獲的配置 基本默認即可 輸入捕獲的API的使用 參數(shù) Capture_Mode即捕獲模式,經(jīng)實際測試,MSP432P401R只能使用前三種模式 Capture_CallBackFxn即回調(diào)函數(shù) Capture_PeriodUnits即捕獲周期單位 函數(shù)表 全局配置,在ti_drivers_config.c文件中生成 功能函數(shù) 文檔鏈接:file:///D:/MSP%

    2024年02月15日
    瀏覽(42)
  • 13.STM32超聲波模塊講解與實戰(zhàn)

    13.STM32超聲波模塊講解與實戰(zhàn)

    目錄 1.超聲波模塊講解 2.超聲波時序圖 3.超聲波測距步驟 4.項目實戰(zhàn) ? 超聲波傳感器模塊上面通常有兩個超聲波元器件,一個用于發(fā)射,一個用于接收。電路板上有4個引腳:VCC GND Trig(觸發(fā)),Echo(回應(yīng))主要參數(shù): 工作電壓與電流:5V,15ma 感應(yīng)距離:2-400cm 感測角度:不

    2023年04月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包