mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 00:05:33 +03:00
Battery auto-detect and LPF for battery monitoring
This commit is contained in:
parent
26ac6115e7
commit
942c89237e
10 changed files with 268 additions and 69 deletions
|
@ -88,8 +88,10 @@ enum {
|
|||
ALIGN_MAG = 2
|
||||
};
|
||||
|
||||
/* for VBAT monitoring frequency */
|
||||
#define VBATFREQ 6 // to read battery voltage - nth number of loop iterations
|
||||
/* VBAT monitoring interval (in microseconds) - 1s*/
|
||||
#define VBATINTERVAL (6 * 3500)
|
||||
/* IBat monitoring interval (in microseconds) - 6 default looptimes */
|
||||
#define IBATINTERVAL (6 * 3500)
|
||||
|
||||
uint32_t currentTime = 0;
|
||||
uint32_t previousTime = 0;
|
||||
|
@ -174,10 +176,9 @@ void annexCode(void)
|
|||
int32_t tmp, tmp2;
|
||||
int32_t axis, prop1 = 0, prop2;
|
||||
|
||||
static batteryState_e batteryState = BATTERY_OK;
|
||||
static uint8_t vbatTimer = 0;
|
||||
static int32_t vbatCycleTime = 0;
|
||||
|
||||
static uint32_t vbatLastServiced = 0;
|
||||
static uint32_t ibatLastServiced = 0;
|
||||
uint32_t ibatTimeSinceLastServiced;
|
||||
// PITCH & ROLL only dynamic PID adjustment, depending on throttle value
|
||||
if (rcData[THROTTLE] < currentControlRateProfile->tpa_breakpoint) {
|
||||
prop2 = 100;
|
||||
|
@ -247,24 +248,20 @@ void annexCode(void)
|
|||
rcCommand[PITCH] = rcCommand_PITCH;
|
||||
}
|
||||
|
||||
if (feature(FEATURE_VBAT | FEATURE_CURRENT_METER)) {
|
||||
vbatCycleTime += cycleTime;
|
||||
if (!(++vbatTimer % VBATFREQ)) {
|
||||
if (feature(FEATURE_VBAT)) {
|
||||
/* currentTime will rollover @ 70 minutes */
|
||||
if ((currentTime - vbatLastServiced) >= VBATINTERVAL) {
|
||||
vbatLastServiced = currentTime;
|
||||
updateBattery();
|
||||
}
|
||||
}
|
||||
|
||||
if (feature(FEATURE_VBAT)) {
|
||||
updateBatteryVoltage();
|
||||
batteryState = calculateBatteryState();
|
||||
//handle beepers for battery levels
|
||||
if (batteryState == BATTERY_CRITICAL)
|
||||
beeper(BEEPER_BAT_CRIT_LOW); //critically low battery
|
||||
else if (batteryState == BATTERY_WARNING)
|
||||
beeper(BEEPER_BAT_LOW); //low battery
|
||||
}
|
||||
|
||||
if (feature(FEATURE_CURRENT_METER)) {
|
||||
updateCurrentMeter(vbatCycleTime, &masterConfig.rxConfig, masterConfig.flight3DConfig.deadband3d_throttle);
|
||||
}
|
||||
vbatCycleTime = 0;
|
||||
if (feature(FEATURE_CURRENT_METER)) {
|
||||
/* currentTime will rollover @ 70 minutes */
|
||||
ibatTimeSinceLastServiced = (currentTime - ibatLastServiced);
|
||||
if (ibatTimeSinceLastServiced >= IBATINTERVAL) {
|
||||
ibatLastServiced = currentTime;
|
||||
updateCurrentMeter((ibatTimeSinceLastServiced / 1000), &masterConfig.rxConfig, masterConfig.flight3DConfig.deadband3d_throttle);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue