72.70b Patched Firmware Description
[Edit: Superceded by later versions. See the Firmware section of the index post
. But the following is the only description of these bug-fixes and features, which are retained in later versions.]
LiFePO₄ and Lead Acid Patched Firmware
This post describes both the LiFePO₄ (LFP, Lithium Iron Phosphate) and Lead Acid patched firmware for PIP-4048MS, Axpert MKS 5kVA and similar machines with other names. It is based on Voltronic's 72.70 firmware, which is supplied with newer machines that have single (not dual or triple) MPPTs (Solar Charge Controllers) that are capable of solar charging at up to 80 A. We believe that it is safe to use on all single MPPT post-2013 machines. [Edit: We have also used it safely with machines that were originally supplied with firmware version 73.00.]
and disclaimer. It is possible to set the total charge current to 140 A, which may be beyond the capacity of your hardware. I don't believe that this is a problem, since the Solar Charge Controller (SCC) will limit itself to its own hardware capacity. All our testing has been on an early 2016 machine which came with 72.40 firmware, and no adverse effects have been detected to date, apart from the 60 A current limit noted below in the section headed "SCC Compatibility". So it all should be safe, but caution is advised particularly during initial testing.
This patched firmware has been developed mainly to overcome a bug in the charging algorithm for these machines. The bug manifests itself as not charging the battery fully. When charging from solar, the charge will often transition from bulk/absorb stage to float stage far too early, often in the first few minutes of charging.
The reason has been traced to a minor bug in a function far removed from the main charge control function, which is presumably why it escaped detection for so long. It's also why we thought that the manufacturer was ignoring the battery voltage termination condition. In fact, they weren't ignoring it; the typographical error (less than instead of a greater-equals) means that they compare against the float voltage setting less half a volt instead of the bulk/absorb (CV) voltage setting less half a volt, which makes the voltage criterion ineffective.
Our patch fixes this typo, which effectively re-introduces the battery voltage termination criterion: the battery voltage must be near the bulk/absorb voltage setting (parameter 26 on the LCD menu) as well as the charge current being at the low value. This means that the absorb stage cannot complete until the battery is close to or above the required absorb voltage. This bug is more likely to be seen when the maximum charge current setting is high; as a result, it seems to be less commonly seen with lead acid batteries (which typically charge at C/10 to C/6.7).
Charge termination conditions
For those interested in the exact new charge terminating conditions, here they are. Others can skip this somewhat complex paragraph. The battery voltage must stay at or above a threshold, and the charge current must stay at or below another threshold, for at least 30 seconds. The voltage threshold is the bulk/absorb setting (parameter 26) minus 0.5 V. The current threshold is one ampere below the maximum of two values:
1) the sum of all the Maximum Charge Current settings (parameter 02) for all paralleled machines, divided by 5 (15 [Edit: 12 in version 72.70c and later] for LiFePO₄), and
2) the number of paralleled machines multiplied by 5 amps.
The official firmware is the same except that
(a) the voltage threshold is the float
setting less half a volt,
(b) the total of maximum current settings is always divided by five, and
(c) the required time is 10 minutes (72.70 and later).
When the new absorb (CV) time setting (setting 32) is set to a number (not "Aut"), the current threshold becomes 2 A per paralleled machine, which is difficult to achieve. The effect is that when setting 32 is a number, the absorb stage will usually last for that many minutes.
Example 1: There are two paralleled machines. Maximum charge current (setting 2) is 60 A on each machine, and the Lithium iron Phosphate version of the patched firmware patch is in use. The current threshold is an amp less than the maximum of ((60+60)/15, 2*5) = max(8, 10) -1 = 9 A. So the current has to read at or below 9 amps. [Edit: For version 72.70c, it has to read below ((60+60)/12, 2*5) = max(10, 10) -1 = 10 A.]
Example 2: maximum charge current (setting 2) is 40 A, and the Lead Acid version of the patched firmware is in use. There is only one machine. The current threshold is an amp less than max(40/5, 1*5) = max(8, 5) - 1 = 7 amps. So the current reading has to be 7 A or less.
The patched firmware also fixes a new bug in the case where setting 32 is a number of minutes (not "Aut"). After reaching the absorb voltage setting for 10 seconds, the official firmware doesn't care if the battery voltage goes low again, say due to low solar input. It will still count this as absorb time. We now only increment the counter representing time in the absorb phase when the voltage criterion is met (battery voltage is greater than the CV setting less half a volt).
Patched firmware version 72.70b
also fixes a new bug, whereby in official firmware version 72.70 is it now *too hard* to exit absorb stage and enter the float stage. This is because they increased the "qualification time" when the battery voltage has to be above a threshold and the battery current has to be below a threshold, from 30 seconds to ten minutes. This was perhaps a misguided attempt to fix the original charge bug, which you will recall is that it was *too easy* to go to float (and it did so much too early).
Having gone to the trouble of devising the patched firmware, some other changes became desirable. Some of the 7 segment character renderings leave something to be desired, particularly letters "r" and "k". Weber devised a set based on what others have done, and a desire to have most character renderings distinct. But in the end, he decided that "S" and "5" need to use the same rendering. Some letters like "M", "W", "X" and "k" you can't do much with, but I think he's chosen good compromises.
When more than one machine is paralleled, one is designated the master, with "HS". This was presumably because they thought their rendering of an H looked more like an actual M than their rendering of an M did. In this firmware, we've used a different rendering of an M. After a while, you get used to reading the three separated segments as an M. Try to imagine it's like this:
It's also desirable that the patched firmware be readily identified, yet software such as Watchpower should not be confused by a version it's never heard of. Therefore, the U1 main version display screen has been replaced with either an LF1 (lithium ferrous) or Pb1 [Edit: LC1 in 72.70c] (lead acid or lithium cobalt) display screen, still with 72 in the middle, but now with 70b on the right. Subsequent versions of the patched firmware will be labelled 70C, 70d and so on. Enquiries such as QFVW (main firmware version enquiry) still return 00072.70 as before, so that Watchpower still works properly (with the limitations described at the end of the following post).
LiFePO₄ patched firmware only
All changes from here on are made to the Lithium Iron Phosphate (LiFePO₄) version of the patched firmware only. For other common lithium chemistries the "lead acid" patched firmware should used, typically with 14 cells in series.
For LiFePO₄ batteries, the most important other desired change is the battery low cutoff voltage, where the battery will be effectively disconnected to protect it from under-voltage. The maximum that this voltage can be set to in the official firmware is 48.0 V, which is unsuitable for lithium iron phosphate batteries. We have added 4.0 V to the manufacturer's range of 40.0 to 48.0 V, allowing cutoff voltages of 44.0 to 52.0 V. This assumes 16 cells in series.
In cases where the battery low cutoff voltage defaulted to 42 V, it now defaults to 44 V.
The battery low warning used to happen at 2 V above the battery low cutoff voltage, and reset at 4 V above the battery low cutoff voltage. They now happen at 0.5 V and 1 V above.
The transition from the "float" charging stage to the "bulk" charging stage was set at 4 V below the float setting. This has been reduced to 1 V below. [Edit: 1.2 V below in version 72.70c.]
It also makes sense for parameter 12 (back to utility voltage) to be increased. This is the battery voltage below which the loads will switch back to the utility. This is used when output source priority (parameter 01) is set to Sbu or SoL. Now, the range of this setting has been increased by 2 V, so it is now 46 V to 53 V.
LiFePO₄ and Lead Acid Patched Firmware
* The repaired voltage criterion for transitioning from absorb stage to float.
* For non-automatic absorb stage timing, only time when the battery voltage is near the CV setting counts as being "in absorb".
* "Font" improvements, and HS -> MS for Master units.
* Firmware revision display screen contains patch revision.
LiFePO₄ patched firmware only
* The bulk/absorb to float transition occurs with a different current threshold: (sum of maximum charge current settings) divided by 15. [divided by 12 in version 72.70c]
* Low battery cutoff voltage range changed from 40-48 V to 44-52 V.
* Back to utility voltage range changed from 44-51 V to 46-53 V.
* Float to bulk charge stage transition occurs at 1 V under the float setting. [1.2 V under in version 72.70c]
* The battery low warning occurs at the cutoff voltage plus half a volt, and returns at cutoff plus one volt.
SCC firmware compatibility
The Voltronic main firmware version 72.70 normally coexists with SCC firmware version 04.10. If you use either the original 72.70 or our patched 72.70b with any earlier version of the SCC firmware, the inverter refuses to charge from solar unless you set the maximum total charge current (parameter 02) to 60 A or lower. [Edit: This problem is fixed in patched firmware version 72.70c.]
So if you need a higher maximum charge current and you want to use this patched firmware, you will also need to update the SCC firmware to version 04.10 (provided below). [Edit: This is no longer required or recommended with patched firmware version 72.70c.]
Edit: a belated but heartfelt thanks to Weber, who did 99% of the grunt work of implementing the hex file patches with a text editor.
Edit 2: removed the word "strict" (it has no meaning with analogue variables like charge current) and made the truncation to a whole number of amps more explicit. Added two examples.
Edit 3: Added a third difference to the official firmware (case (c)). Also "below" -> "at or below" for clarity.
Edit 4: "72.70 only" -> "72.70 and later".
Edit 5: "practically impossible to achieve" -> "difficult to achieve".