Rev 744 | Rev 819 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 744 | Rev 805 | ||
---|---|---|---|
Line 57... | Line 57... | ||
57 | unsigned char h,m,s; |
57 | unsigned char h,m,s; |
58 | volatile unsigned int I2CTimeout = 100; |
58 | volatile unsigned int I2CTimeout = 100; |
59 | volatile int MesswertNick,MesswertRoll,MesswertGier; |
59 | volatile int MesswertNick,MesswertRoll,MesswertGier; |
60 | volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
60 | volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
61 | volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
61 | volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
- | 62 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
|
62 | volatile float NeutralAccZ = 0; |
63 | volatile float NeutralAccZ = 0; |
63 | unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
64 | unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
64 | long IntegralNick = 0,IntegralNick2 = 0; |
65 | long IntegralNick = 0,IntegralNick2 = 0; |
65 | long IntegralRoll = 0,IntegralRoll2 = 0; |
66 | long IntegralRoll = 0,IntegralRoll2 = 0; |
66 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
67 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
Line 211... | Line 212... | ||
211 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
212 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
212 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
213 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
213 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
214 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
214 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
215 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
215 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
216 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
- | 217 | NaviAccNick += AdWertAccNick; |
|
- | 218 | NaviAccRoll += AdWertAccRoll; |
|
- | 219 | NaviCntAcc++; |
|
216 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
220 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
217 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
221 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
218 | ErsatzKompass += MesswertGier; |
222 | ErsatzKompass += MesswertGier; |
219 | Mess_Integral_Gier += MesswertGier; |
223 | Mess_Integral_Gier += MesswertGier; |
220 | Mess_Integral_Gier2 += MesswertGier; |
224 | Mess_Integral_Gier2 += MesswertGier; |
Line 595... | Line 599... | ||
595 | int tmp_int; |
599 | int tmp_int; |
596 | static int stick_nick,stick_roll; |
600 | static int stick_nick,stick_roll; |
597 | ParameterZuordnung(); |
601 | ParameterZuordnung(); |
598 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
602 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
599 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
603 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
600 | StickNick = stick_nick - GPS_Nick; |
604 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); |
601 | // StickNick = (StickNick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
605 | // StickNick = (StickNick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
Line 602... | Line 606... | ||
602 | 606 | ||
603 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
607 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
604 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
608 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
Line 605... | Line 609... | ||
605 | StickRoll = stick_roll - GPS_Roll; |
609 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); |
Line 606... | Line 610... | ||
606 | 610 | ||
607 | // StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
611 | // StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
Line 963... | Line 967... | ||
963 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
967 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
964 | v = abs(IntegralRoll /512); |
968 | v = abs(IntegralRoll /512); |
965 | //v /= 4; |
969 | //v /= 4; |
966 | //w /= 4; |
970 | //w /= 4; |
967 | if(v > w) w = v; // grösste Neigung ermitteln |
971 | if(v > w) w = v; // grösste Neigung ermitteln |
968 | korrektur = w + 8; |
972 | korrektur = w + 4; |
969 | if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht) |
973 | if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht) |
970 | { |
974 | { |
971 | KompassStartwert = KompassValue; |
975 | KompassStartwert = KompassValue; |
972 | NeueKompassRichtungMerken = 0; |
976 | NeueKompassRichtungMerken = 0; |
973 | } |
977 | } |
- | 978 | ||
- | 979 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
|
- | 980 | ErsatzKompass += (fehler * 8);// / korrektur; |
|
- | 981 | // DebugOut.Analog[10] = fehler; |
|
974 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
982 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
975 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
983 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
976 | if(w > 0) |
984 | if(w > 0) |
977 | { |
985 | { |
978 | if(!KompassSignalSchlecht) |
986 | if(!KompassSignalSchlecht) |
979 | { |
987 | { |
980 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
- | |
981 | GierGyroFehler += fehler; |
988 | GierGyroFehler += fehler; |
982 | // DebugOut.Analog[10] = fehler; |
- | |
983 | ErsatzKompass += (fehler * 16) / korrektur; |
- | |
984 | v = (KompassRichtung * w) / 32; // nach Kompass ausrichten |
989 | v = (KompassRichtung * w) / 32; // nach Kompass ausrichten |
985 | w = Parameter_KompassWirkung; |
990 | w = Parameter_KompassWirkung; |
986 | if(v > w) v = w; // Begrenzen |
991 | if(v > w) v = w; // Begrenzen |
987 | else |
992 | else |
988 | if(v < -w) v = -w; |
993 | if(v < -w) v = -w; |
Line 998... | Line 1003... | ||
998 | // Debugwerte zuordnen |
1003 | // Debugwerte zuordnen |
999 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1004 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1000 | if(!TimerWerteausgabe--) |
1005 | if(!TimerWerteausgabe--) |
1001 | { |
1006 | { |
1002 | TimerWerteausgabe = 24; |
1007 | TimerWerteausgabe = 24; |
- | 1008 | ||
1003 | DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
1009 | DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
1004 | DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
1010 | DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
1005 | DebugOut.Analog[2] = Mittelwert_AccNick; |
1011 | DebugOut.Analog[2] = Mittelwert_AccNick; |
1006 | DebugOut.Analog[3] = Mittelwert_AccRoll; |
1012 | DebugOut.Analog[3] = Mittelwert_AccRoll; |
1007 | DebugOut.Analog[4] = MesswertGier; |
1013 | DebugOut.Analog[4] = MesswertGier; |
1008 | DebugOut.Analog[5] = HoehenWert; |
1014 | DebugOut.Analog[5] = HoehenWert; |
1009 | DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
1015 | DebugOut.Analog[6] = (Mess_Integral_Hoch / 512); |
1010 | DebugOut.Analog[8] = KompassValue; |
1016 | DebugOut.Analog[8] = KompassValue; |
1011 | DebugOut.Analog[9] = UBat; |
1017 | DebugOut.Analog[9] = UBat; |
1012 | DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
1018 | DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
1013 | DebugOut.Analog[10] = SenderOkay; |
1019 | DebugOut.Analog[10] = SenderOkay; |
1014 | DebugOut.Analog[16] = Mittelwert_AccHoch; |
1020 | DebugOut.Analog[16] = Mittelwert_AccHoch; |
Line 1017... | Line 1023... | ||
1017 | DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar; |
1023 | DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar; |
Line 1018... | Line 1024... | ||
1018 | 1024 | ||
1019 | DebugOut.Analog[30] = GPS_Nick; |
1025 | DebugOut.Analog[30] = GPS_Nick; |
Line -... | Line 1026... | ||
- | 1026 | DebugOut.Analog[31] = GPS_Roll; |
|
- | 1027 | ||
- | 1028 | /* DebugOut.Analog[19] += (DebugOut.Analog[1] - Mittelwert_AccRoll)/32; |
|
- | 1029 | DebugOut.Analog[19] -= DebugOut.Analog[19]/32; |
|
- | 1030 | if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++; |
|
- | 1031 | GPS_Roll2 = (1 * GPS_Roll + ((DebugOut.Analog[19] / 16) * Poti3) / 32) / 2; |
|
- | 1032 | ||
- | 1033 | DebugOut.Analog[20] += (DebugOut.Analog[0] - Mittelwert_AccNick)/32; |
|
- | 1034 | DebugOut.Analog[20] -= DebugOut.Analog[20]/32; |
|
- | 1035 | if(DebugOut.Analog[20] > 0) DebugOut.Analog[20]--; else DebugOut.Analog[20]++; |
|
- | 1036 | GPS_Nick2 = (1 * GPS_Roll + ((DebugOut.Analog[20] / 16) * Poti3) / 32) / 2; |
|
- | 1037 | */ |
|
- | 1038 | //GPS_Nick = (GPS_Nick + (DebugOut.Analog[20] * Poti3) / 32) / 2; |
|
- | 1039 | ||
- | 1040 | ||
- | 1041 | // DebugOut.Analog[19] -= DebugOut.Analog[19]/128; |
|
1020 | DebugOut.Analog[31] = GPS_Roll; |
1042 | // if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++; |
1021 | 1043 | ||
1022 | /* DebugOut.Analog[16] = motor_rx[0]; |
1044 | /* DebugOut.Analog[16] = motor_rx[0]; |
1023 | DebugOut.Analog[17] = motor_rx[1]; |
1045 | DebugOut.Analog[17] = motor_rx[1]; |
1024 | DebugOut.Analog[18] = motor_rx[2]; |
1046 | DebugOut.Analog[18] = motor_rx[2]; |
Line 1144... | Line 1166... | ||
1144 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1166 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1145 | // Nick-Achse |
1167 | // Nick-Achse |
1146 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1168 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1147 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
1169 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
1148 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung |
1170 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung |
1149 | // DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen |
- | |
1150 | // if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung |
- | |
Line 1151... | Line 1171... | ||
1151 | 1171 | ||
1152 | else SummeNick += DiffNick; // I-Anteil bei HH |
1172 | else SummeNick += DiffNick; // I-Anteil bei HH |
1153 | if(SummeNick > 16000) SummeNick = 16000; |
1173 | if(SummeNick > 16000) SummeNick = 16000; |
1154 | if(SummeNick < -16000) SummeNick = -16000; |
1174 | if(SummeNick < -16000) SummeNick = -16000; |
Line 1172... | Line 1192... | ||
1172 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1192 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1173 | // Roll-Achse |
1193 | // Roll-Achse |
1174 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1194 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1175 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1195 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1176 | if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1196 | if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1177 | // DiffRoll = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen |
- | |
1178 | // if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung |
- | |
Line 1179... | Line 1197... | ||
1179 | 1197 | ||
1180 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1198 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1181 | if(SummeRoll > 16000) SummeRoll = 16000; |
1199 | if(SummeRoll > 16000) SummeRoll = 16000; |
1182 | if(SummeRoll < -16000) SummeRoll = -16000; |
1200 | if(SummeRoll < -16000) SummeRoll = -16000; |