DIYBMS v4 Shunt Design and discussion

I actually like @John_Taves suggestion about using the data lines of the cell modules. In my head this simplifies the wiring.

Controller TX ==> Shunt Module ==> Cell modules ==> controller RX.

The fact its already isolated, the power could be supplied by full pack voltage via a buck converter (i already use one to power the controller from the full pack voltage in my case upto 60v), the shunt on the Negative therefore no dealing with high voltage.

I like it.

I would rather a custom module dedicated to the shunt module as opposed to hacking a cell module.

And as for the shunt being on the negative side, surely 50mv or even 100mv isnt going to play havoc with equipment. Theres losses in wiring too. Also it doesnt matter if the equipment is common positive or common negative, all we need is the current going into and out of the battery.

The only downside i can see is that the polling time will not give very quick updates to instantaneous current, SOC would be fine as it shouldn’t be dropping that quickly. But what we could do is then make use of the current sense pins on the controller with a CT to read the current in real time. SOC from shunt module and current from CT.

This also means if communication with the modules is lost, current will still show possibly helping with troubleshooting.

Food for thought.

It does simplify the wiring, however the current comms protocol the modules use isn’t written or designed for additional purposes. You also have the problem of the daisy chain getting longer and longer, in large deployments it can already take 3 or 4 seconds for packets to move from 1 side to the other.

@GeorgeBoudreau I am a novice, so thanks for the feedback.

Will I be able to solder the LTC2944? I’ve never done this. I thought you paint the area with solder paste, then place the chip, then heat it to flow the solder. Maybe this thing is so tiny, it is not easy to do.

You bring up good points about the isolation. I thought it was odd that the chip gets power from the thing it is measuring. It does not have some V input where we send in 3.3. Also it made no sense to me that they ask for " Use a 4-wire Kelvin sense connection for the sense resistor" when they don’t have a separate V input for that. The INA226 looks much better in this respect.

I’ve already ordered the boards and chip. Is there any chance this will work? How is it supposed to deal with the SDA/SCL without any 3.3 reference?

If it does work, I should be able to compare counting with the LTC2944 vs periodically polling the INA226 and summing on the wemos.

I don’t find the LTC2045. Is there a typo?

it is LTC2945.
to solder LTC2944 QFN You need heat gun for hot air soldering at least.

You can try follow this video as well : How to do SMD Reflow Soldering properly! || Hot Air VS Sand VS Reflow Oven - YouTube

@adrs Thanks, the ltc2945 does not count, but it will handle a 48v pack. However, I don’t find an equivalent cjmcu-294 for it, so it too would need to be soldered. The ina226 comes in dip, but will handle at most a 24v pack.

I watched a few videos on the soldering and decided to redo my board to use the cjmcu-294 (ltc2945). I figure it will be much easier to desolder the resistor on it, than to solder the ltc2945

I don’t know anything about ground paths, vias, and traces. I just hoped that this small and low power board would be OK with auto routing. Is that a reasonable assumption? Does anyone have advice?

@GeorgeBoudreau when I redo this, is there a way to isolate the ltc2944? The sda and scl are two way, so I can’t just throw an opto islolator on there, right?

I think the Ltc2946 is better, has capabilities for isolated i2c and energy calculations.

@John_Taves. Correct, you cannot jam a few optocouplers on this device and call it a day. You can use an ADuM1251 I2C isolator but you will need to supply 3v3 on the LTC2944 side from a linear regulator that can handle a wide input range. Of course it does not need to handle 12-60 input but could be tuned to your specific setup.
The board starts to get complicated and expensive… but … this is a one shot expense. Of course you could always buy a Batrium Current momitor for a hundred dollars or more but where would be the fun in that. :grinning:

@stuart… I saw your post and did some digging. It does what you say but it cannot be used for state of charge, SOC, work.

The final word on this is drom ADI Engineer Zone:

You mentioned that you want to use the LTC2946 to measure battery current, which can flow into and out of the battery. Note that the LTC2946 current sense is one directional. When the current flows backwards the LTC2946 will see a negative differential voltage across the sense resistor, but it cannot process negative numbers. Instead, consider using a “battery gas gauge” part, such as the LTC2944, which is specifically tailored to your application. There is also C code for the LTC2944 on the product web page here (look under “tools and simulations”):

Looks like the LTC2944 is the only choice within this series although I have not dug through every datasheet.

@GeorgeBoudreau and @stuart, How irritating! I did not find the LTC2946. I thought I searched thoroughly. But even if I had found it, I would not have found the negative current problem.

How ridiculous that it cannot handle bidirectional current! I skimmed the data sheet for confirmation, but don’t find anything that would have clued me into that problem. It is true, there’s no gas gauge functionality or use case mentioned, but still… it cannot subtract!!!

If, and that’s a big “if”, my board works, I will be able to compare the ltc2944 chip summing to the ina226 uP summing. Maybe the accumulated error from sampling at a low frequency (10 or 1 per sec?) is not significant. Maybe that’s the correct assumption because state of charge can be off by several percent for all it really matters. The SOC will be set to 100%, when the first cell hits the cut off voltage, thus clearing any accumulated error. It will be easy enough to keep track of how far off it is too.

But, the ltc2945 has no breakout board that I can find (e.g. cjmcu-294), and it has QFN or MSOP packaging, which are both a PIA to solder, right?

This still leaves me with the INA226 as the top choice, because jclpcb will solder it for us. But it only handles 36v, which rather sucks for a 48v system. Is there any reason that a simple 2 resistor voltage divider cannot work?

It is such a shame the LTC2946 looks good to me, including the fact it self powers of the high voltage and can even provide connections for isolated i2c !

Still probably no use here unless we look to use it for monitoring of one way current (like solar).

So looking at the block diagram of the shunt/voltage monitor we have something like…

ADuM1251 >> LTC2944 >> SHUNT

On top of this we will also need an optoisolator for the ALCC (alarm) output and a DC-DC converter to get 5V rail for the isolated side of the ADUM chip.

The next question is what current shunt can this chip support? Whats the maximum current?

The LTC2944 datasheet says the sense input is +/-50mv which is the ‘standard’ for FL 15 currents. This gives full scale usage of ADC. The other chips mentioned have full scale of 82mv (INA226), +/-163.84 or +/- 40.96 (INA237)
The LTC2944 has 1% accracy whereas the INA226 has .1% but not will not support 14S packs.
The INA237 has .3% accuracy and supports 85v but the 16bit ADC range is under-utilized at 163.84mv FS.

NOTE: The accuracy of most high power shunts is 0.25% or 0.5%

Now to add to the total misery load.… None of these devices give true ‘State of Charge’. The LTC2944 does have a colomb counter that monitors charge/discharge but does not give SOC. Look at the TI BQ34Z100. It looks like it does calculate a closer approximation of SOC.

I have attached a quicky schematic for an LTC2944 + PS + ADuM1251, better than nothing diyBMS-CurrentShunt.pdf (28.8 KB)

Thats always a difficult thing to achieve!

Nice work on the quick circuit, could you add in the alarm output as well, thats very useful for BMS purposes.

Done… values are not set in stone. ALCC is active low but opto is whatever you want it to be.

Whis will not produce the smallest pcb or the easiest to assemble but if you want galvanic isolation you will need to compromise. If you do not care about ground isolation then you only need the LTC2944 and drive the I2C directly. With the ESP controller sourcing the pull-ups you only need a cap on the PCB.

diyBMS-CurrentShunt.pdf (31.2 KB)

@GeorgeBoudreau What’s the plan with your 2944 circuit?

Are you thinking this would be a daughter card on the controller or a different version of the controller with it built in?

Why the connecting pads for the sense± ? There’s no current through these wires.

How do you plan to fabricate this? Are the 2 other chips through hole? If so, the cjmcu-294 would be easier to use, right?

1 Like

This is only a rough draft schematic. I do not see it pairing with ESP controller board but it could be made into a small enclosure to be mounted near the shunt with I2C and ALCC going back to the ESP board.
I also see it shrunk to very small board and bolt directly to the kelvin connections on the shunt. The down side to doing it this way is the lack of an enclosure… Yes, a 3D printed version could be made but I have no printer.

this is the latest schematic with some info.
diyBMS-CurrentShunt.pdf (34.9 KB)

@GeorgeBoudreau don’t see the point of it being connected directly to the shunt. That’s too mechanically complex if you want to support many different shunts. I don’t need 8 separate modules to mount, and I don’t need another board to mount with the controller. If it is a daughter board, I am happy because that’s one less thing I need to attach.

Plus, you were just arguing how these are not terribly accurate anyway. I was concluding that it is likely that doing the sums in the ESP every 1/10th a second or 1 per sec is probably good enough to provide a SOC for most use cases. My application is an RV. Realistically if I get down to 10%, it makes no difference if that is a true 5% or 15%. Either way, I need to get some sun or turn off loads.


There are electrical reasons that could justify direct mounting to a shunt.

If you opted for an external board you must keep it within 2 feet of the shunt. This is documented in the Murata shunt data sheet.

Using a piggy-back style means you bring the full supply voltage lines back to the controller. Not a big fan of mixing digital and 48v analog on the same board.

As I wrote earlier this is a preliminary schematic. I can turn out by number of PCB variations/layouts once the schematic is locked down.

When you say “8 separate modules to mount” I assume you mean the BMS boards.

This is awesome to see being looked at, I think the feature of a shunt just adds to the completeness on the DIYBMS.

Nice keep it going

1 Like