本次與大家分享的是世健和ADI聯合舉辦的《世健·ADI工業趴:放飛思路,解封你的超能力》主題活動的一等獎文章:《LTC2991在嚴苛環境電源控制領域的應用與問題分享》。
01
前言
1.1背景
在各類工業控制等應用領域,ADC模擬量采集是重要的一環,尤其是嚴苛環境下的ADC采集非常重要。一般模擬量采集與應用涉及信號采集-信號處理-執行決策等幾個方面。
在本人參與的某個項目中,就涉及模擬量的采集與應用。信號采集是整個系統的基本保障,只有可靠、穩定、準確的采集信號,才能為后續模塊提供正確的輸入信息,才能執行后續正確的信號處理,執行決策過程。本文在此分享LTC2991在嚴苛環境電源控制領域的案例。
在該系統中信號采集主要包括模擬量、數字量、其他通訊協議的信息量等。其中某些應用模擬量甚至幾乎占了整個輸入的90%。而模擬量采集,全部使用了LTC2991進行,包括溫度、電壓、電流等信號的采集。每個電源管理單元,都需要采集幾十路模擬信號,整個系統使用了二十多片LTC2991采集了100多路模擬信號。
如此重要的信號采集部分,得益于LTC2991本身的性能和可靠性,和我們系統平臺的可靠性設計,雖然過程有一些問題,但是都解決了,最終結果是完美的。
可以說LTC2991可靠的、高精度的信號采集為整個能源管理系統的可靠運行打下了重要的基礎,而能源管理系統是整個系統的生命保障系統,所以LTC2991也可以說是重中之重,為整個系統的可靠運行立下了汗馬功勞。
所以本文也分享下該過程,尤其是LTC2991在嚴苛環境平臺上的應用,以及其亮眼的表現。當然也分享發現的問題和解決的過程。
1.2LTC2991簡介
LTC2991是一款8通道,用于電壓,電流,溫度測量等應用場景的ADC芯片,具備以下特征:
? 測量四個遠程二極管溫度
?0.7℃(典型)精度,0.06°C分辨率
?1℃(類型)內部溫度傳感器
?無需串聯電阻
?14位ADC測量電壓/電流
?PWM溫度輸出
?3V至5.5V電源工作電壓
?八個可選地址
?內部10ppm/℃參考電壓
?V1至V8輸入ESD額定為6kV HBM
?16-Lead MSOP封裝
?適用于亞毫伏電壓分辨率、1%電流測量和1℃溫度精度或三者任意組合的系統
?支持單端和差分輸入
?IIC接口,8個可配地址,可以一個IIC接口掛多個LTC2991.
?LTC2991I工業級工作溫度范圍–40°C to 85°C
從上可以看出,LTC2991具備高溫度穩定性,和靜電防護能力,這都是高可靠性的保證。同時精度性能也非常好。
典型應用圖和PIN如下,更詳細的參數和應用可以參考手冊。
02
LTC2991在嚴苛環境領域的應用
在我們的系統中,LTC2991主要用于電壓,電流,溫度等模擬量信號的采集。
使用了多片LTC2991,配置為不同的地址,使用單端模式。
得益于LTC2991的高集成度,外圍器件電路也比較簡單,模擬前端使用電壓跟隨器做阻抗匹配,然后單端接入LTC2991進行采集即可,ADDR配置為不同的地址,一條IIC總線最多可接8片LTC2991,電源增加一個濾波電容即可。
簡單的電路,節省了BOM成本,遵循“簡單即是美”的設計哲學,少的器件,少的電路,相對的也減少了出問題的可能性。我們可以使用低成本的冗余來提高可靠性,來替代復雜的設計實現的高可靠性,這也是選用LTC2991等經過驗證可靠的器件的原因。其典型應用原理圖參考上圖和手冊說明。
03
應用中問題與解決過程分享
LTC2991的操作很簡單,就是通過IIC接口,配置寄存器,讀寄存器值。但是在嚴苛環境應用領域不僅僅是功能正確即可,更重要的是高可靠性。所以我們進行了大量的環境試驗,性能測試,壓力測試等。當然這個過程是持久的,也不是完全沒有問題的,本文主要篇幅其實也希望是在這一部分,即問題的發現與解決上,只有發現每一個可能存在問題的點才能保證可靠性。
分享一個問題比不分享問題更具備價值,告訴別人怎么避免一個坑,比告訴別人怎么做無問題更重要。這也是本文分享的一個重要意義。
以下就是偶爾出現采集錯誤的問題的整個處理過程的分享。
3.1現象與初步分析
某塊板的LT2991的某些通道采集偶爾出現異常值。高低溫測試時數據統計如下現象:
在高低溫的幾天,對測試數據進行分析,統計出了錯誤信息,錯誤值總共出現了12次,其中11次是在輸入電壓,1次是預留的電流采集。分別對應是地址為0x90 的LTC2991第1路采集,以及地址為0x90的L2991第1路采集(本次的程序是一次性采集8路值)。該兩路都無輸入正確值應該是0。
對數據進行統計分析,可以看出,出現問題不限定于某一塊芯片,但是出現問題的都是第一路。(對于隨機問題,大量的統計數進行分析,尋找規律是一個通常的定位方法,后續也會驗證該現象,該現象也會成為問題的佐證)。
另外,在之前其他板測試時現象與上述現象一致,但是出現問題的不都是第一路,也有其他路的。
但是之前的程序是一次讀取1路值,與本次程序一次讀取8路值不一樣(該不同操作方式導致的不同現象也會成為問題的佐證)。
這里的不同作為后面詳細分析的一個線索,后續詳細描述(見3.1)。
3.2問題復現分析
3.2.1 問題初步分析
從現象倒推,考慮了幾種可能存在的原因(考慮傳遞路徑:源錯誤-處理錯誤-中間傳輸過程錯誤)。畫出錯誤路徑魚骨圖倒推,懷疑到以下路徑:
1. IIC通訊問題,通訊錯誤導致采集錯誤。
2. ADC對應通道電壓本身存在干擾,所以采集的是干擾異常值。
3. LTC2991本身的某些原因輸出異常值。
對于1和2可以通過邏輯分析儀和示波器抓取信號進行直接驗證,對于3不能直接驗證,我們通過一些其他線索和信息進行交叉驗證。
從現象倒推原因是分析問題的通常思路,原理上存在的可能都不能放過,都需要去驗證排除。錯誤魚骨圖原理分析也是常用的方法。
3.2.2 設計測試環境
有了初步的分析和懷疑,如何設計驗證測試環境是重要的一環,如何設計軟件、硬件,去發現錯誤、捕獲錯誤、記錄錯誤、加快錯誤出現的概率等等都是重要考慮點。我們從軟硬件兩個角度去考慮。
3.2.2.1硬件測試環境設計
對于3.2.1提到的1.和2.可以通過示波器和邏輯分析儀進行直接的驗證。
對于1)使用示波器直接監控對應的電壓采集點(即一.現象中,分壓點輸入電壓),為了保證能直接和LTC2991的采集值對比,所以直接監控了LTC2991芯片對應的引腳,同時也監控了前段分壓之前的電壓點。
對于2)用邏輯分析儀監控IIC的SCL和SDA。為了排除線上傳輸的問題(因為中間有緩沖芯片),我們將LT2991芯片引腳端和控制芯片引腳端的SCL SDA都引出。
對于3)沒有直接驗證手段只能通過其他信息分析,后面再詳敘。
3.2.2.2軟件測試環境設計
方式1:按照正常運行程序,一次讀取一個芯片的8路,循環采集4個芯片,遇到異常值時停止打印,這樣邏輯分析儀最后監控到的數據就是異常時的IIC數據。采集間隔約200mS。
打印如下(第一列為運行時間,grp[x]代表第x塊芯片,后面是8個通道數據,每個通道2字節):
邏輯分析儀監控如下:
方式2:只采集出錯較多的分壓點輸入電壓對應的芯片,也是一次讀取8路。打印如下:采集間隔約1.75mS。
邏輯分析儀記錄如下:
3.2.3 測試分析過程
根據前面的測試環境設計分別驗證。
3.2.3.1 確認信號質量
示波器查看IIC和電壓監控點波形正常。
IIC波形
電壓監控點 0V
邏輯分析儀記錄IIC總線數據正常??刂菩酒撕蚅T2991端時序一樣,說明中間電路沒影響,正常。
控制芯片和LT2991端IIC數據 時序一致無相位差
3.2.3.2 排除ADC對應通道電壓本身存在干擾的問題
測試過程:用示波器對分壓點輸入電壓對應LT2991芯片引腳端進行監控。設置上升沿約100mV觸發。
實際采集到異常值,打印停止時,示波器并沒有觸發。說明采集到異常值時對應通道電壓本身沒有干擾,可以排除該問題。平常用示波器監控也沒發現波形有異常,但是偶爾會出現異常干擾(見后面附圖)該現象與本次問題無關需要硬件去分析是否有問題)。
在監控過程中有出現示波器觸發的情況,但是此時采集沒有異常。波形如下:
另外發現在設備所在實驗桌附近的插座插拔設備,開關插排都有干擾,如下:
3.2.3.3 排除IIC通訊問題
總共測試了兩天,抓取到了5次異常采樣值。
每一次的打印值和邏輯分析儀的記錄值都是一樣的說明,控制器和LT2991的通訊本身沒問題??偩€上的數據和控制器采集的確實是一樣的,異常值確實就是LT2991輸出的值。
如下是五次中的一次采集到異常時的記錄(另外四次也是一樣控制器采集值和邏輯分析儀一致)。
(控制器采集值 80 ff 80 2e ff ff ff ff ff ff 80 08 ff ff ff ff)
(邏輯分析儀記錄值80 ff 80 2e ff ff ff ff ff ff 80 08 ff ff ff ff (注邏輯分析最后一個字節顯示R實際手動解析也是0xFF)
另外從軟件上考慮,由于此時是讀數據,SDA為讀狀態,所以也不可能對總線產生干擾,另一方面LTC2991的采集是在一個線程運行不存在其他地方操作該引腳,資源也嚴格檢查不存在引腳誤操作的情況。
綜上異常值只可能是LTC2991確實輸出的值就是這個異常值。
3.2.3.3 分析LTC2991為什么會輸出異常值
根據前面的五次測試記錄(每一次都是2h內出現),統計如下:
注: 采樣值為16位,bit15=1表示數據有效否則表示數據無效。bit14表示符號位,實際上bit0-bit14即補碼形式數值。由于沒有接外部輸入,所以采樣值應該為0。即80 00(0),ff fe(-2) ff ff(-1)都是有效的(實際采樣會在0左右波動)。
而ff 00(-255) 80 ff(255) 80 fe(254)是異常值,而7f ff bit15=0為無效值。
根據以上異常值反推是否和記錄對應:
-255 255 254(程序中負數會轉為正數處理),即按照255計算。
根據程序中的換算公式:
預留的采集電流:255*0.778-15=183.39/20 + 0.5 取整=9
由于遞減放大了20倍所以顯示20*9=180
分壓點輸入電壓:255*6.7984=1733.592 /200 + 0.5取整=9
由于遞減放大了200倍所以顯示20*9=1800
上述和一.現象看到的數據是對應的。
從以上可以總結幾點規律:
1.間隔時間長200mS間隔采樣時,基本無無效數據,間隔時間長1.75mS采樣時,無效數據變多,這可能和LTC2991的轉換時間和讀間隔有關,根據LTC2991手冊描述,轉換時間約1.5mS 最大1.8mS。
2. 在1.75mS間隔采集時,異常值前都是無效值,而200mS采集無異常值。
3. 異常值不是隨機值,而是有效值的高低字節的組合。
通過上面整理分析猜測如下:
對第五次異常值進行分析,上一次讀取到的是無效值7f ff。本次讀到的是異常值80 fe。
猜測:7f ff讀到無效值時應該是LTC2991正在更新數據ff fe,由于這個沖突所以返回了無效值7f ff。
而下一次新的數據0x8000 正好在更新時,又進行了讀,但是本次是在更新高字節0x80后鎖定數據,沒有返回無效值,而是返回了本次的高字節和上一次的低字節.0x80 fe。
第一次到第4次異常值也可以按照該猜測合理解釋。
按照手冊描述,在讀操作時,LTC2991會鎖定數據寄存器,直到讀完成。并且高低字節是同步同時更新的。對于具體什么時候鎖定數據寄存器,比如是接收到讀命令后的第一個CLK邊沿,還是要等下一個字節(比如我們猜測的,下一個字節后鎖定),手冊沒有描述,不得而知。什么時候會返回無效值手冊也沒有描述,但是從上述記錄讀周期和更新周期差不多時,也就是讀時正在更新數據可能出現概率很大。
另外對于高低字節同時更新,我們根據實際的測試懷疑也可能并不是的,這些都是猜測,但是從測試現象和后面的修改驗證都能很好的解釋這個猜測。
根據上述分析,猜測出現異常的情況如下:
3.3 現象與實際測試的相互印證
3.3.1 連續讀8路時,為什么只有第一路出現問題;而每次讀一路時,其他路也有問題
根據2.3.3的分析,一次讀8通道時問題只會出現在讀命令后的第一個數據,因為鎖定延遲最多只會出現一個字節,讀完第一個通道后,后面的通道數據寄存器肯定已經完成了鎖定。
而每次讀一路時,每次都是一次新的讀,每一次都是讀命令后的第一個數據,所以都有可能出現。
3.3.2 為什么沒接輸入源時有異常值,而接入輸入源的沒有發現有異常值
根據前面的測試,我們發現有異常值的都是實際沒接輸入源的,也就是理論上應該是0的。
由于輸入為0,實際采集值在0附近可能是-1(ff ff)也可能是0 (80 00),如果上一次是ffff本次是8000,按照上述分析的異常,讀取到本次的高字節80。上次的低字節ff就是80ff(255)。這種概率是比較高的,因為0的左右差1都是突變。
255和正常值0就差別比較大一眼就能發現了。
如果接了輸入源,那么就會是一個離0比較遠的正數,那么獲取的本次的高字節和上次的低字節組合成突變的值概率會小一些(但是也會存在比如01ff和0200這種在低字節進位的情況下,組合可能是0100或02ff也會差255)。但是較0的左右,0不管左或者右都容易突變,正數只在低字節為0xff左右會突變,概率小很多。并且采樣值的抖動一般都只有幾個數值。
所以只有在值的低字節接近0xFF時才容易突變,比如0xfe,0x00等在0xff左右變化。概率會小很多。
另一方面實際也沒具體去統計其他有輸入源的數據的異常值,因為相對于0值的異常不是一眼就能看到,只是初略看遙測數據沒有看到明顯異常值。
所以這個現象其實也和猜測相符。
3.3.3 為什么每次值都是1800 或180
根據2.3.3的分析和實際計算,顯示值1800和180實際對應的LTC2991的采樣值就是255左右。
而對于實際無輸入0v的正常值為0左右,比如ff ff(-1) 和08 00(0),如果按照前一次值和本次值的高低字節取,出現的錯誤值就是ff 00 (-255)或者80 ff(255)由于程序取了絕對值所以都是255所有,換算就是180(放大20倍)或1800(放大200倍)了。實際我們統計的也都是實際值是0值的異常值,根據3.2的分析,異常突變就是255左右所以換算出來就是1800或者180。
3.3.4 為什么間隔200mS采集沒有無效值,間隔1.75mS 無效值較多
因為LTC2991轉換時間約為1.5mS,而間隔1.75mS去讀,很可能讀的時候LTC2991正在更新新的數據。由于LTC2991轉換周期和讀間隔周期差不多,碰上的概率就會大很多。而間隔200mS去讀這種概率會小很多。
無效數據的出現和LTC2991正在更新數據時單片機去讀數據有無關系,手冊上沒有明確說明,但是從測試各方看應該是有關系的,比如四.修改后的驗證應該也能說明有這種關聯。
3.4 修改驗證
根據2.3.3的分析,如果修改讀的邏輯,即在第一個通道數據前多讀幾個字節,讓LTC2991在讀第一個通道數據前就確保鎖定數據寄存器,那么就可以避免該問題。
如下圖所示,在8通道數據前讀其他字節,這樣LTC2991在接收到讀命令0x91之后一個字節就會完成鎖定,后面讀8通道數據時肯定是鎖定的數據。避免了讀數據時數據寄存器正在更新導致讀錯的問題。
連續測試兩次,一次連續運行5小時,一次連續運行了40多個小時均無錯誤,按照之前的五次測試,都是2個小時內就出現了錯誤:可以確定問題得到解決。
修改后同時也發現沒有了無效值,說明無效值的出現應該與讀數據時正在更新數據有關或者跟鎖存數據邏輯有關,與之前的現象印證。
3.5 總結與結論
1.對比邏輯分析儀抓取到的實際數據與采集到的數據,完全一致;抓取到的實際數據換算后與看到的值一致,說明問題得到復現,并且和LTC2991的IIC通訊無問題。通過示波器確認異常值也不是由于電壓有干擾導致的。
2. 根據前面的分析,猜測很大概率是讀數據時LTC2991的數據寄存器高低字節鎖定邏輯有缺陷導致的,即存在讀數據時讀到本次結果的高字節和上次結果的低字節的情況,導致值異常。
3.針對2.的原因,修改采集方法(一次性讀出所有寄存器,使得讀數據寄存器之前有足夠時間鎖定數據寄存器),修改后通過長時間驗證(連續運行40h以上),問題沒有再現(修改前每次都是2h就出現問題),可以確認問題得到解決。
04
總結
對于嚴苛環境領域應用,對問題要零容忍的,必須解決所有的問題,并且是找到根本原因徹底解決,而不是消除現象,所以本文重點放在了解決問題上。而前面的應用實際不涉及太復雜的技術,一切用結果說話,從上述應用結果來說,LTC2991展現了其性能和可靠性,這也是ADI在模擬領域絕對的權威的展現。
1. LTC2991完全滿足在嚴苛環境應用平臺上的可靠應用,通過上述案例已經得到了非常好的驗證。
2. LTC2991的除了上述分享的問題外,沒有發現其他問題,瑕不掩瑜,確定問題原因后可以簡單的方式避免,同時知道了原理也可以比較放心的使用了。
上一篇:PLC控制網關的功能特點
下一篇:伺服電機飛車的原因
- 熱門資源推薦
- 熱門放大器推薦
- 從創新平臺到行業落地:萊迪思Nexus 2驅動AI市場應用
- 羅克韋爾自動化在 NVIDIA GTC 2025 大會上首次展示 Emulate3D Factory Test
- NVIDIA 宣布推出 Cosmos 世界基礎模型和物理 AI 數據工具的重大更新
- NVIDIA Omniverse 物理 AI 操作系統擴展至更多行業和伙伴
- NVIDIA 宣布推出 DGX Spark 個人 AI 計算機
- NVIDIA Blackwell RTX PRO 提供工作站和服務器兩種規格,助力設計師、開發者、數據科學家和創作人員構建代理式 AI 并進行協作
- NVIDIA與 GE 醫療合作,通過引入物理 AI 推進自主診斷成像開發
- NVIDIA 發布全球首個開源人形機器人基礎模型 Isaac GR00T N1-并推出加速機器人開發的仿真框架
- NVIDIA 推出開放推理 AI 模型系列,助力開發者和企業構建代理式 AI 平臺
- 增加驗證覆蓋范圍并減少工作量?SmartDV完備的VIP助您實現又快又好的芯片設計!