question

matthiasu avatar image
matthiasu asked

MultiPlus/ESS: Battery current doesn't go to zero when told to

So I have a three-phase ESS setup with a large battery and a few solar chargers. When the battery is full, the BMS tells the system that Allowed Charge Current Is Now Zero Thank You Very Much, and dbus-systemcalc-py thus tells the chargers to deliver exactly as much current as my MultiPlus trio are pulling from the battery.

This part works perfectly … except that there's a residual current of 2A. This is understandable, as current measurement is not an exact science and we're talking about 120A going from the chargers to the Multis. What I don't understand is that dbus-systemcalc doesn't notice, as the battery monitor does report the 2A current, and I couldn't find a way to fix this. (Also, my BMS can't burn that much power. Nor would I consider that to be a valid solution.)

The end result is that the battery gets overcharged, some cell eventually goes above 3.6V, the protection relay trips, and the whole thing grinds to a very ugly halt.

Any ideas, other than to hack a fudge factor into /opt/VE/dbus-systemcalc-py/delegates/dvcc.py?

ESS
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

3 Answers
nickdb avatar image
nickdb answered ·

What battery and BMS is this?

Some more specifics on the system would be helpful.

3 comments
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

matthiasu avatar image matthiasu commented ·

That does not matter. At all.

The BMS tells the DVCC system that the charge current shall be zero. The system tries do comply but leaves a residual current, due to measurement errors and a non-existing PID control loop.

Given these facts the concrete BMS model is entirely irrelevant.

0 Likes 0 ·
mvader (Victron Energy) avatar image mvader (Victron Energy) ♦♦ matthiasu commented ·

Hi, sorry but no its not: we decided as a policy to not work with CCL=0.

Such change you’re suggesting should not be necessary for all supported batteries.

The way to stop charging is make the bms tell our system to work on a lower voltage.


Lowering the voltage stops the charge(current). When that works properly, there are no issues.


Trying to stop charging by controlling the current has various challenges as well as disadvantages.

I always compare this to common lead batteries: charging is stopped in a charger by lowering its output voltage. Not by putting it in current control mode.

0 Likes 0 ·
matthiasu avatar image matthiasu mvader (Victron Energy) ♦♦ commented ·

OK, fair enough, I can teach the BMS to do that.

1 Like 1 ·
matthiasu avatar image
matthiasu answered ·

So, for the lack of a better option AFAIK, hacking the fudge factor in.

/opt/victronenergy/dbus-systemcalc-py/delegates/dvcc.py, line 426 ff:

                if len(chargers) == 1:
                    # The simple case: Only one charger. Simply assign the
                    # limit to the charger
                    sc = chargers[0]
                    cc = min(ceil(max_charge_current), sc.currentlimit)
                    sc.maxchargecurrent = cc*0.95
                elif max_charge_current > self.capacity * 0.95:
                    # Another simple case, we're asking for more than our
                    # combined capacity (with a 5% margin)
                    self.maximize_charge_current()
                else:
                    # The hard case, we have more than one CC and we want
                    # less than our capacity
                    self._distribute_current(chargers, max_charge_current*0.95)

I added the *0.95 factors (other than the second one which was already present). Problem solved, or rather, circumvented until somebody writes an actual PID loop for this.

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

Mike Dorsett avatar image
Mike Dorsett answered ·

Lowering the max system voltage is good for the battery, too. Most of the corrosion and degradation occur at the extremes of charge - and the capacity difference between 3.55 and 3.65V per cell (depending on chemistry) is minimal. Once you back off from the absolute limits set by the BMS (or Cell data), then you can successfully balance a system with battery charge current ~=0. A little overshoot caused by measurement errors and sampling time will not matter as the delta volts will remain within limits. I work out max battery charge current by:

I_chg = Q_nom*4*(3.55-vc_max)

where vc_max is the maximum cell voltage measured in the last scan. Q_nom in the nominal battery capacity in Ah, and 4 is a constant that can be tweaked for stability.

1 comment
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

matthiasu avatar image matthiasu commented ·

Do you also have a formula for U_max as a function of the individual cell voltages?

0 Likes 0 ·