![]() |
rasProject_01 / weSweetHome
R. 77 2025-03-07
process control / RasPi software by weinert-automation
|
Common types and values for buffer battery handling. More...
#include "basicTyCo.h"
Macros | |
#define | BAT_BAL_STRT_PWM |
Start value for loading (LiFePo4). More... | |
#define | BAT_KEEP_PWM |
Battery keep alive PWM setting (LiFePo4). More... | |
#define | BAT_LDBAL_STR |
Start value for ballast loading. More... | |
#define | BAT_LDBAL_TIM |
Maximum battery load as ballast time. More... | |
#define | BAT_NOLD_PWM |
Battery no load no keep setting (LiFePo4). More... | |
#define | BAT_TNUM |
Battery type number. More... | |
#define | BAT_TYPE |
Battery type. More... | |
#define | BATkeepInhByCmd |
Inhibit battery keep loading after battery Off command. More... | |
#define | BATkeepInhContLoad |
Inhibit battery keep loading after controlled loading. More... | |
#define | BATkeepInhUnload |
Inhibit battery keep loading after unloading. More... | |
#define | BATmaxUNLODtime |
Upper time limit (s) to stop discharging (LiFePo4). More... | |
#define | BATVOLT_LO_LIM_UNLD |
Voltage limit to start unload. More... | |
#define | BATVOLT_LO_STP_UNLD |
Lower voltage limit to stop discharging (LiFePo4). More... | |
#define | BATVOLT_MX_STRT_LOAD |
Upper voltage limit with no load to start loading (LiFePo4). More... | |
#define | BATVOLT_REDUC_BLST |
Upper voltage limit to reduce ballast loading (LiFePo4). More... | |
#define | BATVOLT_UP_LIM_LOAD |
Upper voltage limit to stop loading. More... | |
#define | ESP_U_CORR |
Correction factor for ESP battery voltmeter. More... | |
#define | ESSminPOW4unload |
Minimum power from public electricity supplier to start discharging. More... | |
#define | SOLmxPOW4unload |
Maximum solar power to stop discharging. More... | |
Variables | |
uint16_t | hundredsV |
The battery voltage in 0.01V units. More... | |
Common types and values for buffer battery handling.
Revision history
In the smart home buffer batteries are used.
Originally, we had an array of parallel 12V 6 cell lead acid batteries. It summed up to about 12V 200Ah featuring a buffer for about 1 kWh. The usable buffer capacity of the batteries formerly used in cars and glider starting winches was much lower, due to the old age and the principal limits of lead acid accumulators.
Since August 2014 all were replaced by one 12,8V 100Ah LiPoFe accumulator. In consequence all loading, keeping and unloading procedures had to be changed; the adapting to the other battery technology is ongoing.
Battery voltage is measured at the battery clamps by an own MQTT device (using this software mqttHome.h, sweetHome2.c). It uses WLAN and has a 12V supply. It just "lives" on the battery and needs no further installation.
#define SOLmxPOW4unload |
Maximum solar power to stop discharging.
If the solar power generation is above this limit battery unloading is stopped respectively inhibited. The current value is 28 W.
Rationale: Battery unloading uses the same inverter as the smallest (mimiJoule) panel array. We will not have lighted panels disconnected (idle) nor switch them under load.
Note 1: If the two other panel arrays produce 30 W or less miniJoule produces nothing and the array's idle voltage is < 10V.
Note 2: After the substituting the one panel input miniJoule inverter bby a two panel inputs Growatt inverter, using one for the miniJoule panels and the other for the step up inverter output, all above considerations are obsolete.
#define ESSminPOW4unload |
Minimum power from public electricity supplier to start discharging.
If public power consumption is below this limit battery unloading shall not be started respectively inhibited. The current value is 100 W.
Rationale: Battery power shall not be given away.
#define ESP_U_CORR |
Correction factor for ESP battery voltmeter.
Due to tolerances the value delivered via MQTT is a bit too low. This factor is a good average correction and should be pu into the ESP voltmeter some day.
#define BAT_TYPE |
Battery type.
The battery type as text, like LiFePo4 or LeadAcid.
As C's macro handling is too stupid to compare strings we have a co-responding integer type number BAT_TNUM 2. 1 was for LeadAcid (12V, 200Ah), now dumped as not fit for PV buffering and no more implemented
#define BAT_TNUM |
Battery type number.
The battery type as integer number co-responding to the text, see BAT_TYPE. LiFePo4 has number 2 and LeadAcid has 1.
#define BATmaxUNLODtime |
Upper time limit (s) to stop discharging (LiFePo4).
The normal discharge end condition in the unload SFC would be battery voltage (BATVOLT_LO_STP_UNLD). Additionally there is this time limit of currently 10h.
Rationale for having it: This is a safety backup for the step up converters unknown temperature as well as other faults that could lead to undercharging. On the other hand LiPoFe4's battery management would prevent this, also. Rationale for value: With 200Ah battery and limiting 80% down to 30% we can discharge 140Ah assuming 12A step up current.
#define BATkeepInhUnload |
Inhibit battery keep loading after unloading.
Starting battery keeping immediately after unloading would result effectively in loading as we are on the unload curve. As we have ample reserve we may consider the base load 10..20W as mildly unloading. The current value is 4 hours.
#define BATkeepInhContLoad |
Inhibit battery keep loading after controlled loading.
The current value is 3 hours.
#define BATkeepInhByCmd |
Inhibit battery keep loading after battery Off command.
The current value is 1 hours from now. If the inhibit timer is running already its end time will eventually be prolonged but not shortened.
#define BATVOLT_LO_LIM_UNLD |
Voltage limit to start unload.
This is the minimal voltage to allow starting an unload sequence.
#define BATVOLT_LO_STP_UNLD |
Lower voltage limit to stop discharging (LiFePo4).
This is the minimal voltage, measured under 5..10% cap unload, to stop a running unload sequence for providing buffer capacity needed.
This is a critical value. To allow for permanent loads without being forced to load within the next 24 hours we stop about 30%.
Choosing a value too high reduces the usable buffer capacity (the battery's purpose in life). A value too low endangers the battery.
The value is taken from the LiFePo4 discharge curve.
#define BAT_LDBAL_TIM |
Maximum battery load as ballast time.
Value: 10h
#define BAT_LDBAL_STR |
Start value for ballast loading.
pwm 81 is 14.00 V
#define BAT_NOLD_PWM |
Battery no load no keep setting (LiFePo4).
This is the PWM setting for neither charging nor loading. Until August 2024 it was 0 for the array of old lead acid starter batteries.
"LiFePO4 battery cells have a maximum discharge depth of 98% to 100%. This is longer than any other battery technology currently in the market. This means that you can safely discharge these batteries to their full capacity. However, most manufacturers recommend still using a 80% depth of discharge for these batteries to prolong their lifespan. Even if you occasionally use 100% of the battery capacity, the battery will not get harmed." cited from [https://ecotreelithium.co.uk/news/lifepo4-battery-depth-of-discharge/]
For neither keeping or loading we permanently back the battery with 11.6V lest it will be deeply discharged by permanent load.
Value since 02.2025 for LiFePo4: 6 or 11.3V
#define BATVOLT_UP_LIM_LOAD |
Upper voltage limit to stop loading.
The battery loading SFCs would stop when this voltage is reached. Full loading would require 14.6 V and for safety reasons one should be more below, perhaps. 14.88V is overcharge protection and 14.4V is the cell equalising start voltage. On the other hand EcoWorth's LiFePo4 12V 100Ah has a built in battery management system (BSM), which would cut of at overvoltage.
#define BAT_KEEP_PWM |
Battery keep alive PWM setting (LiFePo4).
This is the PWM setting for the battery load module, see loadModUlookup, for permanently keeping the battery at live by preventing self discharge and feeding low permanent loads.
Value since 07.08.2024 for LiFePo4: pwm to keep at 25% or 13,15V
#define BATVOLT_REDUC_BLST |
Upper voltage limit to reduce ballast loading (LiFePo4).
The ballast (surplus power driven) battery loading SFC would reduce the loader voltage by one step in every cycle when this voltage is reached.
Note: With suitable load current measurements and Ri knowledge this value could be made flexibly higher. The highest value used in the setup was 14.59 V (until 14.08.2018).
Note 2: On the other hand, since having water heating ballast load there's no need to stress the battery with surplus power. Note 3: This feature may be senseless (09.08.2024).
#define BATVOLT_MX_STRT_LOAD |
Upper voltage limit with no load to start loading (LiFePo4).
When without load worth speaking of, say 24W / 2A for 200Ah capacity, the battery voltage is above this limit the start of any load sequence is inhibited. The value is not used for stopping a load process as the allowed voltages on the LiFePo4 loading curve are significantly higher.
Note: The current no load value of 13.35V is 80% capacity on the idle curve. A running load process may load to a higher capacity rate, but we won't start loading over 80%.
#define BAT_BAL_STRT_PWM |
Start value for loading (LiFePo4).
Until 30.05 this PWM value was 70 (=13.74V) for a quick start. This high value would inhibit a no charge voltage measurement for implementation a say 80% capacity limit for start charging.
Hence, this value was reduced to BAT_KEEP_PWM (45). The start of charging is slower, but faster then starting from <= 6.
Note: To do check if this value spoils said voltage measurement
|
extern |
The battery voltage in 0.01V units.
This is just an integer value consistent to the last valid battery voltage measurement valFilVal.batVolt. Contrary to valFilVal.batVolt which is set to -0.9 to indicate invalidity after 2.4s without new (MQTT) measurements, this value will be kept (forever).
It is preset with 1289 (12.89 V) lest have battery low before the first valid MQTT measurement / message.
Receiving a good MQTT message from the battery voltmeter will set valFilVal.batVolt, batVoltValid and this value.
Use formFixed16(&textStart, hundredsV, 2) to format as "12.89" without trailing zero.