1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 20:35:33 +03:00

Merge remote-tracking branch 'multiwii/master'

Conflicts:
	obj/baseflight.hex
	src/main/io/serial_msp.c
	src/mw.c
	src/mw.h
This commit is contained in:
Dominic Clifton 2014-06-01 16:54:54 +01:00
commit 3f7960849a
5 changed files with 11 additions and 5411 deletions

File diff suppressed because it is too large Load diff

View file

@ -13,7 +13,7 @@ uint16_t batteryWarningVoltage; // annoying buzzer after this one, battery r
uint8_t vbat = 0; // battery voltage in 0.1V steps uint8_t vbat = 0; // battery voltage in 0.1V steps
int32_t amperage = 0; // amperage read by current sensor in centiampere (1/100th A) int32_t amperage = 0; // amperage read by current sensor in centiampere (1/100th A)
uint32_t mAhdrawn = 0; // milliampere hours drawn from the battery since start int32_t mAhDrawn = 0; // milliampere hours drawn from the battery since start
static batteryConfig_t *batteryConfig; static batteryConfig_t *batteryConfig;
@ -82,15 +82,15 @@ int32_t currentSensorToCentiamps(uint16_t src)
return (millivolts * 1000) / (int32_t)batteryConfig->currentMeterScale; // current in 0.01A steps return (millivolts * 1000) / (int32_t)batteryConfig->currentMeterScale; // current in 0.01A steps
} }
void updateCurrentMeter(uint32_t lastUpdateAt) void updateCurrentMeter(int32_t lastUpdateAt)
{ {
static int32_t amperageRaw = 0; static int32_t amperageRaw = 0;
static uint32_t mAhdrawnRaw = 0; static int64_t mAhdrawnRaw = 0;
amperageRaw -= amperageRaw / 8; amperageRaw -= amperageRaw / 8;
amperageRaw += adcGetChannel(ADC_CURRENT); amperageRaw += adcGetChannel(ADC_CURRENT);
amperage = currentSensorToCentiamps(amperageRaw / 8); amperage = currentSensorToCentiamps(amperageRaw / 8);
mAhdrawnRaw += (amperage * lastUpdateAt) / 1000; // will overflow at ~11000mAh mAhdrawnRaw += (amperage * lastUpdateAt) / 1000;
mAhdrawn = mAhdrawnRaw / (3600 * 100); mAhDrawn = mAhdrawnRaw / (3600 * 100);
} }

View file

@ -16,12 +16,12 @@ extern uint8_t vbat;
extern uint8_t batteryCellCount; extern uint8_t batteryCellCount;
extern uint16_t batteryWarningVoltage; extern uint16_t batteryWarningVoltage;
extern int32_t amperage; extern int32_t amperage;
extern uint32_t mAhdrawn; extern int32_t mAhDrawn;
uint16_t batteryAdcToVoltage(uint16_t src); uint16_t batteryAdcToVoltage(uint16_t src);
bool shouldSoundBatteryAlarm(void); bool shouldSoundBatteryAlarm(void);
void updateBatteryVoltage(void); void updateBatteryVoltage(void);
void batteryInit(batteryConfig_t *initialBatteryConfig); void batteryInit(batteryConfig_t *initialBatteryConfig);
void updateCurrentMeter(uint32_t lastUpdateAt); void updateCurrentMeter(int32_t lastUpdateAt);
int32_t currentMeterToCentiamps(uint16_t src); int32_t currentMeterToCentiamps(uint16_t src);

View file

@ -619,12 +619,12 @@ static void evaluateCommand(void)
case MSP_ANALOG: case MSP_ANALOG:
headSerialReply(7); headSerialReply(7);
serialize8((uint8_t)constrain(vbat, 0, 255)); serialize8((uint8_t)constrain(vbat, 0, 255));
serialize16(mAhdrawn); // milliamphours drawn from battery serialize16((uint16_t)constrain(mAhDrawn, 0, 0xFFFF)); // milliamphours drawn from battery
serialize16(rssi); serialize16(rssi);
if(masterConfig.batteryConfig.multiwiiCurrentMeterOutput) { if(masterConfig.batteryConfig.multiwiiCurrentMeterOutput) {
serialize16((uint16_t)constrain((abs(amperage)*10), 0, 0xFFFF)); // send amperage in 0.001 A steps serialize16((uint16_t)constrain((abs(amperage) * 10), 0, 0xFFFF)); // send amperage in 0.001 A steps
} else } else
serialize16((uint16_t)abs(amperage)); // send amperage in 0.01 A steps serialize16((uint16_t)constrain(abs(amperage), 0, 0xFFFF)); // send amperage in 0.01 A steps
break; break;
case MSP_RC_TUNING: case MSP_RC_TUNING:
headSerialReply(7); headSerialReply(7);

View file

@ -160,7 +160,7 @@ void annexCode(void)
static uint8_t batteryWarningEnabled = false; static uint8_t batteryWarningEnabled = false;
static uint8_t vbatTimer = 0; static uint8_t vbatTimer = 0;
static uint32_t vbatCycleTime = 0; static int32_t vbatCycleTime = 0;
// PITCH & ROLL only dynamic PID adjustemnt, depending on throttle value // PITCH & ROLL only dynamic PID adjustemnt, depending on throttle value
if (rcData[THROTTLE] < currentProfile.tpa_breakpoint) { if (rcData[THROTTLE] < currentProfile.tpa_breakpoint) {