計(jì):從發(fā)射電路到A掃顯示的完整信號鏈解析)
簡介一份面向單片機(jī)與嵌入式方向畢業(yè)設(shè)計(jì)、課程設(shè)計(jì)的超聲波探傷儀完整項(xiàng)目資料。以51單片機(jī)為核心結(jié)合SRF04超聲波傳感器覆蓋透射式探傷原理、系統(tǒng)總體方案、主控與邏輯芯片選型以及發(fā)射/接收電路、信號調(diào)理和數(shù)據(jù)采集處理等硬件設(shè)計(jì)并配套軟件流程與回波數(shù)據(jù)處理說明。壓縮包共33個(gè)文件、約6.86MB核心內(nèi)容包括撰寫成稿的docx論文Keil的uvproj工程與c/a51源程序、hex燒錄文件還有workspace工程、lst列表及m51映射文件可方便查看代碼、重新編譯和下載驗(yàn)證另含mp4演示視頻能直觀了解運(yùn)行效果。文檔與工程相互對照既支撐畢業(yè)設(shè)計(jì)論文撰寫也為超聲波測距/探傷類應(yīng)用提供可復(fù)用的電路框架與程序模板。已有3107人學(xué)習(xí)下載適合需要完整案例參考或快速搭建同類系統(tǒng)的學(xué)習(xí)者。1. 整體思路與方案選型為什么這個(gè)題目值得做我接觸過不少電子類畢業(yè)設(shè)計(jì)和課程設(shè)計(jì)題目老實(shí)說真正能把一個(gè)系統(tǒng)做扎實(shí)的不多?!盎趩纹瑱C(jī)的超聲波探傷儀設(shè)計(jì)”是少數(shù)幾個(gè)讓我覺得做完以后能把“信號發(fā)射—回波接收—模擬調(diào)理—數(shù)字采集—算法處理—人機(jī)交互”整條鏈路跑通一遍的題目。它不是什么純理論推演也不像“智能小車”那樣偏應(yīng)用組裝而是真真切切在考驗(yàn)?zāi)銓δM電路、數(shù)字電路、傳感器原理和嵌入式編程的綜合把控能力。這個(gè)項(xiàng)目要解決的問題很直接用超聲波探頭向被測材料內(nèi)部發(fā)射高頻脈沖當(dāng)遇到內(nèi)部缺陷比如氣孔、裂紋、夾雜物時(shí)聲波會產(chǎn)生反射回波通過測量回波到達(dá)的時(shí)間和幅值就能反推出缺陷的位置和大致尺寸。核心輸出是一個(gè)“距離—幅值”曲線也就是A掃顯示。你能看到始波、缺陷波和底波的位置關(guān)系也能根據(jù)缺陷波的位置計(jì)算缺陷深度。從選型角度講我建議優(yōu)先考慮STM32系列單片機(jī)而不是51。原因也很實(shí)際探傷儀需要對回波信號做相對高頻的采樣和實(shí)時(shí)顯示51的時(shí)鐘頻率和片上資源做起來會比較吃力。STM32F103系列主頻72MHz內(nèi)置12位ADC、多路定時(shí)器、DMA價(jià)格現(xiàn)在已經(jīng)很便宜了用來搭這個(gè)系統(tǒng)非常順手。如果你手頭只有51也并非做不了但你要接受幾個(gè)妥協(xié)采樣率上不去、A掃波形刷新慢、無法進(jìn)行動態(tài)增益補(bǔ)償。說白了就是“能出波形但細(xì)節(jié)會丟”。還要回答一個(gè)關(guān)鍵問題為什么不用FPGAFPGA做高速采集確實(shí)有優(yōu)勢但開發(fā)復(fù)雜度、學(xué)習(xí)成本和布板難度對本科階段的同學(xué)來說偏高。而且探傷儀的核心難點(diǎn)并不全在“采集快”而在“模擬鏈路做得好不好、算法判讀準(zhǔn)不準(zhǔn)”。單片機(jī)的算力足夠完成回波包絡(luò)提取、聲速校準(zhǔn)和缺陷定位工程上這是非常成熟的路線。所以這個(gè)題目用單片機(jī)做不是“退而求其次”而是“選型合理”。2. 硬件系統(tǒng)的核心電路設(shè)計(jì)2.1 探頭與超聲換能器的基礎(chǔ)原理超聲波的產(chǎn)生和接收都依賴壓電效應(yīng)。探頭內(nèi)部的壓電晶片在高壓脈沖激勵(lì)下發(fā)生機(jī)械振動向被測材料輻射超聲波當(dāng)回波作用在晶片上時(shí)機(jī)械振動又轉(zhuǎn)化為電信號輸出。常規(guī)無損檢測用的直探頭工作頻率集中在1MHz到10MHz之間其中2.5MHz和5MHz最常用。頻率越高分辨率越好但穿透能力下降頻率越低穿透力強(qiáng)但對小缺陷不敏感。做課設(shè)/畢設(shè)時(shí)推薦用2.5MHz或5MHz直探頭配合標(biāo)準(zhǔn)試塊調(diào)校。這里我建議不要一上來就糾結(jié)探頭型號先搞清楚幾個(gè)基礎(chǔ)參數(shù)中心頻率、晶片尺寸、接口類型通常是BNC座。中心頻率決定了后面的帶通濾波器和采集方案晶片尺寸影響聲場覆蓋和近場區(qū)長度。工程上你只需要知道這次設(shè)計(jì)是以“脈沖反射法”為基本原理的系統(tǒng)的工作頻率會以探頭為中心來設(shè)計(jì)。2.2 發(fā)射電路用高壓窄脈沖激勵(lì)探頭超聲波探傷儀發(fā)射電路的設(shè)計(jì)目標(biāo)是在探頭兩端產(chǎn)生一個(gè)上升沿陡峭、寬度窄、電壓高的負(fù)脈沖。為什么要高壓因?yàn)閴弘娋枰銐虻募?lì)能量才能產(chǎn)生幅度可觀的超聲波電壓不夠回波信號就弱。典型做法是用電容儲能、MOS管或可控硅快速放電的方式產(chǎn)生一個(gè)-100V到-300V的負(fù)尖峰脈沖。我做這版設(shè)計(jì)時(shí)用了IRF540這類常見NMOS管做開關(guān)電路結(jié)構(gòu)可以簡化為高壓電源通過限流電阻給儲能電容充電單片機(jī)輸出一個(gè)TTL觸發(fā)脈沖驅(qū)動MOS管柵極MOS管導(dǎo)通瞬間電容儲存的能量被短接到探頭形成陡峭的放電脈沖。需要特別注意的是探頭不能長時(shí)間承受直流高壓所以觸發(fā)脈沖寬度要控制在微秒級一般1~2μs。更講究一點(diǎn)的做法是用脈沖變壓器耦合輸出既能抬高電壓又能隔離高壓側(cè)和低壓側(cè)保護(hù)單片機(jī)。發(fā)射這一級最容易被忽視的是“阻尼”。探頭的晶片在脈沖停止后不會立即停止振動會產(chǎn)生余振也就是“振鈴”。余振太長會直接把近表面回波淹沒掉形成很大的盲區(qū)。所以探頭上通常會并聯(lián)一個(gè)阻尼電阻把機(jī)械振動的衰減速度調(diào)快代價(jià)是靈敏度下降。這個(gè)阻尼電阻的阻值需要根據(jù)探頭特性試出來常見取值在幾十歐到幾百歐之間不能照抄別人的參數(shù)就完事。2.3 接收鏈路限幅、放大、濾波與包絡(luò)檢波接收鏈路決定你能否看到干凈的回波信號。發(fā)射脈沖有上百伏而回波信號往往只有幾毫伏動態(tài)范圍高達(dá)幾千倍。如果不做保護(hù)第一級放大器會被直接打壞。常規(guī)做法是在接收端并聯(lián)一對反向并聯(lián)的二極管比如1N4148或BAV99做限幅把發(fā)射脈沖泄漏過來的高電壓鉗制在±0.7V以內(nèi)同時(shí)保證正常的小信號能通過。限幅之后是放大器。回波信號太弱必須經(jīng)過前置放大和主放大兩級處理。前置放大用低噪聲運(yùn)放比如OP37、AD797這類增益20~40dB左右主放大的任務(wù)是根據(jù)回波深度動態(tài)補(bǔ)償衰減常見方法是使用AD603這種壓控增益放大器增益控制電壓由單片機(jī)的DAC或者數(shù)字電位器給出。這樣就能實(shí)現(xiàn)“時(shí)間增益補(bǔ)償”深處的回波信號更弱就讓它獲得更高的增益淺處的信號增益降低一些避免強(qiáng)回波飽和。放大之后必須做濾波。超聲波探傷最怕的是干擾尤其是發(fā)射脈沖瞬間通過地線、電源線耦合到接收端的噪聲。帶通濾波器的中心頻率要跟隨探頭頻率。2.5MHz探頭就做2.5MHz左右的帶通把工頻干擾、高頻開關(guān)噪聲都濾掉一部分。濾波后的信號還是高頻正弦波單片機(jī)直接采樣比較吃力所以在ADC之前還要做包絡(luò)檢波——用一個(gè)二極管檢波電路加RC低通把高頻回波包絡(luò)“取”出來變成慢變的脈沖波形。這樣STM32的內(nèi)置ADC即便采樣率只有幾MSPS也能清楚地捕捉到回波包絡(luò)的形狀和到達(dá)時(shí)間。提示包絡(luò)檢波會丟失載波的相位信息但對常規(guī)A掃探傷來說完全夠用。如果你想做更高級的相位分析那就得換用高速ADC加等效時(shí)間采樣的方案復(fù)雜度會上升一個(gè)量級。3. 軟件架構(gòu)與信號處理算法實(shí)現(xiàn)3.1 主要流程發(fā)射觸發(fā)、回波采集與數(shù)據(jù)判讀軟件側(cè)的核心流程可以分成四步啟動一次發(fā)射、采集回波數(shù)據(jù)、識別回波位置、計(jì)算并顯示結(jié)果。單片機(jī)先通過定時(shí)器產(chǎn)生一個(gè)觸發(fā)脈沖去驅(qū)動發(fā)射電路同一時(shí)刻啟動ADC開始連續(xù)采樣。因?yàn)槌暡ㄔ诮饘俨牧侠飩鞑ニ俣却蠹s是每毫米5.9μs左右一次100mm量程的測量從發(fā)射到底波回來大概只需要不到40μs這個(gè)時(shí)間窗口在STM32里用定時(shí)器加中斷完全能覆蓋。采樣窗口的長短決定最大探測深度。比如你要測200mm厚的鋼件往返聲程是400mm按聲速5900m/s換算回波最晚到達(dá)時(shí)間約68μs。ADC采樣率如果設(shè)定在5MSPS那么一個(gè)掃描周期至少要采集340個(gè)點(diǎn)加上發(fā)射前的起始時(shí)間取512個(gè)點(diǎn)作為一幀數(shù)據(jù)就足夠了。要是采樣率提高到10MSPS點(diǎn)數(shù)翻倍分辨率更高。識別回波位置不能簡單地拿固定閾值切割因?yàn)樵肼暦禃诓煌鲆嬖O(shè)置下變化。我采用的辦法是先用一個(gè)較高閾值找到超出噪聲底限的回波峰然后以這個(gè)峰為中心向兩側(cè)搜索局部極小值確定回波的起止范圍再取包絡(luò)峰值對應(yīng)的時(shí)間點(diǎn)作為該回波的到達(dá)時(shí)刻。這種“閾值粗判峰值細(xì)定位”的做法比單純過閾值判斷穩(wěn)定得多尤其在有底面回波和雜波同時(shí)存在的情況下。// 回波峰值定位核心邏輯STM32平臺C語言描述 #define BUF_LEN 512 uint16_t echo_buf[BUF_LEN]; // ADC采樣緩沖區(qū) uint16_t threshold 120; // 噪聲底限閾值 int find_echo_peak(uint16_t *buf, uint16_t len, uint16_t thr) { int i, peak_index -1; uint16_t max_val 0; for (i 10; i len; i) { // 跳過起始發(fā)射盲區(qū)和初始噪聲區(qū) if (buf[i] thr buf[i] max_val) { max_val buf[i]; peak_index i; } } return peak_index; // 返回采樣點(diǎn)索引-1表示未找到 }代碼里我從索引10開始搜索不是從0開始是因?yàn)榘l(fā)射瞬間的脈沖拖尾和放大器飽和需要一個(gè)恢復(fù)時(shí)間這段區(qū)域內(nèi)的數(shù)據(jù)不可信也就是所謂的“盲區(qū)”。實(shí)際代碼里還要把這個(gè)索引轉(zhuǎn)換為時(shí)間再換算成深度。比如采樣率是5MSPS每個(gè)采樣點(diǎn)間隔0.2μs回波峰出現(xiàn)在第150個(gè)采樣點(diǎn)那么往返時(shí)間就是30μs鋼中聲速取5900m/s深度就是5900×30×10??/2≈88.5mm。3.2 聲速校準(zhǔn)與溫度補(bǔ)償?shù)墓こ套龇曀偈翘絺麅x計(jì)算深度時(shí)最關(guān)鍵的常數(shù)?,F(xiàn)實(shí)中鋼的縱波聲速在5900m/s左右但不同材質(zhì)、不同溫度下會有偏差。如果程序里寫死一個(gè)值測量誤差可能達(dá)到百分之幾。工程上正確的做法是用標(biāo)準(zhǔn)試塊做聲速校準(zhǔn)把探頭放在已知厚度比如25mm的標(biāo)準(zhǔn)試塊上測出底面回波的時(shí)間反算出聲速然后把校準(zhǔn)后的聲速存到Flash里作為后續(xù)計(jì)算依據(jù)。在校準(zhǔn)過程中還要注意探頭延遲的問題。超聲波在探頭內(nèi)部的保護(hù)膜、耦合層中傳播也需要時(shí)間這部分時(shí)間被包含在回波時(shí)差里會帶來一個(gè)固定的“零偏”。校準(zhǔn)的方法是測兩個(gè)不同厚度的回波時(shí)間差用“厚度差/時(shí)間差”算聲速這樣探頭延遲會被自動抵消。溫度補(bǔ)償屬于進(jìn)階內(nèi)容。實(shí)際焊縫現(xiàn)場測量時(shí)工件溫度可能從室溫到幾十度。金屬中聲速隨溫度升高會略微下降鋼材大致每升高100°C聲速降低約1%左右。如果你設(shè)計(jì)的是室內(nèi)教學(xué)演示裝置這個(gè)可以不專門處理但如果你想往工程應(yīng)用靠攏建議用DS18B20溫度傳感器測一下工件表面溫度軟件里做一個(gè)線性修正v_real v_ref * (1 - k * (T - T_ref))k值可以從資料里查也可以自己標(biāo)定。我做過一個(gè)簡單實(shí)驗(yàn)25mm試塊從室溫加熱到60°C聲速變化對應(yīng)的厚度讀數(shù)偏差大概有0.3mm——單看不大但如果量程放大到200mm誤差就會到2mm級別這種誤差在缺陷定位時(shí)已經(jīng)不能忽視了。3.3 A掃波形顯示與交互設(shè)計(jì)要點(diǎn)探傷儀的人機(jī)界面建議用一塊TFT LCD屏或者OLED屏實(shí)現(xiàn)A掃顯示橫軸是距離縱軸是回波幅值。STM32F103驅(qū)動TFT沒有壓力可以直接用FSMC接口刷屏刷新率能到30幀左右。顯示上我建議同時(shí)畫三條參考線始波位置線、缺陷波位置線和底波位置線這樣測試者一眼就能看出缺陷在哪個(gè)深度區(qū)間。按鍵交互不要搞太復(fù)雜三個(gè)物理按鍵就可以覆蓋常用功能一個(gè)“菜單/確認(rèn)”一個(gè)“上翻/增加”一個(gè)“下翻/減少”。菜單項(xiàng)包括聲速校準(zhǔn)、量程切換、增益手動調(diào)節(jié)、自動增益AGC開關(guān)。至于觸屏除非你用的是帶觸摸的屏幕否則PCB上就別再額外加觸控芯片了徒增軟件調(diào)試量。4. 實(shí)測調(diào)試與常見問題排查技巧4.1 盲區(qū)問題近表面缺陷看不到怎么辦實(shí)測中最容易遇到的現(xiàn)象是探頭放在標(biāo)準(zhǔn)試塊上底面回波很清楚但試塊上靠近表面的小缺陷卻完全看不到。原因是發(fā)射電路激發(fā)探頭后探頭本身會有一段持續(xù)振鈴?fù)瑫r(shí)接收放大器從飽和狀態(tài)恢復(fù)也需要時(shí)間在這段時(shí)間內(nèi)的回波會淹沒在噪聲和拖尾里這就是盲區(qū)。改善盲區(qū)的方法有幾個(gè)方向。第一加大阻尼電阻讓探頭的余振快速衰減但靈敏度會下降第二把發(fā)射脈沖寬度調(diào)到探頭標(biāo)稱值附近不要過寬激勵(lì)越寬振鈴越重第三接收放大器加恢復(fù)時(shí)間更短的自恢復(fù)電路比如用模擬開關(guān)在發(fā)射瞬間短接運(yùn)放輸出或者利用單片機(jī)的延時(shí)控制在發(fā)射后大約10μs內(nèi)不進(jìn)行有效信號判讀。對于教學(xué)演示裝置盲區(qū)在5~10mm之內(nèi)都可以接受畢竟近表面缺陷本來也可以用表面波探頭或爬波法去檢查不是單探頭A掃必須解決的問題。4.2 回波看不見發(fā)出去收不回來更多時(shí)候問題不是“看不清”而是“根本看不到波”。排查思路一定要按信號鏈路的順序走先用示波器看發(fā)射電路輸出端有沒有高壓脈沖再用示波器直接夾在探頭兩端看有沒有阻尼振鈴接著把示波器探到前級放大器輸出手動敲擊工件表面或移動探頭看回波信號有沒有隨著探頭下的耦合狀態(tài)發(fā)生變化。如果發(fā)射正常但接收一直平直問題基本出在耦合上。干接觸探頭和工件之間有一層空氣膜時(shí)超聲波幾乎全部反射根本進(jìn)不了材料。必須在探頭底部涂一層耦合劑——機(jī)油、水玻璃都可以沒耦合劑的話探頭拿起來再放下去波形都會差很多。我第一次調(diào)這套系統(tǒng)時(shí)花了一晚上以為是電路問題結(jié)果就是忘了涂耦合劑探頭懸空磨了半天自然什么也收不到。這個(gè)坑幾乎每個(gè)做過探傷實(shí)驗(yàn)的人都踩過。信號鏈路上還有一個(gè)容易被忽略的點(diǎn)限幅二極管如果選型不對結(jié)電容太大會把微弱的回波信號旁路掉造成靈敏度嚴(yán)重下降。高頻小信號回路里二極管的結(jié)電容不能太大BAV99、1N4148這類速度快、電容小的管子比較合適。4.3 噪聲干擾看起來是回波其實(shí)是假的A掃波形上經(jīng)常出現(xiàn)一些“似波非波”的尖峰。有一類是開關(guān)電源的開關(guān)噪聲在發(fā)射脈沖結(jié)束后立刻出現(xiàn)規(guī)律性很強(qiáng)另一類是電源工頻干擾波形隨著市電相位慢慢飄。解決思路也分兩步硬件上加強(qiáng)電源去耦模擬部分和數(shù)字部分要單獨(dú)鋪地ADC參考電壓用TL431或基準(zhǔn)芯片單獨(dú)供電軟件上可以做簡單的時(shí)間窗口限制只在發(fā)射后10μs到量程末端之間搜索有效回波把發(fā)射瞬間的干擾直接屏蔽掉。還有一個(gè)高級一點(diǎn)的坑如果探頭線太長或屏蔽層接地不良接收到的“回波”實(shí)際上是發(fā)射脈沖通過空間輻射或地環(huán)流耦合進(jìn)來的串?dāng)_表現(xiàn)為一個(gè)固定位置的假峰。這時(shí)候換一根質(zhì)量好一點(diǎn)的屏蔽線或者把探頭線繞成短螺旋往往比改電路還管用。我把實(shí)測中遇到的高頻問題整理成了一張速查表方便你對照排查現(xiàn)象優(yōu)先排查點(diǎn)常見原因解決方案完全沒有波形發(fā)射電路、耦合劑、限幅管探頭未耦合、儲能電容容量不足、限幅管擊穿檢查發(fā)射驅(qū)動、涂耦合劑、更換限幅管始波寬且長時(shí)間不落阻尼電阻、發(fā)射脈沖寬度阻尼過小、激勵(lì)過寬降低脈沖寬度、并聯(lián)阻尼電阻底波幅值忽大忽小探頭耦合狀態(tài)耦合劑不均勻、探頭壓緊力不穩(wěn)保持穩(wěn)定壓力、均勻涂抹耦合劑有規(guī)律尖峰干擾電源、接地?cái)?shù)字地與模擬地串?dāng)_單點(diǎn)接地、增加電源濾波顯示距離與實(shí)際偏差聲速參數(shù)、探頭延遲聲速未校準(zhǔn)、探頭延遲未扣除標(biāo)準(zhǔn)試塊校準(zhǔn)聲速、做零偏補(bǔ)償深處回波明顯偏弱增益曲線、發(fā)射功率材料衰減未補(bǔ)償加TCG時(shí)間增益補(bǔ)償功能4.4 安全操作與保護(hù)措施最后必須提醒的是發(fā)射電路里有上百伏的電壓調(diào)試時(shí)一定要養(yǎng)成“先放電再摸板子”的習(xí)慣。儲能電容的放電電阻要并聯(lián)到高壓電容兩端斷電后幾秒鐘內(nèi)電壓會自然泄放但你仍然需要養(yǎng)成用萬用表確認(rèn)電壓為零再動手的習(xí)慣。另外探頭的激勵(lì)電壓不要超過探頭標(biāo)稱值太多否則晶片可能直接碎裂探頭屬于易損件炸一個(gè)幾百塊就沒了。在電源輸入端加一個(gè)自恢復(fù)保險(xiǎn)絲在MOS管柵極加一個(gè)10kΩ下拉電阻防止上電瞬間誤觸發(fā)這些都是很便宜但能救命的細(xì)節(jié)。調(diào)試時(shí)盡量用隔離電源給高壓級供電避免手碰到高壓端時(shí)形成對地回路。5. 迭代思路從能出波到能判傷如果時(shí)間允許我強(qiáng)烈建議你在基礎(chǔ)功能跑通之后再做一個(gè)迭代加TCG時(shí)間增益補(bǔ)償。材料對超聲波的衰減隨深度指數(shù)增加所以同樣的缺陷在淺位置回波可能已經(jīng)飽和在深處又幾乎看不見。實(shí)現(xiàn)TCG的方法就是用AD603做的壓控放大器單片機(jī)根據(jù)當(dāng)前回波時(shí)間查表給出不同的增益控制電壓淺處低增益深處高增益。增益曲線可以通過實(shí)測不同厚度試塊的底波幅度來標(biāo)定。做完這一步你的儀器就不再是“能出波形”的演示板而是具備基本探傷能力的儀器了。另一個(gè)值得做的小功能是回波幅值自動增益控制AGC。每次掃描時(shí)軟件統(tǒng)計(jì)當(dāng)前幀的最大峰值如果峰值超過量程的90%就自動降低主放大增益如果低于30%就自動升高增益。這樣用戶不需要手動調(diào)增益儀器看起來更“智能”演示效果也更好。整套系統(tǒng)我從電路設(shè)計(jì)到軟件調(diào)通用了大概兩周時(shí)間中間大部分時(shí)間花在信號鏈路的噪聲排查上。做這一類題目最大的感受是探傷儀難的不是某一個(gè)單元而是信號鏈路里每一級都在互相影響——發(fā)射波形影響盲區(qū)限幅管影響靈敏度增益補(bǔ)償影響深度判讀接地好壞影響整個(gè)波形質(zhì)量。你只有把每一級拆開去量、去看、去調(diào)才能真正理解“信號鏈”這三個(gè)字的含義。最后再分享一個(gè)小技巧調(diào)試接收鏈路時(shí)別急著接探頭先用信號發(fā)生器在探頭接口位置注入一個(gè)微弱的模擬回波脈沖確認(rèn)放大、濾波、檢波、ADC整條鏈路正常再接真實(shí)探頭測工件。這樣出了問題很容易定位是你以后做任何傳感器類項(xiàng)目都能用的通用方法。本文還有配套的精品資源點(diǎn)擊獲取