Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1510 → Rev 1511

/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: