Add 1500mAh and 2500mAh battery support

This commit is contained in:
Armel FAUVEAU committed 2025-11-08 06:11:11 +01:00
1 parent e8601a7514
commit 9a2598d381
5 files changed
+35 -7

No files matched your search

+3 -3
View File
@@ -362,13 +362,13 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax)
#endif #endif
case MENU_BATCAL: case MENU_BATCAL:
*pMin = 1600; *pMin = 1500;
*pMax = 2200; *pMax = 3500;
break; break;
case MENU_BATTYP: case MENU_BATTYP:
//*pMin = 0; //*pMin = 0;
*pMax = 2; *pMax = 4;
break; break;
case MENU_F1SHRT: case MENU_F1SHRT:
+27 -3
View File
@@ -50,7 +50,18 @@ const uint16_t lowBatteryPeriod = 30;
volatile uint16_t gPowerSave_10ms; volatile uint16_t gPowerSave_10ms;
const uint16_t Voltage2PercentageTable[][7][3] = { const uint16_t Voltage2PercentageTable[][7][2] = {
// Estimated discharge curve for 1500 mAh battery (improve this)
[BATTERY_TYPE_1500_MAH] = {
{828, 100}, // Fully charged (measured ~8.28V)
{813, 97 }, // Top end
{758, 25 }, // Mid level
{726, 6 }, // Almost empty
{630, 0 }, // Fully discharged (conservative)
{0, 0 },
{0, 0 },
},
[BATTERY_TYPE_1600_MAH] = { [BATTERY_TYPE_1600_MAH] = {
{828, 100}, {828, 100},
{814, 97 }, {814, 97 },
@@ -71,6 +82,17 @@ const uint16_t Voltage2PercentageTable[][7][3] = {
{0, 0 }, {0, 0 },
}, },
// Estimated discharge curve for 2500 mAh battery (improve this)
[BATTERY_TYPE_2500_MAH] = {
{839, 100}, // Fully charged (measured ~8.39V)
{818, 95 }, // Top end (slightly raised vs 816)
{745, 55 }, // Mid range
{703, 25 }, // Low level
{668, 5 }, // Almost empty
{623, 0 }, // Fully discharged (between 630 and 600)
{0, 0 },
},
[BATTERY_TYPE_3500_MAH] = { [BATTERY_TYPE_3500_MAH] = {
{837, 100}, {837, 100},
{826, 95 }, {826, 95 },
@@ -82,23 +104,25 @@ const uint16_t Voltage2PercentageTable[][7][3] = {
}, },
}; };
/* Useless (for compilator only)
static_assert( static_assert(
(ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_1600_MAH]) == (ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_1600_MAH]) ==
ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH])) && ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH])) &&
(ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]) == (ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]) ==
ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_3500_MAH])) ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_3500_MAH]))
); );
*/
unsigned int BATTERY_VoltsToPercent(const unsigned int voltage_10mV) unsigned int BATTERY_VoltsToPercent(const unsigned int voltage_10mV)
{ {
const uint16_t (*crv)[3] = Voltage2PercentageTable[gEeprom.BATTERY_TYPE]; const uint16_t (*crv)[2] = Voltage2PercentageTable[gEeprom.BATTERY_TYPE];
const int mulipl = 1000; const int mulipl = 1000;
for (unsigned int i = 1; i < ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]); i++) { for (unsigned int i = 1; i < ARRAY_SIZE(Voltage2PercentageTable[BATTERY_TYPE_2200_MAH]); i++) {
if (voltage_10mV > crv[i][0]) { if (voltage_10mV > crv[i][0]) {
const int a = (crv[i - 1][1] - crv[i][1]) * mulipl / (crv[i - 1][0] - crv[i][0]); const int a = (crv[i - 1][1] - crv[i][1]) * mulipl / (crv[i - 1][0] - crv[i][0]);
const int b = crv[i][1] - a * crv[i][0] / mulipl; const int b = crv[i][1] - a * crv[i][0] / mulipl;
const int p = a * voltage_10mV / mulipl + b; const int p = a * voltage_10mV / mulipl + b;
return MIN(p, 100); return MIN(MAX(p, 0), 100);
} }
} }
+2
View File
@@ -35,8 +35,10 @@ extern uint16_t gBatteryCheckCounter;
extern volatile uint16_t gPowerSave_10ms; extern volatile uint16_t gPowerSave_10ms;
typedef enum { typedef enum {
BATTERY_TYPE_1500_MAH,
BATTERY_TYPE_1600_MAH, BATTERY_TYPE_1600_MAH,
BATTERY_TYPE_2200_MAH, BATTERY_TYPE_2200_MAH,
BATTERY_TYPE_2500_MAH,
BATTERY_TYPE_3500_MAH, BATTERY_TYPE_3500_MAH,
BATTERY_TYPE_UNKNOWN BATTERY_TYPE_UNKNOWN
} BATTERY_Type_t; } BATTERY_Type_t;
+2
View File
@@ -342,8 +342,10 @@ const char gSubMenu_BAT_TXT[][8] =
const char gSubMenu_BATTYP[][9] = const char gSubMenu_BATTYP[][9] =
{ {
"1500mAh",
"1600mAh", "1600mAh",
"2200mAh", "2200mAh",
"2500mAh",
"3500mAh" "3500mAh"
}; };
+1 -1
View File
@@ -208,7 +208,7 @@ extern const char gSubMenu_RESET[2][4];
extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN]; extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN];
extern const char gSubMenu_RX_TX[4][6]; extern const char gSubMenu_RX_TX[4][6];
extern const char gSubMenu_BAT_TXT[3][8]; extern const char gSubMenu_BAT_TXT[3][8];
extern const char gSubMenu_BATTYP[3][9]; extern const char gSubMenu_BATTYP[5][9];
#ifndef ENABLE_FEAT_F4HWN #ifndef ENABLE_FEAT_F4HWN
extern const char gSubMenu_SCRAMBLER[11][7]; extern const char gSubMenu_SCRAMBLER[11][7];