事情的起因是我做了一個小玩意用到了INA226這個芯片,這個芯片是一個經典電流檢測芯片,有I2C接口直接讀取電流。按道理來說這個很簡單,電路一畫,代碼一讀就可以了,但是我調試的時候發現讀出來的電流始終比實際大大約10%。
1. 原理圖
原理圖如下:一個10mR的采樣電阻+INA226外圍電路。
2. PCB布局
PCB布局如下,采用開爾文接法減小誤差。
3. 調試過程
發現電流偏大后,在輸入1A的電流條件下,測量采樣電阻兩端的壓差,發現是10.1mV,稍微偏大,但是不至于大10%。此時懷疑是否是芯片自身問題或者I2C代碼有問題導致數據轉換出現誤差。 手里有一個某寶買的INA226模塊,使用同樣的代碼來驅動,發現也是偏大10%左右,這就很奇怪了,這個芯片是很常用的芯片,網上也沒有相關的采樣偏大的說法,現在只能懷疑是我I2C代碼有問題了,因此使用一個I2C調試模塊驅動INA226,發現無論是我自己板子還是某寶的INA226模塊,都還是偏大10%左右。排除了I2C代碼的問題,現在一時不知道問題在哪了。
4. 問題轉機
本來已經放棄這個問題了,因為要求不高,軟件校準一下也能用,但是在看PCB時發現了一個細節,INA226的IN+引腳還連接了其它地方!!!
這個地方連接上后,等效電路如下圖,此時INA+和INA-之間的電壓相當于采樣電阻Rs+線路阻抗r之和的壓降,因此理論上采樣電壓就是偏大。再通入1A電流,直接測INA226的IN+和IN-之間的壓差,發現是11mV,確實偏大了10%。
后割掉這個不應該有的連線,再次復測,電流就正常了,問題解決。
5. 某寶模塊問題在哪?
某寶模塊如下圖,電流輸入端子直接連在采樣電阻兩端,沒有采用開爾文連接,這個誤差倒是也沒那么大,但是它離譜的地方是INA226的IN+和IN-引腳直接接在輸入端子兩端,那么很顯然等效電阻相當于采樣電阻Rs+r1+r2的總阻抗,這是導致其電流偏大的原因,而直接將輸入電流加在采樣電阻兩端時,電流就正常了。
6. 總結
這次問題出現在PCB布局順手拉的一根線,而造成調試過程曲折的原因一是測試壓差的時候只測采樣電阻兩端壓差,沒有直接測INA226的兩個輸入引腳的壓差,造成誤判,另外還有某寶買的模塊同樣的走線問題導致的誤判,因此PCB布局與調試還是要細心,不能想當然。