Jump to content

Featured Replies

Posted

As Coulomb mentioned, we have been working on a set of firmware patches to address the "kettle cut-off" or "premature source switching" problem. He also mentioned that we had a major setback when we bricked an inverter in the process. But as of today, I am testing the first working non-bricking development version (YF1_73.00e). Hoorah! But there are some aspects of it that I'd like to run past you gentlemen.

First, we can't decide whether to call this feature KettleKomp™ or AussieBrew™? ;)

Second, we're not sure how well it is going to work on all the many and varied Axpert systems out there. The math challenged can skip the fine print below.

We currently calculate:

voltage_threshold_compensation = battery_current * guestimated_internal_resistance

where

guestimated_internal_resistance = k * (absorb_voltage_setting[26] - float_voltage_setting[27]) / max_total_charge_current_setting[2].

where k is a constant. I tried k = 1 and it was too low, at least for my system. I'm now trying k = 2.

When there are parallel or phased machines, battery_current and max_total_charge_current_setting[2] are summed over all machines.

We're trying to avoid having to provide a user interface to allow setting the internal resistance, as this would be very difficult. This formula is based on the idea that at least some part of the difference between absorb and float voltage settings is due to the internal resistance of the battery causing voltage rise at the maximum charging current.

 

We're asking axpert owners to help us by telling us how many volts (including tenths of a volt) your battery sags by, when you turn on your kettle (or other heavy load); what battery current your kettle draws; and what your values are for settings [26], [27] and [2] (the latter summed over all machines).

 

Edited by weber

  • Replies 54
  • Views 9.8k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Thanks to everyone who contributed data. I have enough now to be able to determine that the best predictor of internal resistance is not k * (V_absorb - V_float) / max_charge_current, as I thought it

  • This shows both true and compensated (with the flashing "k") battery voltage, while boiling the kettle.   This shows how we piggy-backed the setting of compensation strength on the cut-

  • Gabriel_2018
    Gabriel_2018

    Ok. I have just tested: Drop Voltage: 1.41 V Current: 121 A 2.   70 A 26:  28.7 V 27: 28.0 V  

Posted Images

But internal ressistance depends on  battery capacity. For example, if your system were 12 kWh, internal ressistance would be 6 mohm. Then, do you use parameter (2) to know the capacity of battery?

Edited by Javi Martínez

For example, for lead acid batteries if we have a Max charging current by 120 A, can de suppose that battery capacita is round 1200 Ah, knowing whith that kind if batteries charging current use to be 0.1 C?

  • Author

Hi Javi. I must point out that we do not have resources to provide patched firmware for 24 V Axperts. But your data is still valuable. Thanks.

As mentioned in the fine print above: We hope to estimate the internal resistance as k * ([26] - [27]) / [2], where k is a dimensionless constant close to 1.

So what I'm doing with the data provided, is calculating the ideal value of k for each system as follows:

k = kettle_volt_drop / kettle_current * [2] / ([26] - [27])

In your case we have k = 1.41 / 121 * 70 / (28.7 - 28.0) = 1.2

In my case k = 1.6. From other systems I have k = 0.9 and k = 1.6. These are all LFP systems. It would be good to have some numbers from lead acid systems, and from very large and very small systems.

I can see already, that a single fixed value of k is not going to be very satisfactory, but it is way too much work to patch the firmware to add new parameters, because you must find space in EEPROM for them, and arrange for them to be saved and restored and communicated between parallel machines, and you must provide an LCD interface and serial commands to set and read them.

So what I am working on now is using the least significant digit of the cutoff voltage (parameter [29]) to choose between 5 different values of k, which can be considered the strength of the voltage-threshold compensation. Something like this:

.8 or .3 for weak          (k = 0.8)
.9 or .4 for medium weak   (k = 1.0)
.0 or .5 for medium        (k = 1.25)
.1 or .6 for medium strong (k = 1.6)
.2 or .7 for strong        (k = 2.0)

So at worst, you might have to choose a cutoff voltage that's ±0.2 V away from the exact voltage you wanted, so as to get the compensation strength you want. I note that it's best to err on the side of weaker compensation. If it is stronger than you need, you will end up abusing your battery.

But I need data from more and different systems so I can choose a suitable set of 5 values for k.

Hi , I don't know the Axpert firmware at all . Would your kettlekomp not benifit from a time delay of sorts . Under a heavy drain and the batteries drop below the set then a 30sec interval or whatever until the low battery condition is activated

  • Author

Hi seant. There already is a time delay. What we're doing is in addition to that. We could have just increased the time delay but that could lead to battery abuse.

  • Author
23 minutes ago, plonkster said:

You guys are essentially making Dynamic Cut-Off for the Axpert :-)

Yes indeed. But not only dynamic cutoff, also dynamic switching between battery and utility, in both directions. That is, when determining whether to stop powering the loads from the utility and switch back to the battery, it will compensate for the fact that the voltage may only be high due to high charging current (times internal resistance).

I'm keen to hear what you think of the way we are implementing it. What possible problems can you foresee?

1 hour ago, weber said:

I'm keen to hear what you think of the way we are implementing it. What possible problems can you foresee?

The Victron way is to ask the user to enter some voltages corresponding to 0.05C, 0.7C and 2C and then it fits a function of some kind through it (linear, spline, I don't know) and then the cut-out is determined by that function. This appears to be exactly the luxury you don't have: Configuring multiple values :-)

  • Author
2 minutes ago, plonkster said:

The Victron way is to ask the user to enter some voltages corresponding to 0.05C, 0.7C and 2C and then it fits a function of some kind through it (linear, spline, I don't know) and then the cut-out is determined by that function. This appears to be exactly the luxury you don't have: Configuring multiple values :-)

Correct. The Axpert doesn't even know what C is. i.e. there's no way to tell it the battery capacity. Hence my hack that estimates internal resistance using what I've got, i.e. Ri ≅ (absorb - float) / max_charge_current, then tweaks it (in an obscure manner) using the low bits of the cutoff voltage setting. I'm assuming that cutoff voltage settings really only need 0.5 V resolution (for nominal 48 V batteries). LFP is probably the only chemistry where you might like slightly finer control than that, over cutoff voltage.

  • Author

I guess the question is: "What's the procedure that lets the user decide what those low bits of the cutoff voltage setting should be?"

It is: Note the battery voltage and current immediately before and after turning on the kettle. Calculate the ideal value of k using

k = kettle_volt_drop / kettle_current * max_charge_current / (absorb - float)

Choose the value of k in the table, that is just smaller than the calculated value. Then make the smallest change to the desired cutoff voltage setting so that the tenths-of-a-volt digit is one of those that code for that value of k in the table. Max change ±0.2 V.

If the calculated k value is not close to any of those in the table, consider changing the max_charge_current setting. Recalculate k using the new setting.

Edited by weber

5 minutes ago, weber said:

I guess the question is: "What's the procedure that lets the user decide what those low bits of the cutoff voltage setting should be?"

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.

(I wonder if anyone knows where this is from :-) ).

  • Author

I cheated and googled it. It's Python religious dogma. :lol: There are long posts trying to explain what the hell the difference is between "complex" and "complicated", and how one could possibly be traded off against the other, and why one is better than the other. It looks like there is a serious conflict between these two Python aphorisms:

1. Complex is better than complicated.

2. If the implementation [of an aphorism] is hard to explain, it's a bad idea.

How do you think the Python aphorisms might apply here? Another method for choosing k is simply trial and error. Start with the lowest k value, and if it still annoys the hell out of you by tripping off when you boil the kettle, go up to the next one. Repeat until it stops annoying the hell out of you or you run out of k values.

An option is to only use two k values, say 0.8 and 1.6, and use even and odd decimal-place digits of the cutoff voltage setting, to choose between them.

But I need more kettle sag data so I can make an informed decision. Another Python aphorism: In the face of ambiguity, refuse the temptation to guess.

Edited by weber

When I arrived to the factory I did some tests for a lead acid battery 48 V 1200 Ah C10. It´s not an Axpert system, 3xSMA SI 6.0 + SMA STP 10.000, but i think that the drop voltage doesn´t depends on the system. Well, results were:

Current 45.79 A    Drop: 0.53 V 

Current 97.42 A    Drop: 1.21 V

Current 207,58 A  Drop: 3.07 V

 

Internal resistance is round 12 mOhm.

  • Author

Thanks Javi. This would only be useful if you can also tell me the system's settings for absorb voltage, float voltage and maximum charge current.

What I have seen is the possible relationship Max Charging Current and Ri for lead acid.

Ri is round Max Charging Current/15 mohm if you set Max Charging Current = Capacityx0.15.

For example: For a 48 V a 300 Ah capacity, it will have a max charging current of 45 A. 45 A/15 = 30 mohm.

 

Edited by Javi Martínez

There is an error in calculations above.

Correct, for lead acid battery, would be Ri=2,160/Max Charging Current

Then, for lead acid battery, you could try: 

voltage_threshold_compensation = battery_current * 2,160/Max Charging Current

Edited by Javi Martínez

  • Author

Of course the scaling factor (like 2160) will be different for different chemistries. I'm using a constant times the difference between absorb and float to give me that scaling factor. The difference between absorb and float is only 1.5 V For my LFPs. We see it is 5.2 V for those lead acids. This is a bit too effective. I need k = 0.415 for those lead acids, to make my formula work. 0.415 * 5.2 = 2.160 (gives ohms instead of milliohms). So already I must rescale my choice of five k-values to maybe 0.4, 0.63, 1.0, 1.6, 2.5. I like to use values from the R10 series (like fuse and circuit-breaker ratings).

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...