久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 基于FPGA的超聲波測(cè)距設(shè)計(jì) 附quartus程序等 [打印本頁(yè)]

作者: zsa    時(shí)間: 2019-3-3 18:36
標(biāo)題: 基于FPGA的超聲波測(cè)距設(shè)計(jì) 附quartus程序等
含有文檔,PCB板,quartus程序。需要pcb程序請(qǐng)私聊。

目   錄
1  緒論              1
1.1  課題研究的背景              1
1.2  國(guó)內(nèi)外研究現(xiàn)狀              1
1.3  超聲波的特性              2

2  FPGA介紹              2
2.1  FPGA對(duì)于設(shè)計(jì)的必要性              3
2.2  可編程邏輯器件              4
2.3  FPGA的結(jié)構(gòu)              4
3  基于FPGA測(cè)距系統(tǒng)硬件結(jié)構(gòu)平臺(tái)              5
3.1  FPGA核心板結(jié)構(gòu)              5
3.2  超聲波測(cè)距傳感器              7
4  超聲波測(cè)距系統(tǒng)程序設(shè)計(jì)及仿真              9
4.1  程序流程圖              9
4.2  程序及仿真              10
4.3  頂層原理圖              18

結(jié)論              19
致謝              20
參考文獻(xiàn)              21
附錄              22

1 緒論

1.1 課題研究的背景

科技飛速發(fā)展時(shí)至今日,超聲波測(cè)距廣泛應(yīng)用于工業(yè),農(nóng)業(yè),交通,環(huán)境,安全防護(hù)能源測(cè)量等科學(xué)領(lǐng)域,超聲波測(cè)距的測(cè)量精度、測(cè)量距離,可靠性等性能指標(biāo)對(duì)于提高相關(guān)應(yīng)用系統(tǒng)的測(cè)控精度、可靠性,提高生產(chǎn)效率、促進(jìn)科學(xué)技術(shù)的發(fā)展都具有極為重要的作用。隨著經(jīng)濟(jì)的迅速發(fā)展,交通系統(tǒng)日益龐大,交通安全問(wèn)題越來(lái)越被重視,安全防護(hù)現(xiàn)在變成為一個(gè)重要議題。近幾年,船舶運(yùn)輸事故頻發(fā),復(fù)雜的水運(yùn)環(huán)境,如大雨、大霧或夜間行駛常常導(dǎo)致航道的能見(jiàn)度降低,造成碰撞事故。由于超聲波測(cè)距技術(shù)具有在黑暗、灰塵、煙霧等惡劣的環(huán)境下正常工作的特性,將超聲波測(cè)距引入航運(yùn)系統(tǒng)能切實(shí)可行的緩解這一問(wèn)題。

超聲波測(cè)距系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)多種多樣,性能差異也各異。目前市面上主流的超聲波測(cè)距系統(tǒng)大多是以8位或者16位單片機(jī)為主空芯片,產(chǎn)生驅(qū)動(dòng)信號(hào),并負(fù)責(zé)接收處理回波,控制現(xiàn)實(shí)通訊。這樣處理成本固然降低了,但是測(cè)量精度,和測(cè)量距離,以及時(shí)序的控制能力有限。

超聲波測(cè)距的核心在于超聲波信號(hào)的收發(fā)部分,傳統(tǒng)單片機(jī)內(nèi)部指令運(yùn)行時(shí)存在較大延時(shí)誤差其精度無(wú)法滿足精密測(cè)量的要求,本設(shè)計(jì)將FPGA(現(xiàn)場(chǎng)可編程門陣列)引入超聲波測(cè)距系統(tǒng)的設(shè)計(jì)內(nèi),利用其較高的運(yùn)行速度和豐富的片內(nèi)資源,取代單片機(jī),提高對(duì)超聲波工作頻率的控制精度以及對(duì)超聲波收發(fā)渡越時(shí)間的測(cè)量精度。

1.2國(guó)內(nèi)外研究現(xiàn)狀            

超聲波測(cè)距被大量應(yīng)用于各種工業(yè)領(lǐng)域,諸如工業(yè)自動(dòng)控制,建筑工程測(cè)量和機(jī)器人視覺(jué)識(shí)別等方面。和其他方法相比,比如激光測(cè)距、微波測(cè)距等,由于聲波在空氣中傳播速度遠(yuǎn)遠(yuǎn)小于光線和無(wú)線電波的傳播速度,對(duì)于時(shí)間側(cè)量精度 的要求遠(yuǎn)小于激光測(cè)距、微波測(cè)距等系統(tǒng),因而超聲波測(cè)距系統(tǒng)電路易實(shí)現(xiàn)、結(jié)構(gòu)簡(jiǎn)單和造價(jià)低,且超聲波在傳播過(guò)程中不受煙霧、空氣能見(jiàn)度等因素的影響,在各種場(chǎng)合均得到廣泛應(yīng)用。

超聲波測(cè)距作為一種典型的非接觸測(cè)量方法,在很多場(chǎng)合得以應(yīng)用。然而超聲波測(cè)距在實(shí)際應(yīng)用也有很多局限性。

超聲波在空氣中衰減極大,由于測(cè)量距離的不同,造成回波信號(hào)的起伏變化,不同幅度回波信號(hào)在通過(guò)固定門限比較器的整形過(guò)程中,回波到達(dá)時(shí)間的測(cè)t產(chǎn)生較大的誤差,另外就是構(gòu)成超聲波傳感器的壓電陶瓷片在壓電的雙向轉(zhuǎn)換過(guò)程中,存在慣性、滯后等現(xiàn)象,以及超聲波脈沖在空氣中傳播本身及多重的反射路徑,均導(dǎo)致回波信號(hào)被展寬,也使測(cè)量產(chǎn)生較大的誤差,影響了測(cè)距的分辨率。其他還有一些因素,諸如環(huán)境溫度,風(fēng)速等也會(huì)對(duì)測(cè)量造成一定的影響。

目前國(guó)內(nèi)外對(duì)超聲波測(cè)距的研究主要集中在提高測(cè)距精度方面。由于超聲波測(cè)距其測(cè)量范圍與測(cè)量精度是相互矛盾的。要想得到較大的測(cè)量范圍,需降低超聲波的頻率,而此時(shí)波長(zhǎng)增大,測(cè)量精度則會(huì)降低;要想提高測(cè)量精度,需使用高頻的超聲波,其在空氣中衰減很快,測(cè)量范圍則會(huì)縮小。

超聲波測(cè)距的精度主要取決于所測(cè)超聲波傳輸時(shí)間的測(cè)量精度和超聲波在介質(zhì)中的傳輸速度這兩方面。國(guó)外在提高超聲波測(cè)距性能方面做了大量研究,國(guó)內(nèi)相關(guān)學(xué)者也做了相關(guān)研究。提高傳輸時(shí)問(wèn)的測(cè)量精度主要通過(guò)提高測(cè)距儀器的計(jì)時(shí)精度來(lái)實(shí)現(xiàn)。而對(duì)于超聲波的傳輸速度的提高,主要通過(guò)采用高頻的超聲波換能器實(shí)現(xiàn)。高頻的超聲波換能器的工作中心頻率,一般是幾到十幾MHz,由于換能器的工作頻率很高,超聲波衰減非常明顯,這就對(duì)測(cè)距儀器的驅(qū)動(dòng)信號(hào)的 驅(qū)動(dòng)效率提出了更高要求,如何使驅(qū)動(dòng)信號(hào)的中心頻率精度提高成為了一個(gè)派生研究方向。

1.3超聲波的特性

當(dāng)物體振動(dòng)時(shí)會(huì)發(fā)出聲音。科學(xué)家們將每秒鐘振動(dòng)的次數(shù)稱為聲音的頻率,它的單位是赫茲。我們?nèi)祟惗淠苈?tīng)到的聲波頻率為20~20000赫茲。當(dāng)聲波的振動(dòng)頻率大于20000赫茲或小于20赫茲時(shí),我們便聽(tīng)不見(jiàn)了。因此,我們把頻率高于20000赫茲的聲波稱為“超聲波”。

超聲和可聞聲本質(zhì)上是一致的,它們的共同點(diǎn)都是一種機(jī)械振動(dòng),通常以縱波的方式在彈性介質(zhì)內(nèi)會(huì)傳播,是一種能量的傳播形式,其不同點(diǎn)是超聲頻率高,波長(zhǎng)短。

超聲波是一種在彈性介質(zhì)中的機(jī)械振蕩,傳播速度僅為光波的百萬(wàn)分之一,縱向分辨率較高。超聲波對(duì)色彩、光照度、外界光線和電磁場(chǎng)不敏感,對(duì)于被測(cè)物處于黑暗、有灰塵或煙霧、強(qiáng)電磁干擾、有毒等惡劣的環(huán)境下超聲波有很強(qiáng)的適應(yīng)能力。

由于超聲波的能量消耗緩慢,在介質(zhì)中傳播的距離較遠(yuǎn),聲波傳播速度在相當(dāng)大范圍內(nèi)與頻率無(wú)關(guān)等獨(dú)特優(yōu)點(diǎn),超聲波被視為測(cè)距技術(shù)的一種良好選擇在軍事,工業(yè),交通上有很多的應(yīng)用。

2FPGA介紹

2.1  FPGA對(duì)于設(shè)計(jì)的必要性

在這里我們比較一下單片機(jī)與FPGA的性能特點(diǎn):

單片機(jī):可采用C語(yǔ)言編程,靈活多變,可以方便的實(shí)現(xiàn)復(fù)雜的指令控制。但是對(duì)時(shí)序控制實(shí)現(xiàn)能力較弱,組合邏輯能力較弱,程序執(zhí)行采用順序執(zhí)行方式,外部自由使用I/O口數(shù)量有限,對(duì)于接口信號(hào)的頻率控制能力較弱,運(yùn)行速率約為幾十兆赫茲,采用外部晶振的頻率不能超過(guò)40MHz。

FPGA:采用硬件語(yǔ)言編程,沒(méi)有指令控制系統(tǒng),控制能力較弱。但具有很強(qiáng)的時(shí)序控制能力和邏輯組合能力,對(duì)于通信接口特別是高速接口可以將不同速率不同協(xié)議的耦合和橋接。運(yùn)行速率約為幾百兆赫茲,采用外部晶振的頻率可超過(guò)100MHz。

整個(gè)系統(tǒng)的核心部分是超聲波的收發(fā)控制端和信號(hào)處理部分,正是出于這種考慮現(xiàn)在主流的設(shè)計(jì)是采用單片機(jī)做為主控芯片負(fù)責(zé)產(chǎn)生超聲波驅(qū)動(dòng)信號(hào)并對(duì)回波進(jìn)行數(shù)據(jù)處理,控制現(xiàn)實(shí)輸出。

決定超聲波驅(qū)動(dòng)信號(hào)的效果,同時(shí)對(duì)于回波信號(hào)的處理,和整個(gè)超聲波測(cè)距總計(jì)時(shí),超聲波周期的精確時(shí)間是一個(gè)重要的參數(shù)。對(duì)于驅(qū)動(dòng)信號(hào)頻率的嚴(yán)格控制,總計(jì)時(shí)的時(shí)間控制,是系統(tǒng)高性能保障重要條件。

現(xiàn)在主流的設(shè)計(jì)是采用單片機(jī)的中斷加定時(shí)計(jì)數(shù)器來(lái)處理,為方便計(jì)算定時(shí)器初值,采用12MHz晶振來(lái)計(jì)算,無(wú)論是采用是采用哪種位定時(shí)器/計(jì)數(shù)器方式,驅(qū)動(dòng)信號(hào)的頻率精度都有限,與理論精度相差較大,隨著進(jìn)入中斷之前執(zhí)行任務(wù)的不同,定時(shí)器的計(jì)時(shí)值存在著多達(dá)3us以上的不確定誤差;若采用定時(shí)器的對(duì)外部正脈沖自動(dòng)計(jì)時(shí)的功能,將待測(cè)信號(hào)接入外部中斷引腳,自動(dòng)實(shí)現(xiàn)信號(hào)寬度的測(cè)量,該方案的計(jì)時(shí)精度也只能達(dá)到lus。而且計(jì)時(shí)的精度受制于單片機(jī)的運(yùn)行速度,可提高空間很小;若采用TTL分立元件(如8253/8254)來(lái)實(shí)現(xiàn)計(jì)數(shù)器電路,這樣計(jì)時(shí)的精度會(huì)有所提高,但計(jì)時(shí)頻率可提高空間不大,如8254最高計(jì)時(shí)頻率不超過(guò)10MHz。同時(shí)設(shè)計(jì)由于采用分立元件,體積也很大。

對(duì)回波到達(dá)時(shí)間的測(cè)量,對(duì)回波信號(hào)的辨識(shí)和綜合處理也是系統(tǒng)設(shè)計(jì)的關(guān)鍵任務(wù)。實(shí)際上超聲波換能器由于余震自身存在1到2us的不確定誤差,若計(jì)時(shí)器自身的計(jì)時(shí)誤差也是us級(jí)的,那么綜合起來(lái)之后,誤差又將增大。本設(shè)計(jì)中采用FPGA技術(shù),利用其強(qiáng)大的時(shí)序處理能力,極高的運(yùn)行速度(100MHz以上),同時(shí),其豐富的內(nèi)部資源又可以將前述的各種邏輯功能集中在一塊芯片內(nèi)部實(shí)現(xiàn),體積也很小,F(xiàn)PGA(Field Programmable Gate Array)是可編程邏輯器件的一種。可編程邏輯器件是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,是一種半定制的集成電路,結(jié)合計(jì)算機(jī)軟件技術(shù)可以快速、方便地構(gòu)建數(shù)字系統(tǒng)。以下簡(jiǎn)要介紹可編程邏輯器件及FPGA的發(fā)展、結(jié)構(gòu)和功能特點(diǎn)。

2.2  可編程邏輯器件

隨著微電子設(shè)計(jì)技術(shù)與工藝的發(fā)展,數(shù)字集成電路從電子管、晶體管、中小規(guī)模集成電路、超大規(guī)模集成電路(VLSIC)逐步發(fā)展到今天的專用集成電路(ASIC)。ASIC的出現(xiàn)降低了產(chǎn)品的成本,提高了系統(tǒng)的可靠性,縮小了設(shè)計(jì)科的物理尺寸,推動(dòng)了社會(huì)的數(shù)字化進(jìn)程。但是ASIC因其設(shè)計(jì)周期長(zhǎng),改版投資大,靈活性差等缺陷制約著它的應(yīng)用范圍。硬件工程師希望有一種更靈活的設(shè)計(jì)方法,根據(jù)需要,在實(shí)驗(yàn)室就能設(shè)計(jì)、更改大規(guī)模數(shù)字邏輯,研制自己的ASIC并馬上投入使用,這是提出可編程邏輯器件的基本思想。

可編程邏輯器件隨著微電子制造工藝的發(fā)展取得了長(zhǎng)足的進(jìn)步。從早期的只能存儲(chǔ)少量數(shù)據(jù),完成簡(jiǎn)單邏輯功能的可編程只讀存儲(chǔ)器(PROM)、紫外線可擦除只讀存儲(chǔ)器(EPROM)和電可擦除只讀存儲(chǔ)器,發(fā)展到成為可以完成超大規(guī)模的復(fù)雜組合邏輯與時(shí)序邏輯的可編程邏輯器件(CPLD)和現(xiàn)場(chǎng)可編程邏輯門陣列(FPGA)。隨著工藝技術(shù)的發(fā)展與市場(chǎng)的需要,超大規(guī)模、高速、低功耗的新型FPGA/CPLD不斷推陳出新。新一代的FPGA甚至集成了中央處理器(CPU) 或數(shù)字處理器(DSP)內(nèi)核,在一片F(xiàn)PGA上進(jìn)行軟硬件協(xié)同設(shè)計(jì),為實(shí)現(xiàn)片上可編程系統(tǒng)(SOPC,System On Programmable Chip)提供了強(qiáng)大的硬件支持。

2.3  FPGA的結(jié)構(gòu)

FPGA生產(chǎn)廠家有Altera、Xilinx、Actel、Lattice等四家公司,其中Altera 和Xilinx主要生產(chǎn)一般用途FPGA,其主要產(chǎn)品采用RAM工藝。Actel主要提供非易失性FPGA,產(chǎn)品主要基于反熔絲工藝和FLASH工藝。其中Altera公司一直都處于可編程芯片系統(tǒng)(SOPC)領(lǐng)域的前沿和領(lǐng)袖地位,為業(yè)界提供最先進(jìn)的可編程器件和相關(guān)軟件工具、IP軟件模塊以及優(yōu)秀的設(shè)計(jì)方案。其主流FPGA系列包括FLEX6000、FLEXl0K、ACEX、Cyclone、CyclonelI、APEX20K、APEXII、Stratix、Mercury、Exclibur等。

簡(jiǎn)化的FPGA基本由6部分組成,分別為可編程輸入/輸出單元,基本可編程邏輯單元,嵌入式RAM,豐富的布線資源,底層嵌入功能單元和內(nèi)嵌專用硬核等,如圖:

圖2.1 FPGA的內(nèi)部邏輯結(jié)構(gòu)

3  基于FPGA測(cè)距系統(tǒng)硬件結(jié)構(gòu)平臺(tái)

3.1  FPGA核心板結(jié)構(gòu)

該設(shè)計(jì)采用FPGA開(kāi)發(fā)板,該開(kāi)發(fā)板集成了多種功能,比如說(shuō)像VGA接口、PS2 鍵盤接口、138譯碼的數(shù)碼管、32pin外接口I/O、間距為2.54mm的外接插件、jtag調(diào)試接口、AS下載接口、DA數(shù)模轉(zhuǎn)換芯片TLC5620、USB轉(zhuǎn)串口接口、蜂鳴器、四個(gè)輕觸按鍵。開(kāi)發(fā)板的具體結(jié)構(gòu)如下圖所示:

圖3.1 FPGA 開(kāi)發(fā)板結(jié)構(gòu)

從設(shè)計(jì)方面考慮要用到的部分是外接口I/O、138譯碼的數(shù)碼管、jtag調(diào)試接口、AS下載端口、蜂鳴器等。在最初的設(shè)計(jì)思路中運(yùn)用到了LED燈,輕觸按鍵這些功能。運(yùn)用這些功能的目的是對(duì)FPGA開(kāi)發(fā)板進(jìn)行一個(gè)初步的學(xué)習(xí),從而實(shí)現(xiàn)一些簡(jiǎn)單的功能,進(jìn)而向較難的功能邁出一小步。

該FPGA開(kāi)發(fā)板所用的核心芯片為ALTERA公司的cyclone IV E系列芯片,具體型號(hào)為EP4CE6E22C8N。cyclone IV E系列的芯片通過(guò)了最低的成本實(shí)現(xiàn)了較高的功能,并且cyclone IV E系列的器件上邊集成很多低成本的收發(fā)器。在不影響其整體功能的前提下,節(jié)省了很多成本。Cyclone IV E 系列在很多領(lǐng)域諸如像無(wú)線、通訊等都有著一些很有價(jià)值的應(yīng)用。

cyclone IV E 器件系列具有以下特性:

(1)6k到150k的邏輯單元。

(2)高達(dá)6.3Mb的嵌入式存儲(chǔ)器。

(3)高達(dá)360個(gè)18*18乘法器,實(shí)現(xiàn)DSP處理密集型的應(yīng)用。

(4)協(xié)議橋接的應(yīng)用,可以實(shí)現(xiàn)小于1.5W的總功率。

(5)低成本、低功耗的FPGA構(gòu)架。


圖3.1 cyclone IV E EP4CE6E22C8N 型號(hào)芯片

在選用該開(kāi)發(fā)板之前,對(duì)實(shí)現(xiàn)一個(gè)具體系統(tǒng)應(yīng)該有一個(gè)全方位的了解,針對(duì)系統(tǒng)的功能和需要的資源來(lái)具體選擇FPGA開(kāi)發(fā)板。下面針對(duì)cyclone IV E系列的EP4CE6E22C8N 型號(hào)芯片的具體需用單元做出介紹:

(1)具有可編程的輸入輸出端口

在該FPGA開(kāi)發(fā)板中,I/O位于最左邊的部分,總共有32個(gè)。它們是FPGA芯片與外界電路的重要接口部分,同時(shí)它們也完成不同的電器特性對(duì)I/O信號(hào)的驅(qū)動(dòng)和匹配需求,在編寫(xiě)程序的時(shí)候,有時(shí)為了節(jié)省資源或?yàn)榱顺绦虻暮?jiǎn)潔性,目前大多數(shù)FPGA 端口都設(shè)計(jì)成具有可編程性的I/O接口。FPGA針對(duì)外部設(shè)備的接口具有可以編寫(xiě)程序并輸入芯片的功能,所以這樣就大大增加了FPGA的自由特性。

(2)較為豐富的布線資源

和cyclone系列的其他芯片一樣,F(xiàn)PGA本身就具有非常豐富的布線資源,它的這個(gè)特點(diǎn)可以給開(kāi)發(fā)工程師們非常多的自我選擇,選擇最簡(jiǎn)潔的布線方式和最簡(jiǎn)便的算法。這些布線的結(jié)構(gòu)和連線的長(zhǎng)度對(duì)信號(hào)的傳輸速度起到了非常重要的影響,所以算法的優(yōu)先級(jí)和算法的優(yōu)化就顯的尤為重要了,它可能直接可以確定運(yùn)算速度了。

(3)較低的功耗

Cyclone IV E系列芯片采用了經(jīng)過(guò)優(yōu)化后的60nm的工藝。它的內(nèi)核電壓相對(duì)于前幾代的都有所降低。這在大規(guī)模集成電路的工程設(shè)計(jì)中既節(jié)省了資源,又降低了系統(tǒng)整體的功耗。這對(duì)于資源優(yōu)化與資源的合理分布有這非同尋常的價(jià)值所在。

(4)全面的設(shè)計(jì)資源

該系列FPGA核心芯片運(yùn)行流暢,其IP庫(kù)也非常成熟,使用的是Quarters II開(kāi)發(fā)軟件。不管是程序調(diào)試方面還是下載、電路圖仿真等方面都非常的便利。其嵌入式處理器采用的是NiosII處理,這是目前世界上最通用的嵌入式處理器。它可以使得綜合電路運(yùn)行的更為流暢,時(shí)鐘頻率更加穩(wěn)定。

(5)全方位的時(shí)鐘網(wǎng)絡(luò)

該芯片時(shí)鐘網(wǎng)絡(luò)資源豐富,可以利用PLL進(jìn)行分頻、倍頻;可以調(diào)用IP核對(duì)需要的時(shí)鐘頻率進(jìn)行具體設(shè)定。并且在芯片處理系統(tǒng)中可以對(duì)不同的時(shí)鐘信號(hào)進(jìn)行同時(shí)處理。

3.2  超聲波測(cè)距傳感器

首先介紹超聲波測(cè)量距離的原理,其次介紹超聲波測(cè)距模塊。超聲波測(cè)距的基本原理可以這樣認(rèn)為,我們知道聲音在空氣里的傳播速度大約是0.34千米/秒。超聲波在空氣中的傳播速度大概也是0.34千米/秒,而這個(gè)速度受外界環(huán)境變化特別的小;況且超聲波的波長(zhǎng)相對(duì)于空氣中的懸浮顆粒直徑較大,因而可以有效的繞射過(guò)空氣中的懸浮顆粒等直徑比較小的障礙物,所以可以認(rèn)為它在空氣中的傳播速度基本可以維持在0.34千米/秒。基于這個(gè)基本不變的速度,只需測(cè)出其發(fā)出去以及反射回來(lái)的時(shí)間差,然后在通過(guò)一定的計(jì)算,就可以得到發(fā)射端到目標(biāo)物體的距離了。

由以上的超聲波測(cè)量距離的原理圖就可以知道距離S可以被很簡(jiǎn)潔的表達(dá)出來(lái)了。可以把聲速表示成V,超聲波從發(fā)射到接收的時(shí)間差為T,這樣距離就可以被表達(dá)成S=V*T/2。圖3.2中的方法可稱為間接測(cè)距法。還有一種直接測(cè)距的方法,直接測(cè)距就是將測(cè)距系統(tǒng)的發(fā)射端口和接收端口對(duì)準(zhǔn)。發(fā)射的超聲波直接進(jìn)入接收端,這樣就可以直接計(jì)算出其測(cè)量的距離了。這種測(cè)距系統(tǒng)并不僅僅局限于超聲波測(cè)距系統(tǒng),在一些激光測(cè)距、紅外測(cè)距等系統(tǒng)方面也有著一定價(jià)值的應(yīng)用。

圖3.2 超聲波測(cè)量距離的原理圖

在本設(shè)計(jì)中利用超聲波在空氣中的傳播原理,按照S=V*T/2的關(guān)系計(jì)算出1毫米的時(shí)鐘高電平個(gè)數(shù)。利用距離單位的逐項(xiàng)疊加,逐個(gè)進(jìn)位的方式計(jì)算出其距離。

圖3.3 超聲波模塊

基于FPGA的超聲波測(cè)距系統(tǒng)利用的超聲波模塊型號(hào)為HC_SR04,它實(shí)際上采用的是給模塊上的trig端口一個(gè)觸發(fā)電平,讓其觸發(fā)超聲波的發(fā)出。

首先,在使用該模塊之前,對(duì)該超聲波模塊進(jìn)行了簡(jiǎn)單的端口測(cè)試。利用電壓源給該模塊接上5V的電壓。利用信號(hào)發(fā)生器產(chǎn)生一個(gè)10us的高電平脈沖信號(hào),將此信號(hào)加到trig接口上,這樣就完成了對(duì)該超聲波模塊的觸發(fā)。然后將示波器探頭接在超聲波模塊的echo端口上,觀察示波器會(huì)顯示以下信號(hào):

圖3.4 示波器觀測(cè)圖

圖3.5 信號(hào)源信號(hào)圖

由圖3.5中的信號(hào)源可以看出,設(shè)置占空比為20%,脈沖電壓為5V,周期為50us。這樣信號(hào)源就可以產(chǎn)生一個(gè)10us的連續(xù)脈沖,將此脈沖信號(hào)送給trig端口,然后在超聲波模塊上的echo端口上加上示波器來(lái)測(cè)量echo上的信號(hào)變化。圖3.4所示,可以清楚的看到echo信號(hào)也呈現(xiàn)周期性變化,其原因就是給trig輸入的信號(hào)成周期性變化,每次經(jīng)過(guò)10us的連續(xù)高電平,超聲波就會(huì)發(fā)出一個(gè)調(diào)制的脈沖信號(hào),該調(diào)制信號(hào)返回后,echo端的信號(hào)就會(huì)由高電平瞬間變回低電平了,所以echo信號(hào)的周期性變化是由trig信號(hào)的周期性變化引起的。還有一個(gè)值得注意的問(wèn)題,觀察示波器的峰峰值可以看出echo反饋的高電平和給超聲波模塊的VCC端口所輸入的電壓信號(hào)的高電平值是一樣大的,因此就要考慮FPGA開(kāi)發(fā)板的I/O接口所承受的最大耐壓值;比如像Xilinx的Basys系列的開(kāi)發(fā)板I/O接口電壓承受值為3.3V,這種情況就要給echo接口加一個(gè)分壓電阻。以免返回電壓過(guò)大而對(duì)芯片造成一定程度的損傷。而ALTERA系列開(kāi)發(fā)板的I/O接口一般情況可以承受5V的電壓值,因此可以直接將I/O接口與echo端口和trig端口接在一起。

4超聲波測(cè)距系統(tǒng)程序設(shè)計(jì)及仿真

4.1 程序流程圖

下圖給出了系統(tǒng)軟件設(shè)計(jì)的整體框架,實(shí)際上由于FPGA內(nèi)的各個(gè)子進(jìn)程都是并行執(zhí)行的,且每個(gè)子進(jìn)程都是是獨(dú)立的模塊,因此程序設(shè)計(jì)并不是按照順序的方法設(shè)計(jì)的,而是分離成各個(gè)小的子模塊進(jìn)行設(shè)計(jì)綜合的,需要嚴(yán)格控制時(shí)序。

超聲波收發(fā)部分負(fù)責(zé)產(chǎn)生超聲波驅(qū)動(dòng)信號(hào),要求頻率為50MHz,占空比為50的方波信號(hào)以驅(qū)動(dòng)超聲波換能器,同時(shí)高速計(jì)數(shù)器開(kāi)始計(jì)數(shù),檢測(cè)回波后,計(jì)數(shù)器停止計(jì)數(shù),計(jì)算后控制顯示輸出。

            

圖4.1 系統(tǒng)軟件設(shè)計(jì)框圖

4.2程序及仿真

主控制模塊代碼:

  1. <font style="font-size: 12pt">module temper(
  2. input        CLOCK_50,               // 板載時(shí)鐘50MHz
  3. input        Q_KEY,                  // 板載按鍵RST
  4. input        clk_1_sec,            
  5. input        echo,                     //回響信號(hào)輸出
  6. output       reg   trig,                //超聲波模塊觸發(fā)信號(hào)輸入     
  7.     output   [15:0]codeshow     
  8. );  
  9. //-------------------------------------
  10. //reg   trig;
  11.               reg   [11:0]cnt;            //計(jì)數(shù)器,計(jì)250個(gè)50ns,12.5us,為echo提供時(shí)序
  12.               reg   [13:0] cnt1;           //計(jì)數(shù)器,計(jì)8000個(gè)12.5us,100ms
  13.               reg   [20:0]cnt3;             //計(jì)數(shù)124個(gè)時(shí)鐘周期是1mm
  14.               reg   [19:0] dis  ;     
  15.               reg
  16.               echo_buf,                  //echo的上一個(gè)時(shí)鐘的狀態(tài)
  17.               echo_rising,               //捕捉echo的上升沿
  18.               echo_falling,              //捕捉echo的下降沿
  19.               flag1;                     //echo為高電平時(shí)flag1會(huì)是1,低電平時(shí)會(huì)是0
  20.     reg[3:0]beed1;   
  21.     reg[3:0]beed2;   
  22.     reg[3:0]beed3;
  23.     reg[3:0]beed4;
  24. assign codeshow={beed4,beed3,beed2,beed1};
  25. //產(chǎn)生echo控制信號(hào)250*8000*50ns,echo高電平持續(xù)12.5us,即250個(gè)時(shí)鐘周期
  26. always@(posedge CLOCK_50)                  
  27.               begin
  28.               if(cnt == 2)//599
  29.               cnt <= 1'b0;
  30.               else
  31.               cnt <= cnt +1;
  32.               end
  33. always@(posedge CLOCK_50)
  34. begin
  35.               if(cnt == 2)//599
  36.               if(cnt1 == 20)//9999
  37.                             begin
  38.                                           trig <= 1'b1;
  39.                                           cnt1 <= 1'b0;
  40.                             end
  41.               else
  42.                             begin
  43.                                           trig <= 1'b0;
  44.                                           cnt1 <= cnt1 + 1'b1;
  45.                             end
  46. end
  47. //捕捉trig上升沿與下降沿,并產(chǎn)生標(biāo)志位
  48. always@(posedge CLOCK_50, negedge Q_KEY)
  49. begin
  50. if (!Q_KEY) echo_buf <= 1'b0;
  51. else
  52.               begin
  53.               echo_buf <= echo;
  54.               echo_rising <= echo & (~echo_buf);
  55.               echo_falling <= (~echo) & echo_buf;
  56.   end
  57. end
  58. always@(posedge CLOCK_50)
  59.               begin
  60.               if(echo_rising == 1'b1)
  61.               begin
  62.     flag1 = 1'b1;                       //echo已經(jīng)變?yōu)楦唠娖?br />
  63.     end
  64.     else if(echo_falling == 1'b1)
  65.               begin
  66.               flag1 = 1'b0;                       //echo已經(jīng)變?yōu)榈碗娖?br />
  67.               end
  68.               end
  69. //在flag1 = 1 期間計(jì)時(shí),即對(duì)時(shí)鐘進(jìn)行計(jì)數(shù)。(4m的距離會(huì)是25ms,1mm是125個(gè)時(shí)鐘周期)
  70. always@(posedge CLOCK_50, negedge Q_KEY)
  71.               begin
  72.                   if (!Q_KEY) dis<= 19'b0;
  73.                   else
  74.                   begin
  75.                             if(flag1 == 1'b1)
  76.                             begin
  77.                             if(cnt3 == 25)      // 700000              //1mm
  78.                                           cnt3 <= 1'b0;
  79.                             else
  80.                                           cnt3 <= cnt3 + 1'b1;
  81.                             end
  82.                             else if(echo_rising == 1'b1)
  83.                             begin
  84.                                 dis <=cnt3/1;   //dis <=cnt3/290;
  85.                                           cnt3 <= 1'b0;
  86.                   end
  87.                   end
  88.               end
  89. always @ (posedge clk_1_sec, negedge Q_KEY)
  90.   begin
  91.   if (!Q_KEY)
  92.   Begin
  93. beed    <= 1'b0
  94.       beed1   <= 4'b0;
  95.       beed2   <= 4'b0;
  96.       beed3   <= 4'b0;
  97.       beed4   <= 4'b0;
  98. end
  99. else begin
  100.               beed1 <=dis/1000;
  101.               beed2 <=dis%1000/100;
  102.               beed3 <=dis%100/10;
  103.               beed4 <=dis%10;
  104. if(dis>16)begin beed<= 1'b0; end
  105.      else begin beed<=1'b1; end
  106.   end
  107. end
  108. endmodule</font>
復(fù)制代碼


通過(guò)主控制程序,可以實(shí)現(xiàn)超聲波測(cè)距以及當(dāng)測(cè)量距離小于一定長(zhǎng)度時(shí),蜂鳴器報(bào)警,報(bào)警距離可以通過(guò)改代碼,實(shí)現(xiàn)想要的報(bào)警的距離。下面是通過(guò)波形仿真的結(jié)果。如圖所示:

圖4.2 測(cè)距并報(bào)警

分頻模塊代碼:

  1. <font style="font-size: 12pt">module div_50M(
  2.   input      clk,//50
  3.   input      rst_n,//
  4.   output     o_clk,//1HZ
  5.   output     o_clk1hz//1KHZ
  6. );
  7. // 分頻模塊開(kāi)始
  8. reg [25:0] cnt;                         // 計(jì)數(shù)子
  9. reg [25:0] cntt;                         // 計(jì)數(shù)子
  10. reg regclk1hz;
  11. reg rego_clk;
  12. assign o_clk1hz=regclk1hz;
  13. assign o_clk=rego_clk;
  14. always @ (posedge clk, negedge rst_n)
  15.   if (!rst_n)
  16.     cntt <= 0;
  17.   else
  18.     if (cntt == 2)//cnt == 24_999_)//50M/1000=X,X/2-1=24999
  19.       begin
  20.       cntt <= 0;
  21.       regclk1hz=(~regclk1hz);//1KHZ
  22.       end
  23.     else
  24.     cntt <= cntt + 1'b1;
  25. always @ (posedge clk, negedge rst_n)
  26.   if (!rst_n)
  27.     cnt <= 0;
  28.   else
  29.     if (cnt == 1)//cnt == 24_999_999)
  30.     begin
  31.       cnt <= 0;
  32.       rego_clk=(~rego_clk);//1KHZ
  33.       end
  34.     else
  35.     cnt <= cnt + 1'b1;                  
  36. // 分頻模塊結(jié)束</font>
復(fù)制代碼



Endmodule

上述代碼中輸出的1KHZ時(shí)鐘,在之后進(jìn)行譯碼器掃描。分頻模塊仿真如下圖示:

圖4.3 分頻模塊仿真

譯碼器模塊代碼:

  1. <font style="font-size: 12pt">module yimaqi(clkshow ,codeshow,duan,wei);
  2. input clkshow;//1K的掃描時(shí)鐘輸入
  3. input [15:0]codeshow;//4個(gè)數(shù)碼管的顯示數(shù)據(jù)輸入,共16位,每4位一個(gè)密碼
  4. output [7:0]duan;//數(shù)據(jù)段選輸出
  5. output [3:0]wei;//動(dòng)態(tài)掃描的位選輸出
  6. reg  [3:0]dig1;
  7. reg [3:0]SEGAA;
  8. reg [3:0]countt;
  9. reg [7:0]LED;
  10. always @(posedge clkshow )
  11. begin
  12.      countt=countt+1'b1;
  13.      if(countt>3)begin countt=0;end
  14.               case (countt)
  15.               0: SEGAA<=codeshow[3 : 0];
  16.      1: SEGAA<=codeshow[7 :4];
  17.      2: SEGAA<=codeshow[11 : 8];
  18.      3: SEGAA<=codeshow[15 : 12];                                            
  19.      default: countt=0;
  20.               endcase
  21.                 case (countt)//動(dòng)態(tài)掃描的位選輸出
  22.                             0:dig1=4'b0001 ;
  23.                             1:dig1=4'b0010 ;
  24.                             2:dig1=4'b0100 ;
  25.                             3:dig1=4'b1000 ;                                            
  26.      default: countt=0;
  27.               endcase
  28. end
  29. assign wei=dig1;
  30. always @(SEGAA )//數(shù)據(jù)段選輸出
  31. begin
  32.     case (SEGAA)            //hgfedcba
  33.                             4'h0:LED=8'b11000000;//--0
  34.                             4'h1:LED=8'b11111001;//--1
  35.                             4'h2:LED=8'b10100100;//--2
  36.                             4'h3:LED=8'b10110000;//--3
  37.                             4'h4:LED=8'b10011001;//--4
  38.                             4'h5:LED=8'b10010010;//--5
  39.                             4'h6:LED=8'b10000010;//--6
  40.                             4'h7:LED=8'b11111000;//--7
  41.                             4'h8:LED=8'b10000000;//--8
  42.                             4'h9:LED=8'b10010000;//--9
  43.                             4'ha:LED=8'b10001000;//--a
  44.                             4'hb:LED=8'b10000011;//--b
  45.                             4'hc:LED=8'b11000110;//--c
  46.                             4'hd:LED=8'b10100001;//--d
  47.                             4'he:LED=8'b10000110;//--e
  48.                             4'hf:LED=8'b11111111;//--off
  49. endcase
  50. end
  51. assign duan=(dig1==4'b0001)?(LED&8'b01111111):LED;
  52. Endmodule</font>
復(fù)制代碼


譯碼器模塊,通過(guò)掃描檢測(cè)到的1KHZ時(shí)鐘輸入,把測(cè)量到的距離顯示到數(shù)碼管上,譯碼器模塊仿真如下圖所示:

圖4.4 數(shù)碼管顯示仿真

4.3頂層原理

頂層原理圖主要分為三個(gè)模塊,分別為分頻模塊,主控制模塊,譯碼器模塊。還有超聲波模塊接口,以及數(shù)碼管模塊接口。如下圖所示:

圖4.5 原理圖


結(jié)  論

此次的期末大作業(yè),雖然經(jīng)歷了一次次的困難,但積累了很多寶貴的經(jīng)驗(yàn)。在整個(gè)設(shè)計(jì)的過(guò)程中遇到的問(wèn)題主要有以下三點(diǎn),第一:基礎(chǔ)知識(shí)掌握的不牢固,對(duì)書(shū)本上的內(nèi)容理解不夠透徹,沒(méi)有掌握好編程相關(guān)知識(shí)。第二:超聲波測(cè)距這個(gè)模塊程序的編寫(xiě)沒(méi)有思路、對(duì)VerilogHDL語(yǔ)言的不熟悉導(dǎo)致直接在程序中使用乘除法和取余等符號(hào),雖然編譯器沒(méi)有報(bào)錯(cuò),但是運(yùn)行完后根本沒(méi)有結(jié)果,也不能綜合出一個(gè)完整的電路。第三:相關(guān)知識(shí)掌握的不夠全面,缺少系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)。

這次大作業(yè)進(jìn)一步端了我的學(xué)習(xí)態(tài)度,學(xué)會(huì)了實(shí)事求是,嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對(duì)自己要嚴(yán)格要求,不能夠一知半解,要力求明明白白。急于求成是不好的,我有所感受。如果省略了那些必要的步驟,急于求成,不僅會(huì)浪費(fèi)時(shí)間,還會(huì)適得其反。我覺(jué)得動(dòng)手之前,頭腦里必須清楚該怎么做,這一點(diǎn)是很重要的。就目前來(lái)說(shuō),我的動(dòng)手能力雖然差一點(diǎn),但我想,通過(guò)我的不懈努力,在這方面,我總會(huì)得到提高。這一點(diǎn),我堅(jiān)信。因?yàn)閯e人能做到的,我也一定能做到。




全部資料51hei下載地址:

FPGA程序仿真.rar (1.24 MB, 下載次數(shù): 160)

基于FPGA的超聲波測(cè)距.docx (1.11 MB, 下載次數(shù): 116)





作者: 褚洪佳    時(shí)間: 2019-5-23 09:15
thanks,學(xué)習(xí)學(xué)習(xí)
作者: 褚洪佳    時(shí)間: 2019-5-23 18:33
寫(xiě)的很好,很有幫助
作者: 1774614231    時(shí)間: 2019-12-21 16:32
寫(xiě)的好,有幫助
作者: 1774614231    時(shí)間: 2019-12-21 16:34
超聲波有用
作者: 1774614231    時(shí)間: 2019-12-23 10:54
大佬,那個(gè)599咋算的

Screenshot_20191223_105349.jpg (113.53 KB, 下載次數(shù): 182)

Screenshot_20191223_105349.jpg

作者: feigee    時(shí)間: 2020-1-4 17:21
有引腳鎖定么

作者: 1114906234    時(shí)間: 2020-3-12 15:19
很棒
作者: 通信傅清    時(shí)間: 2020-3-24 23:20
樓主是研究生嗎,感覺(jué)我們本科fpga課程設(shè)計(jì)比這個(gè)簡(jiǎn)單太多了
作者: hanminghui    時(shí)間: 2020-4-23 17:42
很有用,非常感謝
作者: aoligeigei2022    時(shí)間: 2022-6-22 17:23
很牛這個(gè) 模塊很詳細(xì)
作者: GOUYANG    時(shí)間: 2023-3-1 16:06
寫(xiě)的非常詳細(xì),感謝樓主
作者: 讓人頭    時(shí)間: 2023-4-12 15:52
好,非常棒,有用





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 美日韩精品 | 久久久精品 | 99re热这里只有精品视频 | 亚洲综合婷婷 | 中文字幕亚洲欧美 | 日韩精品 电影一区 亚洲 | 81精品国产乱码久久久久久 | 久久久久久久久久久久久久国产 | 免费亚洲婷婷 | 欧美性乱 | 国产成人99久久亚洲综合精品 | 国产久 | 精品免费国产视频 | 天天躁日日躁狠狠很躁 | 91污在线 | 日韩a v在线免费观看 | 天天色官网 | 亚洲精品色 | 亚洲精品久久 | 免费性视频| 国产三区在线观看视频 | 男人的天堂一级片 | 亚洲人成一区二区三区性色 | 国产成人综合亚洲欧美94在线 | 一区二区日韩 | 黄色一级大片在线免费看产 | 国产成人在线免费 | 亚洲一区欧美 | 在线播放国产一区二区三区 | 亚洲午夜视频在线观看 | 久久9久| 午夜色婷婷 | 黄色a三级 | 欧美极品在线观看 | 免费激情 | 免费一看一级毛片 | 99久久99 | 超碰成人免费 | 中文字幕第一页在线 | 欧美久 | 国产亚洲一区二区三区在线观看 |