feat(cpn): simulator allow manually setting transmitter battery voltage (#5763)
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "hal_adc_inputs.inc"
|
||||
#include "board.h"
|
||||
#include "edgetx.h"
|
||||
|
||||
void enableVBatBridge(){}
|
||||
void disableVBatBridge(){}
|
||||
@@ -41,18 +42,35 @@ static bool simu_start_conversion()
|
||||
setAnalogValue(i, simu_get_analog(i));
|
||||
}
|
||||
|
||||
// set VBAT / RTC_BAT
|
||||
if (adcGetMaxInputs(ADC_INPUT_VBAT) > 0) {
|
||||
// set batteries default voltages
|
||||
int i = adcGetInputOffset(ADC_INPUT_VBAT);
|
||||
|
||||
if (i > 0) {
|
||||
// calculate default voltage on 1st call
|
||||
uint32_t adc = (simu_get_analog(i) - 2048) * 1000 / 2000;
|
||||
// TRACE("raw ana: %d adj ana: %d", simu_get_analog(i), vbat);
|
||||
// just in case the voltage has not been initialised in sim initialisation/startup
|
||||
// these formulae must mirror OpenTxSimulator::voltageToAdc
|
||||
if (adc == 0) {
|
||||
uint32_t volts = (uint32_t)((g_eeGeneral.vBatWarn > 0 ? g_eeGeneral.vBatWarn : BATTERY_WARN) + 5) * 10; // +0.5V and prec2
|
||||
#if defined(VBAT_MOSFET_DROP)
|
||||
uint32_t vbat = (2 * (BATTERY_MAX + BATTERY_MIN) * (VBAT_DIV_R2 + VBAT_DIV_R1)) / VBAT_DIV_R1;
|
||||
// TRACE("volts: %d r1: %d r2: %d drop: %d vref: %d calib: %d", volts, VBAT_DIV_R1, VBAT_DIV_R2, VBAT_MOSFET_DROP, ADC_VREF_PREC2, g_eeGeneral.txVoltageCalibration);
|
||||
adc = (volts - VBAT_MOSFET_DROP) * (2 * RESX * 1000) / ADC_VREF_PREC2 / (((1000 + g_eeGeneral.txVoltageCalibration) * (VBAT_DIV_R2 + VBAT_DIV_R1)) / VBAT_DIV_R1);
|
||||
#elif defined(BATT_SCALE)
|
||||
uint32_t vbat = (BATTERY_MAX + BATTERY_MIN) * 5; // * 10 / 2
|
||||
vbat = ((vbat - VOLTAGE_DROP) * BATTERY_DIVIDER) / (BATT_SCALE * 128);
|
||||
// TRACE("volts: %d div: %d drop: %d scale: %d calib: %d", volts, BATTERY_DIVIDER, VOLTAGE_DROP, BATT_SCALE, g_eeGeneral.txVoltageCalibration);
|
||||
adc = (volts - VOLTAGE_DROP) * BATTERY_DIVIDER / (128 + g_eeGeneral.txVoltageCalibration) / BATT_SCALE;
|
||||
#elif defined(VOLTAGE_DROP)
|
||||
// TRACE("volts: %d div: %d drop: %d", volts, BATTERY_DIVIDER, VOLTAGE_DROP);
|
||||
adc = (volts - VOLTAGE_DROP) * BATTERY_DIVIDER / (1000 + g_eeGeneral.txVoltageCalibration);
|
||||
#else
|
||||
uint32_t vbat = (BATTERY_MAX + BATTERY_MIN) * 5; // * 10 / 2
|
||||
vbat = (vbat * BATTERY_DIVIDER) / 1000;
|
||||
// TRACE("volts: %d div: %d calib: %d", volts, BATTERY_DIVIDER, g_eeGeneral.txVoltageCalibration);
|
||||
adc = volts * BATTERY_DIVIDER / (1000 + g_eeGeneral.txVoltageCalibration);
|
||||
#endif
|
||||
setAnalogValue(adcGetInputOffset(ADC_INPUT_VBAT), vbat * 2);
|
||||
// TRACE("calc adc: %d", adc);
|
||||
adc = adc * 2; // div by 2 in firmware filtered adc calcs
|
||||
}
|
||||
|
||||
setAnalogValue(i, adc);
|
||||
}
|
||||
|
||||
if (adcGetMaxInputs(ADC_INPUT_RTC_BAT) > 0) {
|
||||
|
||||
Reference in New Issue
Block a user