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