Fix LiPo battery level and sensor pad

This commit is contained in:
norbert-walter 2025-01-25 18:04:58 +01:00
parent c202554c5c
commit 9dc857056b
3 changed files with 14 additions and 16 deletions

View File

@ -277,8 +277,8 @@ void initKeys(CommonData &commonData) {
starttime = millis(); // Start key pressed starttime = millis(); // Start key pressed
keycodeold = keycode; keycodeold = keycode;
} }
// If key pressed longer than 200ms // If key pressed longer than 100ms
if(millis() > starttime + 200 && keycode == keycodeold) { if(millis() > starttime + 100 && keycode == keycodeold) {
if (use_syspage and keycode == 3) { if (use_syspage and keycode == 3) {
keystatus = 12; keystatus = 12;
} else { } else {

View File

@ -473,9 +473,15 @@ void sensorTask(void *param){
float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
#endif #endif
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
#ifdef LIPO_ACCU_1200 // Save new data in average array
batV.reading(int(sensors.batteryVoltage * 100));
// Calculate the average values for different time lines from integer values
sensors.batteryVoltage10 = batV.getAvg(10) / 100.0;
sensors.batteryVoltage60 = batV.getAvg(60) / 100.0;
sensors.batteryVoltage300 = batV.getAvg(300) / 100.0;
#if defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
// Polynomfit for LiPo capacity calculation for 3,7V LiPo accus, 0...100% // Polynomfit for LiPo capacity calculation for 3,7V LiPo accus, 0...100%
sensors.batteryLevelLiPo = sensors.batteryVoltage * sensors.batteryVoltage * 174.9513 + sensors.batteryVoltage * 1147.7686 + 1868.5120; sensors.batteryLevelLiPo = sensors.batteryVoltage60 * 203.8312 -738.1635;
// Limiter // Limiter
if(sensors.batteryLevelLiPo > 100){ if(sensors.batteryLevelLiPo > 100){
sensors.batteryLevelLiPo = 100; sensors.batteryLevelLiPo = 100;
@ -483,22 +489,14 @@ void sensorTask(void *param){
if(sensors.batteryLevelLiPo < 0){ if(sensors.batteryLevelLiPo < 0){
sensors.batteryLevelLiPo = 0; sensors.batteryLevelLiPo = 0;
} }
#endif
// Save new data in average array
batV.reading(int(sensors.batteryVoltage * 100));
// Calculate the average values for different time lines from integer values
sensors.batteryVoltage10 = batV.getAvg(10) / 100.0;
sensors.batteryVoltage60 = batV.getAvg(60) / 100.0;
sensors.batteryVoltage300 = batV.getAvg(300) / 100.0;
// Charging detection // Charging detection
float deltaV = sensors.batteryVoltage - sensors.batteryVoltage10; float deltaV = sensors.batteryVoltage - sensors.batteryVoltage10;
if(deltaV > 0.03){ if(deltaV > 0.045){
sensors.BatteryChargeStatus = 1; // Charging active sensors.BatteryChargeStatus = 1; // Charging active
} }
if(deltaV < -0.03){ if(deltaV < -0.04){
sensors.BatteryChargeStatus = 0; // Discharging sensors.BatteryChargeStatus = 0; // Discharging
} }
#ifdef BOARD_OBP40S3
// Send to NMEA200 bus as instance 10 // Send to NMEA200 bus as instance 10
if(!isnan(sensors.batteryVoltage)){ if(!isnan(sensors.batteryVoltage)){
SetN2kDCBatStatus(N2kMsg, 10, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 0); SetN2kDCBatStatus(N2kMsg, 10, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 0);

View File

@ -205,7 +205,7 @@ public:
getdisplay().setCursor(20, 100); getdisplay().setCursor(20, 100);
getdisplay().print(name1); // Value name getdisplay().print(name1); // Value name
#ifdef BOARD_OBP40S3 #if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
// Show charge status // Show charge status
getdisplay().setFont(&Ubuntu_Bold8pt7b); getdisplay().setFont(&Ubuntu_Bold8pt7b);
getdisplay().setCursor(185, 100); getdisplay().setCursor(185, 100);
@ -228,7 +228,7 @@ public:
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
getdisplay().print(batType); getdisplay().print(batType);
#endif #endif
#ifdef BOARD_OBP40S3 #if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
getdisplay().print("LiPo"); getdisplay().print("LiPo");
#endif #endif