I2C Fuelgauge used in Power Shield

Does anyone know what chip is used in the Power Shield to provide state of charge readings over I2C? I’m planning on including an integrated lithium polymer battery charger, monitor, and 3.3v power regulator in my product.

does this look right?

from https://github.com/particle-iot/PowerShield

1 Like

Are you wanting to use the same chip that’s in the Electron?

I would use something different by TI. They have single-chip solutions that provide all you want with more accurate fuel gauging.

1 Like

I’m looking for whatever is the most suitable chip.

If its the one used in the Electron or a different one, that’s great as well.

I think to some extent that depends on how many cells you are using, the more cells the less choices there are.Presumably if you use the one in the power shield you don’t need to include a library. Devices from LTC often have sample libraries for what they call “Linduino”, parts of those seem to need need rewriting as they use their own methods for running the I2C. In our project we have selected a LTC2943 for instance but one would assume the 2941 is very similar for single cells. There are also LiPo charging chips with a built in fuel gauge. You might even find one that does that and several voltage rails targeted at small/portable computers…


Are you just doing a single cell setup?

The Electron PMIC is fine, it’s the fuel gauge chip that is less than ideal because you can’t get it to show the battery as 100% full with the current Electron + PMIC setup without scaling the fuel gauge reading. If you can use the code particle has already written along with their part layout then that will save you some or a lot of time.

I think TI has superior fuel gauge battery management chips from my experience. What I like about Linear Tech is that they give free demo boards. The Linduino code that Linear provides for it’s I2C chips was not useable for me, I had to write a whole new library for the chip I was using.

There are lots of options out there to pick from, choosing the right one for you and testing it will eat up some time.

1 Like

What I’ve had to do for Linears code is just recode the basic “read” and “read16” functions so that they call wire directly rather than via LTCs SMBus/I2C library. I can’t quite work out why they access the I2C this way, my best guess is its something do do with Arduinos Wire library historically being unable to handle the how Stop is implemented but who can say. I first experimented with an LTC4015, I rewrote far more of that as it was heavily based on pointers (everywhere and I find that very hard to read) and I wanted it in a more typical “object” form. However the huge files of reg definitions etc, were invaluable, and could be used as they werem meaning I didn’t need to make any functions or plough through even more of a hefty datasheet to extract the meaning of specific bits.

Seeing as it’s the decent thing to do I have uploaded and published my “Port” of the LTC2943 Linduino library.

1 Like