實戰(zhàn))
前陣子接了一個需求做一個非接觸式金屬接近檢測要求隔著一層塑料外殼判斷有沒有金屬物體靠近最好還能順帶做個簡單的距離趨勢判斷。我的第一反應(yīng)是用專用電感數(shù)字轉(zhuǎn)換器芯片但從選型、采購到調(diào)參折騰了兩輪問題不斷。后來我拿起手邊一片 PSoC 4200 評估板花了一個下午把 Inductive Sensing 的原理驗證跑通了再往后整個方案都遷移到了 PSoC MCU 上。借著這篇博客我把從原理到實戰(zhàn)的完整過程整理出來如果你也在做金屬檢測、蓋子開合判斷、液位檢測或旋鈕位置識別而且不想在 BOM 里多塞一顆專用芯片這篇內(nèi)容應(yīng)該能幫你節(jié)省大量調(diào)試時間。做電感感應(yīng)的核心一句話讓 MCU 自己產(chǎn)生一個激勵信號驅(qū)動一個 LC 回路然后測量金屬靠近時這個回路品質(zhì)因數(shù)Q 值的變化。PSoC 4、PSoC 6 內(nèi)部自帶可編程模擬前端有比較器、DAC、SAR ADC、TCPWM 這些資源關(guān)鍵是這些模擬模塊可以通過片上布線任意互連不需要外部運放、比較器、整形電路。這顛覆了我過去對單片機做模擬測量的認知——整體思路從我要在 PCB 上加一堆模擬電路變成了我只需要畫一個 PCB 線圈加一顆電容剩下全在片內(nèi)完成。1. 一開始我真沒打算用 MCU 做電感感應(yīng)1.1 為什么 PSoC 被低估了我最早接觸到電感感應(yīng)是在搜索金屬檢測方案的時候。主流搜索結(jié)果會引導(dǎo)你去用專用的電感數(shù)字轉(zhuǎn)換器方案比如 LDC1000、LDC1614 這類芯片它們確實把電感測量做到了很高的精度。但這類芯片有幾個現(xiàn)實問題成本不低、交期不太穩(wěn)定、寄存器配置偏復(fù)雜而且一旦想改變檢測距離范圍或掃描多個通道硬件上往往要跟著調(diào)整。PSoC 被低估是因為大多數(shù)人把它當(dāng)作一個普通 MCU 在評估。單看 CPU 性能PSoC 4 的 Cortex-M0 確實平平無奇但它的差異化在于內(nèi)部可重構(gòu)的模擬資源。PSoC 4 里集成了比較器、可編程增益放大器、跨阻放大器 TIA、電流型 DACIDAC、電壓型 DACVDAC、SAR ADC還有 UDB 數(shù)字可編程邏輯和 TCPWM 模塊。這些資源之間不是固定連接的而是像面包板一樣可以在片內(nèi)重新布線。這給了電感感應(yīng)一個天然的硬件土壤我不需要為了把 LC 諧振信號整形成方波而專門加一個外部比較器也不需要為了產(chǎn)生激勵脈沖而額外設(shè)計振蕩電路。PSoC 內(nèi)部把這些路徑全打通了。在 TopDesign 圖形化編輯器里拖一個比較器組件、拖一個 TCPWM 計數(shù)器組件、用一根線連接起來硬件行為就完成了剩下的只是寫測量算法。這種開發(fā)模式對做模擬前端出身的工程師來說效率完全不同。1.2 和專用電感數(shù)字轉(zhuǎn)換器方案比差在哪我不是說專用方案一無是處。LDC 系列芯片內(nèi)部有完整的激勵源、諧振電路、數(shù)字處理鏈精度和線性度確實強測微米級位移、做高分辨率旋轉(zhuǎn)編碼器這類場景用專用芯片是正道。但如果你只需要檢測金屬靠近沒靠近判斷蓋子開沒開水位到了哪個檔位用 LDC 就屬于高射炮打蚊子。我自己做了個對比三個方案放在一起看就很直觀維度專用電感數(shù)字轉(zhuǎn)換器通用 MCU 外部模擬電路PSoC MCU外部電路復(fù)雜度低線圈芯片高運放/比較器/整形很低線圈電阻電容靈活性低靠寄存器配置高但調(diào)試鏈路長高片上可重布線BOM 成本中高低但料號多低一顆芯片搞定多通道擴展部分型號支持成本高每路都要加模擬電路多路共用片內(nèi)資源學(xué)習(xí)成本中等高中等但收益大從表格能看出來PSoC 是靈活性和外部復(fù)雜度之間的平衡點。它解決了我最痛的幾個問題物料少、不用為每個檢測點重復(fù)設(shè)計模擬前端、代碼里可以隨時調(diào)整測量策略。對于消費電子、汽車內(nèi)飾、工業(yè)監(jiān)測這類場景這個性價比優(yōu)勢非常明顯。當(dāng)然PSoC 的學(xué)習(xí)曲線是存在的你至少需要花一點時間理解片上布線和組件配置但一旦上了手后面做任何模擬信號檢測相關(guān)的需求都會順暢很多。2. 渦流、Q 值和振鈴這三個詞才是整件事的根基2.1 金屬目標到底改變了什么想要把 PSoC 用明白物理層面必須搞懂。電感感應(yīng)的物理基礎(chǔ)是電磁感應(yīng)中的渦流效應(yīng)當(dāng) PCB 線圈上通入交變電流時線圈周圍會產(chǎn)生交變磁場當(dāng)一塊金屬導(dǎo)體靠近這個磁場時金屬表面會感應(yīng)出渦流。渦流的方向永遠和原磁場變化方向?qū)顾运a(chǎn)生的磁場會抵消一部分原磁場。這個對抗最后體現(xiàn)在兩個物理量上等效電感 L 變化。渦流反磁場讓線圈的等效磁通量減小等效電感會下降。這也是電感數(shù)字轉(zhuǎn)換器直接測量 L 的理論依據(jù)。等效串聯(lián)電阻 R 增加。渦流在金屬的有限電阻上流動會以熱量的形式消耗能量這部分能量損耗反映到線圈側(cè)就是等效電阻升高。在諧振回路里這兩個變化最直接的體現(xiàn)就是品質(zhì)因數(shù) Q 值變化。Q 的經(jīng)典定義是Q ωL / R其中 ω 是諧振角頻率。金屬靠近時L 變小、R 變大兩個因素同時作用Q 值快速下降。所以電感感應(yīng)的本質(zhì)測量對象歸根結(jié)底是 Q 值的變化而不是單純的電感量變化。我之前和很多人一樣老覺得測電感變化才是正路后來發(fā)現(xiàn)測 Q 值變化的抗干擾能力更好。因為 Q 值反映的是損耗這個宏觀物理量它受目標材質(zhì)、距離、面積的影響非常規(guī)律而直接測電感容易受到線圈機械形變、周邊金屬靜態(tài)分布的影響。這個認知讓我后來的方案設(shè)計少走了很多彎路。2.2 為什么振鈴衰減比頻率偏移更容易測知道了測 Q 值下一個問題是怎么測。常見思路是測諧振頻率偏移金屬靠近時電感變化確實會引起 LC 諧振頻率偏移。但實測下來L 的變化率往往只有百分之幾甚至千分之幾換算成頻率偏移也就幾 kHz 到幾十 kHz很容易被溫漂和噪聲淹沒需要高分辨率計數(shù)器才能測準。所以我更推薦另一個思路振鈴衰減。給 LC 回路一個短暫的脈沖激勵然后撤掉激勵LC 回路會以自己的諧振頻率做自由衰減振蕩這就是振鈴Ring-Down。衰減的速度正好由 Q 值決定。Q 值高振鈴持續(xù)久Q 值低振鈴很快就停。從公式看振鈴電壓包絡(luò)按e^(-ωt / 2Q)衰減Q 值降低直接導(dǎo)致衰減指數(shù)增大。這種變化是幾何級的比頻率偏移靈敏得多——同樣是金屬靠近 2mm頻率可能只偏了 1%振鈴持續(xù)周期數(shù)可能掉了 40%。而且振鈴是時域現(xiàn)象用 MCU 里的比較器和計數(shù)器就能測不需要高精度頻率計。打個比方頻率法就像測一個人咳嗽聲的音調(diào)變化振鈴法就像測這個咳嗽聲能響多久。金屬靠近時咳嗽聲的音調(diào)變化很小但這個人被捂住嘴之后咳嗽立刻變短這個現(xiàn)象明顯得多。實際測量中振鈴衰減的時間尺度、計數(shù)周期數(shù)都和 MCU 的定時器資源完美匹配這是它能成為我首選方案的根本原因。3. 硬件簡單到只多了一顆電容3.1 從 PSoC 引腳到線圈的最小連接PSoC 做電感感應(yīng)的最小硬件就是線圈、電容、限流電阻三件套外加 PSoC 的兩個引腳。我畫的連接方式是這樣線圈和并聯(lián)電容組成 LC 諧振回路一端接到 PSoC 的某個引腳這個引腳既做激勵輸出也做回波輸入另一端接地在引腳和 LC 節(jié)點之間串一顆 1kΩ 到 4.7kΩ 的電阻限制振鈴電壓擺幅同時給比較器輸入提供過流保護比較器正輸入端接到同一個 LC 節(jié)點負輸入端接一個由 VDAC 或內(nèi)部基準設(shè)定的比較閾值。實際工作時序分兩步。第一步引腳配置為推挽輸出主動向 LC 回路輸出一個寬度等于諧振半周期的脈沖給回路注入能量第二步引腳立刻切換為高阻輸入LC 回路進入自由振蕩狀態(tài)振鈴信號通過同一節(jié)點進入比較器。這種單節(jié)點收發(fā)的做法外面看起來只是一根走線連著一個線圈和一個電容干凈利落。注意引腳雙向切換是 PSoC 的看家本領(lǐng)普通 MCU 的 GPIO 雖然也能切方向但內(nèi)部模擬路徑不一定能這樣低噪聲地復(fù)用。PSoC 的 HSIOM 機制支持在運行中快速切換 GPIO 的外設(shè)連接和方向這是方案成立的關(guān)鍵之一。3.2 PSoC 內(nèi)部哪些模擬資源在干活別小看這顆芯片內(nèi)部協(xié)同工作的資源不少。我來拆解一下它們各自扮演的角色比較器是核心。它把 LC 節(jié)點上衰減的正弦波整形為方波這樣才能送入數(shù)字計數(shù)器。比較器閾值一般設(shè)在幾百毫伏太低容易把噪聲也整形進去太高會損失振鈴計數(shù)末端的信息。TCPWM 計數(shù)器負責(zé)數(shù)脈沖。比較器輸出的方波送到 TCPWM 的輸入在固定測量窗口內(nèi)統(tǒng)計翻轉(zhuǎn)次數(shù)。窗口結(jié)束后通過中斷讀取計數(shù)值這個數(shù)就是 Q 值的時域化身。PWM/TCPWM用來產(chǎn)生激勵脈沖。我通常配置一個 PWM 輸出讓它單次輸出一個寬度可調(diào)的脈沖寬度對應(yīng)諧振半周期。VDAC 或內(nèi)部基準給比較器提供閾值電壓。用 VDAC 的好處是閾值可以軟件動態(tài)調(diào)整校準更方便。這些資源在 PSoC Creator 的 TopDesign 里就是幾個組件圖標用連線連起來就完成了硬件設(shè)計。我第一次用它時最大的震撼是以前要用 PCB 上幾十個元器件實現(xiàn)的模擬信號鏈現(xiàn)在變成了畫布上幾條線和幾個方框。雖然 PSoC Creator 的開發(fā)模式初看會覺得陌生但它本質(zhì)上和畫原理圖是同一套思維方式。4. 三種測量手段我最后只留了兩種4.1 脈沖激勵加振鈴計數(shù)最穩(wěn)我最終產(chǎn)品上采用的是脈沖激勵 振鈴計數(shù)。整個測量流程分成四個階段輸出一個寬度等于諧振半周期的激勵脈沖給 LC 回路注入能量激勵結(jié)束后等待一小段固定延時避開脈沖串?dāng)_帶來的錯誤計數(shù)打開計數(shù)窗口統(tǒng)計比較器輸出端方波的翻轉(zhuǎn)次數(shù)窗口結(jié)束讀取計數(shù)值歸一化得到檢測結(jié)果。這個方案的優(yōu)點是簡單可靠、動態(tài)范圍大、功耗很低。因為激勵只持續(xù)不到 1 微秒其余時間系統(tǒng)只是靜默計數(shù)整個測量周期通常在幾十微秒內(nèi)完成。PSoC 的 TCPWM 窗口模式天然支持這種在指定時間內(nèi)對外部信號計數(shù)我只需要把 PWM 的窗口信號接到 TCPWM 的 Gate 輸入上。我實測的一組典型數(shù)據(jù)供參考諧振頻率 1.1MHz 左右無金屬靠近時30 微秒窗口內(nèi)能數(shù)到 30 到 32 個完整周期金屬片貼近到 2mm 時計數(shù)會掉到 18 到 20 個貼到 1mm 時只剩 8 到 10 個。這個變化幅度非常明顯做閾值判斷幾乎是零壓力做粗略的距離趨勢判斷也有余量。調(diào)試這個方案時最有必要做的一件事是先用示波器看真實波形。把探針點在 LC 節(jié)點上觸發(fā)在激勵脈沖的下降沿你會看到一串衰減的正弦波。確認這個振鈴的形狀干凈、無雜波再去調(diào)比較器閾值和計數(shù)窗口會順利得多。4.2 持續(xù)振蕩加頻率測量適合低功耗模式另一個實踐過的是持續(xù)振蕩 頻率測量。思路是把 LC 回路接在比較器的正反饋路徑上配合偏置電阻構(gòu)成一個振蕩器LC 的頻率決定振蕩頻率然后通過 TCPWM 的捕獲模式測量振蕩周期或頻率。這個方法的好處是信號是連續(xù)存在的不需要每次重新激勵測量響應(yīng)速度極快而且在低功耗待機階段可以只讓比較器和計數(shù)器工作CPU 深度休眠。缺點也非常明顯持續(xù)振蕩會讓回路一直消耗能量而且振蕩器的穩(wěn)定性和 PSoC 內(nèi)部比較器的失調(diào)電壓、電源噪聲強相關(guān)實測頻率抖動比理論預(yù)期大。我最后沒有在量產(chǎn)方案里用它主要原因是因為它需要一個額外的三極管或運放來維持振蕩幅度這違背了我只加一個電容的初衷。但如果你做的是低功耗喚醒場景或者你需要的是連續(xù)高速的位置追蹤這個方向值得投入時間研究。PSoC 的優(yōu)勢在于同樣的片上比較器和捕獲通道可以配置成不同模式你不必重新畫 PCB 就可以在兩種方案之間切換對比。4.3 幅度包絡(luò)這條路我為什么放棄第三種方案是幅度包絡(luò)檢測用固定頻率信號持續(xù)激勵 LC 回路金屬靠近時 Q 值下降LC 節(jié)點上的電壓幅度下降然后用 ADC 采樣幅度變化。我在實驗室試過這個方案。PSoC 的 SAR ADC 采樣率最高能做到 1 Msps 左右對 1MHz 的諧振信號做包絡(luò)提取理論邊界非常緊張。你需要要么加外部二極管包絡(luò)檢波電路要么在片內(nèi)做高速采樣再配合數(shù)字濾波兩種路徑都讓方案失去片上自洽的優(yōu)勢。幅度包絡(luò)對電源噪聲很敏感供電稍微有點紋波結(jié)果就抖得厲害。所以我的結(jié)論是如果目標只是判斷金屬的有無和大致距離振鈴計數(shù)法是最優(yōu)解如果要做連續(xù)、高速、低功耗的檢測頻率法有潛力但工程代價大幅度包絡(luò)法對于 PSoC 這個平臺來說不是性價比高的路線我果斷放棄了。測量手段靈敏度動態(tài)范圍功耗額外硬件推薦指數(shù)振鈴計數(shù)高大極低無5/5頻率測量中中高需要振蕩維持電路2/5幅度包絡(luò)中小中需要包絡(luò)檢波1/55. 在 PSoC Creator 里把它跑起來5.1 工程骨架和組件拖拽我用的芯片型號是 PSoC 4200 系列CY8C4245 這類開發(fā)環(huán)境用 PSoC Creator雖然官方目前已經(jīng)逐步轉(zhuǎn)向 ModusToolbox但這種小工程的拓撲設(shè)計思路兩者是通用的。下面是我在 TopDesign 里搭的最小工程骨架一個Pin_Pulse組件配置為輸出模式推挽輸出連接 LC 節(jié)點一個Pin_Sense組件配置為高阻輸入也連接同一個 LC 節(jié)點如果引腳資源緊張也可以合并為一個引腳靠代碼切方向但我更喜歡兩個引腳分離行為更清晰一個Analog_Comparator組件正輸入接Pin_Sense負輸入接VDAC輸出的閾值電壓一個TCPWM_Counter組件配置為外部計數(shù)模式輸入接比較器輸出Gate 接一個測量窗口信號一個PWM_Window組件用于產(chǎn)生可編程寬度的測量窗口信號一個PWM_Exciter組件用于產(chǎn)生激勵脈沖輸出接Pin_Pulse。所有這些組件之間用畫布上的連線連起來不需要寫一行硬件描述代碼。這種圖形化連線的方式對習(xí)慣傳統(tǒng) MCU 開發(fā)的人一開始會覺得怪但 PSoC 的老用戶都清楚這正是它能自定義片上硬件的根本原因。每次連線都意味著內(nèi)部模擬信號鏈上的一條具體路徑被激活這是真實存在的不是仿真。5.2 核心代碼與中斷細節(jié)硬件骨架搭好后固件部分的核心邏輯其實非常短。我在main.c里只做了三件事初始化組件、產(chǎn)生激勵脈沖、在中斷里讀取計數(shù)值。關(guān)鍵代碼大致如下#include project.h volatile uint32_t ringCount 0; volatile uint8_t measureDone 0; CY_ISR(ISR_Counter_Handler) { ringCount Counter_Ring_ReadCapture(); // 讀取計數(shù)值 Counter_Ring_ClearFIFO(); measureDone 1; Window_Stop(); // 停止窗口 } int main(void) { CyGlobalIntEnable; Counter_Ring_Start(); Counter_Ring_SetInterruptMode(Counter_Ring_INTR_MASK_CC_MATCH); isr_Counter_StartEx(ISR_Counter_Handler); for (;;) { measureDone 0; Exciter_WriteCompare(1); // 產(chǎn)生一個寬度為半個諧振周期的脈沖 Exciter_Start(); CyDelayUs(1); Exciter_Stop(); Window_WritePeriod(WINDOW_PERIOD); // 啟動測量窗口 Window_Start(); while (!measureDone) { CySysPmSleep(); } // 此時 ringCount 就是本次測量的原始值 ProcessData(ringCount); CyDelayMs(5); // 控制采樣速率 } }這段代碼有幾個容易踩的細節(jié)。第一激勵脈沖的產(chǎn)生和窗口啟動之間要留出極短的死區(qū)通常是 1 到 2 微秒讓振鈴的初始大信號先過去否則計數(shù)初值會被脈沖本身的翻轉(zhuǎn)污染。第二TCPWM 的中斷要在捕獲完成而不是溢出時觸發(fā)因為窗口結(jié)束瞬間正是計數(shù)器捕獲值的準確時刻。第三讀取Capture之后必須ClearFIFO否則下一次 Capture 會被舊數(shù)據(jù)覆蓋出現(xiàn)間隔性跳變。5.3 調(diào)參順序先看到波形再談算法我把調(diào)試順序放到了單獨一節(jié)是因為很多人一上來就調(diào)算法參數(shù)結(jié)果做了半天發(fā)現(xiàn)波形本身就不干凈后面的功夫全白費。正確的順序是先不接任何組件直接用示波器看 LC 節(jié)點的脈沖響應(yīng)波形確認振鈴存在且頻率符合預(yù)期再把比較器閾值設(shè)成電源電壓的 15% 左右用示波器看比較器輸出確認方波邊沿干脆、沒有抖動最后才啟動 TCPWM 計數(shù)跑連續(xù)的測量循環(huán)觀察計數(shù)值的穩(wěn)定性如果計數(shù)值跳變超過 ±2 個計數(shù)返回第一步檢查波形質(zhì)量。按照這個順序我基本每次都能在半小時內(nèi)把金屬檢測跑通。如果跳過第一步直接看最終計數(shù)值你會在到底是閾值問題、窗口問題還是信號噪聲之間反復(fù)猜效率極低。6. 從原始計數(shù)到能用的傳感器6.1 濾波和歸一化原始計數(shù)值需要有后處理才能變成穩(wěn)定的檢測結(jié)果。最簡單的辦法是直接用一個滑動平均窗口我一般取 4 到 8 個樣本。但滑動平均有個問題如果現(xiàn)場有短暫的強干擾脈沖平均值會被拉偏導(dǎo)致一次誤觸發(fā)。我后來改用中值濾波對跳變毛刺的抑制效果明顯更好。具體做法是維護一個長度為 8 的環(huán)形緩沖區(qū)每次取中間兩個值的平均值作為濾波結(jié)果。代價只是多幾行代碼和幾個字節(jié)的 RAM換來的是現(xiàn)場穩(wěn)定性的巨大提升。濾波之后再做歸一化便于設(shè)置通用閾值。我的歸一化公式是double ratio (baseline - count) / (double)baseline;無金屬時count接近baselineratio接近 0金屬靠近時count下降ratio快速上升。這個歸一化值的優(yōu)點是排除了一部分由電源電壓、溫度引起的共模漂移因為基線和當(dāng)前值同時受這些因素影響。6.2 閾值的確定和遲滯閾值設(shè)定的目標是無觸發(fā)時穩(wěn)定、有觸發(fā)時快速響應(yīng)。我的經(jīng)驗做法是先連續(xù)采集 100 次無金屬狀態(tài)下的濾波值計算均值和標準差 σ然后設(shè)觸發(fā)閾值為mean - 3σ。3σ 意味著在無金屬狀態(tài)下超過 99.7% 的時間不會誤觸發(fā)。這里有一個容易忽略的點光有觸發(fā)閾值不夠還要加遲滯。也就是說觸發(fā)閾值設(shè)為 70恢復(fù)閾值就要設(shè)在 72 或更高。這樣當(dāng)目標金屬在臨界位置輕微抖動時輸出不會在檢測到和未檢測到之間反復(fù)橫跳。遲滯量一般取觸發(fā)閾值的 5% 到 10% 就足夠。if ((!metalDetected) (ratio triggerThreshold)) { metalDetected 1; } if ((metalDetected) (ratio releaseThreshold)) { metalDetected 0; }6.3 溫漂補償和自校準電感感應(yīng)對溫漂很敏感。線圈銅箔的電阻溫度系數(shù)大約是 3900 ppm/°C溫度升高會導(dǎo)致線圈等效電阻上升Q 值下降即使沒有金屬靠近計數(shù)值也會緩慢變小。如果不做補償夏天和冬天的基線差異可能直接把閾值淹沒。我做了兩層處理。第一層是依據(jù) PSoC 內(nèi)部溫度傳感器做線性補償上電時記錄溫度對應(yīng)的基線值之后每隔一段時間讀一次溫度用線性插值修正基線。第二層是軟件上電自校準系統(tǒng)開機后前 100ms 不檢測專門采集一組無金屬狀態(tài)下的數(shù)據(jù)作為基線。兩層加在一起實測在 -10°C 到 60°C 范圍內(nèi)基線的漂移被壓到了觸發(fā)閾值的 1/3 以下。提示如果溫度變化跨度很大或者對穩(wěn)定性要求極高可以考慮雙線圈差分方案。一個線圈做感應(yīng)另一個線圈放在金屬遠離的位置做參考差值輸出能同時抵消溫漂和電源波動。這是工業(yè)傳感器的常見做法付出的代價是 PCB 面積和一路通道的資源。7. PCB 線圈設(shè)計參數(shù)和幾個常見坑7.1 一圈銅箔怎么畫才不翻車線圈是整個系統(tǒng)里唯一的傳感器它的設(shè)計直接決定檢測距離和穩(wěn)定性。我畫 PCB 平面螺旋線圈的經(jīng)驗參數(shù)如下形狀方形或圓形平面螺旋均可方形布線方便圓形 Q 值略高圈數(shù)10 到 30 圈圈數(shù)越多電感量越大但寄生電容也會越大線寬/間距0.15mm 到 0.3mm6 到 12 mil過窄會增加電阻過寬會減小有效圈數(shù)外徑直接決定檢測距離經(jīng)驗值是可靠檢測距離大約為線圈外徑的 0.1 到 0.5 倍。例如外徑 20mm 的線圈穩(wěn)定檢測距離約 2mm 到 8mm目標電感量10μH 到 100μH配合諧振電容讓諧振頻率落在 200kHz 到 2MHz 之間諧振電容必須選 C0G/NP0 材質(zhì)溫度系數(shù)小電壓特性平穩(wěn)不能用 X5R/X7R。舉個例子我常用的一個線圈外徑 18mm內(nèi)徑 4mm線寬 0.2mm間距 0.2mm20 圈實測電感約 40μH配一顆 1nF 的 C0G 電容諧振頻率大約在 800kHz 附近。這個配置下5mm 直徑的鐵片從 8mm 外靠近到 1mm計數(shù)值變化幅度超過 60%非常好用。電感量可以先用公式估算L ≈ μ0 * N2 * A / l其中 A 是平均半徑包圍的面積l 是線圈軸向長度平面線圈這里用平均周長替代。但 PCB 線圈由于寄生電容和臨近鋪地的影響估算值只能做參考我最后都是用 LCR 表實測校準。7.2 我踩過的坑鋪地、螺絲、外殼金屬件這一節(jié)分享幾個實踐中真正讓我頭疼過的坑每一個都是血淚教訓(xùn)。第一個坑是線圈下方鋪地。我第一次畫板時習(xí)慣性把底層鋪了一大片地結(jié)果諧振頻率偏移超過 30%Q 值也大幅下降檢測距離從 6mm 縮水到 2mm。原因是鋪地銅箔會在交變磁場中感應(yīng)出渦流它本身就成了一個大號金屬目標把能量都吃掉了。正確的做法是線圈正下方所有層都避開鋪地和走線至少留出和線圈一樣大小的凈空區(qū)域。第二個坑是外殼上的金屬螺絲。產(chǎn)品裝配后一顆離線圈 15mm 遠的金屬螺絲就能讓基線計數(shù)值下降 10%。這個問題在實驗室單獨測板子時完全發(fā)現(xiàn)不了直到整機測試才發(fā)現(xiàn)檢測距離突然變短。解決辦法有兩個要么在結(jié)構(gòu)設(shè)計上讓金屬件遠離線圈 2 倍線圈外徑以上要么在軟件里提高基線學(xué)習(xí)次數(shù)把螺絲納入基線但這種做法會犧牲一部分檢測靈敏度。第三個坑是諧振電容的材質(zhì)。如果你用 X7R 電容做諧振溫度每升高 20°C電容量可能漂移 5%諧振頻率跟著跑基線的溫漂會大到你懷疑人生。C0G 電容雖然貴一點但溫漂只有 ±30 ppm/°C穩(wěn)定性完全不是一個檔次。我后來在項目中強制指定 C0G從根上消除了這個變量的影響。第四個坑是引腳走線太長。如果 PSoC 引腳到線圈之間走線過長、過細引入的寄生電感和電容會直接參與諧振導(dǎo)致你配的電容參數(shù)和實際行為對不上。我在一塊板上走線走了 15mm結(jié)果諧振頻率比計算值低了近 50%。盡量讓線圈靠近 MCU連接線短而粗。第五個坑是機械結(jié)構(gòu)松動。振鈴計數(shù)法對線圈到目標之間的距離非常敏感1mm 的裝配公差就會帶來幾十個計數(shù)的偏移。所以產(chǎn)品結(jié)構(gòu)的固定公差一定要控制好線圈本身最好用定位柱或卡扣固定不能靠膠水隨意粘貼。最后想分享一個心得上面這些坑沒有哪個是能在 FPGA 仿真或理論計算里提前看出來的全部要靠實際板子上的示波器波形和多次測量數(shù)據(jù)來暴露。所以如果你也在做一個電感感應(yīng)相關(guān)的新設(shè)計別急著優(yōu)化算法先把線圈畫好、噪聲控制住、波形調(diào)干凈整個方案就成功了一大半。這也是我經(jīng)歷了三輪改板之后最深刻的體會。