Rev 890 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 890 | Rev 891 | ||
---|---|---|---|
Line 69... | Line 69... | ||
69 | long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
69 | long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
70 | long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
70 | long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
71 | long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
71 | long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
72 | long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
72 | long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
73 | volatile long Mess_Integral_Hoch = 0; |
73 | volatile long Mess_Integral_Hoch = 0; |
- | 74 | ||
74 | volatile int KompassValue = 0; |
75 | int KompassValue = 0; |
75 | volatile int KompassStartwert = 0; |
76 | int KompassStartwert = 0; |
76 | volatile int KompassRichtung = 0; |
77 | int KompassRichtung = 0; |
- | 78 | uint8_t updKompass; |
|
- | 79 | ||
77 | unsigned int KompassSignalSchlecht = 500; |
80 | unsigned int KompassSignalSchlecht = 500; |
78 | unsigned char MAX_GAS,MIN_GAS; |
81 | unsigned char MAX_GAS,MIN_GAS; |
79 | unsigned char Notlandung = 0; |
82 | unsigned char Notlandung = 0; |
80 | unsigned char HoehenReglerAktiv = 0; |
83 | unsigned char HoehenReglerAktiv = 0; |
81 | unsigned char TrichterFlug = 0; |
84 | unsigned char TrichterFlug = 0; |
Line 156... | Line 159... | ||
156 | 159 | ||
157 | acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
160 | acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
158 | acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
161 | acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
Line -... | Line 162... | ||
- | 162 | acc_neutral.Z = Aktuell_az; |
|
- | 163 | ||
- | 164 | Piep(2); |
|
- | 165 | while (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100) //Warten, bis Benutzer den Kopter neu ausgerichtet hat |
|
- | 166 | ||
- | 167 | Delay_ms_Mess(100); |
|
159 | acc_neutral.Z = Aktuell_az; |
168 | acc_neutral.compass = Aktuell_az; |
160 | 169 | ||
Line 161... | Line 170... | ||
161 | eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct)); |
170 | eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct)); |
162 | } |
171 | } |
Line 985... | Line 994... | ||
985 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
994 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
986 | // Kompass |
995 | // Kompass |
987 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
996 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
988 | //DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll); |
997 | //DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll); |
Line 989... | Line 998... | ||
989 | 998 | ||
990 | if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
999 | if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
991 | { |
1000 | { |
- | 1001 | int w,v,r,fehler,korrektur; |
|
- | 1002 | ||
- | 1003 | if (!updKompass--) // Aufruf mit ~20 Hz |
|
- | 1004 | { |
|
- | 1005 | updKompass = 25; |
|
- | 1006 | KompassValue = heading_MM3(); |
|
- | 1007 | KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
|
992 | int w,v,r,fehler,korrektur; |
1008 | } |
993 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
1009 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
994 | v = abs(IntegralRoll /512); |
1010 | v = abs(IntegralRoll /512); |
995 | if(v > w) w = v; // grösste Neigung ermitteln |
1011 | if(v > w) w = v; // grösste Neigung ermitteln |
996 | korrektur = w / 8 + 1; |
1012 | korrektur = w / 8 + 1; |
997 | if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht) |
1013 | if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht) |
998 | { |
1014 | { |
999 | beeptime = 200; |
1015 | beeptime = 200; |
1000 | // KompassStartwert = KompassValue; |
1016 | //KompassStartwert = KompassValue; |
1001 | KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR); |
1017 | KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR); |
1002 | NeueKompassRichtungMerken = 0; |
1018 | NeueKompassRichtungMerken = 0; |
1003 | } |
1019 | } |
1004 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
1020 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
1005 | ErsatzKompass += (fehler * 8) / korrektur; |
1021 | ErsatzKompass += (fehler * 8) / korrektur; |
1006 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
1022 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
1007 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
1023 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
1008 | if(w > 0) |
1024 | if(w > 0) |
1009 | { |
1025 | { |
1010 | if(!KompassSignalSchlecht) |
1026 | if(!KompassSignalSchlecht) |
1011 | { |
1027 | { |
1012 | GierGyroFehler += fehler; |
1028 | GierGyroFehler += fehler; |
1013 | v = 64 + ((MaxStickNick + MaxStickRoll)) / 8; |
1029 | v = 64 + ((MaxStickNick + MaxStickRoll)) / 8; |
1014 | r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180; |
1030 | r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180; |
1015 | // r = KompassRichtung; |
1031 | //r = KompassRichtung; |
1016 | v = (r * w) / v; // nach Kompass ausrichten |
1032 | v = (r * w) / v; // nach Kompass ausrichten |
1017 | w = 3 * Parameter_KompassWirkung; |
1033 | w = 3 * Parameter_KompassWirkung; |
1018 | if(v > w) v = w; // Begrenzen |
- | |
1019 | else |
1034 | if(v > w) v = w; // Begrenzen |
1020 | if(v < -w) v = -w; |
1035 | else if(v < -w) v = -w; |
1021 | Mess_Integral_Gier += v; |
1036 | Mess_Integral_Gier += v; |
1022 | } |
1037 | } |
1023 | if(KompassSignalSchlecht) KompassSignalSchlecht--; |
1038 | if(KompassSignalSchlecht) KompassSignalSchlecht--; |
1024 | } |
1039 | } |
- | 1040 | else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek |
|
1025 | else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek |
1041 | } |
1026 | - | ||
1027 | } |
1042 | |
Line 1028... | Line 1043... | ||
1028 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1043 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1029 | 1044 | ||
1030 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1045 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |