朱義德,楊瑞峰,郭晨霞,葛雙超
(中北大學(xué)電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
超聲波測(cè)量物體間距離的原理是基于脈沖回波法[1],該方法利用聲波的回波特性。如圖1所示。
圖1 超聲波測(cè)距系統(tǒng)示意圖
控制電路產(chǎn)生一個(gè)觸發(fā)信號(hào),這個(gè)信號(hào)由發(fā)射端T接收并受此激勵(lì)產(chǎn)生超聲波脈沖。脈沖傳輸至物體,遭遇物體阻攔時(shí)會(huì)產(chǎn)生脈沖回波,然后接收端R檢測(cè)脈沖回波[2-4]。通過(guò)A/D轉(zhuǎn)換器將發(fā)射端T的發(fā)射信號(hào)和接收端R檢測(cè)信號(hào)分別作為參考信號(hào)和接收信號(hào)進(jìn)行數(shù)字化,通過(guò)信號(hào)特征值(峰值、頻率等)匹配計(jì)算出超聲波的飛行時(shí)間(TOF)。最后結(jié)合飛行時(shí)長(zhǎng)TTOF和所測(cè)的聲速vU計(jì)算發(fā)射器T和接收器R到目標(biāo)的距離L[5-7]。如式(1)所示。
(1)
一般情況下,TOF是用閾值法計(jì)算的,但閾值法受信噪比的影響較大[8]。采用信號(hào)互相關(guān)算法,通過(guò)匹配發(fā)射信號(hào)與接收信號(hào)之間的相似度,從而識(shí)別出回波位置[9]。
互相關(guān)算法原理如下[10-11]:
用x(n)表示發(fā)射端離散時(shí)間信號(hào),用y(n)表示接收端離散時(shí)間信號(hào)。
x(n)=z(n)+w1(n)
(2)
y(n)=z(n+τ)+w2(n)
(3)
式中:z(n)為超聲波信號(hào);w1(n)、w2(n)分別為發(fā)射端、接收端的干擾信號(hào);τ為時(shí)間延遲序號(hào)。
將采集到的回波信號(hào)y(n)與發(fā)射信號(hào)x(n)進(jìn)行N點(diǎn)的互相關(guān)運(yùn)算,由于3個(gè)信號(hào)z(n)、w1(n)、w2(n)兩兩之間都互不相關(guān),x(n)、y(n)的互相關(guān)表達(dá)式為
(4)
由式(4)計(jì)算出的Rxy(τ)表示回波信號(hào)y(n)與發(fā)射信號(hào)x(n)之間相似程度,互相關(guān)運(yùn)算的最大值時(shí)刻即為時(shí)間延遲的估計(jì)值。
系統(tǒng)采用cyclone四代EP4CE30F23V6N芯片為核心的FPGA,時(shí)鐘主頻為50 MHz,幾十個(gè)I/O接口可以滿(mǎn)足系統(tǒng)設(shè)計(jì)的要求。采用模塊化方式設(shè)計(jì)系統(tǒng),如圖2所示。
圖2 系統(tǒng)總體設(shè)計(jì)框圖
系統(tǒng)控制部分主要由時(shí)鐘分頻模塊、觸發(fā)信號(hào)模塊、互相關(guān)算法模塊、顯示模塊構(gòu)成。分別完成時(shí)鐘頻率的調(diào)整、測(cè)距模塊觸發(fā)啟動(dòng)、TOF的測(cè)量以及測(cè)試距離的顯示,其中的核心為互相關(guān)算法模塊。為了降低測(cè)量誤差,圖中2個(gè)測(cè)距模塊由相同測(cè)距裝置組成。
在測(cè)距模塊1中,已知特定距離D,經(jīng)過(guò)互相關(guān)算法模塊處理信號(hào)得出飛行時(shí)間TTOF1,由式(1)變換可得出實(shí)際聲速,如式(5)所示:
(5)
再將vU代入式(1)中,得出精準(zhǔn)的實(shí)際測(cè)試距離L。用第一組來(lái)測(cè)量聲速作為第二組距離測(cè)量裝置的補(bǔ)償數(shù)據(jù),這也是稱(chēng)之為自具補(bǔ)償測(cè)距系統(tǒng)的原因。
測(cè)距模塊主要由2部分組成:一是產(chǎn)生超聲波的脈沖發(fā)射電路,另一個(gè)是處理信號(hào)的回波接收電路。
超聲波發(fā)射電路如圖3所示,由功率放大電路、超聲波脈沖生成電路組成。
圖3 超聲波發(fā)射電路
FPGA發(fā)出的PWN經(jīng)過(guò)PNP型三極管放大和變壓芯片升壓,實(shí)現(xiàn)功率放大功能。變壓芯片輸出的放大脈沖會(huì)激勵(lì)換能器生成超聲波信號(hào),由探頭發(fā)出。
為了提高回波信號(hào)的信噪比,采用芯片CX2016A進(jìn)行信號(hào)的放大、濾波、整形。超聲波接收電路如圖4所示。
圖4 超聲波接收電路
圖4中,VCC為+5 V。C1腳所連接的RC串聯(lián)電路,R15和C6分別控制著芯片的前置放大增益和頻率特性。C2腳上的電容C7為檢波電容,影響電路的瞬時(shí)靈敏度。C3腳所連接電容為積分電容。通過(guò)改變各引腳上的器件的數(shù)值,可以調(diào)整回波接收電路,以滿(mǎn)足設(shè)計(jì)的要求。
在式(4)中取z(n+τ)=g(n+τ),可以得出一個(gè)卷積算式。如式(6)所示。
(6)
此處,*代表卷積。
只有在1個(gè)A/D采樣周期內(nèi)完成式(6)中的卷積運(yùn)算,才能保證算法的精準(zhǔn)實(shí)時(shí)性。卷積運(yùn)算是2個(gè)變量在一定范圍內(nèi)相乘后求和的乘加結(jié)果,若是采用傳統(tǒng)的并行方式在FPGA中實(shí)現(xiàn)式(6)中的運(yùn)算,需要N個(gè)乘加器[12]。FPGA中的資源將被無(wú)意義使用,且電路和程序結(jié)構(gòu)會(huì)被采樣點(diǎn)數(shù)N的數(shù)值確定,修改過(guò)程繁瑣并容易出錯(cuò)。為了增加算法的通用性和兼容性,能夠靈活完成不同采樣點(diǎn)數(shù)N的互相關(guān)運(yùn)算,調(diào)整FPGA內(nèi)部結(jié)構(gòu),采用半并行結(jié)構(gòu)實(shí)現(xiàn)式(6)的算法,如圖5所示。
圖5 半并行結(jié)構(gòu)的互相關(guān)模塊示意圖
在設(shè)計(jì)互相關(guān)算法模塊時(shí),每個(gè)乘加節(jié)中的2個(gè)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),應(yīng)該滿(mǎn)足以下要求:
在計(jì)算單個(gè)乘加節(jié)互相關(guān)Rxy(τ)時(shí),互相關(guān)數(shù)據(jù)緩沖區(qū)中的輸入數(shù)據(jù)g(n)以及互相關(guān)系數(shù)存儲(chǔ)器中的互相關(guān)模板z(n)需要遍歷。一個(gè)Rxy(τ)的計(jì)算完成后,乘加節(jié)會(huì)讀出數(shù)據(jù)并被后一個(gè)乘加節(jié)寫(xiě)入。第一個(gè)乘加節(jié)會(huì)寫(xiě)入A/D采樣得到的新緩數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中最先寫(xiě)入的數(shù)據(jù)讀出并寫(xiě)入下一個(gè)乘加節(jié)。最后一個(gè)乘加節(jié)只執(zhí)行數(shù)據(jù)的寫(xiě)入和讀取操作,“輪空”數(shù)據(jù)輸出的功能。
假設(shè)采樣點(diǎn)為64,采用圖5中所示結(jié)構(gòu),只需要4個(gè)乘加節(jié)就可完成運(yùn)算,降低了FPGA資源占用。還可以根據(jù)采樣點(diǎn)數(shù)以及實(shí)際使用情況,靈活調(diào)整乘加節(jié)的數(shù)量。“緩沖存儲(chǔ)”結(jié)構(gòu)。圖5中互相關(guān)系數(shù)存儲(chǔ)器存入互相關(guān)模板z(n)后數(shù)據(jù)不更新?;ハ嚓P(guān)數(shù)據(jù)緩沖區(qū)是存儲(chǔ)寫(xiě)入數(shù)據(jù)g(n)的雙端口RAM:一個(gè)負(fù)責(zé)在每個(gè)A/D采樣周期中將1個(gè)新數(shù)據(jù)寫(xiě)入緩沖區(qū),另一個(gè)用于讀出數(shù)據(jù),實(shí)現(xiàn) “循環(huán)隊(duì)列”數(shù)據(jù)讀寫(xiě)結(jié)構(gòu)。每個(gè)A/D采樣周期中,2個(gè)存儲(chǔ)器的數(shù)據(jù)會(huì)被按地址讀取16次,讀取出的數(shù)據(jù)在乘加器進(jìn)行運(yùn)算后輸出進(jìn)入加法器,得出互相關(guān)運(yùn)算結(jié)果。
使用Quartus Ⅱ中的MegaWizard工具生成IP核,完成乘加節(jié)中的2個(gè)存儲(chǔ)器雙口RAM以乘加器模塊設(shè)計(jì),編寫(xiě)Verilog-HDL程序完成乘加節(jié)控制模塊、頂層模塊的的設(shè)計(jì)。由上文可知,整個(gè)互相關(guān)模塊的重點(diǎn)是乘加節(jié)的實(shí)現(xiàn)。乘加節(jié)控制仿真波形如圖6所示。
如圖6所示,讀取互相關(guān)系數(shù)存儲(chǔ)器數(shù)據(jù)“coe_value”與互相關(guān)數(shù)據(jù)緩沖器數(shù)據(jù)“dp_rd_data”完成一次遍歷乘加運(yùn)算,被鎖存器“s-latch”鎖存。每段被寫(xiě)入采樣數(shù)據(jù)進(jìn)行乘加運(yùn)算之前,現(xiàn)時(shí)數(shù)據(jù)地址“current_pt”會(huì)在觸發(fā)指令“start”控制下完成加1操作。讀數(shù)據(jù)緩沖地址寄存器/計(jì)數(shù)器“rd_data_dpram_add”會(huì)把“current_pt”作為原始數(shù)據(jù)寫(xiě)入。狀態(tài)計(jì)數(shù)器“flag_cnt”的數(shù)值控制著雙口RAM是否讀出數(shù)據(jù)且在“flag_cnt=20”時(shí)停止地址計(jì)數(shù),留出時(shí)鐘周期作為雙口RAM的地址潛伏期以及乘法器的潛伏期,實(shí)現(xiàn)16個(gè)數(shù)據(jù)的讀取。
圖6 乘加節(jié)控制仿真波形
聲波在空氣中的速度,根據(jù)式(7)可以計(jì)算:
(7)
式中:γ、R、T和M分別為比熱比、通用氣體常數(shù)、絕對(duì)溫度(單位:開(kāi)爾文)和摩爾質(zhì)量;聲速c的單位為m/s。
綜合考慮各個(gè)因素的影響,得出聲速的實(shí)際應(yīng)用算式。如式(8)所示。式中溫度t的單位為℃。
(8)
由式(8)可知,影響聲速的主要因素是溫度。選擇溫度傳感器作為溫度補(bǔ)償電路,替換超聲測(cè)距模塊1,修改程序進(jìn)行控制,實(shí)現(xiàn)溫度補(bǔ)償。進(jìn)行2組對(duì)比數(shù)據(jù)測(cè)試,一組是不使用互相關(guān)算法的溫度補(bǔ)償測(cè)距,一組是使用互相關(guān)算法的溫度補(bǔ)償測(cè)距。多次測(cè)量取平均值,進(jìn)行數(shù)據(jù)對(duì)比。如表1所示。
表1 測(cè)距誤差對(duì)比
根據(jù)表1中的數(shù)據(jù)得知,近距離測(cè)量誤差較大,3種測(cè)試方式?jīng)]有明顯差別,這是因?yàn)槌暡y(cè)距具有回波盲區(qū)。隨著距離增大,測(cè)距精度差別明顯。溫度補(bǔ)償測(cè)距沒(méi)有使用互相關(guān)算法,測(cè)距誤差一直在1%的范圍內(nèi)上下波動(dòng)。自補(bǔ)相關(guān)測(cè)距精度高于溫補(bǔ)相關(guān)測(cè)距精度,相對(duì)誤差可以低至0.2%。測(cè)試距離超過(guò)150 cm后,測(cè)距的誤差開(kāi)始回升,這與超聲波回波信號(hào)的衰減有關(guān)。
針對(duì)超聲波測(cè)距系統(tǒng)中硬件補(bǔ)償電路補(bǔ)償單一等問(wèn)題,設(shè)計(jì)了一種基于互相關(guān)算法自具補(bǔ)償?shù)臏y(cè)距系統(tǒng)。在設(shè)計(jì)中,結(jié)合FPGA的功能特性,采用半并行結(jié)構(gòu)簡(jiǎn)化互相關(guān)算法。測(cè)距系統(tǒng)中的聲速補(bǔ)償方法,不使用硬件補(bǔ)償電路,而是基于空間環(huán)境條件進(jìn)行聲速補(bǔ)償。與使用傳感器完成環(huán)境數(shù)據(jù)測(cè)量后再進(jìn)行反饋補(bǔ)償?shù)姆绞较啾?,該方法具有更好的環(huán)境適用性。使用相同的裝置完成聲速的補(bǔ)償,既提高了測(cè)距的精度,又減少了工作量,同時(shí)降低程序的出錯(cuò)率。系統(tǒng)可在線(xiàn)拓展升級(jí),有實(shí)用價(jià)值。