戰(zhàn):信號(hào)鏈路、電源與調(diào)試全解析)
每年智能車競賽結(jié)束后總有隊(duì)伍把代碼往GitHub上一放就算“開源”了但電路部分要么只有一張最終PCB截圖要么就是“原理圖在QQ群文件里”這種永遠(yuǎn)不會(huì)真正公開的東西。Soberup戰(zhàn)隊(duì)在第二十一屆智能車競賽瘋狂電路組賽后整理的這份開源目錄算是我見過的少數(shù)真正能復(fù)現(xiàn)的智能車電路開源之一——不光給了原理圖和PCB連信號(hào)鏈路推導(dǎo)、電源樹設(shè)計(jì)、調(diào)試踩坑記錄都?xì)w檔了。這篇文章就圍繞這份開源目錄把里面最核心的電路設(shè)計(jì)思路、關(guān)鍵參數(shù)計(jì)算、以及那些不跑賽道根本發(fā)現(xiàn)不了的坑一次講清楚。如果你正在備賽、或者打算明年接手電路組這篇內(nèi)容應(yīng)該能幫你少走至少三個(gè)月的彎路。1. 開源目錄里到底交付了什么從倉庫結(jié)構(gòu)到六塊核心板卡先別急著看電路圖。打開Soberup的開源倉庫你第一眼看到的是文檔在先、硬件次之、軟件墊后的目錄結(jié)構(gòu)這個(gè)順序本身就是他們踩過坑之后總結(jié)出來的。1.1 倉庫頂層結(jié)構(gòu)設(shè)計(jì)與各板卡職責(zé)劃分這套開源目錄的頂層結(jié)構(gòu)大概是這樣的Soberup-Circuit/ ├── docs/ │ ├── 01-系統(tǒng)總體設(shè)計(jì).md │ ├── 02-電源樹與可靠性設(shè)計(jì).md │ ├── 03-信號(hào)鏈路設(shè)計(jì)說明.md │ └── 04-調(diào)試記錄與Bug復(fù)盤.md ├── hardware/ │ ├── power_board/ 電源板 │ ├── sensor_board/ 電磁傳感器板 │ ├── main_board/ 主控板 │ ├── motor_board/ 驅(qū)動(dòng)板 │ └── debug_board/ 調(diào)試板 ├── software/ │ ├── firmware/ 主控固件 │ └── tools/ 調(diào)試上位機(jī)腳本 └── README.md每塊板卡的定位都非常干凈利落。電源板是整車的“心臟”從電池輸入到多路DCDC再到防倒灌和EMI濾波全在這塊板上傳感器板負(fù)責(zé)前端的咪頭差分放大、帶通濾波和正交信號(hào)生成主控板承載主控芯片、復(fù)位電路、看門狗以及對(duì)外接口驅(qū)動(dòng)板專門處理電機(jī)驅(qū)動(dòng)、電流采樣和編碼器接口調(diào)試板集成按鍵、LED、OLED和串口方便現(xiàn)場(chǎng)調(diào)參。我個(gè)人特別喜歡他們把docs放在最前面的做法。很多隊(duì)伍開源就是丟一堆工程文件別人根本不知道從哪看起。Soberup在README里寫了一段話這套資料按“先讀文檔、再仿電路、最后改代碼”的順序使用任何一塊板卡改動(dòng)了記錄的調(diào)試文檔也要同步更新。這其實(shí)是研發(fā)流程規(guī)范問題跟電路本身同樣重要。1.2 為什么電路開源比代碼開源更稀缺很多參賽隊(duì)伍愿意分享代碼因?yàn)榇a本身就是一行一行寫出來的貼出來不心疼。但電路不一樣一套原理圖背后是幾十個(gè)版本的迭代、幾片燒掉的芯片、反復(fù)優(yōu)化的走線和布局。愿意把這些完全公開的隊(duì)伍確實(shí)不多。Soberup開源目錄里最值錢的部分其實(shí)不是最終的原理圖PDF而是docs/04-調(diào)試記錄與Bug復(fù)盤.md——里面記錄了每一塊板卡從第一版到最終版之間發(fā)生了什么。比如電源板第一版的DCDC反饋電阻布局不合理導(dǎo)致紋波偏大、傳感器板咪頭差分走線不等長導(dǎo)致共模干擾、主控板復(fù)位引腳被看門狗毛刺誤觸發(fā)等等。這些內(nèi)容普通教程里根本找不到只有在實(shí)際調(diào)車過程中才會(huì)碰到。2. 電磁信號(hào)鏈路的完整設(shè)計(jì)咪頭差分、帶通濾波與正交信號(hào)生成瘋狂電路組或者說電磁組的核心問題就是怎么把賽道上的電磁信號(hào)“干凈地”送進(jìn)單片機(jī)ADC。這聽起來簡單實(shí)際上信號(hào)鏈路上任何一個(gè)環(huán)節(jié)處理不好車都會(huì)“發(fā)瘋”——要么過彎識(shí)別不到信號(hào)要么直線誤判為彎道。2.1 咪頭差分放大電路的偏置與增益設(shè)計(jì)先說傳感器前端。賽道信號(hào)是20kHz左右的正弦電磁波接收端可以用工字電感也可以用咪頭。Soberup在21屆選擇了咪頭方案并且做了差分結(jié)構(gòu)這是有講究的。差分放大的核心優(yōu)勢(shì)就是抑制共模干擾。賽道上同時(shí)存在電機(jī)PWM輻射、電源紋波、日光燈干擾等大量共模噪聲如果用單端放大這些噪聲會(huì)直接疊加在信號(hào)上差分結(jié)構(gòu)下兩條輸入線上的共模噪聲經(jīng)過運(yùn)放相減后被抵消掉了剩下的是有用的差模信號(hào)。具體電路上他們選用了一顆低成本雙運(yùn)放做兩級(jí)放大。第一級(jí)是差分轉(zhuǎn)單端第二級(jí)是同相放大。整個(gè)電路的關(guān)鍵是給運(yùn)放提供合適的工作點(diǎn)和放大倍數(shù)。以常見的3.3V供電軌為例運(yùn)放同相端的虛擬地設(shè)置在1.65V——這樣輸出可以在0~3.3V范圍內(nèi)擺幅最大化不至于過早削頂。放大倍數(shù)的選擇取決于咪頭或電感輸出的原始信號(hào)幅度。實(shí)測(cè)中離賽道中心線越近感應(yīng)信號(hào)越大越遠(yuǎn)越小。以他們的車為例傳感器距離賽道導(dǎo)線垂直距離約10cm中心線上測(cè)到的原始信號(hào)峰值大約5~10mV而最小可識(shí)別的偏移信號(hào)可能只有幾百微伏。如果總增益設(shè)計(jì)為100倍那么中心線上輸出大約0.5~1V峰值邊緣輸出幾十毫伏單片機(jī)ADC讀起來動(dòng)態(tài)范圍比較合適。分別用10k和1k的電阻配置第一級(jí)增益11倍、第二級(jí)增益10倍兩級(jí)串聯(lián)后理論總增益110倍基本落在預(yù)期范圍內(nèi)。計(jì)算公式就是常見的同相放大器G 1 Rf/Rg。但這里有一個(gè)我在實(shí)際中反復(fù)強(qiáng)調(diào)的點(diǎn)放大倍數(shù)不是越大越好。增益過高時(shí)運(yùn)放輸出很快飽和而飽和后信號(hào)會(huì)變成“方波”——單片機(jī)拿到的是一個(gè)失真的信號(hào)反而丟失了距離信息。所以合適的AGC策略是先讓增益大概適配最大信號(hào)其余的靠軟件歸一化處理。2.2 帶通濾波與正交信號(hào)生成的實(shí)現(xiàn)細(xì)節(jié)信號(hào)經(jīng)過放大后還不能直接進(jìn)ADC必須經(jīng)過帶通濾波。20kHz是電磁組賽道的標(biāo)準(zhǔn)信號(hào)頻率帶通濾波的作用就是把其他頻率的干擾全部壓下去只留下20kHz附近的有用信號(hào)。Soberup在文檔里用了多反饋帶通濾波器MFB結(jié)構(gòu)中心頻率f0 20kHz品質(zhì)因數(shù)Q大概取1.5。Q值決定了通帶寬度Q太大帶寬太窄信號(hào)頻率稍有偏差衰減就很大Q太小濾波效果不明顯。Q1.5時(shí)帶寬約13kHz既能抑制掉電機(jī)PWM的低頻干擾又不會(huì)對(duì)20kHz信號(hào)造成太大衰減。MFB帶通濾波器的元件計(jì)算可以直接套公式。選C1nF然后算R1、R2、R3R1 Q / (ω0 * C * Av)ω0 2πf0 ≈ 125664 rad/sR2 Q / (ω0 * C * (2Q2 - Av))注意分子分母關(guān)系要保證Av 2Q2R3 2Q / (ω0 * C)按照Av1、Q1.5計(jì)算R1約12kR2約2.4kR3約23.8k實(shí)際用標(biāo)稱值近似替代。這個(gè)計(jì)算過程在開源文檔里寫得很完整讀起來像是一份標(biāo)準(zhǔn)的濾波器設(shè)計(jì)教程。正交信號(hào)生成是電磁組進(jìn)階玩法。單純用一個(gè)傳感器只能知道信號(hào)強(qiáng)弱不知道車在賽道中心線左邊還是右邊。Soberup的做法是使用兩路傳感器一路作為基準(zhǔn)信號(hào)另一路經(jīng)過90°移相利用相位差判斷車體的橫向偏移方向。移相網(wǎng)絡(luò)用的是全通濾波器結(jié)構(gòu)參數(shù)針對(duì)20kHz精確設(shè)計(jì)。正交信號(hào)進(jìn)入單片機(jī)后用定時(shí)器捕獲相位差或者用硬件比較器做過零檢測(cè)從而輸出左右偏移量和方向。實(shí)際調(diào)車的時(shí)候你會(huì)發(fā)現(xiàn)正交相位法的抗干擾能力比單純幅值法強(qiáng)很多因?yàn)榉等菀资苈访娓叨?、供電電壓波?dòng)影響而相位差相對(duì)穩(wěn)定。這也是他們21屆在電路組能跑出穩(wěn)定成績的核心原因之一。2.3 電流采樣與輸入濾波的耦合問題信號(hào)鏈路上還有一個(gè)容易被忽略的環(huán)節(jié)——電流采樣。電機(jī)電流采樣不是直接給ADC中間要加RC低通濾波。Soberup文檔里有個(gè)很典型的例子采樣電阻是0.01Ω電流信號(hào)經(jīng)過INA240放大INA240輸出接到主控ADC之前加了一級(jí)RC低通濾波截止頻率約100kHzR1kC1.5nF。這里需要特別注意RC濾波的電容一定要靠近ADC引腳放置如果放在運(yùn)放輸出端而走線很長寄生電感會(huì)和電容形成諧振反而引入高頻噪聲。電流采樣最容易翻車的地方恰恰是這個(gè)小細(xì)節(jié)。3. 電源與可靠性設(shè)計(jì)DCDC多路供電、防倒灌、看門狗復(fù)位與TVS保護(hù)電源是智能車?yán)镒畈恍愿械钪旅牟糠?。Soberup這套開源目錄在電源設(shè)計(jì)上的投入明顯比一般戰(zhàn)隊(duì)高一個(gè)量級(jí)。他們的電源板經(jīng)歷了三次大改版最終穩(wěn)定版幾乎是把所有曾經(jīng)導(dǎo)致整車宕機(jī)的因素都堵死了。3.1 從4.2V鋰電池到多路電源軌的供電架構(gòu)整車用單節(jié)4.2V鋰電池供電但主控需要3.3V、傳感器需要5V、電機(jī)驅(qū)動(dòng)需要6~7V平臺(tái)這中間的電壓轉(zhuǎn)換全靠電源板完成。Soberup的電源樹大致是電池→DCDC升壓到8V→DCDC降壓5V→LDO出3.3V。很多人不理解為什么中間要升壓再降壓直接電池5V不行嗎原因是電池電壓會(huì)從4.2V一路掉到3.3V左右如果直接做5V降壓低電量時(shí)根本穩(wěn)不住而電機(jī)驅(qū)動(dòng)需要的電壓往往高于電池電壓升壓到8V后即使電池掉到3.4V驅(qū)動(dòng)平臺(tái)依然穩(wěn)定。8V再降壓5V輸入輸出壓差足夠DCDC工作效率高5V紋波也小。DCDC選型上他們用的是集成MOS的同步降壓方案500kHz開關(guān)頻率。這類芯片外圍簡單電感選值直接按芯片數(shù)據(jù)手冊(cè)推薦即可。以5V輸出、最大2A負(fù)載為例電感紋波電流取最大負(fù)載的30%約0.6A按公式L (Vin-Vout)×Vout / (Vin×f×ΔI)估算輸入8V、輸出5V、頻率500kHz時(shí)L ≈ (8-5)×5 / (8×500k×0.6) ≈ 6.25μH實(shí)際取6.8μH標(biāo)稱值。3.3V直接用一顆低噪聲LDO從5V取電因?yàn)橹骺谹DC的參考電壓對(duì)紋波敏感LDO比DCDC干凈得多。3.2 PMOS防倒灌電路與反接保護(hù)的實(shí)際接法智能車電池插拔頻繁接口抖動(dòng)、接反是家常便飯。Soberup電源板上有兩道防線一是電池輸入口的TVS二極管瞬態(tài)抑制二極管吸收反接瞬間的尖峰二是PMOS管防倒灌電路防止電流從電源系統(tǒng)“倒灌”回電池。PMOS防倒灌的接法其實(shí)不復(fù)雜PMOS的S極接電池正極D極接負(fù)載端G極通過一個(gè)電阻拉到電池正極同時(shí)G極接一個(gè)控制信號(hào)。正常上電時(shí)控制信號(hào)把G極拉低PMOS導(dǎo)通當(dāng)電池反接或掉電時(shí)G極為高電平PMOS關(guān)閉負(fù)載端無法向電池端倒灌電流。這里有一個(gè)細(xì)節(jié)G極下拉控制信號(hào)的電平要與電池正極電壓匹配如果控制信號(hào)來自3.3V單片機(jī)需要用三極管或MOS管做電平轉(zhuǎn)換直接拉會(huì)有風(fēng)險(xiǎn)。Soberup的方案是用一顆小NPN三極管做反相驅(qū)動(dòng)三極管導(dǎo)通時(shí)PMOS的G極被拉到地PMOS導(dǎo)通三極管截止時(shí)PMOS的G極經(jīng)上拉電阻回到電池電壓PMOS關(guān)斷。這個(gè)小電路整車上電時(shí)序、斷電時(shí)序都靠它保證。3.3 Buck電路EMI濾波與布局心得Buck電路是整車噪聲的主要來源之一。開關(guān)節(jié)點(diǎn)上有高頻方波如果布局不好傳導(dǎo)干擾和輻射干擾會(huì)直接影響傳感器信號(hào)。Soberup在電源板上的EMI處理有幾個(gè)可復(fù)用的做法輸入側(cè)放π型濾波電解電容磁珠陶瓷電容的組合把電池線上的高頻噪聲擋在Buck外面開關(guān)節(jié)點(diǎn)盡量短粗減小輻射環(huán)路面積反饋電阻采樣點(diǎn)從輸出電容正極單獨(dú)走線而不是從電感后面直接取——這條走線離開關(guān)節(jié)點(diǎn)越遠(yuǎn)越安全輸出端加大容量陶瓷電容同時(shí)并聯(lián)一顆小電容吸收高頻尖峰他們?cè)谡{(diào)試文檔里記錄了這樣一個(gè)過程電機(jī)轉(zhuǎn)起來后單片機(jī)ADC采樣值波動(dòng)加劇示波器看到3.3V上有約200mV的開關(guān)紋波。排查后發(fā)現(xiàn)是一款Buck芯片的布局中反饋網(wǎng)絡(luò)走線穿過了開關(guān)節(jié)點(diǎn)下方拾取了高頻干擾。重新布局、把反饋?zhàn)呔€繞開后紋波降到20mV以內(nèi)。這就是EMI布局的價(jià)值——看得見的干擾都是小問題看不見的耦合才是大問題。3.4 看門狗、復(fù)位電路與TVS保護(hù)三者如何協(xié)同單片機(jī)跑飛在賽場(chǎng)上時(shí)有發(fā)生Soberup主控板上把看門狗和復(fù)位電路做成了“雙保險(xiǎn)”。獨(dú)立看門狗超時(shí)后觸發(fā)芯片復(fù)位這是第一層外部復(fù)位芯片監(jiān)測(cè)3.3V電壓當(dāng)電壓低于2.93V閾值時(shí)強(qiáng)制拉低復(fù)位腳這是第二層。兩層結(jié)合起來既防程序死循環(huán)又防電源跌落時(shí)MCU處在不確定狀態(tài)。復(fù)位電路用的是經(jīng)典架構(gòu)復(fù)位芯片加手動(dòng)復(fù)位按鍵按鍵并聯(lián)100nF電容做防抖復(fù)位芯片輸出端到MCU復(fù)位腳串一個(gè)100Ω電阻做限流。這個(gè)100Ω電阻很多人忽略其實(shí)它很有用——能抑制復(fù)位線上的高頻毛刺還可以在調(diào)試時(shí)用飛線直接拉低復(fù)位腳而不影響芯片輸出有源器件。TVS保護(hù)主要放在對(duì)外接口上。電池輸入端、電機(jī)輸出端、RS485接口、按鍵接口都放了TVS管。TVS選型原則反向擊穿電壓要高于正常工作最高電壓但低于被保護(hù)器件的極限耐壓。比如3.3V系統(tǒng)選SMBJ3.3A或類似型號(hào)電池端選Vrwm 5V、擊穿電壓6.4V的型號(hào)。這樣正常工作時(shí)TVS不導(dǎo)通關(guān)斷異常尖峰來臨時(shí)快速鉗位。4. 執(zhí)行與通信RS485自動(dòng)收發(fā)、電機(jī)驅(qū)動(dòng)和HX711采樣的實(shí)現(xiàn)細(xì)節(jié)電路組的新人經(jīng)常扎在傳感器上出不來把電機(jī)驅(qū)動(dòng)和通信當(dāng)成“能用就行”。但Soberup這套開源目錄里執(zhí)行層的設(shè)計(jì)其實(shí)占了相當(dāng)大的篇幅因?yàn)檐嚒芭艿每斓宦犜挕钡母磶缀醵荚谶@里。4.1 RS485自動(dòng)收發(fā)電路兩種方案對(duì)比整車需要和調(diào)試上位機(jī)通信賽道上也常需要發(fā)送狀態(tài)數(shù)據(jù)。RS485是競賽圈的標(biāo)配協(xié)議但很多隊(duì)伍栽在方向控制上——收發(fā)切換不及時(shí)就會(huì)丟幀或者半雙工沖突。Soberup文檔里對(duì)比了兩種方案第一種是傳統(tǒng)方案MAX3485外設(shè)方向控制腳DE/RE由單片機(jī)IO控制收發(fā)方向。優(yōu)點(diǎn)是電路直觀可控缺點(diǎn)是每次發(fā)送前要先拉高DE、發(fā)完再拉低如果程序里漏了一條延時(shí)指令總線就會(huì)沖突。第二種是全自動(dòng)方案用帶自動(dòng)方向功能的芯片比如MAX13487E系列。芯片內(nèi)部自動(dòng)檢測(cè)發(fā)送數(shù)據(jù)和總線狀態(tài)不需要MCU干預(yù)對(duì)程序極其友好。Soberup最終選了自動(dòng)方向方案電路上省去了方向控制IO固件也更簡潔。自動(dòng)化方案還有一些細(xì)節(jié)要注意總線端要接終端匹配電阻120Ω并且在A/B線上各接一個(gè)偏置電阻典型10k保證總線空閑時(shí)電平確定。否則空閑狀態(tài)下總線電平不定接收端會(huì)收到亂碼。4.2 電機(jī)驅(qū)動(dòng)電路中的死區(qū)時(shí)間與電流采樣電機(jī)驅(qū)動(dòng)是另一個(gè)重災(zāi)區(qū)。Soberup驅(qū)動(dòng)板用的是柵極驅(qū)動(dòng)芯片加外部N溝道MOS的H橋結(jié)構(gòu)。柵極驅(qū)動(dòng)的死區(qū)時(shí)間設(shè)置非常關(guān)鍵如果上下橋臂同時(shí)導(dǎo)通就是直通短路瞬間燒毀MOS或者拉垮電源。一般柵極驅(qū)動(dòng)芯片都有死區(qū)時(shí)間引腳或者通過外圍電阻設(shè)定。如果不支持硬件死區(qū)配置在單片機(jī)PWM輸出端做軟件死區(qū)——兩個(gè)PWM通道輸出波形加一段互鎖延時(shí)。我的建議是能硬件死區(qū)就不要依賴軟件因?yàn)槌绦蚺茱w時(shí)軟件死區(qū)就失效了。電流采樣用低邊采樣采樣電阻0.01Ω經(jīng)過差分放大器放大后接ADC。這里有個(gè)容易踩的坑低邊采樣電阻的地必須單獨(dú)走線回到電源負(fù)極不能在主控地平面里繞一圈否則大電流在地線上產(chǎn)生壓降采出來的電流誤差很大。Soberup調(diào)試記錄里專門有一條電機(jī)堵轉(zhuǎn)時(shí)ADC讀數(shù)比實(shí)際電流偏大15%原因就是地線走線太長。4.3 HX711電路在電池電壓監(jiān)測(cè)中的應(yīng)用HX711通常被用在稱重模塊上但Soberup把它用在了電池電壓的精確采集上。整車動(dòng)態(tài)電流很大電池電壓瞬態(tài)波動(dòng)非常明顯而ADC直接采集電壓時(shí)如果參考電源本身不穩(wěn)讀數(shù)會(huì)跟著漂。HX711是一個(gè)24位高精度ADC差分輸入、自帶低噪聲放大器用來做高精度電壓測(cè)量很合適。HX711與MCU接口只需要兩根線SCK和DOUT。時(shí)序是DOUT拉低表示數(shù)據(jù)就緒然后MCU給出24個(gè)SCK脈沖每來一個(gè)脈沖讀出一位數(shù)據(jù)最高位在前。第25個(gè)脈沖切換通道/增益。Soberup文檔里專門提醒讀取HX711時(shí)要注意連續(xù)兩次讀取之間的時(shí)間間隔太快會(huì)讀到舊數(shù)據(jù)或噪聲正確的做法是等DOUT再次拉低再讀。電池電壓數(shù)據(jù)經(jīng)過校準(zhǔn)后可以用來估算剩余電量并且在電壓低于閾值時(shí)讓車進(jìn)入“降功率保護(hù)模式”——不至于因?yàn)殡姵氐魤簩?dǎo)致轉(zhuǎn)向突然失靈。這個(gè)小功能幫他們?cè)谫悎?chǎng)上避免了一次因電池老化的意外。5. 從原理圖到賽道一套可復(fù)用的電路調(diào)試思路開源目錄里除了電路圖還沉淀了一套方法論。這套方法不是他們?cè)瓌?chuàng)的但難得之處在于把每一步都落到了紙上形成了可執(zhí)行的調(diào)試流程。5.1 信號(hào)鏈路排查的三步法Soberup在調(diào)試文檔里總結(jié)了一套“三步定位法”先查電源再查信號(hào)源最后查MCU配置。第一步查電源用示波器測(cè)各級(jí)電源軌的上電波形和紋波。電源軌如果沒有起來或者有跌落毛刺后面的一切都無從談起。很多所謂的“信號(hào)全無”問題最后都?xì)w結(jié)到某一顆LDO沒輸出了。第二步查信號(hào)源把傳感器輸出用示波器直接測(cè)量確認(rèn)信號(hào)幅度、頻率和形狀符合設(shè)計(jì)預(yù)期。如果傳感器本身沒有輸出那就沒必要繼續(xù)往后查。這里要特別注意示波器探頭用1x擋還是10x擋微弱信號(hào)必須用1x擋或者加有源探頭否則探頭本身的衰減會(huì)讓信號(hào)看起來“好像沒信號(hào)”。第三步才查MCU配置。ADC通道有沒有配錯(cuò)、定時(shí)器是否啟動(dòng)、DMA中斷是否開啟——這些軟件層面問題反而最后查。Soberup的排查順序是硬件優(yōu)先、軟件次之因?yàn)橛布栴}往往會(huì)導(dǎo)致軟件問題假象在根子上把水電煤解決了很多“程序跑飛”的假象會(huì)自動(dòng)消失。5.2 故障現(xiàn)象與排查手段對(duì)照表調(diào)試文檔里有一張典型的故障對(duì)照表直接引用現(xiàn)象可能原因排查手段上電電流異常偏大DCDC輸出短路、MOS直通、電池接反斷開負(fù)載逐級(jí)上電熱成像儀看發(fā)熱點(diǎn)傳感器信號(hào)全無咪頭損壞、運(yùn)放供電缺失、信號(hào)被EMI壓制示波器測(cè)咪頭輸出和運(yùn)放輸出單片機(jī)反復(fù)復(fù)位復(fù)位芯片誤觸發(fā)、看門狗超時(shí)、電源跌落邏輯分析儀抓復(fù)位引腳波形查喂狗代碼RS485通信亂碼A/B線接反、終端電阻缺失、波特率誤差示波器看總線波形核對(duì)收發(fā)線路電機(jī)堵轉(zhuǎn)電流不準(zhǔn)地線走線過長、采樣電容過大檢查低邊采樣地線核對(duì)RC濾波參數(shù)這張表最實(shí)用之處在于每條都給出了“下一步動(dòng)作”而不是抽象描述。調(diào)試時(shí)最怕的就是停留在“好像哪里不對(duì)”的階段真正有效的排查一定是把現(xiàn)象轉(zhuǎn)化成具體的測(cè)試動(dòng)作。5.3 示波器測(cè)量中的常見誤區(qū)智能車調(diào)試中用示波器最容易犯的錯(cuò)誤有三個(gè)。第一個(gè)是探頭地線夾子夾得離測(cè)試點(diǎn)太遠(yuǎn)。探頭地線本身有電感高頻信號(hào)下會(huì)形成LC諧振在波形上疊加振鈴干擾。正確做法是地線盡量短最好用地線彈簧直接壓在測(cè)試點(diǎn)附近。第二個(gè)是用10x擋測(cè)微弱信號(hào)。10x擋會(huì)衰減信號(hào)幅度看起來像沒有輸出。測(cè)信號(hào)鏈路時(shí)先用1x擋確認(rèn)幅度再切換到10x擋看細(xì)節(jié)。第三個(gè)是忽略了示波器帶寬限制。測(cè)20kHz的傳感器信號(hào)200MHz帶寬完全夠用但如果你想看DCDC開關(guān)節(jié)點(diǎn)的高頻振鈴帶寬不夠的話振鈴會(huì)被濾掉你就看不到真實(shí)的問題。Soberup的文檔里建議至少準(zhǔn)備一臺(tái)100MHz以上的示波器四通道更佳同時(shí)抓電源和信號(hào)兩條線。6. 復(fù)盤21屆比賽中最容易翻車的幾個(gè)電路節(jié)點(diǎn)這一章是在寫的時(shí)候有意加進(jìn)來的因?yàn)?1屆Soberup的開源目錄里最打動(dòng)我的就是那份血淚史。幾乎每一塊板卡都有一段“本來以為沒問題結(jié)果上了賽道就炸”的記錄。6.1 看門狗與復(fù)位協(xié)同失效的典型案例他們遇到的一個(gè)最鬧心的問題車在直線段突然失去轉(zhuǎn)向響應(yīng)隨即系統(tǒng)自動(dòng)重啟。一開始懷疑是電源跌落但示波器抓電源很穩(wěn)后來用邏輯分析儀抓復(fù)位腳發(fā)現(xiàn)MCU的復(fù)位腳每隔幾十秒被拉低一次持續(xù)約2ms隨即恢復(fù)。而外部復(fù)位芯片的輸出并不是這個(gè)頻率說明MCU是被內(nèi)部看門狗觸發(fā)的復(fù)位的。進(jìn)一步查才發(fā)現(xiàn)程序在跑正交信號(hào)相位差計(jì)算時(shí)偶爾會(huì)進(jìn)入一個(gè)長達(dá)幾十毫秒的阻塞等待——傳感器數(shù)據(jù)異常時(shí)用了while輪詢等待沒有超時(shí)退出導(dǎo)致主循環(huán)喂狗間隔超過看門狗超時(shí)時(shí)間。而看門狗觸發(fā)復(fù)位后電機(jī)驅(qū)動(dòng)PWM在這個(gè)瞬間仍在輸出狀態(tài)車就猛地沖了一下。修復(fù)方案有兩個(gè)層面硬件上在MCU復(fù)位期間給電機(jī)驅(qū)動(dòng)使能腳加一個(gè)下拉電阻確保復(fù)位時(shí)驅(qū)動(dòng)默認(rèn)關(guān)閉軟件上把阻塞等待改為帶超時(shí)判斷的狀態(tài)機(jī)喂狗只在主循環(huán)固定位置執(zhí)行。雙重保障之后這個(gè)故障基本絕跡。這個(gè)故事也說明一個(gè)道理可靠性設(shè)計(jì)永遠(yuǎn)不要只依賴軟件硬件上的失敗默認(rèn)狀態(tài)比程序邏輯更可靠。6.2 撥碼開關(guān)防抖電路的RC取值實(shí)測(cè)Soberup調(diào)試板用了四路撥碼開關(guān)來切換運(yùn)行模式結(jié)果賽前實(shí)測(cè)時(shí)發(fā)現(xiàn)撥動(dòng)開關(guān)的瞬間MCU經(jīng)常讀到兩次跳變導(dǎo)致模式切換邏輯錯(cuò)亂。這就是典型的機(jī)械抖動(dòng)問題。撥碼開關(guān)內(nèi)部簧片在閉合瞬間會(huì)反彈產(chǎn)生一串幾十微秒到幾毫秒寬的脈沖。他們的第一版電路只在開關(guān)輸出端加了一個(gè)10nF電容實(shí)際測(cè)試抖動(dòng)仍然存在。后來按經(jīng)驗(yàn)值調(diào)整串1k電阻、對(duì)地并100nF電容RC時(shí)間常數(shù)約100μs實(shí)測(cè)抖動(dòng)完全消除。這個(gè)參數(shù)其實(shí)不算很保守——如果你希望更強(qiáng)的防抖效果可以用10k1μF但RC常數(shù)過大會(huì)導(dǎo)致響應(yīng)變慢撥碼后需要等待幾百毫秒才被識(shí)別。智能車上切換模式要求不苛刻100μs級(jí)別的防抖已經(jīng)完全夠用。6.3 咪頭差分電路的焊接與屏蔽細(xì)節(jié)傳感器板最精貴的是咪頭差分走線。Soberup在文檔里特別叮囑咪頭本身是極化電容結(jié)構(gòu)焊接時(shí)間過長或者溫度過高會(huì)損壞內(nèi)部振膜導(dǎo)致靈敏度下降甚至完全無聲。建議用恒溫烙鐵350℃以下每個(gè)焊點(diǎn)盡量控制在2秒內(nèi)完成。走線方面差分對(duì)的兩根線必須緊密等間距走如果走線不等長或者被地線隔斷了回流路徑共模噪聲就會(huì)轉(zhuǎn)換成差模干擾直接進(jìn)入運(yùn)放輸入端。他們還建議把咪頭差分部分用鋪銅包起來形成一個(gè)近似屏蔽罩的效果。實(shí)際測(cè)試中這一步做與不做在電機(jī)高速運(yùn)轉(zhuǎn)時(shí)傳感器輸出的噪聲底噪能差三倍以上。6.4 對(duì)使用者的三點(diǎn)建議如果你準(zhǔn)備照著這份開源目錄抄板子我有幾個(gè)基于他們文檔的實(shí)際建議第一不要直接照搬參數(shù)先跑通自己的電源樹。不同電池、不同電機(jī)、不同主控芯片的功耗差異很大Soberup的參數(shù)是基于他們的負(fù)載算出來的你換個(gè)大功率電機(jī)或者換了主控電流需求一變電感、電容、LDO型號(hào)都要重新驗(yàn)算。第二至少畫一版自己的PCB。抄板子只能讓你復(fù)現(xiàn)畫板子才能讓你真正理解為什么反饋電阻要這樣走、為什么開關(guān)節(jié)點(diǎn)要短粗、為什么地平面要分區(qū)。就算畫錯(cuò)了犯了他們犯過的錯(cuò)也比拿現(xiàn)成板子強(qiáng)。第三把調(diào)試記錄當(dāng)成電路設(shè)計(jì)的一部分。Soberup能整理出這份開源目錄靠的不是最后的成果而是過程中寫下的每一筆記錄。建議從現(xiàn)在開始建一個(gè)Bug文件夾每次遇到問題都記下現(xiàn)象、排查過程、根因和修復(fù)方法賽后你會(huì)有可能也產(chǎn)出一份讓下一屆人受益的開源文檔。我在實(shí)際帶隊(duì)伍過程中的體會(huì)是智能車電路組真正考驗(yàn)人的不是會(huì)算幾個(gè)公式而是能在令人崩潰的噪聲和異常之間找到那條通往穩(wěn)定信號(hào)的窄路。Soberup這套開源目錄把那條路攤開了接下來就看你怎么走了。