事情的起因是我做了一个小玩意用到了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布局与调试还是要细心,不能想当然。