Rev 2497 | Rev 2518 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2497 | Rev 2499 | ||
---|---|---|---|
Line 61... | Line 61... | ||
61 | unsigned char h,m,s; |
61 | unsigned char h,m,s; |
62 | unsigned int BaroExpandActive = 0; |
62 | unsigned int BaroExpandActive = 0; |
63 | int MesswertNick,MesswertRoll,MesswertGier,RohMesswertNick,RohMesswertRoll; |
63 | int MesswertNick,MesswertRoll,MesswertGier,RohMesswertNick,RohMesswertRoll; |
64 | int TrimNick, TrimRoll; |
64 | int TrimNick, TrimRoll; |
65 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
65 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
- | 66 | int BoatNeutralNick = 0,BoatNeutralRoll = 0,BoatNeutralGier = 0; |
|
66 | int Mittelwert_AccNick, Mittelwert_AccRoll; |
67 | int Mittelwert_AccNick, Mittelwert_AccRoll; |
67 | unsigned int NeutralAccX=0, NeutralAccY=0; |
68 | unsigned int NeutralAccX=0, NeutralAccY=0; |
68 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
69 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
69 | int NeutralAccZ = 0; |
70 | int NeutralAccZ = 0; |
70 | signed char NeutralAccZfine = 0; |
71 | signed char NeutralAccZfine = 0; |
Line 359... | Line 360... | ||
359 | printf("\n\rACC not calibrated!\r\n"); |
360 | printf("\n\rACC not calibrated!\r\n"); |
360 | NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
361 | NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
361 | NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
362 | NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
362 | sucess = 0; |
363 | sucess = 0; |
363 | } |
364 | } |
- | 365 | ||
- | 366 | // restore from eeprom |
|
- | 367 | BoatNeutralNick = (int16_t)GetParamWord(PID_GYRO_NICK); |
|
- | 368 | BoatNeutralRoll = (int16_t)GetParamWord(PID_GYRO_ROLL); |
|
- | 369 | BoatNeutralGier = (int16_t)GetParamWord(PID_GYRO_YAW); |
|
- | 370 | ||
364 | if(FC_StatusFlags3 & FC_STATUS3_BOAT) // Read Gyro Data from eeprom |
371 | if(FC_StatusFlags3 & FC_STATUS3_BOAT) // Read Gyro Data from eeprom |
365 | { |
372 | { |
366 | unsigned int nick, roll, gier; |
- | |
367 | // restore from eeprom |
- | |
368 | nick = (int16_t)GetParamWord(PID_GYRO_NICK); |
- | |
369 | roll = (int16_t)GetParamWord(PID_GYRO_ROLL); |
- | |
370 | gier = (int16_t)GetParamWord(PID_GYRO_YAW); |
- | |
371 | // strange settings? |
373 | // strange settings? |
372 | if(((unsigned int) nick > (600 * 16)) || ((unsigned int) nick < (400 * 16)) |
374 | if(((unsigned int) BoatNeutralNick > (600 * 16)) || ((unsigned int) BoatNeutralNick < (400 * 16)) |
373 | || ((unsigned int) roll > (600 * 16)) || ((unsigned int) roll < (400 * 16)) |
375 | || ((unsigned int) BoatNeutralRoll > (600 * 16)) || ((unsigned int) BoatNeutralRoll < (400 * 16)) |
374 | || ((unsigned int) gier > (600 * 2)) || ((unsigned int) gier < (400 * 2))) |
376 | || ((unsigned int) BoatNeutralGier > (600 * 2)) || ((unsigned int) BoatNeutralGier < (400 * 2))) |
375 | { |
377 | { |
376 | printf("\n\rGyro calibration data not valid\r\n"); |
378 | printf("\n\rGyro calibration data not valid\r\n"); |
377 | sucess = 0; |
379 | sucess = 0; |
378 | FC_StatusFlags3 &= ~FC_STATUS3_BOAT; |
380 | FC_StatusFlags3 &= ~FC_STATUS3_BOAT; |
379 | } |
381 | } |
380 | else |
382 | else |
381 | { |
383 | { |
382 | AdNeutralNick = nick; |
384 | AdNeutralNick = BoatNeutralNick; |
383 | AdNeutralRoll = roll; |
385 | AdNeutralRoll = BoatNeutralRoll; |
384 | AdNeutralGier = gier; |
386 | AdNeutralGier = BoatNeutralGier; |
385 | } |
387 | } |
386 | } |
388 | } |
387 | } |
389 | } |
388 | EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
390 | EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
389 | MesswertNick = 0; |
391 | MesswertNick = 0; |
Line 796... | Line 798... | ||
796 | } |
798 | } |
797 | else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
799 | else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
798 | LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
800 | LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
799 | } |
801 | } |
Line -... | Line 802... | ||
- | 802 | ||
- | 803 | void ChannelAssingment(void) |
|
- | 804 | { |
|
- | 805 | cli(); |
|
- | 806 | ChannelNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; |
|
- | 807 | ChannelRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; |
|
- | 808 | ChannelYaw = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
|
- | 809 | ChannelGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; |
|
- | 810 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 811 | //+ Analoge Steuerung per Seriell |
|
- | 812 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 813 | if((ExternalControl.Config & EC_VALID) && (Parameter_ExternalControl > 128)) |
|
- | 814 | { |
|
- | 815 | ChannelNick += ExternalControl.Nick; |
|
- | 816 | ChannelRoll += ExternalControl.Roll; |
|
- | 817 | ChannelYaw += ExternalControl.Gier; |
|
- | 818 | if(ExternalControl.Config & EC_GAS_ADD) ChannelGas += ExternalControl.Gas; |
|
- | 819 | else |
|
- | 820 | { |
|
- | 821 | if(ExternalControl.Gas < ChannelGas) ChannelGas = ExternalControl.Gas; // the RC-Stick is the MAX value here |
|
- | 822 | } |
|
- | 823 | } |
|
- | 824 | sei(); |
|
- | 825 | if(ChannelNick > 127) ChannelNick = 127; else if(ChannelNick < -127) ChannelNick = -127; |
|
- | 826 | if(ChannelRoll > 127) ChannelRoll = 127; else if(ChannelRoll < -127) ChannelRoll = -127; |
|
- | 827 | if(ChannelYaw > 127) ChannelYaw = 127; else if(ChannelYaw < -127) ChannelYaw = -127; |
|
- | 828 | if(ChannelGas > 127) ChannelGas = 127; else if(ChannelGas < -127) ChannelGas = -127; |
|
Line 800... | Line 829... | ||
800 | 829 | } |
|
801 | 830 | ||
802 | //############################################################################ |
831 | //############################################################################ |
803 | // |
832 | // |
Line 829... | Line 858... | ||
829 | } else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
858 | } else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
830 | } |
859 | } |
831 | if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
860 | if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
832 | { |
861 | { |
833 | StickGas = 0; // Hold Gas down in that case |
862 | StickGas = 0; // Hold Gas down in that case |
834 | ExternalControl.Gas = 0; |
863 | // ExternalControl.Gas = 0; |
835 | HooverGasEmergencyPercent = MIN_GAS; |
864 | HooverGasEmergencyPercent = MIN_GAS; |
836 | } |
865 | } |
837 | GasMischanteil = StickGas; |
866 | GasMischanteil = StickGas; |
838 | if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
867 | if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
839 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
868 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1159... | Line 1188... | ||
1159 | if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
1188 | if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
1160 | { |
1189 | { |
1161 | static int stick_nick,stick_roll; |
1190 | static int stick_nick,stick_roll; |
1162 | unsigned char stick_p; |
1191 | unsigned char stick_p; |
1163 | ParameterZuordnung(); |
1192 | ParameterZuordnung(); |
- | 1193 | ChannelAssingment(); |
|
Line 1164... | Line 1194... | ||
1164 | 1194 | ||
1165 | stick_p = EE_Parameter.Stick_P; |
- | |
1166 | cli(); |
- | |
1167 | ChannelNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; |
- | |
1168 | ChannelRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; |
- | |
1169 | ChannelYaw = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
- | |
1170 | ChannelGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; |
- | |
1171 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1172 | //+ Analoge Steuerung per Seriell |
- | |
1173 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1174 | if((ExternalControl.Config & EC_VALID) && (Parameter_ExternalControl > 128)) |
- | |
1175 | { |
- | |
1176 | ChannelNick += ExternalControl.Nick; |
- | |
1177 | ChannelRoll += ExternalControl.Roll; |
- | |
1178 | ChannelYaw += ExternalControl.Gier; |
- | |
1179 | if(ExternalControl.Config & EC_GAS_ADD) ChannelGas += ExternalControl.Gas; |
- | |
1180 | else |
- | |
1181 | { |
- | |
1182 | if(ExternalControl.Gas < ChannelGas) ChannelGas = ExternalControl.Gas; // the RC-Stick is the MAX value here |
- | |
1183 | } |
- | |
1184 | } |
- | |
1185 | sei(); |
- | |
1186 | if(ChannelNick > 127) ChannelNick = 127; else if(ChannelNick < -127) ChannelNick = -127; |
- | |
1187 | if(ChannelRoll > 127) ChannelRoll = 127; else if(ChannelRoll < -127) ChannelRoll = -127; |
- | |
1188 | if(ChannelYaw > 127) ChannelYaw = 127; else if(ChannelYaw < -127) ChannelYaw = -127; |
- | |
1189 | if(ChannelGas > 127) ChannelGas = 127; else if(ChannelGas < -127) ChannelGas = -127; |
1195 | stick_p = EE_Parameter.Stick_P; |
1190 | stick_nick = (stick_nick * 3 + ChannelNick * stick_p) / 4; |
1196 | stick_nick = (stick_nick * 3 + ChannelNick * stick_p) / 4; |
1191 | stick_roll = (stick_roll * 3 + ChannelRoll * stick_p) / 4; |
1197 | stick_roll = (stick_roll * 3 + ChannelRoll * stick_p) / 4; |
1192 | cli(); |
1198 | cli(); |
1193 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
1199 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
Line 1395... | Line 1401... | ||
1395 | Mess_IntegralRoll -= tmp_long2; |
1401 | Mess_IntegralRoll -= tmp_long2; |
1396 | DriftNick += tmp_long; |
1402 | DriftNick += tmp_long; |
1397 | DriftRoll += tmp_long2; |
1403 | DriftRoll += tmp_long2; |
1398 | } |
1404 | } |
1399 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1405 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1400 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1406 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) //alle 512ms |
1401 | { |
1407 | { |
1402 | // static int cnt = 0; |
1408 | // static int cnt = 0; |
1403 | // static char last_n_p,last_n_n,last_r_p,last_r_n; |
1409 | // static char last_n_p,last_n_n,last_r_p,last_r_n; |
1404 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1410 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1405 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1411 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1406 | // Gyro-Drift ermitteln |
1412 | // Gyro-Drift ermitteln |
1407 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1413 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1408 | if(EE_Parameter.Driftkomp && abs(Mittelwert_AccNick) < 200*4 && abs(Mittelwert_AccRoll) < 200*4 && !TrichterFlug && abs(MesswertGier) < 32/* && (FC_StatusFlags & FC_STATUS_FLY)*/) |
1414 | if(EE_Parameter.Driftkomp && abs(Mittelwert_AccNick) < 200*4 && abs(Mittelwert_AccRoll) < 200*4 && !TrichterFlug && abs(MesswertGier) < 32/* && (FC_StatusFlags & FC_STATUS_FLY)*/) |
1409 | { |
1415 | { |
1410 | DebugOut.Analog[16] = EE_Parameter.Driftkomp; |
- | |
1411 | DriftNick -= DriftNick / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1416 | DriftNick -= DriftNick / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1412 | DriftRoll -= DriftRoll / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1417 | DriftRoll -= DriftRoll / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1413 | GierGyroFehler -= GierGyroFehler / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1418 | GierGyroFehler -= GierGyroFehler / (64 * (unsigned int) EE_Parameter.Driftkomp); |
1414 | if((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(ChannelYaw) > 25)) |
1419 | if((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(ChannelYaw) > 25)) |
1415 | { |
1420 | { |