解析)
1. 問題現(xiàn)象同步采樣結(jié)果為何“貌合神離”最近在調(diào)試一塊基于英飛凌TC26x系列MCU的電機控制板遇到了一個挺有意思的問題。項目里需要同時采集三相電流為了保證相位計算的準確性我使用了VADCVersatile Analog-to-Digital Converter模塊的同步采樣功能讓ADC0和ADC1兩個內(nèi)核在同一時刻對兩路電流信號進行采樣。理論上這兩路信號在同一個PWM周期內(nèi)、由同一個觸發(fā)源啟動結(jié)果應(yīng)該高度一致至少誤差是穩(wěn)定且可預(yù)測的。但實際調(diào)試中卻發(fā)現(xiàn)ADC0和ADC1的轉(zhuǎn)換結(jié)果存在不一致的誤差而且這個誤差還不是固定的會隨著采樣點、負載電流甚至環(huán)境溫度有些許變化。這直接影響了電流環(huán)的精度和FOC算法的穩(wěn)定性是個必須啃下來的硬骨頭。如果你也在用TC26x做高精度同步采樣比如做電機控制、電力測量或者多通道數(shù)據(jù)采集那么很可能也會踩進這個坑。表面上看配置都對了觸發(fā)同步了但讀回來的數(shù)據(jù)就是“對不上”這種問題往往藏在意料之外的細節(jié)里。今天我就把自己排查這個“同步采樣誤差不一致”問題的完整過程、根因分析以及解決方案梳理出來希望能幫你省下幾天甚至幾周的調(diào)試時間。2. TC26x VADC同步采樣的核心機制與常見誤解在深入問題之前我們得先搞清楚TC26x的VADC模塊在同步采樣時到底是怎么工作的。這有助于我們理解誤差可能從哪里來。TC26x通常包含多個VADC內(nèi)核如ADC0 ADC1等每個內(nèi)核有獨立的轉(zhuǎn)換器、參考電壓和輸入通道。所謂的“同步采樣”并不是指兩個ADC共用一個采樣保持電路而是指通過硬件觸發(fā)機制讓兩個內(nèi)核的轉(zhuǎn)換序列在同一個時鐘邊沿啟動。關(guān)鍵在于“啟動同步”而不是“采樣時刻的絕對統(tǒng)一”。2.1 同步觸發(fā)的實現(xiàn)路徑實現(xiàn)同步采樣通常有幾種方式后臺請求源Background Request Source觸發(fā)這是最常用的方式。你可以配置一個定時器如GPT12 CCU6的某個事件如周期匹配作為后臺請求源。當事件發(fā)生時它會同時向多個ADC內(nèi)核的請求源寄存器發(fā)出轉(zhuǎn)換請求。軟件觸發(fā)同步通過向多個ADC內(nèi)核的請求源寄存器同時寫入請求需要精確的軟件時序通常不推薦用于高精度場景。隊列請求源同步配置隊列時設(shè)置相同的觸發(fā)源。大多數(shù)應(yīng)用包括我的電機控制項目都采用第一種方式。這里就埋下了第一個隱患“同時發(fā)出請求”并不意味著“同時開始轉(zhuǎn)換”。從請求產(chǎn)生到ADC內(nèi)核的仲裁器處理該請求再到采樣保持電路真正對輸入信號進行采樣中間存在數(shù)個時鐘周期的延遲。如果兩個ADC內(nèi)核的時鐘配置、總線負載甚至硬件路徑有細微差異這個延遲就會不同導(dǎo)致實際的采樣時刻出現(xiàn)微小的相位差。對于高頻信號這個相位差就會直接表現(xiàn)為幅值誤差。2.2 參考電壓源的“安靜”與“嘈雜”這是最容易被忽略也往往是導(dǎo)致誤差不一致的核心原因之一。每個VADC內(nèi)核都有自己獨立的參考電壓引腳VREFHx VREFLx。在數(shù)據(jù)手冊的理想世界里它們都應(yīng)該是干凈、穩(wěn)定的。但在真實的PCB上走線差異連接到ADC0和ADC1參考電壓引腳的走線長度、寬度、是否靠近噪聲源如開關(guān)電源、電機驅(qū)動線可能不同。去耦電容的“個性”每個VREF引腳附近的去耦電容通常是10uF鉭電容100nF陶瓷電容的ESR等效串聯(lián)電阻、ESL等效串聯(lián)電感存在微小差異。在ADC采樣瞬間的大電流脈沖下這些微小差異會導(dǎo)致VREF上產(chǎn)生不同的瞬時壓降。電源噪聲耦合如果ADC0和ADC1的模擬電源VDDPx來自同一路LDO但布線不均衡或者數(shù)字地噪聲通過不完美的布局耦合進了模擬地都會以不同的方式影響各自的參考電壓。當兩個ADC內(nèi)核使用存在微小差異的參考電壓進行轉(zhuǎn)換時即使輸入電壓完全相同轉(zhuǎn)換結(jié)果也會不同。公式很簡單Digital Value (VIN - VREFL) / (VREFH - VREFL) * 409512位ADC。VREFH或VREFL的微小波動會直接放大到結(jié)果上。2.3 輸入通道的“個性”與采樣時間即使使用同一個ADC內(nèi)核的不同通道其采樣時間tSAMPLE也需要滿足要求以確保采樣電容被充分充電到輸入信號電壓的99.9%以上通常要求。TC26x的VADC允許為每個通道獨立配置采樣時間通過控制寄存器中的STC位域。問題在于我們常常為所有同步采樣通道配置相同的采樣時間。如果這兩路信號的源阻抗不同例如一路來自運放直接輸出阻抗很低另一路經(jīng)過RC濾波阻抗較高那么高阻抗信號路徑就需要更長的采樣時間來穩(wěn)定。如果采樣時間不足就會引入與信號幅值相關(guān)的非線性誤差且這個誤差在兩個ADC上表現(xiàn)不同。3. 系統(tǒng)性排查流程從軟件配置到硬件真相當遇到同步采樣誤差不一致時切忌盲目調(diào)整軟件參數(shù)。一個系統(tǒng)性的排查流程至關(guān)重要。下面是我總結(jié)的步驟你可以跟著一步步檢查。3.1 第一步驗證基礎(chǔ)配置與同步性首先我們要確認同步采樣的基礎(chǔ)框架是正確的。檢查觸發(fā)源確認ADC0和ADC1的轉(zhuǎn)換請求是否來自同一個且唯一的硬件觸發(fā)源例如GPT12 Timer2的周期匹配。檢查兩個ADC請求源寄存器的配置確保觸發(fā)源ID一致。檢查轉(zhuǎn)換啟動在調(diào)試器中設(shè)置斷點在ADC的轉(zhuǎn)換結(jié)束中斷服務(wù)程序里。同時監(jiān)控ADC0和ADC1的GxARBCFG寄存器中的START位或者直接讀取轉(zhuǎn)換結(jié)果寄存器。單步運行觀察當觸發(fā)事件發(fā)生時兩個ADC的START位是否在同一時刻被置位又是否在相近的時刻被清零轉(zhuǎn)換結(jié)束。如果啟動時刻差了幾個時鐘周期問題可能出在觸發(fā)路徑或仲裁優(yōu)先級上。檢查時鐘配置確認ADC0和ADC1的模塊時鐘fADC是否同源、同頻、同相位。通常它們都來自同一個PLL分頻。檢查CLC時鐘控制寄存器確保兩個ADC模塊都沒有被禁用或分頻。注意TC26x的VADC內(nèi)核時鐘可以獨立開關(guān)。務(wù)必確保在初始化時兩個ADC內(nèi)核的時鐘都已使能且運行穩(wěn)定后再配置轉(zhuǎn)換。3.2 第二步實施“靜態(tài)直流測試”以隔離問題這是定位問題屬于“靜態(tài)誤差”還是“動態(tài)時序誤差”的關(guān)鍵一步。操作方法將ADC0和ADC1待測試的輸入通道例如AN0和AN1通過跳線或PCB上的測試點短接到同一個穩(wěn)定的直流電壓源上。這個電壓源最好是一個低噪聲、低溫漂的基準源或者至少是一個干凈的LDO輸出如3.0V或1.5V。在軟件中配置同步采樣這兩路通道。連續(xù)采集大量樣本例如10000個點分別計算ADC0和ADC1結(jié)果的平均值、標準差。結(jié)果分析如果平均值差異顯著且穩(wěn)定例如ADC0結(jié)果始終比ADC1高10個LSB這強烈指向靜態(tài)誤差問題很可能在硬件上如參考電壓差異、通道偏移/增益誤差。繼續(xù)3.3節(jié)的排查。如果平均值接近但單個樣本對的差值波動很大標準差大這更指向動態(tài)時序或噪聲問題如采樣時間不足、電源噪聲、觸發(fā)不同步。繼續(xù)3.4節(jié)的排查。如果差異很小且在可接受范圍那么問題可能出在信號鏈本身運放、傳感器而非ADC同步機制。3.3 第三步深入硬件——參考電壓與信號鏈檢查如果靜態(tài)測試發(fā)現(xiàn)了穩(wěn)定誤差請拿起萬用表和示波器。測量參考電壓使用高精度數(shù)字萬用表6位半最佳測量ADC0和ADC1的VREFH引腳對VREFL通常是VSSA的直流電壓。記錄細微差異哪怕是0.5mV。使用示波器將探頭尖直接點在VREFH引腳上使用彈簧接地針避免長地線引入噪聲帶寬限制到20MHz。觸發(fā)ADC轉(zhuǎn)換事件可以找一個GPIO在轉(zhuǎn)換開始時拉高觀察在采樣瞬間VREFH電壓是否有“塌陷”droop或毛刺。對比ADC0和ADC1的波形看噪聲幅度和形態(tài)是否一致。檢查去耦電容確認每個VREFH引腳附近是否有容量足夠、類型正確高頻用陶瓷電容、布局緊密的去耦電容。可以嘗試在其中一個ADC的VREFH引腳上額外并聯(lián)一個10uF和100nF電容觀察誤差是否變化。檢查輸入信號路徑測量輸入信號的源阻抗。如果信號來自運放輸出阻抗通常很低1歐姆。如果經(jīng)過濾波器計算在ADC采樣頻率下的阻抗。根據(jù)源阻抗和ADC的采樣電容數(shù)據(jù)手冊中有CADS參數(shù)典型值幾pF重新計算所需的采樣時間tSAMPLE。公式可簡化為tSAMPLE 9 * RSOURCE * CADS達到99.9%精度。確保配置的采樣時間足夠并為高阻抗路徑增加余量。3.4 第四步精調(diào)軟件與時序配置如果動態(tài)測試問題突出需要從軟件和時序上優(yōu)化。優(yōu)化采樣時間STC即使靜態(tài)測試通過也應(yīng)確保采樣時間充足。TC26x的采樣時間以fADC時鐘周期為單位。增加STC值觀察誤差的不一致性是否減小。有一個技巧將采樣時間配置到遠大于計算值例如2倍如果誤差顯著改善則說明之前采樣時間不足。檢查仲裁器優(yōu)先級與隊列如果使用了隊列模式確保兩個ADC內(nèi)核中待轉(zhuǎn)換隊列的優(yōu)先級設(shè)置不會導(dǎo)致某個內(nèi)核的請求被延遲處理。對于高優(yōu)先級同步采樣可以考慮使用仲裁器暫停功能在觸發(fā)事件到來前暫停其他所有請求確保同步請求被立即響應(yīng)。隔離數(shù)字噪聲在ADC轉(zhuǎn)換期間讓CPU進入空閑模式或者確保沒有其他高優(yōu)先級中斷特別是通信中斷如ETH CAN正在執(zhí)行以減少數(shù)字電源和地上的同步噪聲??梢宰鲆粋€對比測試在ADC轉(zhuǎn)換期間關(guān)閉所有其他外設(shè)時鐘看誤差是否改善。校準的局限性TC26x VADC提供偏移OFFS和增益GAIN校準寄存器。但請注意出廠校準是在特定條件下如VREF5V進行的。如果你的實際VREF不同或者溫度變化大校準參數(shù)可能不準確。更重要的是同步采樣誤差不一致很可能是兩個ADC的校準參數(shù)本身就有差異。你可以嘗試讀取兩個ADC內(nèi)核的校準參數(shù)如果芯片支持或者手動進行一點微調(diào)但這治標不治本根本原因還是硬件。4. 我的實戰(zhàn)案例誤差分析與最終解決在我的電機控制項目中靜態(tài)直流測試顯示ADC0的結(jié)果平均比ADC1高約8個LSB12位分辨率3.3V參考電壓下約6.4mV。示波器查看VREFH波形發(fā)現(xiàn)了關(guān)鍵線索ADC內(nèi)核VREFH 直流電壓 (萬用表)VREFH 瞬時壓降 (示波器)去耦電容布局ADC03.300V約 15mV 的尖峰和回落電容距離引腳3mm過孔連接ADC13.298V約 40mV 的尖峰和回落電容距離引腳5mm且與數(shù)字電源過孔相鄰根因分析布局不對稱ADC1的VREFH去耦電容布局較差走線更長且與一個數(shù)字電源過孔相鄰導(dǎo)致等效電感ESL更大。電流路徑差異在ADC采樣瞬間采樣開關(guān)打開采樣電容快速從VREFH充電。這個瞬態(tài)電流在路徑電感上會產(chǎn)生感應(yīng)電壓V L * di/dt。ADC1的路徑電感更大導(dǎo)致其VREFH引腳上產(chǎn)生的瞬時壓降更大、恢復(fù)更慢。結(jié)果影響由于ADC在轉(zhuǎn)換期間依賴的是采樣時刻存儲在電容上的電壓與當前的VREF進行比較對于SAR型ADCVREFH的瞬時下降等效于參考電壓降低。根據(jù)轉(zhuǎn)換公式這會導(dǎo)致轉(zhuǎn)換結(jié)果偏高。但我的測試是ADC0結(jié)果偏高這里有個關(guān)鍵點我的測試電壓是1.5V中間量程。VREFH下降分母變小結(jié)果值應(yīng)該變大。但我觀察到的是ADC0噪聲小結(jié)果高ADC1噪聲大結(jié)果低。這似乎矛盾。進一步排查我測量了VREFL模擬地的噪聲。發(fā)現(xiàn)ADC1的模擬地平面由于布局原因在采樣瞬間存在更大的地彈噪聲約10mV。這導(dǎo)致VREFL被瞬時抬高。在轉(zhuǎn)換公式中VREFL抬高會使分子(VIN - VREFL)變小從而導(dǎo)致結(jié)果偏低。對于ADC1VREFH下降使結(jié)果偏高和VREFL上升使結(jié)果偏低的共同作用下偏低效應(yīng)可能占主導(dǎo)最終導(dǎo)致其轉(zhuǎn)換結(jié)果低于ADC0。這解釋了觀測現(xiàn)象。解決方案硬件修改治本在PCB的下一版修訂中我重新布局確保ADC0和ADC1的模擬部分VREFH、VREFL、VDDPA、輸入通道完全對稱。去耦電容采用0402封裝并直接放置在引腳正下方通過最短路徑連接。將模擬地平面與數(shù)字地用磁珠單點連接位置遠離ADC區(qū)域。軟件緩解治標用于當前板子增加采樣時間將STC值從默認值大幅提高給VREFH和信號更多恢復(fù)穩(wěn)定的時間。啟用內(nèi)部參考緩沖器TC26x的VADC可以選擇使用內(nèi)部產(chǎn)生的參考電壓如果支持且精度滿足要求這能部分隔離外部引腳噪聲。但需注意內(nèi)部參考的精度和溫漂。數(shù)字濾波在軟件中對同步采樣的兩路結(jié)果進行滑動平均濾波。雖然不能消除靜態(tài)偏差但可以抑制隨機不一致性。軟件補償基于靜態(tài)直流測試的結(jié)果計算出一個固定的偏移量在讀取ADC1結(jié)果后加上這個偏移。這是一個無奈但有效的臨時方案缺點是隨溫度變化可能會漂移。5. 設(shè)計預(yù)防與最佳實踐建議基于這次踩坑經(jīng)驗我總結(jié)了在TC26x上設(shè)計高精度同步采樣電路時的幾個黃金法則對稱布局是王道對待ADC0和ADC1的模擬部分要像對待差分對一樣。VREFH/VREFL的走線長度、寬度、到去耦電容的距離必須盡可能一致。去耦電容推薦10uF鉭電容100nF X7R陶瓷電容必須緊貼引腳放置。參考電壓去耦電容的選型與布局100nF陶瓷電容必須選用高頻特性好的X7R或X5R材質(zhì)封裝優(yōu)選0402或0201以減小ESL。絕對避免使用過孔將電容連接到VREF引腳應(yīng)使用同一層走線直接連接。如果必須用過孔確保每個VREF引腳的過孔數(shù)量、位置對稱。獨立的模擬電源與地為每個ADC內(nèi)核或一組同步采樣的ADC提供獨立的LC濾波網(wǎng)絡(luò)如磁珠電容從干凈的模擬電源LDO引出。模擬地AGND應(yīng)是一個完整、安靜的平面僅在一點通過磁珠或0歐電阻與數(shù)字地連接。采樣時間寧長勿短在性能允許的范圍內(nèi)盡可能配置較長的采樣時間STC。這能有效降低對信號源阻抗和參考電壓穩(wěn)定性的要求??梢酝ㄟ^計算和實驗來確定一個安全值。上電初始化與校準順序確保在ADC模塊時鐘穩(wěn)定、參考電壓穩(wěn)定上電后延時幾毫秒后再進行ADC校準或初始化。避免在電源未穩(wěn)時操作ADC寄存器。利用同步觸發(fā)的高級特性如果應(yīng)用對同步性要求極高研究使用“主-從”觸發(fā)模式或硬件事件鏈確保觸發(fā)信號的物理路徑延遲最小。調(diào)試同步采樣誤差就像在做一個精密的偵探工作需要結(jié)合數(shù)據(jù)手冊的理論、示波器的波形、萬用表的讀數(shù)以及軟件邏輯的追蹤。最關(guān)鍵的是要有系統(tǒng)性思維先通過“靜態(tài)直流測試”將問題范圍縮小到“靜態(tài)硬件誤差”或“動態(tài)時序噪聲”然后再有針對性地深入。很多時候問題就藏在那些我們認為“差不多就行”的細節(jié)里比如那多出來的2毫米走線或者那個共用了一個過孔的接地。希望我的這些經(jīng)驗?zāi)茏屇阍谙麓斡龅筋愃茊栴}時能更快地鎖定目標找到解決方案。