Rev 595 | Rev 614 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 595 | Rev 604 | ||
---|---|---|---|
Line 196... | Line 196... | ||
196 | static signed long tmpl,tmpl2; |
196 | static signed long tmpl,tmpl2; |
197 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
197 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
198 | MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
198 | MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
199 | MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
199 | MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
Line -... | Line 200... | ||
- | 200 | ||
- | 201 | //DebugOut.Analog[26] = MesswertNick; |
|
- | 202 | DebugOut.Analog[28] = MesswertRoll; |
|
200 | 203 | ||
201 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
204 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
202 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
205 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
203 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
206 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
204 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
207 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
Line 576... | Line 579... | ||
576 | // neue Werte von der Funke |
579 | // neue Werte von der Funke |
577 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
580 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
578 | if(!NewPpmData-- || Notlandung) |
581 | if(!NewPpmData-- || Notlandung) |
579 | { |
582 | { |
580 | int tmp_int; |
583 | int tmp_int; |
- | 584 | static int stick_nick,stick_roll; |
|
581 | ParameterZuordnung(); |
585 | ParameterZuordnung(); |
582 | StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P; |
586 | StickNick = (StickNick * 7 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 8; |
583 | StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
587 | StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
584 | StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P; |
588 | StickRoll = (StickRoll * 7 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 8; |
585 | StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
589 | StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
- | 590 | ||
586 | StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
591 | StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
587 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
592 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
Line 588... | Line 593... | ||
588 | 593 | ||
589 | GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
594 | GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
Line 622... | Line 627... | ||
622 | } |
627 | } |
Line 623... | Line 628... | ||
623 | 628 | ||
624 | if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
629 | if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
625 | if(GyroFaktor < 0) GyroFaktor = 0; |
630 | if(GyroFaktor < 0) GyroFaktor = 0; |
- | 631 | if(IntegralFaktor < 0) IntegralFaktor = 0; |
|
626 | if(IntegralFaktor < 0) IntegralFaktor = 0; |
632 | /* |
627 | // greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
633 | // greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
628 | if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
634 | if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
629 | { |
635 | { |
630 | if(IntegralNick > 60000) |
636 | if(IntegralNick > 60000) |
Line 648... | Line 654... | ||
648 | { |
654 | { |
649 | StickRoll += 8 * EE_Parameter.Stick_P; |
655 | StickRoll += 8 * EE_Parameter.Stick_P; |
650 | if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
656 | if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
651 | } |
657 | } |
652 | } |
658 | } |
- | 659 | */ |
|
653 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
660 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
654 | // Looping? |
661 | // Looping? |
655 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
662 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
656 | if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
663 | if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
657 | else |
664 | else |
Line 994... | Line 1001... | ||
994 | } |
1001 | } |
Line 995... | Line 1002... | ||
995 | 1002 | ||
996 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1003 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
997 | // Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
1004 | // Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
- | 1005 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1006 | //DebugOut.Analog[26] = MesswertNick; |
|
- | 1007 | //DebugOut.Analog[28] = MesswertRoll; |
|
998 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1008 | |
999 | if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
1009 | if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
1000 | else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
1010 | else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
1001 | if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
1011 | if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
1002 | else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
- | |
1003 | // MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
1012 | else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
Line 1004... | Line -... | ||
1004 | MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
- | |
1005 | 1013 | MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
|
1006 | DebugOut.Analog[28] = MesswertRoll; |
1014 | |
- | 1015 | DebugOut.Analog[25] = IntegralRoll * IntegralFaktor; |
|
Line 1007... | Line 1016... | ||
1007 | DebugOut.Analog[25] = IntegralRoll * IntegralFaktor; |
1016 | DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor); |
1008 | DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor); |
1017 | DebugOut.Analog[28] = MesswertRoll; |
1009 | 1018 | ||
1010 | // Maximalwerte abfangen |
1019 | // Maximalwerte abfangen |
Line 1069... | Line 1078... | ||
1069 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1078 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1070 | // Gier-Anteil |
1079 | // Gier-Anteil |
1071 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1080 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1072 | #define MUL_G 1.0 |
1081 | #define MUL_G 1.0 |
1073 | GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
1082 | GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
1074 | //GierMischanteil = 0; |
1083 | // GierMischanteil = 0; |
Line 1075... | Line 1084... | ||
1075 | 1084 | ||
1076 | if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
1085 | if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
1077 | if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
1086 | if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
1078 | if(GierMischanteil > ((MAX_GAS - GasMischanteil))) GierMischanteil = ((MAX_GAS - GasMischanteil)); |
1087 | if(GierMischanteil > ((MAX_GAS - GasMischanteil))) GierMischanteil = ((MAX_GAS - GasMischanteil)); |
Line 1118... | Line 1127... | ||
1118 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1127 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1119 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1128 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1120 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
1129 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
1121 | // Motor Links |
1130 | // Motor Links |
1122 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
1131 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
- | 1132 | #define GRENZE Poti1 |
|
- | 1133 | ||
1123 | if ((motorwert < 0)) motorwert = 0; |
1134 | if ((motorwert < 0)) motorwert = 0; |
1124 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1135 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1125 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1136 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1126 | Motor_Links = motorwert; |
1137 | Motor_Links = motorwert; |
- | 1138 | /* |
|
- | 1139 | if(motorwert > (int)Motor_Links + GRENZE) Motor_Links += GRENZE; |
|
- | 1140 | else if(motorwert < (int)Motor_Links - GRENZE) Motor_Links -= GRENZE; |
|
- | 1141 | else Motor_Links = motorwert; |
|
- | 1142 | */ |
|
1127 | // Motor Rechts |
1143 | // Motor Rechts |
1128 | motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
1144 | motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
- | 1145 | ||
1129 | if ((motorwert < 0)) motorwert = 0; |
1146 | if ((motorwert < 0)) motorwert = 0; |
1130 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1147 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1131 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1148 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1132 | Motor_Rechts = motorwert; |
1149 | Motor_Rechts = motorwert; |
- | 1150 | /* |
|
- | 1151 | if(motorwert > Motor_Rechts + GRENZE) Motor_Rechts += GRENZE; |
|
- | 1152 | else if(motorwert < Motor_Rechts - GRENZE) Motor_Rechts -= GRENZE; |
|
- | 1153 | else Motor_Rechts = motorwert; |
|
- | 1154 | */ |
|
1133 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1155 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1134 | } |
1156 | } |