diff --git a/src/main/config/config.c b/src/main/config/config.c index 332c49a72..f438dd2da 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -272,6 +272,7 @@ void resetBatteryConfig(batteryConfig_t *batteryConfig) batteryConfig->vbatmaxcellvoltage = 43; batteryConfig->vbatmincellvoltage = 33; batteryConfig->vbatwarningcellvoltage = 35; + batteryConfig->vbathysteresis = 1; batteryConfig->vbatPidCompensation = 0; batteryConfig->currentMeterOffset = 0; batteryConfig->currentMeterScale = 400; // for Allegro ACS758LCB-100U (40mV/A) diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index cd73f3433..22399b16c 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -640,6 +640,7 @@ const clivalue_t valueTable[] = { { "vbat_max_cell_voltage", VAR_UINT8 | MASTER_VALUE, &masterConfig.batteryConfig.vbatmaxcellvoltage, .config.minmax = { 10, 50 } }, { "vbat_min_cell_voltage", VAR_UINT8 | MASTER_VALUE, &masterConfig.batteryConfig.vbatmincellvoltage, .config.minmax = { 10, 50 } }, { "vbat_warning_cell_voltage", VAR_UINT8 | MASTER_VALUE, &masterConfig.batteryConfig.vbatwarningcellvoltage, .config.minmax = { 10, 50 } }, + { "vbat_hysteresis", VAR_UINT8 | MASTER_VALUE, &masterConfig.batteryConfig.vbathysteresis, .config.minmax = { 0, 250 } }, { "vbat_pid_compensation", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.batteryConfig.vbatPidCompensation, .config.lookup = { TABLE_OFF_ON } }, { "current_meter_scale", VAR_INT16 | MASTER_VALUE, &masterConfig.batteryConfig.currentMeterScale, .config.minmax = { -10000, 10000 } }, { "current_meter_offset", VAR_UINT16 | MASTER_VALUE, &masterConfig.batteryConfig.currentMeterOffset, .config.minmax = { 0, 3300 } }, diff --git a/src/main/sensors/battery.c b/src/main/sensors/battery.c index dcdc2167b..5bcc265f1 100644 --- a/src/main/sensors/battery.c +++ b/src/main/sensors/battery.c @@ -83,8 +83,6 @@ static void updateBatteryVoltage(void) } #define VBATTERY_STABLE_DELAY 40 -/* Batt Hysteresis of +/-100mV */ -#define VBATT_HYSTERESIS 1 void updateBattery(void) { @@ -123,23 +121,23 @@ void updateBattery(void) switch(batteryState) { case BATTERY_OK: - if (vbat <= (batteryWarningVoltage - VBATT_HYSTERESIS)) { + if (vbat <= (batteryWarningVoltage - batteryConfig->vbathysteresis)) { batteryState = BATTERY_WARNING; beeper(BEEPER_BAT_LOW); } break; case BATTERY_WARNING: - if (vbat <= (batteryCriticalVoltage - VBATT_HYSTERESIS)) { + if (vbat <= (batteryCriticalVoltage - batteryConfig->vbathysteresis)) { batteryState = BATTERY_CRITICAL; beeper(BEEPER_BAT_CRIT_LOW); - } else if (vbat > (batteryWarningVoltage + VBATT_HYSTERESIS)){ + } else if (vbat > (batteryWarningVoltage + batteryConfig->vbathysteresis)){ batteryState = BATTERY_OK; } else { beeper(BEEPER_BAT_LOW); } break; case BATTERY_CRITICAL: - if (vbat > (batteryCriticalVoltage + VBATT_HYSTERESIS)){ + if (vbat > (batteryCriticalVoltage + batteryConfig->vbathysteresis)){ batteryState = BATTERY_WARNING; beeper(BEEPER_BAT_LOW); } else { diff --git a/src/main/sensors/battery.h b/src/main/sensors/battery.h index f4327c065..26e54eb4e 100644 --- a/src/main/sensors/battery.h +++ b/src/main/sensors/battery.h @@ -40,6 +40,7 @@ typedef struct batteryConfig_s { uint8_t vbatmaxcellvoltage; // maximum voltage per cell, used for auto-detecting battery voltage in 0.1V units, default is 43 (4.3V) uint8_t vbatmincellvoltage; // minimum voltage per cell, this triggers battery critical alarm, in 0.1V units, default is 33 (3.3V) uint8_t vbatwarningcellvoltage; // warning voltage per cell, this triggers battery warning alarm, in 0.1V units, default is 35 (3.5V) + uint8_t vbathysteresis; // hysteresis for alarm, default 1 = 0.1V uint8_t vbatPidCompensation; // Scale PIDsum to battery voltage int16_t currentMeterScale; // scale the current sensor output voltage to milliamps. Value in 1/10th mV/A