1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-13 03:20:00 +03:00
This commit is contained in:
Steve Evans 2025-07-10 22:10:09 +01:00 committed by GitHub
commit a3b38fed27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -35,6 +35,7 @@
#include "config/config_reset.h" #include "config/config_reset.h"
#include "drivers/adc.h" #include "drivers/adc.h"
#include "drivers/dshot.h"
#include "flight/mixer.h" #include "flight/mixer.h"
#include "flight/pid.h" #include "flight/pid.h"
@ -270,29 +271,50 @@ void voltageMeterESCInit(void)
void voltageMeterESCRefresh(void) void voltageMeterESCRefresh(void)
{ {
#ifdef USE_DSHOT_TELEMETRY
// Just check motor 0 EDT data validity
if (useDshotTelemetry &&
((dshotTelemetryState.motorState[0].telemetryTypes & (1 << DSHOT_TELEMETRY_TYPE_VOLTAGE)) != 0) &&
(dshotTelemetryState.motorState[0].telemetryData[DSHOT_TELEMETRY_TYPE_VOLTAGE] > 0)) {
uint32_t accumulatedVoltage = 0;
for (int motor = 0; motor < getMotorCount(); motor++) {
accumulatedVoltage += dshotTelemetryState.motorState[motor].telemetryData[DSHOT_TELEMETRY_TYPE_VOLTAGE];
}
voltageMeterESCState.voltageUnfiltered = 25 * accumulatedVoltage / getMotorCount();
voltageMeterESCState.voltageDisplayFiltered = pt1FilterApply(&voltageMeterESCState.displayFilter, voltageMeterESCState.voltageUnfiltered);
} else
#endif
#ifdef USE_ESC_SENSOR #ifdef USE_ESC_SENSOR
escSensorData_t *escData = getEscSensorData(ESC_SENSOR_COMBINED); {
if (escData) { escSensorData_t *escData = getEscSensorData(ESC_SENSOR_COMBINED);
voltageMeterESCState.voltageUnfiltered = escData->dataAge <= ESC_BATTERY_AGE_MAX ? escData->voltage : 0; if (escData) {
voltageMeterESCState.voltageDisplayFiltered = pt1FilterApply(&voltageMeterESCState.displayFilter, voltageMeterESCState.voltageUnfiltered); voltageMeterESCState.voltageUnfiltered = escData->dataAge <= ESC_BATTERY_AGE_MAX ? escData->voltage : 0;
voltageMeterESCState.voltageDisplayFiltered = pt1FilterApply(&voltageMeterESCState.displayFilter, voltageMeterESCState.voltageUnfiltered);
}
} }
#endif #endif
} }
void voltageMeterESCReadMotor(uint8_t motorNumber, voltageMeter_t *voltageMeter) void voltageMeterESCReadMotor(uint8_t motorNumber, voltageMeter_t *voltageMeter)
{ {
#ifndef USE_ESC_SENSOR #ifdef USE_DSHOT_TELEMETRY
UNUSED(motorNumber); if (useDshotTelemetry &&
voltageMeterReset(voltageMeter); ((dshotTelemetryState.motorState[motorNumber].telemetryTypes & (1 << DSHOT_TELEMETRY_TYPE_VOLTAGE)) != 0) &&
#else (dshotTelemetryState.motorState[motorNumber].telemetryData[DSHOT_TELEMETRY_TYPE_VOLTAGE] > 0)) {
escSensorData_t *escData = getEscSensorData(motorNumber); voltageMeter->unfiltered = 25 * dshotTelemetryState.motorState[motorNumber].telemetryData[DSHOT_TELEMETRY_TYPE_VOLTAGE];
if (escData) { voltageMeter->displayFiltered = voltageMeter->unfiltered; // no filtering for ESC motors currently.
voltageMeter->unfiltered = escData->dataAge <= ESC_BATTERY_AGE_MAX ? escData->voltage : 0; } else
voltageMeter->displayFiltered = voltageMeter->unfiltered; // no filtering for ESC motors currently. #endif
} else { #ifdef USE_ESC_SENSOR
voltageMeterReset(voltageMeter); {
escSensorData_t *escData = getEscSensorData(motorNumber);
if (escData) {
voltageMeter->unfiltered = escData->dataAge <= ESC_BATTERY_AGE_MAX ? escData->voltage : 0;
voltageMeter->displayFiltered = voltageMeter->unfiltered; // no filtering for ESC motors currently.
} else {
voltageMeterReset(voltageMeter);
}
} }
#endif #endif
} }