Rev 1102 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1102 | Rev 1103 | ||
---|---|---|---|
Line 94... | Line 94... | ||
94 | //Salvo 12.10.2007 |
94 | //Salvo 12.10.2007 |
95 | uint8_t magkompass_ok=0; |
95 | uint8_t magkompass_ok=0; |
96 | uint8_t gps_cmd = GPS_CMD_STOP; |
96 | uint8_t gps_cmd = GPS_CMD_STOP; |
97 | static int ubat_cnt =0; |
97 | static int ubat_cnt =0; |
98 | static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung |
98 | static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung |
99 | int w,v; |
99 | int w,v,w1,v1; |
100 | //Salvo End |
100 | //Salvo End |
Line 101... | Line 101... | ||
101 | 101 | ||
102 | //Salvo 15.12.2007 Ersatzkompass und Giergyrokompensation |
102 | //Salvo 15.12.2007 Ersatzkompass und Giergyrokompensation |
103 | long GyroKomp_Int; |
103 | long GyroKomp_Int; |
Line 165... | Line 165... | ||
165 | struct mk_param_struct EE_Parameter; |
165 | struct mk_param_struct EE_Parameter; |
166 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
166 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
167 | int MaxStickNick = 0,MaxStickRoll = 0; |
167 | int MaxStickNick = 0,MaxStickRoll = 0; |
168 | unsigned int modell_fliegt = 0; |
168 | unsigned int modell_fliegt = 0; |
169 | unsigned char MikroKopterFlags = 0; |
169 | unsigned char MikroKopterFlags = 0; |
- | 170 | //Salvo 31.12.2008 |
|
- | 171 | long waagrecht; // Mass fuer Annaeherung an Waagrecht fuer Kompasskompensation |
|
- | 172 | // Salvo End |
|
Line 170... | Line 173... | ||
170 | 173 | ||
171 | //Salvo 2.1.2008 Allgemeine Debugvariablen |
174 | //Salvo 2.1.2008 Allgemeine Debugvariablen |
172 | int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7; |
175 | int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7; |
Line 1103... | Line 1106... | ||
1103 | if ((Kompass_Neuer_Wert > 0) && (Kompass_present>0)) //nur wenn Kompass einen neuen Wert geliefert hat |
1106 | if ((Kompass_Neuer_Wert > 0) && (Kompass_present>0)) //nur wenn Kompass einen neuen Wert geliefert hat |
1104 | { |
1107 | { |
1105 | Kompass_Neuer_Wert = 0; |
1108 | Kompass_Neuer_Wert = 0; |
1106 | w = (abs(Mittelwert_AccNick)); |
1109 | w = (abs(Mittelwert_AccNick)); |
1107 | v = (abs(Mittelwert_AccRoll)); |
1110 | v = (abs(Mittelwert_AccRoll)); |
- | 1111 | w1 = abs((int)(IntegralNick / EE_Parameter.GyroAccFaktor)); //Abfrage auch gegen Gyro beiu Kurvenflug sonst evtl. vorgetäuschte waagrechte Lage |
|
- | 1112 | v1 = abs((int)(IntegralRoll / EE_Parameter.GyroAccFaktor)); |
|
- | 1113 | ||
1108 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok |
1114 | if ((w1<ACC_WAAGRECHT_LIMIT)&&(w<ACC_WAAGRECHT_LIMIT)&&(v<ACC_WAAGRECHT_LIMIT)&&(v1<ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok |
1109 | { |
1115 | { |
- | 1116 | waagrecht = ((long)(ACC_WAAGRECHT_LIMIT-(long)w) * ((long)ACC_WAAGRECHT_LIMIT-(long)w)) *(((long)ACC_WAAGRECHT_LIMIT-(long)v)* ((long)ACC_WAAGRECHT_LIMIT-(long)v)); |
|
- | 1117 | waagrecht = (waagrecht * 100) /((long)ACC_WAAGRECHT_LIMIT * (long)ACC_WAAGRECHT_LIMIT * (long)ACC_WAAGRECHT_LIMIT*(long)ACC_WAAGRECHT_LIMIT) ; //bei Waagrecht Wert = 100 |
|
1110 | if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
1118 | if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
1111 | { |
1119 | { |
1112 | if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass |
1120 | if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass |
1113 | { |
1121 | { |
1114 | if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1; |
1122 | if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1; |
1115 | if (cnt_stickgier_zero > 1) //nur Abgleichen wenn keine Stickbewegung da |
1123 | if (cnt_stickgier_zero > 1) //nur Abgleichen wenn keine Stickbewegung da |
1116 | { |
1124 | { |
1117 | w = (int) (GyroGier_Comp/(long)GIER_GRAD_FAKTOR); |
1125 | w = (int) (GyroGier_Comp/((long)GIER_GRAD_FAKTOR)); |
1118 | v = KompassValue - gyrogier_kompass; //realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1126 | v = (KompassValue) - gyrogier_kompass; //realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1119 | if (v <-180) v +=360; // Uberlaufkorrektur |
1127 | if (v <-180) v +=360; // Uberlaufkorrektur |
1120 | if (v > 180) v -=360; // Uberlaufkorrektur |
1128 | if (v > 180) v -=360; // Uberlaufkorrektur |
Line 1121... | Line 1129... | ||
1121 | 1129 | ||
- | 1130 | v = w-v; //Differenz Gyro zu Kompass ist der Driftfehler |
|
Line 1122... | Line 1131... | ||
1122 | v = w-v; //Differenz Gyro zu Kompass ist der Driftfehler |
1131 | v = (v * (int) waagrecht)/100; //mit Neigung bewerten |
1123 | 1132 | ||
1124 | if (v > GIER_COMP_MAX) v= GIER_COMP_MAX; |
1133 | if (v > GIER_COMP_MAX) v= GIER_COMP_MAX; |
1125 | if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX; |
1134 | if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX; |
1126 | if (abs(w) > 1) |
1135 | if (abs(v) > 0) |
1127 | { |
1136 | { |
1128 | GyroGier_Comp = 0; |
1137 | GyroGier_Comp = 0; |
1129 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1138 | gyrogier_kompass = KompassValue; // Kompasswert merken |
Line 1137... | Line 1146... | ||
1137 | cnt_stickgier_zero = 0; |
1146 | cnt_stickgier_zero = 0; |
1138 | GyroGier_Comp = 0; |
1147 | GyroGier_Comp = 0; |
1139 | } |
1148 | } |
Line 1140... | Line 1149... | ||
1140 | 1149 | ||
1141 | magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
1150 | magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
Line 1142... | Line 1151... | ||
1142 | GyroKomp_Int = (GyroKomp_Int )/(long)GIER_GRAD_FAKTOR; |
1151 | // GyroKomp_Int = (GyroKomp_Int )/((long)GIER_GRAD_FAKTOR); |
1143 | 1152 | ||
1144 | w = KompassValue - GyroKomp_Int; |
- | |
1145 | if ((w > 0) && (w < 180)) |
1153 | w = KompassValue - (int)(GyroKomp_Int/(long)GIER_GRAD_FAKTOR); |
- | 1154 | w = w%360; |
|
- | 1155 | #define GYRO_KOMP_DELTA_MAX 10 |
|
1146 | { |
1156 | if (w > GYRO_KOMP_DELTA_MAX) w = GYRO_KOMP_DELTA_MAX; //Begrenzung |
1147 | ++GyroKomp_Int; |
1157 | if (w <-GYRO_KOMP_DELTA_MAX) w =-GYRO_KOMP_DELTA_MAX; //Begrenzung |
1148 | } |
1158 | |
1149 | else if ((w > 0) && (w >= 180)) |
1159 | if (((w > 0) && (w < 180)) || ((w < 0) && (w < -180))) |
1150 | { |
1160 | { |
1151 | --GyroKomp_Int; |
1161 | GyroKomp_Int = GyroKomp_Int + (((labs((long)w) * waagrecht)/100)*(long)GIER_GRAD_FAKTOR); // je waagrechter desto groesser die Korrektur |
1152 | } |
1162 | } |
1153 | else if ((w < 0) && (w >= -180)) |
1163 | else if (((w > 0) && (w >= 180)) || ((w < 0) && (w >= -180))) |
1154 | { |
1164 | { |
1155 | --GyroKomp_Int; |
1165 | GyroKomp_Int = GyroKomp_Int - (((labs((long)w) * waagrecht)/100)*(long)GIER_GRAD_FAKTOR); |
1156 | } |
- | |
1157 | else if ((w < 0) && (w < -180)) |
- | |
1158 | { |
- | |
1159 | ++GyroKomp_Int; |
1166 | } |
1160 | } |
1167 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360L * (long)GIER_GRAD_FAKTOR; //Ueberlauf korrigieren |
1161 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360L; |
1168 | if (GyroKomp_Int > 360L * (long)GIER_GRAD_FAKTOR) GyroKomp_Int = GyroKomp_Int - 360L * (long)GIER_GRAD_FAKTOR; |
1162 | GyroKomp_Int = (GyroKomp_Int%360L) * (long)GIER_GRAD_FAKTOR; // An Magnetkompasswert annaehern |
1169 | // GyroKomp_Int = (GyroKomp_Int%360L) * (long)GIER_GRAD_FAKTOR; // An Magnetkompasswert annaehern |
1163 | } |
1170 | } |
1164 | } |
1171 | } |
1165 | else //Kompass wegen zu grosser Neigung ungueltig |
1172 | else //Kompass wegen zu grosser Neigung ungueltig |
Line 1296... | Line 1303... | ||
1296 | 1303 | ||
1297 | DebugOut.Analog[30] = GPS_Nick; |
1304 | DebugOut.Analog[30] = GPS_Nick; |
1298 | DebugOut.Analog[31] = GPS_Roll; |
1305 | DebugOut.Analog[31] = GPS_Roll; |
1299 | // DebugOut.Analog[30] = KompassStartwert; |
1306 | // DebugOut.Analog[30] = KompassStartwert; |
- | 1307 | // DebugOut.Analog[31] = KompassRichtung; |
|
- | 1308 | // DebugOut.Analog[31] = (int) waagrecht; |
|
Line 1300... | Line 1309... | ||
1300 | // DebugOut.Analog[31] = KompassRichtung; |
1309 | |
1301 | 1310 | ||
1302 | 1311 |