Browse Source

Refactored battery measurement function

master
Anthony Hinsinger 7 years ago
parent
commit
c9c6a3d003
  1. 20
      main.cpp
  2. 2
      mbed_app.json

20
main.cpp

@ -37,22 +37,28 @@ static CayenneLPP cayenne(51);
#if MBED_CONF_APP_BATTERY_ENABLED #if MBED_CONF_APP_BATTERY_ENABLED
AnalogIn bat(MBED_CONF_APP_BATTERY_ADC); AnalogIn bat(MBED_CONF_APP_BATTERY_ADC);
AnalogIn vrefint(ADC_VREF); AnalogIn vref(ADC_VREF);
static float battery_voltage() { static float battery_voltage() {
float vbat = bat.read(); float vbat = bat.read();
double vdd = (1.224f) / vrefint.read(); float vrefin = vref.read();
return vbat * MBED_CONF_APP_BATTERY_RATIO * vdd; float vrefcal = (float)(*(uint16_t*)VREFINT_CAL_ADDR) * (1.0f / (float)0xFFF);
float vdda = 3.0f * vrefcal / vrefin;
return vbat * vdda * MBED_CONF_APP_BATTERY_RATIO;
} }
static uint8_t battery_level() { static uint8_t battery_level() {
float vbat = battery_voltage(); float vbat = battery_voltage();
double ratio = 253.0f / (4.2f - 3.3f); if (vbat >= MBED_CONF_APP_BATTERY_MAX) {
int value = ratio * (vbat - 3.4f) + 1.0f; return 254;
} else if (vbat > MBED_CONF_APP_BATTERY_MIN && vbat < MBED_CONF_APP_BATTERY_MAX) {
return value < 1 ? 1 : (value > 254 ? 254 : value); return ( 253 * ( vbat - MBED_CONF_APP_BATTERY_MIN ) ) / ( MBED_CONF_APP_BATTERY_MAX - MBED_CONF_APP_BATTERY_MIN ) + 1;
} else {
return 1;
}
} }
#endif #endif

2
mbed_app.json

@ -28,6 +28,8 @@
"battery-lpp-id": { "value": 1 }, "battery-lpp-id": { "value": 1 },
"battery-in-lpp": { "value": "false" }, "battery-in-lpp": { "value": "false" },
"battery-adc": { "value": "NC" }, "battery-adc": { "value": "NC" },
"battery-min": { "value": "3.20f" },
"battery-max": { "value": "4.15f" },
"battery-ratio": { "value": "2.0f" }, "battery-ratio": { "value": "2.0f" },
"hx711-enabled": { "value": "false" }, "hx711-enabled": { "value": "false" },
"hx711-lpp-id": { "value": 2 }, "hx711-lpp-id": { "value": 2 },

Loading…
Cancel
Save