Rev 499 | Rev 514 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 499 | Rev 513 | ||
---|---|---|---|
Line 89... | Line 89... | ||
89 | int StickNick = 0,StickRoll = 0,StickGier = 0; |
89 | int StickNick = 0,StickRoll = 0,StickGier = 0; |
90 | char MotorenEin = 0; |
90 | char MotorenEin = 0; |
91 | int HoehenWert = 0; |
91 | int HoehenWert = 0; |
92 | int SollHoehe = 0; |
92 | int SollHoehe = 0; |
93 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
93 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
94 | float Kp = FAKTOR_P; |
- | |
95 | float Ki = FAKTOR_I; |
94 | float Ki = FAKTOR_I; |
96 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
95 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
97 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
96 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 98... | Line 97... | ||
98 | 97 | ||
Line 155... | Line 154... | ||
155 | AdNeutralNick= AdWertNick; |
154 | AdNeutralNick= AdWertNick; |
156 | AdNeutralRoll= AdWertRoll; |
155 | AdNeutralRoll= AdWertRoll; |
157 | AdNeutralGier= AdWertGier; |
156 | AdNeutralGier= AdWertGier; |
158 | StartNeutralRoll = AdNeutralRoll; |
157 | StartNeutralRoll = AdNeutralRoll; |
159 | StartNeutralNick = AdNeutralNick; |
158 | StartNeutralNick = AdNeutralNick; |
- | 159 | if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
|
- | 160 | { |
|
160 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
161 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
161 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
162 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
162 | NeutralAccZ = Aktuell_az; |
163 | NeutralAccZ = Aktuell_az; |
- | 164 | } |
|
- | 165 | else |
|
- | 166 | { |
|
- | 167 | NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
|
- | 168 | NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]); |
|
- | 169 | NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]); |
|
- | 170 | } |
|
Line 163... | Line 171... | ||
163 | 171 | ||
164 | Mess_IntegralNick = 0; |
172 | Mess_IntegralNick = 0; |
165 | Mess_IntegralNick2 = 0; |
173 | Mess_IntegralNick2 = 0; |
166 | Mess_IntegralRoll = 0; |
174 | Mess_IntegralRoll = 0; |
Line 194... | Line 202... | ||
194 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
202 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
195 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
203 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
196 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
204 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
197 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
205 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
198 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
206 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
199 | IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
207 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
200 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
208 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
201 | Mess_Integral_Gier += MesswertGier; |
209 | Mess_Integral_Gier += MesswertGier; |
202 | Mess_Integral_Gier2 += MesswertGier; |
210 | Mess_Integral_Gier2 += MesswertGier; |
203 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
211 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
204 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
212 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
Line 269... | Line 277... | ||
269 | } |
277 | } |
270 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
278 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
271 | // ADC einschalten |
279 | // ADC einschalten |
272 | ANALOG_ON; |
280 | ANALOG_ON; |
273 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
281 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
274 | DebugOut.Analog[11] = MesswertRoll; |
- | |
275 | //DebugOut.Analog[11] = AdWertNick; |
- | |
Line 276... | Line 282... | ||
276 | 282 | ||
277 | Integral_Gier = Mess_Integral_Gier; |
283 | Integral_Gier = Mess_Integral_Gier; |
278 | IntegralNick = Mess_IntegralNick; |
284 | IntegralNick = Mess_IntegralNick; |
279 | IntegralRoll = Mess_IntegralRoll; |
285 | IntegralRoll = Mess_IntegralRoll; |
Line 415... | Line 421... | ||
415 | GRN_ON; |
421 | GRN_ON; |
416 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
422 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
417 | // Gaswert ermitteln |
423 | // Gaswert ermitteln |
418 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
424 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
419 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
425 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
- | 426 | if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
|
420 | if(GasMischanteil < 0) GasMischanteil = 0; |
427 | if(GasMischanteil < 0) GasMischanteil = 0; |
421 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
428 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
422 | // Emfang schlecht |
429 | // Emfang schlecht |
423 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
430 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
424 | if(SenderOkay < 100) |
431 | if(SenderOkay < 100) |
Line 472... | Line 479... | ||
472 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
479 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
473 | // auf Nullwerte kalibrieren |
480 | // auf Nullwerte kalibrieren |
474 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
481 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
475 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
482 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
476 | { |
483 | { |
477 | unsigned char setting = 2; |
- | |
478 | if(++delay_neutral > 200) // nicht sofort |
484 | if(++delay_neutral > 200) // nicht sofort |
479 | { |
485 | { |
480 | GRN_OFF; |
486 | GRN_OFF; |
481 | MotorenEin = 0; |
487 | MotorenEin = 0; |
482 | delay_neutral = 0; |
488 | delay_neutral = 0; |
Line 498... | Line 504... | ||
498 | ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
504 | ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
499 | SetNeutral(); |
505 | SetNeutral(); |
500 | Piep(GetActiveParamSetNumber()); |
506 | Piep(GetActiveParamSetNumber()); |
501 | } |
507 | } |
502 | } |
508 | } |
- | 509 | else |
|
- | 510 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
|
- | 511 | { |
|
- | 512 | if(++delay_neutral > 200) // nicht sofort |
|
- | 513 | { |
|
- | 514 | GRN_OFF; |
|
- | 515 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],0xff); // Werte löschen |
|
- | 516 | MotorenEin = 0; |
|
- | 517 | delay_neutral = 0; |
|
- | 518 | modell_fliegt = 0; |
|
- | 519 | SetNeutral(); |
|
- | 520 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],NeutralAccX / 256); // ACC-NeutralWerte speichern |
|
- | 521 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],NeutralAccX % 256); // ACC-NeutralWerte speichern |
|
- | 522 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],NeutralAccY / 256); |
|
- | 523 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],NeutralAccY % 256); |
|
- | 524 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)NeutralAccZ / 256); |
|
- | 525 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)NeutralAccZ % 256); |
|
- | 526 | Piep(GetActiveParamSetNumber()); |
|
- | 527 | } |
|
- | 528 | } |
|
503 | else delay_neutral = 0; |
529 | else delay_neutral = 0; |
504 | } |
530 | } |
505 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
531 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
506 | // Gas ist unten |
532 | // Gas ist unten |
507 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
533 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 782... | Line 808... | ||
782 | { |
808 | { |
783 | cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
809 | cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
784 | ausgleichNick = IntegralFehlerNick / 8; |
810 | ausgleichNick = IntegralFehlerNick / 8; |
785 | if(ausgleichNick > 5000) ausgleichNick = 5000; |
811 | if(ausgleichNick > 5000) ausgleichNick = 5000; |
786 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
812 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
787 | // Mess_IntegralNick -= ausgleichNick; |
- | |
788 | } |
813 | } |
789 | else last_n_p = 1; |
814 | else last_n_p = 1; |
790 | } else last_n_p = 0; |
815 | } else last_n_p = 0; |
791 | if(IntegralFehlerNick < -FEHLER_LIMIT2) |
816 | if(IntegralFehlerNick < -FEHLER_LIMIT2) |
792 | { |
817 | { |
Line 794... | Line 819... | ||
794 | { |
819 | { |
795 | cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
820 | cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
796 | ausgleichNick = IntegralFehlerNick / 8; |
821 | ausgleichNick = IntegralFehlerNick / 8; |
797 | if(ausgleichNick < -5000) ausgleichNick = -5000; |
822 | if(ausgleichNick < -5000) ausgleichNick = -5000; |
798 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
823 | LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
799 | // Mess_IntegralNick -= ausgleichNick; |
- | |
800 | } |
824 | } |
801 | else last_n_n = 1; |
825 | else last_n_n = 1; |
802 | } else last_n_n = 0; |
826 | } else last_n_n = 0; |
803 | } else cnt = 0; |
827 | } else cnt = 0; |
804 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
828 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
Line 817... | Line 841... | ||
817 | { |
841 | { |
818 | cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
842 | cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
819 | ausgleichRoll = IntegralFehlerRoll / 8; |
843 | ausgleichRoll = IntegralFehlerRoll / 8; |
820 | if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
844 | if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
821 | LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
845 | LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
822 | // Mess_IntegralRoll -= ausgleichRoll; |
- | |
823 | } |
846 | } |
824 | else last_r_p = 1; |
847 | else last_r_p = 1; |
825 | } else last_r_p = 0; |
848 | } else last_r_p = 0; |
826 | if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
849 | if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
827 | { |
850 | { |
828 | if(last_r_n) |
851 | if(last_r_n) |
829 | { |
852 | { |
830 | cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
853 | cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
831 | ausgleichRoll = IntegralFehlerRoll / 8; |
854 | ausgleichRoll = IntegralFehlerRoll / 8; |
832 | if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
855 | if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
833 | // Mess_IntegralRoll -= ausgleichRoll; |
- | |
834 | LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
856 | LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
835 | } |
857 | } |
836 | else last_r_n = 1; |
858 | else last_r_n = 1; |
837 | } else last_r_n = 0; |
859 | } else last_r_n = 0; |
838 | } else |
860 | } else |
Line 1020... | Line 1042... | ||
1020 | } |
1042 | } |
1021 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1043 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1022 | // + Mischer und PI-Regler |
1044 | // + Mischer und PI-Regler |
1023 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1045 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1024 | DebugOut.Analog[7] = GasMischanteil; |
1046 | DebugOut.Analog[7] = GasMischanteil; |
1025 | - | ||
1026 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1047 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1027 | // Gier-Anteil |
1048 | // Gier-Anteil |
1028 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1049 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1029 | #define MUL_G 1.0 |
1050 | #define MUL_G 1.0 |
1030 | GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
1051 | GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
1031 | //GierMischanteil = 0; |
1052 | //GierMischanteil = 0; |
- | 1053 | ||
1032 | if(GierMischanteil > (MUL_G * GasMischanteil)) GierMischanteil = MUL_G * GasMischanteil; |
1054 | if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
1033 | if(GierMischanteil < -(MUL_G * GasMischanteil)) GierMischanteil = -(MUL_G * GasMischanteil); |
1055 | if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
1034 | if(GierMischanteil > 100) GierMischanteil = 100; |
1056 | if(GierMischanteil > ((MAX_GAS - GasMischanteil)/2)) GierMischanteil = ((MAX_GAS - GasMischanteil) / 2); |
1035 | if(GierMischanteil < -100) GierMischanteil = -100; |
1057 | if(GierMischanteil < -((MAX_GAS - GasMischanteil) / 2)) GierMischanteil = -((MAX_GAS - GasMischanteil) / 2); |
Line 1036... | Line 1058... | ||
1036 | 1058 | ||
1037 | if(GasMischanteil < 20) GierMischanteil = 0; |
1059 | if(GasMischanteil < 20) GierMischanteil = 0; |
1038 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1060 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1039 | // Nick-Achse |
1061 | // Nick-Achse |
1040 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1062 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1041 | DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen |
1063 | DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen |
1042 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung |
1064 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung |
1043 | else SummeNick += DiffNick; // I-Anteil bei HH |
1065 | else SummeNick += DiffNick; // I-Anteil bei HH |
1044 | if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1; |
1066 | if(SummeNick > 0) SummeNick-= 2 ; else SummeNick += 2 ; |
1045 | if(SummeNick > 16000) SummeNick = 16000; |
1067 | if(SummeNick > 16000) SummeNick = 16000; |
1046 | if(SummeNick < -16000) SummeNick = -16000; |
1068 | if(SummeNick < -16000) SummeNick = -16000; |
1047 | pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
1069 | pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
1048 | // Motor Vorn |
- | |
1049 | //#define MUL 2 |
- | |
1050 | // if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
- | |
1051 | // if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
1070 | // Motor Vorn |
1052 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1071 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1053 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1072 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
Line 1054... | Line 1073... | ||
1054 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
1073 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
Line 1065... | Line 1084... | ||
1065 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1084 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1066 | Motor_Hinten = motorwert; |
1085 | Motor_Hinten = motorwert; |
1067 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1086 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1068 | // Roll-Achse |
1087 | // Roll-Achse |
1069 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1088 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1070 | DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen |
1089 | DiffRoll = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen |
1071 | if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung |
1090 | if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung |
1072 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1091 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1073 | if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1; |
1092 | if(SummeRoll > 0) SummeRoll-= 2 ; else SummeRoll += 2 ; |
1074 | if(SummeRoll > 16000) SummeRoll = 16000; |
1093 | if(SummeRoll > 16000) SummeRoll = 16000; |
1075 | if(SummeRoll < -16000) SummeRoll = -16000; |
1094 | if(SummeRoll < -16000) SummeRoll = -16000; |
1076 | pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
1095 | pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
1077 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1096 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1078 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1097 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |