Custom Built BMS

Custom Built BMS

A battery mangement system is required to ensure that no cell in a pack configured in series exceeds it’s rated voltages. Typically to accomplish this, a BMS is wired into the input/output terminals of a battery and all current is routed through the unit thus allowing the BMS to disconnect the battery from current sources or loads. The problem is that with high power applications, routing the full system current through a BMS requires the BMS to have a massive power handling ability. The result is lost effeciencies, heat, and poor system performance.

Our approach:

Our solution is actually far simpler than it may seem at first sight. As part of our Off-Grid control system, we have the ability to turn my inverters, battery charger, and other devices off via PLC Control. Instead of simply cutting off the power to everything like a typical BMS would, we can selectively disconnect individual components causing the issue in the first place.

Using PLC IO modules to individually monitor each cell was not practical – we are using CLICK PLC units in this system, which their analog modules share a common ground across each module, which is also a common ground as the power supply negative. The problem here is that the analog input modules max out at 10 volts, so after the first 3 cells of our battery bank, we would be out of range.

In our initial testing, we used a pair of relay modules that were controlled via PLC. Essentially we built a multiplexer using relays. We connected together these relay modules in a way that would prevent us from shorting out any cell, so as to avoid a catastrophic failure. Then with some simple programming, we were able to select between each cell of the battery pack.

Common Grounding Issues

Let’s touch on the issue of the shared grounding within the PLC. This is perfectly fine in industry because sensors, transducers, & meters are designed to work on the common ground system at either a 4-20ma range or a 0-10v range. In our case, we introduce a battery pack that operates at neither of these ranges. As a result, some customization is required in order to make the system work how we would like.

To solve this issue, we use a digital panel meter that has a 4-20ma Output. This panel meter can accept an input of 0-60v and scale that into the 4-20ma signal. In addition to that, the input to this panel meter is isolated from both the power source as well as the 4-20ma signal output. We have now achieved isolation from the battery pack to the PLC system. We use 2 of these panel meters in the system, one that is setup to read the overall battery voltage, and the other one is setup to read individual cell voltage on the cell that is selected with the relay module.


You may be wondering – “When do they know when to run through the relays and measure each cell’s voltage? How do they know if one cell goes over or under its rated voltage?” Simple. We have a traditional BMS in the control panel that is only rated for 10a running through it. It monitors every cell and when there is abnormal behavior, we can detect that the BMS has opened it’s contact. At this point we can trigger within the PLC to run through each cell in the battery bank, collect the values, then determine which one is out of range. At that point we can then have the PLC decide whether or not I want to turn off inverters, chargers, solar controllers, etc. We can also determine if now we need to send a signal to start the generator and charge the batteries.


So after some careful forethought, we bought all the parts and gave this theory a good test on the bench. In the video above, you will see that it worked out pretty well. At this point, we had not yet learned that there was a shared ground between the input signals on the PLC and the power supply to the PLC, simply because it was not specified in the product spec sheets. Since we were running off of a drill battery for my testing, I had no idea that this ground was being shared.

After connecting on to my actively running system, only after blowing the first 6 fuses did we realise that the 0v of the PLC module and the power supply 0v are tied together internally. It was quite spectacular to see a shower of sparks come out of the PLC vents as the fuses that are integrated into the relay board blew, but the part that amazed us the most was that the plc was still working.

Since the cells are connected in series, what was now happening was when we selected the negative and positive terminals of the second cell and connected them into the 0-5v channel of the PLC, the positive current of the first cell was now shorted to the negative of the first cell through the shared ground connection within the PLC and sparks began to fly. This is where we had the idea that using the panel meters that isolate the input from the 4-20ma output, we would effectively break the short circuit that was created, thus allowing us to sample multiple sources without having to worry about causing shorts. In the end, the PLC is still in use, however channel 1 no longer works.