mirror of
https://github.com/armel/uv-k1-k5v3-firmware-custom.git
synced 2026-10-02 03:15:37 +00:00
Add 1500mAh and 2500mAh battery support
This commit is contained in:
1 parent
e8601a7514
commit
9a2598d381
5 files changed
+35
-7
No files matched your search
+3
-3
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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];
|
||||||
|
|||||||
Reference in new issue
Block a user