1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-16 12:55:19 +03:00

Changed the scaling factor of the curent sensor to be in the form of y=mx+b. Altered the scaling to be in mV/10A, this means that for you average 50mOhm shunt resistor you will have a scale factor of 500, plenty of integre adjustability and the default 400 used will be fine as a first guess in most cases. Offset is adjusted to mA to give greater adjustability as an integer value. Builds successfully to OMNIBUSF4SD.

This commit is contained in:
DESKTOP-JI9AKHT\Dimand 2017-12-12 23:15:31 +11:00 committed by Surface Book\dimand
parent 625f083a3f
commit bcd5752a12
2 changed files with 5 additions and 4 deletions

View file

@ -107,9 +107,10 @@ static int32_t currentMeterADCToCentiamps(const uint16_t src)
const currentSensorADCConfig_t *config = currentSensorADCConfig();
int32_t millivolts = ((uint32_t)src * ADCVREF) / 4096;
millivolts -= config->offset;
// y=x/m+b m is scale in (mV/10A) and b is offset in (mA)
int32_t centiAmps = (millivolts * 10000 / (int32_t)config->scale + (int32_t)config->offset) / 10;
return (millivolts * 1000) / (int32_t)config->scale; // current in 0.01A steps
return centiAmps; // Returns Centiamps to maintain compatability with the rest of the code
}
static void updateCurrentmAhDrawnState(currentMeterMAhDrawnState_t *state, int32_t amperageLatest, int32_t lastUpdateAt)

View file

@ -65,8 +65,8 @@ typedef struct currentMeterADCState_s {
} currentMeterADCState_t;
typedef struct currentSensorADCConfig_s {
int16_t scale; // scale the current sensor output voltage to milliamps. Value in 1/10th mV/A
int16_t offset; // offset of the current sensor in millivolt steps
int16_t scale; // scale the current sensor output voltage to milliamps. Value in mV/10A
int16_t offset; // offset of the current sensor in mA
} currentSensorADCConfig_t;
PG_DECLARE(currentSensorADCConfig_t, currentSensorADCConfig);