Sunday, November 18, 2018

Building a Battery Management System (BMS)

I've been building a Battery Management System (BMS) for my LFP battery system, and this article will go into more detail about what it does, and the equipment involved.

I'm not building my own BMS because I want to.  Well, maybe a little bit, but it's really because I'm concerned about support and repair 3 to 5 years from now.  Most of the companies building stand-alone BMSs are tiny outfits, and I doubt their longevity.    Several have already come and gone, and I know one guy's who's whole battery system shut down because of a small failed part, the company is defunct and he's stuck, quite literally, until he can buy and install a whole new BMS.  That's really incompatible with distance cruising, so I want something that is built from readily available, industrial components from companies that have been around for a while, and are likely to still be around in the future.  I want to use products where there are many more, much larger customers, who will scream much louder than me if things break and there are not fixes available quickly.  And I want flexibility so I can make changes, and experiment with different approaches to power management.  As much as anything, this is a learning experience for me.  That's the fun part.

All this led me to Programmable Logic Controllers, or PLCs.  They are made by many very large companies, and are used to control everything from elevators, to building heating and lighting, to pretty much every manufacturing facility on the planet.  You don't see them, but they are everywhere.  Our Nordhavn 60, for example, had one at the heart of the hydraulic control system.

Another nice part about PLCs is that all the parts communicate using an industry standard protocol called Modbus.  It works over a standard RS-485 link, or over TCP/IP using ethernet.  So any PLC can connect to sensors and displays from other vendors, and it all works.  And if you look closely, it turns out that many of the electrical devices on a larger boat support Modbus as well.  Victron's devices, for example, are all accessible and controllable via Modbus.  Same for Dometic chillers, FCI water makers, variable speed motor controllers, main engine controls, generator engine controls, etc.  All that stuff can be monitored and controlled via a PLC, if you want.

Sounds good, doesn't it?  I though so, but where to begin?  I had never touched a PLC before, let alone program one, or had any idea who's to use.  So how did I decide?  I looked at some of the bigger names like Siemens, Schneider, Eaton, Rockwell, and Allen-Bradley, but they were pretty expensive.  And I looked at a couple of off-brands that were pretty affordable, but started to feel a bit too much like buying a BMS from a small company.  Then I noticed that both ABT and Delta-T used IDEC PLCs in their hydraulic controls and fan controls, so I checked them out.  I figured if those two companies were happy with IDEC, they would likely fulfill my needs too.  They aren't cheap, but are more reasonably priced, and the company has been in the business for a very long time.

IDEC PLC components

IDEC control displays

So about a year ago, I bought an IDEC PLC to start experimenting and learning about them.  Since there were a wide range of possible applications, I decided to get a very full featured model that would act as a development system for most anything I had in mind.  I got one with 40 input/output channels, ethernet, multiple plug-in expansions modules, plus Canbus J1939.  The J1939 support was with an eye towards pulling data off the engine controls, and hopefully NMEA 2000 as well.  And I also got a color touch screen to use as the control panel for operation.


IDEC HG1G 4.3" color touch screen

Over the following year I played around with three different applications; wiper control that would be more flexible than the off-the-shelf controls, automated fog horn control, and steering station selection and take-control for steering controls through the auto pilot.  Individually, none could justify the cost of a PLC, but combined it starts to look really attractive.  All were successful, and served the bigger goal of teaching me how to program a PLC.

Main screen for control of wipers, horn, batteries, and auto pilot.

That brings us to the BMS which would be a real, live application, not just an experiment.  And one that would be controlling and protecting an expensive battery bank.

The first step was to create clear requirements, and sort them into features that are essential from day one, features that need to follow shortly after, but that don't prevent initial deployment, and things that are nice features, but not essential for prolonged use.  We used this approach extensively in industry when developing products, and it really forces you to clearly articulate what is minimally required to have a viable product.  In this case, it helped identify what's needed before I place the batteries on line.  In a condensed form, here's the list:

  • Voltage measurement for each series wired battery cell, or group of cells.
  • Alarming and control based on cell voltages.  Note that these actions will take place if any cell exceeds the limits.  Any one cell exceeding the limits can cause the entire battery bank to get shut down.
    • Over voltage alarm and emergency battery disconnect.  This is an action of last resort to save the batteries by disconnecting them
    • Over voltage alarm and battery reconnect.  At this point the cell voltage has lowed to a point where it is safe to try reconnecting the bank.  Note that this only comes into play when the bank has been previously disconnected.
    • High voltage alarm.  This is a warning saying that a cell has exceeded the high voltage level.  This warning should help provide early detection of issues that could lead to shutdown of the battery bank.
    • Under voltage alarm and battery reconnect.  At this point the cell voltage has raised to a point where it is safe to try reconnecting the bank.  Note that this only comes into play when the bank has been previously disconnected.
    • Under voltage alarm and emergency battery disconnect.  This is an action of last resort to save the batteries by disconnecting them
  • Display of individual cell voltage and status, plus bank voltage
  • Programmable voltage for all of the thresholds above.
  • Email when there is any change of status.
These are the features that I felt were critical to have before placing the battery bank in service.   It would keep me appraised of any changes, and include automatic protection in case things get too out of hand.

The next priority is temperature sensing, but I feel that can wait until a bit later.  In the mean time, I'll monitor battery temperature manually.  Their operating environment is very mild with winter temps perhaps down to 10C (50F), and summer temps of no more than 18C (65F).

As you can see from the list above, the key element is per-cell voltage, and that turned out to be a lot harder than I expected.  There are lots of analog voltage sensing devices available that are compatible with my PLC.  The problem is that they all utilize a common ground signal for sensing voltage.  That means one of the measurement wires needs to be connected to the battery bank ground, and the other to the pos terminal of the battery you want to monitor.  The result is that for the first battery in the bank you are measuring 0-3V.  Then for the next battery you are actually measuring the first two batteries, and need to subtract out the voltage of the first battery.  Then for the third, you are measuring three batteries, and subtracting out two.  And so on and so forth for 16 batteries.

It's a very inaccurate process for two reasons.  First, there are errors in each measurement, and when you then start to add and subtract them, the error range gets larger.  Second, the measurement scale that you need to use is the scale for the whole battery bank rather than the scale for a single battery.  If the sensor is accurate to 1%, then accuracy on a 5v scale is 50mV.  That's pretty good.  But if it's on a 50V scale, the accuracy is now on 500mV.  That's nowhere near accurate enough for LFP voltage measurements.

The bottom line is that you have to measure each cell individually to get the required accuracy, and that means that each measurement channel needs to be electrically isolated from the others.  That way the neg probe can go on the negative terminal of the battery, and the positive on the positive terminal, and it doesn't matter which battery in the string you are connected too.

Finding a voltage sensing device with fully isolated inputs turned out to be much harder than I though, and I only ended up finding one from a company called Advantech.  They have a whole line of industry control devices, including an 8 channel analog input with fully isolated channels.  The range is selectable, including 0-5v, and the accuracy is 0.1%, or 5mV.  Bingo, that's what I needed, and I bought one to try out.

Advantech ADAM 4117 isolated channel (8 ch) voltage sensor

The first pass at the BMS I cobbled together on a scrap piece of wood using whatever wire I could lay my hands on.  I set up 8 battery cells in series as a 24V battery, with each sensor channel connected to a single battery.  That let me get all the components configured and talking to each other, and verify that I was able to measure each battery in the string.  It all worked, and let me move on to programming the various display and control functions.

Proof of concept system assembled on a piece of scrap wood
To make programming and testing easier, I set up a connection for a "simulated" battery.  I installed a relay controlled by the PLC that switches the input to one of the voltage sensors.  Normally it's connect to the battery, but when you push the "Sim" button on the display, the relay switches the sensor input to an external variable voltage power supply that I have.  With that, I can dial the apparent battery voltage up and down and confirm that the PLC responds as expected, sends the desired warnings, and disconnects the battery bank when it's supposed to.

Here's the basic control, as seen through the control screen.  The home screen shows the overall battery voltage, and has buttons to get to the other pages. 

Battery bank voltage screen

The primary status display shows the state of each cell with the voltage, and an icon for alarm status.  A green square shows all good, yellow up or down arrows indicate high or low voltage respectively, and red up or down arrows indicate over or under voltages respectively.

Detailed battery status showing one cell with high voltage

And here is the configuration page for setting various alarm thresholds.
Configuration screen for setting all battery thresholds

Any change in status that lasts more than 30 seconds gets reported via email.  Here's what the body of the email looks like, providing all the same details as the control screen.

Cell Voltage Status
1  3.283 Ok
2  3.284 Ok
3  3.283 Ok
4  3.281 Ok
5  3.283 Ok
6  3.282 Ok
7  3.283 Ok
8  3.283 Ok
9  3.283 Ok
10  3.282 Ok
11  3.281 Ok
12  3.280 Ok
13  3.493 High
14  3.283 Ok
15  3.283 Ok
16  3.283 Ok

Once the basics were proven to work, it was time to build up the real system.  I had an old battery box designed to house eight L16 lead acid batteries that were the power source for an earlier incarnation of the house power system.  By luck, 32 CALB 180Ah cells fit in it perfectly with just enough space left over for wiring and the disconnect relay.

32 CALB 180 cells fit nicely in an 8 cell L16 box

Below is a diagram of the battery layout.  They are configured as 2P16S.  The "2P" means two batteries wired in parallel, which gives 320Ah @ 3.2V building blocks.  Then "16S" means sixteen of those building blocks wired in series, which brings the whole bank up to 320Ah @ 51.2V, or 16kwh of power.

Battery cell layout in 2P16S configuration

For the BMS, I bought an electric box with hinged and latching door, and mounted it to the side of the battery box.  All the BMS components will be in the electric box, with a pass through for wires between the electric box and battery box.

Equipment box to house BMS components

Built up BMS - wires will be dressed up later

One cumbersome part of the build has been fusing all the voltage sense wires.  All are at elevated voltage with respect to ground and to each other, and have very high current capacity delivered from the batteries.  As such, they all need to be fused.

Fuses for all the battery voltage sensor connections.

Another feature I added is an override switch for the main battery relay.  This is for service and for emergencies in case of a PLC problem.  It has three positions;

  1. Automatic where it is controlled by the PLC
  2. Manual Off where it is Off regardless of the PLC
  3. Manual ON where it is On regardless of the PLC
Battery disconnect relay over-ride

Normally it would be in the Auto position, but if I need to update the PLC, which I expect to do pretty often for the foreseeable future, I can switch it to Manual On to maintain battery power to the house and inverter while I mess around with the PLC.

Inside the battery box with the batteries and other high current wires is the main battery disconnect relay.  It's rated for 500A @ 60V, so well suited for the job.  The only down side is that it draws a lot of power when activated, which is all the time.  About 18W to be exact, which is about 150% more than the whole rest of the BMS plus color display screen.  There are some nice, much lower power devices available that others are using for LFP systems, but their max voltage rating doesn't support a 48V system.  So for now I'm stuck with this, but it will be on the top of my list to find a replacement.

Battery disconnect relay and connected battery cells

The results so far are very satisfying.  I have all the required functions working, including email messages when anything changes.  And I have tried slowly charging the bank to an artificially established threshold to verify that the bank disconnects.  I also checked the measured cell voltages against a NIST calibrated Fluke meter that reads down to 1/10th of a mV.  The BMS is reporting battery voltages that are accurate to within 1mV, and a total bank voltage that is accurate to within 20mV.

The next step is to charge the batteries up and manually perform any battery balancing that might be required, then move the package from my shop to the house basement for final installation and connection to the power system.  I'll keep the lead acid bank in place for a while with an A/B selector switch to control which bank is powering the house.  This is, after all, our primary source of power, so I need to be able to get it working in short order no matter what.  Otherwise I have to run a generator all the time which is really wasteful.  With snow cover, the old batteries probably won't come out until spring

I expect a number of people are wondering about cost on this approach.  It's not the cheapest approach - not by any means - but that wasn't a key objective.  Cost definitely matters, but I'm willing to pay more to have something that is maintainable and repairable.  That was the primary goal.  At the same time, I'm not sure it's really much more expensive than some of the packaged systems. 

Right now there are a few things in my system that are more expensive than they need to be, or than is required for a 24V system.  For example, the fancy PLC that I bought was about $650, but not that I'm ready to put this system into production use, I have ordered a simpler model specifically for the BMS that is $350.  For a 48V system, I needed two of the voltage sense units, and only one is required for a 24V system.  I also had to add a 48V to 24V DC power converter to power the BMS off my 48V batteries.   So if you get rid of all that and reduce it down to what's needed for a 24V boat system, here's a rough breakdown:

PLC - $350 (a lower cost model suitable for the BMS)
Display - $310
Voltage sensor - $230 (only one needed for a 24V system)
Fuses and holders - $50
Battery disconnect relay - $300 estimate, depending on what you get.
Enclosure and misc - $200

All told that's what, $1440?  I have been figuring on $1500 to $2000, so I was in the right ball park.

For comparison, the Lithionics 24V BMS sells for around $2600.  So cost-wise I think I'm actually in pretty good shape.  And the nice thing is that if I decide to double the battery capacity, the only cost would be the batteries themselves and another enclosure.


  1. Great write-up! Nice to follow along with your methodical approach and see how you arrive at better and better approaches.

    You don't specifically mention this, but I assume you have separate charge and consumer buses leading to and from the battery bank, with the corresponding cut-off relays mounted in the appropriate bus. Such an approach allows the disconnect of a charge source when batteries are getting too charged, while keeping all consumers happily connected.

    For my cut-offs, I decided on latching relays. While you could use an NO for the low voltage protection, constantly engaged until condition triggered, this would not just consume energy, but also put undue strain on the relay.

    You also don't want to rely on power to keep an NC relay open, after triggering, as that could further drain the bank, eventually allowing the relay to close again, before the situation had been corrected.

    As I mentioned in another comment, once the over-voltage situation has been triggered in my system, disconnecting the charge sources is just the first step. If the condition does not improve (quickly), I trigger another relay to engage a heavy consumer, just to bring the SOC down.

    An enhancement you may want to consider is to use a coulomb counter, instead of just a voltage level, to decide when to re-engage triggered cut-offs. This will allow you to get further into "safe territory" before reconnecting and possibly re-triggering the error situation.

    Finally, if you're not using the boat full-time, having a program that actively manages the SOC when you're away, with potentially very different parameters than during use, could be useful. I'm planning for several programs, each for a different usage scenario.

  2. Thanks for the comment, Frode.

    I've decided not to have separate charge and discharge disconnects, and am instead directly controlling the chargers and inverters. On this first system for a land-based home, there are three charger sources (two solar chargers and the inverter/charger), and they can be controlled via a control signal from the BMS. And the only load of any significance is the inverter which can be similarly controlled. The goal is to have all my charger settings such that the BMS never needs to take action in the first place. My warnings will serve to alert me when that's not working. So a disconnect will only be needed if something is broken and has gone nuts, or if I've programmed something incorrectly which is much more likely.

    For discharge, I'll dial down the Inverter LV disconnect so it pulls the plug around the same time the battery system would. The remaining DC load is pretty small. In fact, I have been slowly removing DC loads, and need to check to see what is still left on it.

    Latching relays are a definite possibility. I'd be interested in what make/model you are using. I think the relay selection is all about power consumption and how things behave under various failure modes. With complete loss of the BMS, and powered relay will open, so there is a deadman's switch aspect to it which is good. But that comes at the cost of continuous power consumption. A latching relay eliminated ongoing power consumption, but requires power and BMS presence of mind to disconnect. So in a BMS failure situation, you could easily find the battery left connected. My leaning is towards a powered relay, but with lower power draw, and I have see a few - just not in 48V.

    There is always a load on the system, so if I need to shut down chargers, I'm not worried about the batteries staying too full for too long. And if they do, it's because something has broken, and the battery disconnect will protect against that.

    Coulomb counting is something I will likely experiment with at some point.

    With this first system, there is no such thing as storage, so I don't need to worry about batteries left at a high SOC for extended times. Night time comes reliably every day, and will cycle the batteries. Insufficient sunlight is the bigger issue, and that's where generator autostart comes into play. The trick will be to set the start threshold correctly, and I expect it will require a little experimentation. But the auto start controller has good support for different voltage thresholds lasting for various lengths of time, so I'm confident I can get it to work reliably.

    That said, when I roll this into the boat BMS system, I an thinking about a "storage" mode that will operate the batteries at a lower state of charge.

  3. Nice write-up, thanks for posting it.

    Regarding contactors, you might consider a dual-coil design. They use a big coil to move the switch, and then they use a little coil to hold it in place. You should be able to get <2W consumption at 400A or so. If you need more than that, you could parallel two smaller ones. I've been happy with Gigavac's line, and they make them at 48V and up.

    Regarding latching contactors, I don't think these are a viable option if you want the thing to fail safe.

    I am curious if and how you are handling pre-charge. You didn't mention it, but this is a big issue during testing (when we are often cycling the contactor) and it is also an issue during maintenance (when we intentionally isolate the battery for a while). It is possible that your loads are too small to create much of a transient, but I think you should assess this if you haven't already, because most larger inverters have pretty big buffer caps that will need to charge. Most of the expensive contactors can only take on the order of tens of actuations with current, so it's possible to be well on your way to damaging them by the time testing is complete.

    Regarding fusing, another option a lot of people use for sense wiring is just to elect a reasonably small gauge for the wire. Said wire IS a fuse! The right wire coating can keep said wire to basically a "contained melt" rather than something that might sustain other combustion.

    1. Thanks Ben. I appreciate the leads on lower power contactors. And the more I think about it, I'm not comfortable with a latching contactor either, so that's off the table now.

      You are correct that I don't have any pre-charge circuit, and I have noticed them in other designs. I know they are to reduce arcing, but didn't realize contactors have such different ratings when operated under load. Time for me to take a closer look at the specs.

      Have you seen any details on pre-charge circuit designs? I'd welcome any suggestions.

      Another thing I would welcome any suggestions on are inexpensive temp sensors. I have samples of three different styles on order to check out, but am not really happy with any of them. I'm also not sure how to best attach the probe. I think something stuck to the side of the battery case would be the best sense point, but I have not had good luck with that style staying attached long term. They always seem to fall off. Batter post connections are an option too, but I would think they are not as good a sense point. But maybe that's not true. And I have had trouble finding one that can accept an 8M (5/16") bolt. They all seem to be 1/4" or smaller.

    2. Re: pre-charge, I am only aware that there are some the EV guys use, since they are plugging their car in all the time.

      What I did is make a very manual pre-charge circuit: a power resistor with an intermittent pushbutton switch that puts it in circuit. When it's time to reconnect the battery, I hold down the "charge" switch for 30 seconds, and on my system that's enough to bring the inverter caps up to voltage and eliminate the arc. (The arc is HUGE, by the way! Don't ask me how I know...)

      This works well because a battery disconnect is an emergency in my situation: it should never happen. If it does, I am going downstairs and figuring out what went wrong, no matter what. So the hassle of a manual pre-charge is nothing on the margin.


    3. Re: temp sensors, are you using these only for an emergency disconnect, like if the battery gets hot? Or do you want to detect cold weather and also reduce or shut down charging, etc.?

      In my case, I only care about thermal runaway, so I am using a string of cheap thermal fuses in series. I just tape them around the batteries in various spots, enough that they will open the main contactor if any portion of the pack gets above something like 140F. My cells all have space between each of them, though, so it was pretty easy to snug them in between each pair.

      Consequently, I didn't look into fancier thermistors or other probes. I do have a single cabin thermal probe that is tied into my Victron gear, and in theory I could use that as a decisionmaking input. So far, though, I have found that my insulated battery bay never really gets that cold or that hot, so I've not had to fool with adding any more automation. I haven't put the pack through the depths of a real winter, though. Yet!

    4. Victron has a pre-charge feature built in, and I think Lithionics as well. I'll have to give some thought to how automated a pre-charge I want. It would actually be pretty easy to have the PLC close a relay to cut in a pre-charge resistor, then after some time delay close the main contactor and release the pre-charge relay. I could also measure the load-side voltage and pre-charge up to some voltage level. I'll probably experiment manually, then decide how automated to get. In the mean time, I'll be sure to open the breaker before I turn on the battery system, then use the breaker as a switch since it's designed for that.

      Re temp sensing, I want to accomplish a few things.

      1) Detect a battery that is getting too hot, indicating some sort of serious failure. This is a safety protection, and what you are accomplishing with your thermal fuses.

      2) But I also want to get a close read on how the battery temps vary during use, particularly when charging. It's not an issue in the house system because my basement stays cool year round. But on the boat I have a mild concern over the battery operating temp and it's impact on battery life. I'm comfortable that the ambient temp will be OK, but I don't yet have a good handle on how much self-heating to expect from the batteries themselves, especially as charge rates get higher. So I want to monitor that.

      3) It's possible, but so far I think unlikely, that I'll adjust operation based on temp. There is an argument that temp should be taken into consideration is setting some of the charge termination voltages. But my goal is to stay far enough away from the battery's full charge point that it won't ever matter.

    5. (Sorry, I don't know why it thinks I am "Unknown.")

      Re: automation with your PLC, sounds like you have a nice option space there. I agree, do it manually first and see what you think. Keep in mind that you have to turn off the inverter/charger as well in there, if it will otherwise try to bring itself online. Another note: at least with Victron I/Cs, you can also pre-charge by bringing ACin1 live. (And maybe you can even do it if your MPPT is enabled and on the bus, I've never tested it, probably because I haven't had an unattended shutdown in the lifetime of my pack!)

      Re: temp sensing for battery heating, my suspicion is that you will see almost no heating unless you have a really huge charge rate planned. I posted my ~0.3C data to CF a while ago, but IIRC it was under 2-3F after several hours. You are probably more likely to get ohmic heating from your fuses, breakers, and relays if they are in the same shared area and that area isn't ventilated. But, to your point, it's certainly worth verifying. I might just put a few sensorpushes in there in strategic spots and watch the data for the first few months or something. (I have a single sensorpush in my battery bay permanently, and I get a push notification if the temp gets too high.)

      Probably the more critical thermal concern, IMO, is to test your pack "on the bench" with a thermal camera to find wiring issues and identify any premature failure on new cells. Snap one up if you don't have one already; they're useful in so many ways and great fun.

    6. Back in 2012, EVtv posted a chart showing their recorded temperature increases in CALB cells under various charge rates. Essentially, it shows very little increase at charge rates of 0.5C and below.



    7. Awesome links, Frode, thanks! That conforms what I have heard anecdotally.

  4. I just checked out the Gigavac contactors. They are pretty much the same as the TU contactor I'm using now, but significantly lower power consumption. 2W vs 18W to hold it closed. Looks good. Now I just need to figure out this pre-charge thing.....

  5. Also enjoyed the write up. I built something similar using different components. The PLC was a Triangle Research Nano-10, the ADC basically the same as yours, a generic 8 Input from Wayjun and the human interface on HMI Pad by SweetWilliam.

    The Nano-10 has an Ethernet connection and software allowing a user customizable web page for monitoring and control. If you were an HTML guru, lots possible, but I'm not. So the displays were very utilitarian. The HMI Pad app was not required for the running of the BMS, but what it optionally provided was data logging and display. I kept a couple months of data and you could go back and look at graphs of any data monitored by the PLC. And relative to HTML, very easy to make nifty displays. This product is free to try, pricy but worth it to use.

    I noticed on your pictures it looks like you are only taking one wire to the cell for say C3+ and C4-. Fully connected and working, this works. However I think you will be surprised if you remove one of your fuses and find both cells still reporting voltage. Basically with my example above, the ADC will report C3 + C4 / 2. I discovered this by accident, and filled the cuss jar that day. The reason is there are resistors in the ADC creating a voltage divider. You are using a different brand than I did, so perhaps it won't apply. I ended up running separate wires for every ADC input.

    One solution to the precharge is to put another small battery in parallel with the LFP bank. But wired on the inverter side of the disconnect. My bank also started the main engines on a 44' trawler. This also protected the alternators. The drawback is during discharge, the LFP bank trickle charges the small battery. In the face of our refrigeration loads, it got lost in the rounding error.

    I used fuses like you did on every cell tap, but it was not fun. There is a product in the auto industry called fusible links. It's just wire inside a jacket with an extremely high temp rating. I wanted like 1/2 or 1A wire, but could never find that.

    I also used RS485 activated relays to switch in power resistors (bell wire) drawing about 10A off a cell for balancing. This only designed for initial and maintenance balancing, not normal operations. It worked OK, but probably not worth the effort. Short of cell failures (I had 2) the bank never needed balancing after installation.

    Good luck! Email me if you have questions. Bob at Ebaugh dot net.

    1. Thanks for the comments. They are very helpful. There are two sense wires (plus and minus) for each cell - actually each set of paralleled cells. So the Plus sense for C3 is electrically the same as the minus sense for C4. But they are still different sense wires for each. Regardless, I'll double check your test. As I was hooking it up, each voltage started to read when I hooked up the second sense wire, but I'll still go double check by removing fuses in the middle of the string to see what happens.

      A bunch of design approaches utilize a lead acid battery in the system somewhere, but my goal is to run completely independent of any legacy batteries, so I've elected an approach that doesn't use them.

      I think I'm going to order a Gigavac contactor and swap it in before I put the pack on line. The reduced power consumption is very compelling. I'm thinking it would then be interesting to run an experiment with the removed contactor to see how many battery connects it can do into an un-powered inverter. I'd be real interested to see how long it lasts. The contactor has a graph that shows how many closures it can survive at various current levels. What I don't know is what the inrush current will be into the inverter as it charges the caps.

      For now I can simply turn off the DC breaker to the inverter before I activate the battery pack. That way the breaker will be taking the inrush load, not the contactor. But I think I'll build some sort of pre-charge feature. It shouldn't be too hard with the PLC.

    2. Let us know if you do that contactor experiment and what you find!

      Note that you said experiment might also put some wear and tear on your overcurrent protection, although if that occurs it will probably be in the direction of failing safe.

      I have heard that a good rule of thumb is to assume 30 times the steady-state current for inrush, in the absence of the ability to take a direct measurement. If you are able to scope it with a clamp or a shunt, it would make for interesting reading.

      I know on my Quattro, I can see the big electrolytic caps when I open up the panel, so you might also be able to just get the sizing and make a rough calculation, if you've got your interconnect Ri well-characterized at this point.

    3. You will need a slight imbalance in the readings to see. My ADC is specified as >200K ohms input resistance the ADAM datasheet menioned a more specific 800K ohms. Maybe this will help:

      In4- I----------------------------C4-
      800K Ohms
      In4+ I----------------I
      IIII-----------C4+ and C5-
      In5- I----------------I
      800K Ohms
      In5+ I---------------------------C5+


      1) They were isolated inputs until you put a 6V battery between IN4-/IN5+ and tied 4+ to 5-
      2) If all the wiring remains it works perfectly, the resistors are minuscule.
      3) But if the single wire to C4+ and C5- opens, you have a voltage divider each reading 1/2 of C4- to C5+
      4) If the cells are about the same voltage (likely) the wire failure is not detectable

      Hope my ASCII drawing helps....and while I'm 90% sure you will see this, I'm not certain.

    4. I think it will depend on the impedance between the adjacent channels, right?

      I'm also seeing 20M ohms input impedance in the specs for the ADAM 4117. Where are you seeing 800K? And I don't see any spec for inter-channel impedance.

  6. There isn't any impedance between the ADC channels...unless you make it. The spec I quoted was from this link:

    Pull one of your fuses and let me know what you see....

    Is there a way on Blogger to get an email if this thread is updated? I don't see one, so I have to remember to come back and check.

    Best. Good luck!

  7. I'll be back in front of the BMS in the next day or two and will definitely give it a try. That's also very interesting to see the difference in input impedance between the spec you referenced and the 4117 manual that I have. Makes you wonder.....

    When you post a comment on Blogger, there is a check box off to the right for "Notify me". If you check that, you should get email when there are new comments.

  8. Replies
    1. Glad you found it. Did you see the new blog entry with the results of the experiment you suggested? I'm guessing it's all about the degree of inter-channel isolation in the particular sensor. I think you said you were using a Pi sensor of some sort? Would you have an exact model?

  9. Where did you get your fuse holders? I I have been trying to find some that can be crimped inline with 22awg wire.

    1. Hi Josh,

      Sorry for the delay. I've been getting spammed on comments, so had to put them under moderation and approval, hence the delay in yours getting posted.

      I got the fuse holders (and a bunch of other stuff) from Newark Electronics ( They have quite a range of product. The particular fuse holder is part number 12J4031.

      My fusing system works, but I'm really not happy with it. I don't like all the fuse holders dangling, making for what seems a sloppy build. I was originally looking for DIN rail mounted fuse blocks but couldn't find them at the time. Plus, with 32 fuses required, I wanted them to be reasonably inexpensive.

      Next time I'll explore the fuse blocks more. Someone also suggested just using the light gauge wire itself as a fuse, and that's worth considering, though it fundamentally seems wrong.

  10. Very interesting and a well thought through approach!

    Two questions:

    1) do you plan to have some sort of balancing done to the battery also? Some balancing resistors controlled by the PLC perhaps?

    2) do you plan to count the state of charge amps in/out with the PLC or is this done externally?

    1. Hi Andy,

      Good questions. I'll do a quick blog post to answer since they are of general interest.

    2. Hey Peter, we’re you able to get the IDEC PLC to receive info from the NMEA 2000 network? I have been thinking about a raspberry pi or IDEC PLC to gather my engine info and display it digitally.

    3. Hi Mike,

      Sorry for the delay on your comment. I have moderation enabled and I have to approve comments before they get posted. You can thank the spammers for that.

      Anyway, the answer is yes and no. I got the Canbus interface working and have the IDEC PLC sending AC power info on NMEA 2000, but I had to do a pretty big hack to get it to work. And 90% of the N2K messages cannot be received but the IDEC PLC. The IDEC implementation is really very limited, and unfortunately in ways that prevent it from using the extensions to Canbus that make up most of N2K. Even for J1939, which is it's intended use, it's a very restrictive implementation. I have complained to IDEC, but haven't gotten any real response. I haven't pursued it yet, but there are other vendors who make canbus interfaces that can be controlled via Modbus, and I hope to find one that it more suitable.


Make comments here