Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1283 → Rev 1284

/beta/Code Redesign killagreg/eeprom.c
100,9 → 100,9
ParamSet.AngleTurnOverNick = 85;
ParamSet.AngleTurnOverRoll = 85;
}
ParamSet.ChannelAssignment[CH_NICK] = 1;
ParamSet.ChannelAssignment[CH_GAS] = 1;
ParamSet.ChannelAssignment[CH_ROLL] = 2;
ParamSet.ChannelAssignment[CH_GAS] = 3;
ParamSet.ChannelAssignment[CH_NICK] = 3;
ParamSet.ChannelAssignment[CH_YAW] = 4;
ParamSet.ChannelAssignment[CH_POTI1] = 5;
ParamSet.ChannelAssignment[CH_POTI2] = 6;
114,6 → 114,8
ParamSet.HeightP = 10;
ParamSet.HeightD = 30;
ParamSet.Height_ACC_Effect = 30;
ParamSet.Height_HooverBand = 5;
ParamSet.Height_GPS_Z = 64;
ParamSet.Height_Gain = 20;
ParamSet.StickP = 14;
ParamSet.StickD = 16;
161,7 → 163,7
ParamSet.J17Bitmask_Warning = 0xAA;
ParamSet.J16Timing = 15;
ParamSet.J17Timing = 15;
ParamSet.NaviGpsModeControl = 253;
ParamSet.NaviGpsModeControl = 252;
ParamSet.NaviGpsGain = 100;
ParamSet.NaviGpsP = 90;
ParamSet.NaviGpsI = 90;
202,10 → 204,10
ParamSet.AngleTurnOverNick = 85;
ParamSet.AngleTurnOverRoll = 85;
}
ParamSet.ChannelAssignment[CH_NICK] = 1;
ParamSet.ChannelAssignment[CH_GAS] = 1;
ParamSet.ChannelAssignment[CH_ROLL] = 2;
ParamSet.ChannelAssignment[CH_GAS] = 3;
ParamSet.ChannelAssignment[CH_YAW] = 4;
ParamSet.ChannelAssignment[CH_NICK] = 3;
ParamSet.ChannelAssignment[CH_YAW] = 4;
ParamSet.ChannelAssignment[CH_POTI1] = 5;
ParamSet.ChannelAssignment[CH_POTI2] = 6;
ParamSet.ChannelAssignment[CH_POTI3] = 7;
216,6 → 218,8
ParamSet.HeightP = 10;
ParamSet.HeightD = 30;
ParamSet.Height_ACC_Effect = 30;
ParamSet.Height_HooverBand = 5;
ParamSet.Height_GPS_Z = 64;
ParamSet.Height_Gain = 15;
ParamSet.StickP = 10;
ParamSet.StickD = 16;
263,7 → 267,7
ParamSet.J17Bitmask_Warning = 0xAA;
ParamSet.J16Timing = 20;
ParamSet.J17Timing = 20;
ParamSet.NaviGpsModeControl = 253;
ParamSet.NaviGpsModeControl = 252;
ParamSet.NaviGpsGain = 100;
ParamSet.NaviGpsP = 90;
ParamSet.NaviGpsI = 90;
304,10 → 308,10
ParamSet.AngleTurnOverNick = 85;
ParamSet.AngleTurnOverRoll = 85;
}
ParamSet.ChannelAssignment[CH_NICK] = 1;
ParamSet.ChannelAssignment[CH_GAS] = 1;
ParamSet.ChannelAssignment[CH_ROLL] = 2;
ParamSet.ChannelAssignment[CH_GAS] = 3;
ParamSet.ChannelAssignment[CH_YAW] = 4;
ParamSet.ChannelAssignment[CH_NICK] = 3;
ParamSet.ChannelAssignment[CH_YAW] = 4;
ParamSet.ChannelAssignment[CH_POTI1] = 5;
ParamSet.ChannelAssignment[CH_POTI2] = 6;
ParamSet.ChannelAssignment[CH_POTI3] = 7;
318,6 → 322,8
ParamSet.HeightP = 10;
ParamSet.HeightD = 30;
ParamSet.Height_ACC_Effect = 30;
ParamSet.Height_HooverBand = 5;
ParamSet.Height_GPS_Z = 64;
ParamSet.Height_Gain = 15;
ParamSet.StickP = 8;
ParamSet.StickD = 16;
365,7 → 371,7
ParamSet.J17Bitmask_Warning = 0xAA;
ParamSet.J16Timing = 30;
ParamSet.J17Timing = 30;
ParamSet.NaviGpsModeControl = 253;
ParamSet.NaviGpsModeControl = 252;
ParamSet.NaviGpsGain = 100;
ParamSet.NaviGpsP = 90;
ParamSet.NaviGpsI = 90;
/beta/Code Redesign killagreg/eeprom.h
76,7 → 76,7
#define CH_POTI3 6
#define CH_POTI4 7
 
#define EEPARAM_REVISION 77 // is count up, if paramater stucture has changed (compatibility)
#define EEPARAM_REVISION 78 // is count up, if paramater stucture has changed (compatibility)
#define EEMIXER_REVISION 1 // is count up, if Mixer stucture has changed (compatibility)
 
// values above 250 representing poti1 to poti4
90,6 → 90,8
uint8_t HeightP; // Wert : 0-32
uint8_t Height_Gain; // Wert : 0-50
uint8_t Height_ACC_Effect; // Wert : 0-250
uint8_t Height_HooverBand; // Wert : 0-250
uint8_t Height_GPS_Z; // Wert : 0-250
uint8_t StickP; // Wert : 1-6
uint8_t StickD; // Wert : 0-64
uint8_t StickYawP; // Wert : 1-20
/beta/Code Redesign killagreg/fc.c
162,7 → 162,7
uint8_t LoopingLeft = 0, LoopingRight = 0, LoopingDown = 0, LoopingTop = 0;
 
 
fc_param_t FCParam = {48,251,16,58,64,8,150,150,2,10,0,0,0,0,0,0,0,0,100,100,70,90,65,64,100,0,0,0};
fc_param_t FCParam = {48,251,16,58,64,64,8,150,150,2,10,0,0,0,0,0,0,0,0,100,100,70,90,65,64,100,0,0,0};
 
 
 
573,6 → 573,7
CHK_POTI_MM(FCParam.HeightD,ParamSet.HeightD,0,100);
CHK_POTI_MM(FCParam.HeightP,ParamSet.HeightP,0,100);
CHK_POTI(FCParam.Height_ACC_Effect,ParamSet.Height_ACC_Effect);
CHK_POTI(FCParam.Height_GPS_Z,ParamSet.Height_GPS_Z);
CHK_POTI(FCParam.CompassYawEffect,ParamSet.CompassYawEffect);
CHK_POTI_MM(FCParam.GyroP,ParamSet.GyroP,10,255);
CHK_POTI(FCParam.GyroI,ParamSet.GyroI);
1430,7 → 1431,7
DebugOut.Analog[2] = (10 * AccNick) / ACC_DEG_FACTOR; // in 0.1 deg
DebugOut.Analog[3] = (10 * AccRoll) / ACC_DEG_FACTOR; // in 0.1 deg
DebugOut.Analog[4] = GyroYaw;
DebugOut.Analog[5] = ReadingHeight;
DebugOut.Analog[5] = ReadingHeight/5;
DebugOut.Analog[6] = (ReadingIntegralTop / 512);
DebugOut.Analog[8] = CompassHeading;
DebugOut.Analog[9] = UBat;
1437,8 → 1438,7
DebugOut.Analog[10] = RC_Quality;
DebugOut.Analog[11] = YawGyroHeading / GYRO_DEG_FACTOR;
DebugOut.Analog[19] = CompassCalState;
// DebugOut.Analog[24] = GyroNick/2;
// DebugOut.Analog[25] = GyroRoll/2;
DebugOut.Analog[22] = NCGpsZ;
DebugOut.Analog[27] = (int16_t)FCParam.KalmanMaxDrift;
// DebugOut.Analog[28] = (int16_t)FCParam.KalmanMaxFusion;
DebugOut.Analog[30] = GPSStickNick;
1518,19 → 1518,18
// if height control is activated
if(ParamSet.GlobalConfig & CFG_AIRPRESS_SENSOR)
{
#define HOOVER_GAS_AVERAGE 4192 // 4192 * 2ms = 8.2s averaging
#define HOOVER_GAS_AVERAGE 4192L // 4192 * 2ms = 8.2s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8 ms averaging
 
int16_t CosNick, CosRoll;
int16_t HCGas,HooverGas, HeightDeviation;
int16_t HCGas, HeightDeviation;
static uint8_t HCActive = 0;
static int16_t FilterHCGas = 0;
static uint32_t HooverGasFilter = 0;
static int16_t HooverGas = 400, HooverGasMin = 0, HooverGasMax = 1023;
static uint32_t HooverGasFilter = 400L * HOOVER_GAS_AVERAGE;
static uint8_t delay = 100;
 
 
// get the current hooverpoint
HooverGas = (int16_t)(HooverGasFilter/HOOVER_GAS_AVERAGE);
DebugOut.Analog[25] = HooverGas;
DebugOut.Analog[18] = ReadingVario;
 
1639,8 → 1638,7
}
} //if MKFlags & MKFLAG_FLY
 
if(HooverGas == 0) HCGas = GasMixFraction; // take stick gas
else HCGas = HooverGas; // take hoover gas
HCGas = HooverGas; // take hoover gas (neutral point)
 
#else // Holger original version
 
1659,17 → 1657,18
HeightDeviation = (int16_t)(ReadingHeight - SetPointHeight); // positive when to high
tmp_int = (HeightDeviation * (int16_t)FCParam.HeightP) / 16; // p-part
HCGas -= tmp_int;
// ------------------------- D-Part ----------------------------
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = ReadingVario / 8;
if(tmp_int > 8) tmp_int = 8; // limit quadratic part on upward movement to avoid to much gas reduction
if(tmp_int > 0) tmp_int = ReadingVario + (tmp_int * tmp_int) / 4;
else tmp_int = ReadingVario - (tmp_int * tmp_int) / 4;
tmp_int = (FCParam.HeightD * (int32_t)(tmp_int)) / 128L; // scale to d-gain parameter
LIMIT_MIN_MAX(tmp_int, -63, 63);
LIMIT_MIN_MAX(tmp_int, -127, 255);
HCGas -= tmp_int;
// ------------------------ ACC-Part ----------------------------
// ------------------------ D-Part 2: ACC-Z Intragral ------------------------
tmp_int = ((ReadingIntegralTop / 128) * (int32_t) FCParam.Height_ACC_Effect) / (128 / STICK_GAIN);
LIMIT_MIN_MAX(tmp_int, -63, 127);
DebugOut.Analog[23] = -tmp_int;
LIMIT_MIN_MAX(tmp_int, -127, 255);
HCGas -= tmp_int;
 
// limit deviation from hoover point within the target region
1676,9 → 1675,14
if(abs(HeightDeviation) < 200 && (HooverGas > 0)) // deviation is less than 2 meter
{
 
LIMIT_MIN_MAX(HCGas, HooverGas - HooverGas / 6, HooverGas + HooverGas / 6); // +/- 16% around the hoover point
LIMIT_MIN_MAX(HCGas, HooverGasMin, HooverGasMax); // limit gas around the hoover point
}
 
// ------------------------ D-Part 3: GpsZ ----------------------------------
tmp_int = (ParamSet.Height_GPS_Z * (int32_t)NCGpsZ)/128L;
DebugOut.Analog[23] = -tmp_int;
HCGas -= tmp_int;
 
// strech control output by inverse attitude projection
tmp_long3 = (int32_t)HCGas;
tmp_long3 *= 8192;
1708,8 → 1712,21
tmp_long3 *= CosRoll; // apply roll projection
tmp_long3 /= 8129;
// average vertical projected thrust
HooverGasFilter -= (int32_t)HooverGas;
HooverGasFilter -= HooverGasFilter/HOOVER_GAS_AVERAGE;
HooverGasFilter += tmp_long3;
HooverGas = (int16_t)(HooverGasFilter/HOOVER_GAS_AVERAGE);
if(ParamSet.Height_HooverBand)
{
int16_t band;
band = HooverGas / ParamSet.Height_HooverBand; // the higher the parameter the smaller the range
HooverGasMin = HooverGas - band;
HooverGasMax = HooverGas + band;
}
else
{ // no limit
HooverGasMin = 0;
HooverGasMax = 1023;
}
}
}
}// EOF ParamSet.GlobalConfig & CFG_HEIGHT_CONTROL
/beta/Code Redesign killagreg/fc.h
34,6 → 34,7
uint8_t MaxHeight;
uint8_t HeightP;
uint8_t Height_ACC_Effect;
uint8_t Height_GPS_Z;
uint8_t CompassYawEffect;
uint8_t GyroD;
uint8_t GyroP;
/beta/Code Redesign killagreg/main.c
352,6 → 352,7
GPSStickNick = 0;
GPSStickRoll = 0;
NCSerialDataOkay = 0;
NCGpsZ = 0;
}
}
#endif
/beta/Code Redesign killagreg/makefile
5,11 → 5,11
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 75
VERSION_PATCH = 7
VERSION_PATCH = 8
 
VERSION_SERIAL_MAJOR = 10 # Serial Protocol Major Version
VERSION_SERIAL_MINOR = 1 # Serial Protocol Minor Version
NC_SPI_COMPATIBLE = 8 # SPI Protocol Version
NC_SPI_COMPATIBLE = 9 # SPI Protocol Version
 
#-------------------------------------------------------------------
#OPTIONS
/beta/Code Redesign killagreg/spi.c
155,6 → 155,7
uint8_t SPI_RxDataValid = 0;
uint8_t NCDataOkay = 0;
uint8_t NCSerialDataOkay = 0;
int8_t NCGpsZ = 0;
 
uint8_t SPI_CommandSequence[] = { SPI_CMD_USER, SPI_CMD_STICK, SPI_CMD_PARAMETER1, SPI_CMD_STICK, SPI_CMD_MISC, SPI_CMD_VERSION, SPI_CMD_SERVOS};
uint8_t SPI_CommandCounter = 0;
328,6 → 329,7
FCParam.KalmanMaxFusion = FromNaviCtrl.Param.sByte[1];
FCParam.KalmanMaxDrift = FromNaviCtrl.Param.sByte[2];
NCSerialDataOkay = FromNaviCtrl.Param.Byte[3];
NCGpsZ = FromNaviCtrl.Param.sByte[4];
DebugOut.Analog[29] = NCSerialDataOkay;
break;
 
340,6 → 342,7
// disable GPS control
GPSStickNick = 0;
GPSStickRoll = 0;
NCGpsZ = 0;
}
}
 
/beta/Code Redesign killagreg/spi.h
92,6 → 92,7
 
extern uint8_t NCDataOkay;
extern uint8_t NCSerialDataOkay;
extern int8_t NCGpsZ;
 
void SPI_MasterInit(void);
void SPI_StartTransmitPacket(void);
/beta/Code Redesign killagreg/uart0.c
149,9 → 149,9
"MK3MAG CalState ",
"NickServo ", //20
"RollServo ",
" ",
" ",
" ",
"GPS-Z ",
"ACC-D ",
"GPS-D ",
"Hoovergas ", //25
"MaxHoover ",
"Kalman Max Drift",
/beta/Code Redesign killagreg/version.txt
300,9 → 300,14
0.75h H.Buss 3.09.2009
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas
 
Anpassungen bzgl. V0.75h
G.Stobrawa 3.9.2009:
0.75i H.Buss 7.09.2009
- GpsZ vom Navi zur FC für den Höhenregler
- "hoovergas-Variation" als Parameter
- Kompatibilität zu NC und PC erhöht
 
Anpassungen bzgl. V0.75i
G.Stobrawa 7.9.2009:
 
- Code stärker modularisiert und restrukturiert
- viele Kommentare zur Erklärug eingefügt
- konsequent englische Variablennamen