On January 10th 2024 Lithionics engineering has released the updated firmware version v9.0.04 for the External BMS V9.
This release was a quick follow up to the v9.0.03 release a week earlier, so this article will list combined changes for both of these releases.
Change Log Details:
- removed $MSOC command and remove $RVC=2 option, hardcode NeverDie reserve to cell voltage only, approximated to 10% SOC. Having RVC at different points depending on voltages or SOC is confusing to customers. When SOC is drifting it causes RVC to trip even when voltage is well above expected reserve level. This is causing numerous support calls and upset customers. According to mfg records no one has ever set MSOC above default 10%, and no one uses higher voltage RVC=2 option. It makes most sense to remove all these confusing options and set a single NeverDie reserve based on lowest cell reaching a true 10% SOC level. It also matches with a new algorithm to reset Usable AH and SOC at the same time, hence placing voltage and SOC based reserve in lockstep at actual 10% SOC.
- changed $LIST command output to include all values, including those only accessible in $SETUP mode. Some BMS parameters are protected from real time changes, those are usually specific to BMS hardware configuration and should not be messed with by customers. These values were only printed via $LIST command while BMS was placed in the $SETUP mode but were hidden if $LIST command was executed in runtime mode. However, this makes remote troubleshooting more difficult when we need to confirm all values, but don’t want to instruct customers to invoke the $SETUP mode. Now all values are printed in runtime mode, but changing protected values still requires placing BMS in $SETUP mode first.
- adjusted cell voltage levels for RESERVE and GENERATOR_ON to better match with 10% and 20% SOC measured in recent lab tests. Previous cell voltage levels of 3.00VPC and 3.05VPC did not correspond to expected SOC values of 10% and 20%. As part of Usable AH algorithm implementation it was determined that correct values are 3.14VPC and 3.19VPC respectively. These are Open Circuit Voltages (OCV), under load these are offset in real time by 0.01VPC per 0.1C load rate.
- changed remaining discharge time calculation to zero out at 10% SOC instead of 0% SOC, to match with NeverDie Reserve cutoff. Customers complained that the remaining discharge time was above zero when BMS triggered NeverDie Reserve, which is confusing as we want customers to start charging before they reach the reserve. Now the remaining discharge time is scaled to reach zero when SOC is 10%.
- removed $CANRATE command as it was never used, CAN rate is hardcoded to 250kbps for RV-C and NMEA2000 protocols. It is necessary to clean up unused features to recover MCU resources needed to implement new features.
- added support for NMEA2000 protocol using optional add-on interface board, separate from RV-C IonBus interface. See separate document NMEA2000 add-on.docx for details.
- added corrections for large >15% SOC discrepancy compared to known cell voltages during discharge. If BMS was powered off for a long-time during storage, it’s remembered SOC could be significantly higher than actual SOC of the module(s) subject to self-discharge while in storage. It is necessary to bring SOC closer to reality until a proper full charge cycle can be done to re-sync the SOC at 100%. According to lab discharge logs we selected several SOC points with discernable corresponding cell voltages, at 70%, 40%, 20%, 10%, 5%. If BMS “remembered” SOC is more than 15% above these points when cell voltages correspond to those points, the SOC is adjusted in real time to those points, to remove large discrepancy, until a proper SOC re-sync can be done by a full charge cycle.
- improved pre-charge success criteria by allowing at least 25% threshold at the end of the allowed time period. Frequent support calls are generated when customers have active DC loads in their system, which drags down pre-charge voltage, causing unnecessary pre-charge faults. We end up advising customers to lower $PRCHVLT value until it catches up with lower-than-expected actual pre-charge voltage. This is frustrating to customers and can’t be predicted as DC loads vary depending on system and situation. With this change the pre-charge algorithm is improved to allow lower success threshold at the end of allocated pre-charge time, which is typically 5 seconds. If pre-charge voltage can be raised to at least 25% of preset threshold by the end of pre-charge time, then it’s considered acceptable.
- increased warm battery charge rate reduction trigger from 50C to 55C based on customers real life testing data. When battery temperature is rising during charge, we can lower the max charge current to slow down the temperature rise and prevent BMS protection event due to battery overheating. The previous version did this at 50C, giving 10C remaining rise at a lower rate. Analysis of real-life customers data logs has shown that the 10C gap is too large and unnecessary as the temp rise slows down quickly when charge rate is capped. A gap of 5C is plentiful, so the threshold was raised to 55C.
- improved abs->float transition to zero target current until highest cell drops below float. When target charge voltage drops to float level at the end of charge cycle it is necessary to prevent continuous charge current, because most chargers don’t react quickly enough to reduced voltage target and continue to push current, hence causing voltage overshoot and possible HVC events. Now we are setting target current to zero, to which chargers reacts quickly, when entering float stage, until battery voltage naturally falls to float voltage level, at which point we return to max charge current, but at the float voltage level, as desired.
- reduced re-bulk voltage from 3.35VPC to 3.33VPC to reduce repeated shallow re-charges. In systems which are charged overnight or have a long-term shore power connection we often see unnecessary re-bulk cycles due to quick settling of voltage. Reducing re-bulk voltage to 3.33VPC improves this issue by allowing longer settling time.
- added $RBL command to set custom re-bulk SOC with valid range of 80%-95%, default 95% to reduce repeated shallow re-charges. Even reduction of re-bulk voltage to 3.33VPC may not be enough to prevent unwanted shallow re-bulk cycles in some applications. This new config value allows customers to set deeper re-bulk cycles, which prolongs battery life.
- in dual channel systems fixed Contactor State status bit to only report Load Contactor state. In previous versions Contactor State status bit was inconsistent in dual channel systems, turning off with charge contactor, even though load contactor was still latched. Now it only reflects the state of load contactor in all systems, including dual channel. The state of charge contactor can be observed via Charge Disable status bit, which causes charge contactor to open.
- in dual channel system added 15 sec delay to open charge contactor on Charge_Disable signal, to prioritize graceful charger stop actions over CAN or FCC. Racing condition was observed in dual channel systems where Charge_Disable signal sent to charger(s) via CAN or FCC also opens charge contactor at the same moment, which creates unwanted transients and prevents graceful response by a charger. Now charger(s) have 15 seconds to shut down gracefully, which prevents opening of charge contactor. If charger(s) did not shut down within 15 seconds, then charge contactor opens.
- added runtime commands for setting AGSR state when $AGSRON or $AGSROFF are sent without assigning a new value. Customers asked for a way to manually toggle AGSR relay circuit in case a manual operation is needed. Sending runtime commands without a new value will set or reset the AGSR relay unless the specific state of AGSR is demanded by BMS conditions.
- improved ramping up/down for CAN chargers for better accuracy at a lower target current. When multiple NCC chargers are controlled to a lower than maximum value it causes continuous fluctuations as the feedback algorithm is trying to find a sweet spot per charger to maintain target total current. Tweaking ramp up/down values helped reduce current fluctuations for a smoother charge current.
- added 30 sec delay to HVC Warning in RV-C and NMEA2000 messages to prevent nuisance alarms in Cerbo GX and other control systems on a normal end of charge. Customers complained about brief HVC Warnings when BMS sends the Charge_Disable signal, but chargers take a few seconds to respond and stop charging. A delay was added to suppress these nuisance alarms, if chargers respond as expected within 30 seconds.
- removed support for Elcon UHF CAN chargers to free up MCU resources. It is necessary to clean up unused features to recover MCU resources needed to implement new features.
- added monitoring and logging of RV-C CHARGER_STATUS PGN into CAN Charger Status value in the $trace data line. Previously we only populated CAN Charger Status value when controlling NCC chargers, but with popularity of RV-C based chargers we want to monitor and log their status, which helps in remote troubleshooting. CAN Charger Status is a 2 byte HEX value, which now records charger’s CAN address in 1st byte and Operating Status in the upper digit of the 2nd byte, while lower digit is still used to record desired charge stage.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article