/beta/Code Redesign killagreg/capacity.c |
---|
55,6 → 55,8 |
#include "timer0.h" |
#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms |
#define FC_OFFSET_CURRENT 4 // calculate with a current of 0.4A |
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A |
// global varialbles |
uint16_t update_timer = 0; |
77,7 → 79,7 |
static uint16_t SubCounter = 0; |
static uint16_t CurrentOffset = 0; |
static uint32_t SumCurrentOffset = 0; |
uint8_t i; |
uint8_t i, NumOfMotors; |
if(CheckDelay(update_timer)) |
{ |
86,39 → 88,48 |
// determine sum of all present BL currents and setpoints |
Current = 0; |
SetSum = 0; |
NumOfMotors = 0; |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
NumOfMotors++; |
Current += (int16_t)(Motor[i].Current); |
SetSum += (int16_t)(Motor[i].SetPoint); |
} |
} |
if(SetSum != 0) // if one of the present motors has a setpoint > 0 |
{ |
if(Current > CurrentOffset) Capacity.ActualCurrent = Current - CurrentOffset; |
else Capacity.ActualCurrent = 0; |
// update used capacity |
SubCounter += Capacity.ActualCurrent; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
if(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} |
else // motors are stopped |
if(SetSum == 0) // if all setpoints are 0 |
{ // determine offsets of motor currents |
Capacity.ActualCurrent = 0; |
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time |
CurrentOffset = (uint16_t)(SumCurrentOffset>>CURRENT_AVERAGE); |
SumCurrentOffset -= CurrentOffset; |
SumCurrentOffset += Current; |
// after averaging set current to static offset |
Current = FC_OFFSET_CURRENT; |
} |
else // some motors are running |
{ // subtract offset |
if(Current > CurrentOffset) Current -= CurrentOffset; |
else Current = 0; |
// add the FC and BL Offsets |
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT; |
} |
// update actual Current |
Capacity.ActualCurrent = Current; |
// update used capacity |
SubCounter += Current; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
if(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} // EOF check delay update timer |
} |
/beta/Code Redesign killagreg/makefile |
---|
9,7 → 9,7 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol Major Version |
VERSION_SERIAL_MINOR = 0 # Serial Protocol Minor Version |
NC_SPI_COMPATIBLE = 11 # SPI Protocol Version |
NC_SPI_COMPATIBLE = 12 # SPI Protocol Version |
#------------------------------------------------------------------- |
#OPTIONS |
/beta/Code Redesign killagreg/menu.c |
---|
102,7 → 102,6 |
Menu_Clear(); |
if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem; |
// print menu item number in the upper right corner |
if(MenuItem < 10) i=17; |
else i=16; |
248,8 → 247,6 |
j=i<<2; |
LCD_printfxy(0,i+1," %c %c %c %c",'-' + 4 * (Motor[j].State>>7),'-' + 5 * (Motor[1+j].State>>7),'-' + 6 * (Motor[2+j].State>>7),'-' + 7 * (Motor[3+j].State>>7)); |
} |
//LCD_printfxy(0,1," %c %c %c %c",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7)); |
//LCD_printfxy(0,2," %c %c %c %c",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7)); |
LCD_printfxy(0,3," %c - - -",'-' + 12 * (Motor[8].State>>7)); |
if(Motor[9].State>>7) LCD_printfxy(4,3,"10"); |
if(Motor[10].State>>7) LCD_printfxy(8,3,"11"); |
269,7 → 266,7 |
break; |
default: |
MaxMenuItem = MenuItem - 1; |
if(MenuItem == MaxMenuItem) MaxMenuItem--; |
MenuItem = 0; |
break; |
} // end switch |
/beta/Code Redesign killagreg/spi.c |
---|
61,6 → 61,7 |
#include "uart0.h" |
#include "timer0.h" |
#include "analog.h" |
#include "capacity.h" |
//----------------------------------------- |
159,7 → 160,8 |
uint8_t NCSerialDataOkay = 0; |
int8_t NCGpsZ = 0; |
uint8_t SPI_CommandSequence[] = { SPI_FCCMD_USER, SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER1, SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_VERSION, SPI_FCCMD_SERVOS}; |
uint8_t SPI_CommandSequence[] = {SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1, SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_VERSION, SPI_FCCMD_STICK, SPI_FCCMD_SERVOS, SPI_FCCMD_ACCU}; |
uint8_t SPI_CommandCounter = 0; |
/*********************************************/ |
222,9 → 224,7 |
ToNaviCtrl.Param.Byte[7] = FCParam.UserParam8; |
ToNaviCtrl.Param.Byte[8] = FCFlags; |
FCFlags &= ~(FCFLAG_CALIBRATE | FCFLAG_START); // calibrate and start are temporal states that are cleared immediately after transmitting |
ToNaviCtrl.Param.Byte[9] = (uint8_t)UBat; |
ToNaviCtrl.Param.Byte[10] = LowVoltageWarning; |
ToNaviCtrl.Param.Byte[11] = GetActiveParamSet(); |
ToNaviCtrl.Param.Byte[9] = GetActiveParamSet(); |
break; |
case SPI_FCCMD_PARAMETER1: |
242,6 → 242,12 |
ToNaviCtrl.Param.Byte[11] = ParamSet.NaviAngleLimitation; |
break; |
case SPI_FCCMD_ACCU: |
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A |
ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh |
ToNaviCtrl.Param.Byte[4] = UBat; // 0.1V |
ToNaviCtrl.Param.Byte[5] = ParamSet.LowVoltageWarning; //0.1V |
break; |
case SPI_FCCMD_STICK: |
cli(); |
/beta/Code Redesign killagreg/spi.h |
---|
12,6 → 12,7 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_ACCU 16 |
typedef struct |
{ |
/beta/Code Redesign killagreg/uart0.c |
---|
142,7 → 142,7 |
"AccZ ", |
"Gas ", |
"Compass Heading ", |
"Voltage ", |
"Voltage [0.1V] ", |
"Receiver Level ", //10 |
"YawGyro Heading ", |
"Motor Front ", |
155,8 → 155,8 |
"MK3MAG CalState ", |
"NickServo ", //20 |
"Hoovergas ", |
"Current ", |
"Capacity ", |
"Current [0.1A]", |
"Capacity [mAh] ", |
" ", |
" ", //25 |
" ", |
/beta/Code Redesign killagreg/version.txt |
---|
361,6 → 361,7 |
- zwei weitere Spektrum-Varianten implementiert |
Anpassungen bzgl. V0.77c |
G.Stobrawa 8.1.2010: |