Rev 566 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 566 | Rev 579 | ||
---|---|---|---|
Line 469... | Line 469... | ||
469 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
469 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
470 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
470 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
471 | if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
471 | if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
472 | //Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
472 | //Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
473 | // und dieser dann langsam zwangsweise reduziert |
473 | // und dieser dann langsam zwangsweise reduziert |
474 | if (UBat <= EE_Parameter.UnterspannungsWarnung - 2) //Unterhalb der Piepser Schwelle aktivieren |
474 | if (UBat <= EE_Parameter.UnterspannungsWarnung - 4) //Unterhalb der Piepser Schwelle aktivieren |
475 | { |
475 | { |
476 | if (ubat_cnt > 1000) |
476 | if (ubat_cnt > 1000) |
477 | { |
477 | { |
478 | ubat_cnt = 0; |
478 | ubat_cnt = 0; |
479 | if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
479 | if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
Line 938... | Line 938... | ||
938 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
938 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
939 | } |
939 | } |
940 | else last_n_n = 1; |
940 | else last_n_n = 1; |
941 | } else last_n_n = 0; |
941 | } else last_n_n = 0; |
942 | } else cnt = 0; |
942 | } else cnt = 0; |
943 | //Salvo 11.12.2007 |
943 | //Salvo 26.12.2007 |
944 | w = (abs(Mittelwert_AccNick)); |
944 | w = (abs(Mittelwert_AccNick)); |
945 | v = (abs(Mittelwert_AccRoll)); |
945 | v = (abs(Mittelwert_AccRoll)); |
946 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen |
946 | if ((w < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur in annaehend waagrechter Lage nachtrimmen |
947 | { |
947 | { |
948 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
948 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
949 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
949 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
950 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
950 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
951 | } |
951 | } |
Line 980... | Line 980... | ||
980 | } else last_r_n = 0; |
980 | } else last_r_n = 0; |
981 | } else |
981 | } else |
982 | { |
982 | { |
983 | cnt = 0; |
983 | cnt = 0; |
984 | } |
984 | } |
985 | //Salvo 11.12.2007 |
985 | //Salvo 26.12.2007 |
986 | w = (abs(Mittelwert_AccNick)); |
- | |
987 | v = (abs(Mittelwert_AccRoll)); |
- | |
988 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen |
986 | if ((w < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur inannaehernd waagrechter Lage nachtrimmen |
989 | { |
987 | { |
990 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
988 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
991 | if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
989 | if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
992 | if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
990 | if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
993 | } |
991 | } |
994 | //Salvo End |
992 | //Salvo End |
995 | //DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick); |
993 | //DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick); |
996 | //DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
994 | //DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
997 | } |
995 | } |
998 | else |
996 | else |
Line 1003... | Line 1001... | ||
1003 | if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
1001 | if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
1004 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1002 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1005 | MittelIntegralNick_Alt = MittelIntegralNick; |
1003 | MittelIntegralNick_Alt = MittelIntegralNick; |
1006 | MittelIntegralRoll_Alt = MittelIntegralRoll; |
1004 | MittelIntegralRoll_Alt = MittelIntegralRoll; |
1007 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1005 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1008 | IntegralAccNick = 0; |
1006 | IntegralAccNick = 0; |
1009 | IntegralAccRoll = 0; |
1007 | IntegralAccRoll = 0; |
1010 | IntegralAccZ = 0; |
1008 | IntegralAccZ = 0; |
1011 | MittelIntegralNick = 0; |
1009 | MittelIntegralNick = 0; |
1012 | MittelIntegralRoll = 0; |
1010 | MittelIntegralRoll = 0; |
1013 | MittelIntegralNick2 = 0; |
1011 | MittelIntegralNick2 = 0; |
1014 | MittelIntegralRoll2 = 0; |
1012 | MittelIntegralRoll2 = 0; |
1015 | ZaehlMessungen = 0; |
1013 | ZaehlMessungen = 0; |
1016 | - | ||
1017 | - | ||
1018 | } // Ende Abgleich |
1014 | } // Ende Abgleich |
Line 1019... | Line 1015... | ||
1019 | 1015 | ||
- | 1016 | // Salvo Ersatzkompass und Giergyrokompensation 15.12.2007 ********************** |
|
- | 1017 | if ((Kompass_Neuer_Wert > 0)) //nur wenn Kompass einen neuen Wert geliefert hat |
|
1020 | // Salvo Ersatzkompass und Giergyrokompensation 15.12.2007 ********************** |
1018 | { |
- | 1019 | Kompass_Neuer_Wert = 0; |
|
- | 1020 | w = (abs(Mittelwert_AccNick)); |
|
- | 1021 | v = (abs(Mittelwert_AccRoll)); |
|
- | 1022 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok |
|
- | 1023 | { |
|
1021 | if ((Kompass_Neuer_Wert > 0)) |
1024 | if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
1022 | { |
- | |
1023 | Kompass_Neuer_Wert = 0; |
- | |
1024 | w = (abs(Mittelwert_AccNick)); |
- | |
1025 | v = (abs(Mittelwert_AccRoll)); |
- | |
1026 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok |
- | |
1027 | { |
- | |
1028 | if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
- | |
Line 1029... | Line 1025... | ||
1029 | { |
1025 | { |
- | 1026 | ||
- | 1027 | if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass |
|
- | 1028 | { |
|
1030 | 1029 | if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1; |
|
1031 | if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass |
- | |
1032 | { |
- | |
1033 | if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1; |
- | |
1034 | if (cnt_stickgier_zero > 1) // nur Abgleichen wenn keine Stickbewegung da |
1030 | if (cnt_stickgier_zero > 2) // nur Abgleichen wenn keine Stickbewegung da |
1035 | { |
1031 | { |
1036 | w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT); |
1032 | w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT); |
1037 | v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1033 | v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1038 | if (v <-180) v +=360; // Uberlaufkorrektur |
1034 | if (v <-180) v +=360; // Uberlaufkorrektur |
1039 | if (v > 180) v -=360; // Uberlaufkorrektur |
1035 | if (v > 180) v -=360; // Uberlaufkorrektur |
1040 | 1036 | ||
1041 | v = w -v; //Differenz Gyro zu Kompass ist der Driftfehler |
1037 | v = w-v; //Differenz Gyro zu Kompass ist der Driftfehler |
1042 | 1038 | ||
1043 | #define GIER_COMP_MAX 4 |
1039 | #define GIER_COMP_MAX 8 |
1044 | if (v > GIER_COMP_MAX) v= GIER_COMP_MAX; |
1040 | if (v > GIER_COMP_MAX) v= GIER_COMP_MAX; |
1045 | if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX; |
1041 | if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX; |
1046 | if (abs(w) > 1) |
1042 | if (abs(w) > 1) |
1047 | { |
1043 | { |
1048 | GyroGier_Comp = 0; |
1044 | GyroGier_Comp = 0; |
1049 | gyrogier_kompass = KompassValue; // Kompasswert merken |
- | |
1050 | AdNeutralGier -= v; |
1045 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1051 | } |
1046 | AdNeutralGier -= v; |
- | 1047 | } |
|
1052 | } |
1048 | } |
1053 | } |
1049 | } |
1054 | else |
1050 | else |
1055 | { |
1051 | { |
1056 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1052 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1057 | cnt_stickgier_zero = 0; |
1053 | cnt_stickgier_zero = 0; |
1058 | GyroGier_Comp = 0; |
1054 | GyroGier_Comp = 0; |
1059 | } |
1055 | } |
1060 | 1056 | ||
1061 | magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
1057 | magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
1062 | GyroKomp_Int = (GyroKomp_Int )/(long)GYROKOMP_INC_GRAD_DEFAULT; |
1058 | GyroKomp_Int = (GyroKomp_Int )/(long)GYROKOMP_INC_GRAD_DEFAULT; |
1063 | 1059 | ||
1064 | w = KompassValue - GyroKomp_Int; |
1060 | w = KompassValue - GyroKomp_Int; |
1065 | if ((w > 0) && (w < 180)) |
1061 | if ((w > 0) && (w < 180)) |
1066 | { |
1062 | { |
1067 | ++GyroKomp_Int; |
1063 | ++GyroKomp_Int; |
1068 | } |
1064 | } |
1069 | else if ((w > 0) && (w >= 180)) |
1065 | else if ((w > 0) && (w >= 180)) |
1070 | { |
1066 | { |
1071 | --GyroKomp_Int; |
1067 | --GyroKomp_Int; |
1072 | } |
1068 | } |
1073 | else if ((w < 0) && (w >= -180)) |
1069 | else if ((w < 0) && (w >= -180)) |
1074 | { |
1070 | { |
1075 | --GyroKomp_Int; |
1071 | --GyroKomp_Int; |
1076 | } |
1072 | } |
1077 | else if ((w < 0) && (w < -180)) |
1073 | else if ((w < 0) && (w < -180)) |
1078 | { |
1074 | { |
1079 | ++GyroKomp_Int; |
1075 | ++GyroKomp_Int; |
1080 | } |
1076 | } |
1081 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360L; |
1077 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360L; |
1082 | GyroKomp_Int = (GyroKomp_Int%360L) * (long)GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern |
1078 | GyroKomp_Int = (GyroKomp_Int%360L) * (long)GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern |
1083 | } |
1079 | } |
1084 | } |
1080 | } |
1085 | else |
1081 | else //Kompassfehler |
1086 | { |
1082 | { |
1087 | magkompass_ok = 0; |
1083 | magkompass_ok = 0; |
1088 | GyroGier_Comp = 0; |
1084 | GyroGier_Comp = 0; |
1089 | } |
1085 | } |
1090 | Kompass_Value_Old = KompassValue; |
1086 | Kompass_Value_Old = KompassValue; |
Line 1091... | Line 1087... | ||
1091 | } |
1087 | } |
1092 | // Salvo End ************************* |
1088 | // Salvo End ************************* |
1093 | 1089 | ||
Line 1205... | Line 1201... | ||
1205 | DebugOut.Analog[25] = GPS_Roll; |
1201 | DebugOut.Analog[25] = GPS_Roll; |
1206 | DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben |
1202 | DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben |
1207 | DebugOut.Analog[27] = gps_rel_act_position.utm_north; |
1203 | DebugOut.Analog[27] = gps_rel_act_position.utm_north; |
1208 | DebugOut.Analog[28] = gps_rel_act_position.utm_alt; |
1204 | DebugOut.Analog[28] = gps_rel_act_position.utm_alt; |
1209 | DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd); |
1205 | DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd); |
1210 | DebugOut.Analog[30] = GPS_dist_2trgt; |
1206 | DebugOut.Analog[30] = dist_flown; |
- | 1207 | DebugOut.Analog[31] = (int) dist_2home; |
|
- | 1208 | // DebugOut.Analog[31] = (int) GPS_hdng_abs_2trgt; |
|
1211 | DebugOut.Analog[31] = (int) GyroGier_Comp; |
1209 | // DebugOut.Analog[31] = (int) GyroGier_Comp; |
1212 | /* DebugOut.Analog[16] = motor_rx[0]; |
1210 | /* DebugOut.Analog[16] = motor_rx[0]; |
1213 | DebugOut.Analog[17] = motor_rx[1]; |
1211 | DebugOut.Analog[17] = motor_rx[1]; |
1214 | DebugOut.Analog[18] = motor_rx[2]; |
1212 | DebugOut.Analog[18] = motor_rx[2]; |
1215 | DebugOut.Analog[19] = motor_rx[3]; |
1213 | DebugOut.Analog[19] = motor_rx[3]; |
1216 | DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
1214 | DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |