Rev 2349 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2349 | Rev 2360 | ||
---|---|---|---|
Line 112... | Line 112... | ||
112 | unsigned char CalibrationDone = 0; |
112 | unsigned char CalibrationDone = 0; |
113 | char NeueKompassRichtungMerken = 0; |
113 | char NeueKompassRichtungMerken = 0; |
114 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
114 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
115 | //float Ki = FAKTOR_I; |
115 | //float Ki = FAKTOR_I; |
116 | int Ki = 10300 / 33; |
116 | int Ki = 10300 / 33; |
- | 117 | int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
|
- | 118 | ||
117 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
119 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
118 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
120 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 119... | Line 121... | ||
119 | 121 | ||
120 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
122 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
Line 165... | Line 167... | ||
165 | unsigned char Parameter_GlobalConfig; |
167 | unsigned char Parameter_GlobalConfig; |
166 | unsigned char Parameter_ExtraConfig; |
168 | unsigned char Parameter_ExtraConfig; |
167 | unsigned char Parameter_MaximumAltitude; |
169 | unsigned char Parameter_MaximumAltitude; |
168 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
170 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
169 | unsigned char CareFree = 0; |
171 | unsigned char CareFree = 0; |
170 | const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps |
172 | //const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps // MartinR: so war es |
- | 173 | const signed char sintab[62] = { 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 16, 16, 16, 16, 15, 14, 13, 12, 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10, -12, -13, -14, -15, -16, -16, -16, -16, -16, -15, -14, -13, -12, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16, 16, 16}; // 7,5° steps //MartinR |
|
- | 174 | signed char cosinus, sinus; // MartinR : extern für PAN-Funktion |
|
Line 171... | Line 175... | ||
171 | 175 | ||
172 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
176 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
- | 177 | //int MaxStickNick = 0,MaxStickRoll = 0; MartinR: so war es |
|
- | 178 | int MaxStickNick = 0,MaxStickRoll = 0,stick_nick_neutral = 0,stick_roll_neutral = 0; // MartinR: stick_.._neutral hinzugefügt |
|
- | 179 | //unsigned char stick_p; // MartinR: Test |
|
- | 180 | unsigned char Parameter_NaviGpsModeControl; // MartinR: |
|
173 | int MaxStickNick = 0,MaxStickRoll = 0; |
181 | |
174 | unsigned int modell_fliegt = 0; |
182 | unsigned int modell_fliegt = 0; |
175 | volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
183 | volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
176 | long GIER_GRAD_FAKTOR = 1291; |
184 | long GIER_GRAD_FAKTOR = 1291; |
177 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
185 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
Line 201... | Line 209... | ||
201 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
209 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
202 | DebugOut.Analog[12] = Motor[0].SetPoint; |
210 | DebugOut.Analog[12] = Motor[0].SetPoint; |
203 | DebugOut.Analog[13] = Motor[1].SetPoint; |
211 | DebugOut.Analog[13] = Motor[1].SetPoint; |
204 | DebugOut.Analog[14] = Motor[2].SetPoint; |
212 | DebugOut.Analog[14] = Motor[2].SetPoint; |
205 | DebugOut.Analog[15] = Motor[3].SetPoint; |
213 | DebugOut.Analog[15] = Motor[3].SetPoint; |
- | 214 | ||
- | 215 | DebugOut.Analog[16] = cosinus; // MartinR: zur Einstellung der Pan-Funktion |
|
- | 216 | DebugOut.Analog[17] = sinus; // MartinR: test zur Einstellung der Pan-Funktion |
|
- | 217 | DebugOut.Analog[18] = ServoPanValue; // MartinR: zur Einstellung der Pan-Funktion |
|
- | 218 | DebugOut.Analog[19] = ServoRollValue; // MartinR: Test |
|
- | 219 | ||
206 | DebugOut.Analog[20] = ServoNickValue; |
220 | DebugOut.Analog[20] = ServoNickValue; |
207 | DebugOut.Analog[21] = HoverGas; |
221 | DebugOut.Analog[21] = HoverGas; |
208 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
222 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
209 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
223 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
210 | DebugOut.Analog[24] = SollHoehe/10; |
224 | DebugOut.Analog[24] = SollHoehe/10; |
Line 470... | Line 484... | ||
470 | tmpl4 *= Parameter_AchsKopplung2; //65 |
484 | tmpl4 *= Parameter_AchsKopplung2; //65 |
471 | tmpl4 /= 4096L; |
485 | tmpl4 /= 4096L; |
472 | KopplungsteilNickRoll = tmpl3; |
486 | KopplungsteilNickRoll = tmpl3; |
473 | KopplungsteilRollNick = tmpl4; |
487 | KopplungsteilRollNick = tmpl4; |
474 | tmpl4 -= tmpl3; |
488 | tmpl4 -= tmpl3; |
- | 489 | if(IntegralFaktor) // MartinR: nur im ACC-Mode |
|
- | 490 | { |
|
475 | ErsatzKompass += tmpl4; |
491 | ErsatzKompass += tmpl4; |
476 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
492 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
477 | 493 | } |
|
478 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
494 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
479 | tmpl *= Parameter_AchsKopplung1; // 90 |
495 | tmpl *= Parameter_AchsKopplung1; // 90 |
480 | tmpl /= 4096L; |
496 | tmpl /= 4096L; |
481 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
497 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
482 | tmpl2 *= Parameter_AchsKopplung1; |
498 | tmpl2 *= Parameter_AchsKopplung1; |
Line 526... | Line 542... | ||
526 | #define D_LIMIT 128 |
542 | #define D_LIMIT 128 |
Line 527... | Line 543... | ||
527 | 543 | ||
528 | MesswertNick = HiResNick / 8; |
544 | MesswertNick = HiResNick / 8; |
Line -... | Line 545... | ||
- | 545 | MesswertRoll = HiResRoll / 8; |
|
- | 546 | ||
- | 547 | // MartinR : so war es Anfang |
|
529 | MesswertRoll = HiResRoll / 8; |
548 | /* |
530 | 549 | |
|
531 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
550 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
532 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
551 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
533 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
552 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
534 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
553 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
- | 554 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
|
- | 555 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 556 | |
|
- | 557 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 558 | */ |
|
- | 559 | // MartinR : so war es Ende |
|
- | 560 | ||
- | 561 | #ifdef NO_GYRO_PROGRESSION // MartinR; keine Begrenzung |
|
- | 562 | #warning : "### NO_GYRO_PROGRESSION ###" |
|
- | 563 | //nichts tun |
|
- | 564 | #else // mit Begrenzung |
|
- | 565 | // MartinR : Neu Anfang |
|
- | 566 | if(PlatinenVersion == 10) |
|
- | 567 | { |
|
- | 568 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 569 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 570 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 571 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 572 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 573 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 574 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 575 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 576 | } |
|
- | 577 | else |
|
- | 578 | { |
|
- | 579 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 580 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 581 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 582 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 583 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 584 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 585 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 586 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
- | 587 | } |
|
Line 535... | Line 588... | ||
535 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
588 | // MartinR : Neu Ende |
536 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
589 | #endif |
537 | 590 | ||
538 | if(Parameter_Gyro_D) |
591 | if(Parameter_Gyro_D) |
Line 679... | Line 732... | ||
679 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
732 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
680 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
733 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
681 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
734 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
682 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
735 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
683 | Ki = 10300 / (Parameter_I_Faktor + 1); |
736 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 737 | //Ki = (10300 / (Parameter_I_Faktor + 4)) + (StickGas /2); // MartinR: Test Gasabhängige Regelung |
|
- | 738 | ||
- | 739 | if(Parameter_UserParam1 > 50) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 740 | //if(Parameter_UserParam1 > 50) KiHH = (10300 / (Parameter_UserParam2 + 4)) + (StickGas /2); else KiHH = Ki; // MartinR : für HH über Schalter // MartinR: Test Gasabhängige Regelung |
|
- | 741 | //Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 742 | Parameter_NaviGpsModeControl = GetChannelValue(EE_Parameter.NaviGpsModeChannel); //MartinR: Standard: EE_Parameter.NaviGpsModeChannel wird übertragen |
|
- | 743 | ||
- | 744 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 745 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 746 | ||
- | 747 | ||
684 | MAX_GAS = EE_Parameter.Gas_Max; |
748 | MAX_GAS = EE_Parameter.Gas_Max; |
685 | MIN_GAS = EE_Parameter.Gas_Min; |
749 | MIN_GAS = EE_Parameter.Gas_Min; |
Line 686... | Line 750... | ||
686 | 750 | ||
687 | if(EE_Parameter.CareFreeChannel) |
751 | if(EE_Parameter.CareFreeChannel) |
Line 726... | Line 790... | ||
726 | void MotorRegler(void) |
790 | void MotorRegler(void) |
727 | //############################################################################ |
791 | //############################################################################ |
728 | { |
792 | { |
729 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
793 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
730 | int GierMischanteil,GasMischanteil; |
794 | int GierMischanteil,GasMischanteil; |
- | 795 | ||
- | 796 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: hinzugefügt |
|
- | 797 | ||
731 | static long sollGier = 0,tmp_long,tmp_long2; |
798 | static long sollGier = 0,tmp_long,tmp_long2; |
732 | static long IntegralFehlerNick = 0; |
799 | static long IntegralFehlerNick = 0; |
733 | static long IntegralFehlerRoll = 0; |
800 | static long IntegralFehlerRoll = 0; |
734 | static unsigned int RcLostTimer; |
801 | static unsigned int RcLostTimer; |
735 | static unsigned char delay_neutral = 0; |
802 | static unsigned char delay_neutral = 0; |
Line 1017... | Line 1084... | ||
1017 | // ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
1084 | // ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
1018 | NeueKompassRichtungMerken = 100; // 2 sekunden |
1085 | NeueKompassRichtungMerken = 100; // 2 sekunden |
1019 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1086 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1020 | SpeakHoTT = SPEAK_STARTING; |
1087 | SpeakHoTT = SPEAK_STARTING; |
1021 | #endif |
1088 | #endif |
- | 1089 | // MartinR: hinzugefügt Anfang |
|
- | 1090 | stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
|
- | 1091 | stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
|
- | 1092 | SummeNickHH = 0 ; // Zurücksetzen der Integratoren |
|
- | 1093 | SummeRollHH = 0 ; // Zurücksetzen der Integratoren |
|
- | 1094 | // MartinR: hinzugefügt Ende |
|
1022 | } |
1095 | } |
1023 | else |
1096 | else |
1024 | { |
1097 | { |
1025 | beeptime = 1500; // indicate missing calibration |
1098 | beeptime = 1500; // indicate missing calibration |
1026 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1099 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
Line 1091... | Line 1164... | ||
1091 | { |
1164 | { |
1092 | static int stick_nick,stick_roll; |
1165 | static int stick_nick,stick_roll; |
1093 | unsigned char stick_p; |
1166 | unsigned char stick_p; |
1094 | ParameterZuordnung(); |
1167 | ParameterZuordnung(); |
1095 | stick_p = EE_Parameter.Stick_P; |
1168 | stick_p = EE_Parameter.Stick_P; |
- | 1169 | // MartinR: original: |
|
- | 1170 | /* |
|
1096 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
1171 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
1097 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
1172 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
1098 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
1173 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
1099 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
1174 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
- | 1175 | */ |
|
- | 1176 | // MartinR: geändert Anfang |
|
- | 1177 | ||
- | 1178 | if(IntegralFaktor) // ACC-Mode |
|
- | 1179 | { |
|
- | 1180 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
|
- | 1181 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
|
- | 1182 | stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 1183 | stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 1184 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 1185 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 1186 | ||
- | 1187 | } |
|
- | 1188 | else // HH-Mode |
|
- | 1189 | { |
|
- | 1190 | if(Parameter_UserParam1 > 49) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 1191 | { |
|
- | 1192 | stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * Parameter_UserParam3); |
|
- | 1193 | stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * Parameter_UserParam3); |
|
- | 1194 | } |
|
- | 1195 | ||
- | 1196 | else |
|
- | 1197 | { |
|
- | 1198 | stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * stick_p); |
|
- | 1199 | stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * stick_p); |
|
- | 1200 | } |
|
- | 1201 | } |
|
- | 1202 | // MartinR: geändert Ende |
|
Line 1100... | Line 1203... | ||
1100 | 1203 | ||
1101 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1204 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1102 | // CareFree und freie Wahl der vorderen Richtung |
1205 | // CareFree und freie Wahl der vorderen Richtung |
1103 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1206 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1207 | //if(CareFree) // MartinR: so war es |
|
1104 | if(CareFree) |
1208 | if(CareFree && IntegralFaktor) // MartinR: CareFree nur im ACC-Mode |
1105 | { |
1209 | { |
1106 | signed int nick, roll; |
1210 | signed int nick, roll; |
1107 | nick = stick_nick / 4; |
1211 | nick = stick_nick / 4; |
1108 | roll = stick_roll / 4; |
1212 | roll = stick_roll / 4; |
1109 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
1213 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
1110 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
1214 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
1111 | } |
1215 | } |
1112 | else |
1216 | else |
1113 | { |
1217 | { |
- | 1218 | //FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; //MartinR: so war es |
|
1114 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
1219 | FromNC_Rotate_C = (sintab[EE_Parameter.OrientationAngle * 2 + 12]) / 2; //MartinR: feinere Auflösung |
- | 1220 | //FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; //MartinR: so war es |
|
1115 | FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
1221 | FromNC_Rotate_S = (sintab[EE_Parameter.OrientationAngle * 2]) / 2; //MartinR: feinere Auflösung |
1116 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
1222 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
1117 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
1223 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
Line 1118... | Line 1224... | ||
1118 | } |
1224 | } |
Line 1130... | Line 1236... | ||
1130 | StickNick -= GPS_Nick; |
1236 | StickNick -= GPS_Nick; |
1131 | StickRoll -= GPS_Roll; |
1237 | StickRoll -= GPS_Roll; |
1132 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
1238 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
Line 1133... | Line 1239... | ||
1133 | 1239 | ||
1134 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
1240 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
1135 | IntegralFaktor = Parameter_Gyro_I; |
1241 | // IntegralFaktor = Parameter_Gyro_I; // MartinR: war mal hier |
1136 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
1242 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
Line 1137... | Line 1243... | ||
1137 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
1243 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
1138 | 1244 | ||
Line 1247... | Line 1353... | ||
1247 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1353 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1248 | MittelIntegralRoll += IntegralRoll; |
1354 | MittelIntegralRoll += IntegralRoll; |
1249 | MittelIntegralNick2 += IntegralNick2; |
1355 | MittelIntegralNick2 += IntegralNick2; |
1250 | MittelIntegralRoll2 += IntegralRoll2; |
1356 | MittelIntegralRoll2 += IntegralRoll2; |
Line -... | Line 1357... | ||
- | 1357 | ||
- | 1358 | if((!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: |
|
- | 1359 | // nur im Moment des Umschaltens von HH auf ACC erfolgt ein Reset der Integrale, nicht aber bei normalem HH |
|
- | 1360 | // um einen im HH-Mode eventuell schwindelig geflogenen ACC_Mode zu resetten! |
|
- | 1361 | // bis zur Umschaltung werden die Integrale für den Kameraausgleich verwendet |
|
- | 1362 | { |
|
- | 1363 | IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1364 | IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1365 | Mess_IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1366 | Mess_IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1367 | Mess_Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1368 | sollGier = 0; |
|
- | 1369 | Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1370 | //Mess_Integral_Gier2 = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1371 | KompassSollWert = KompassValue; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1372 | ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1373 | NeueKompassRichtungMerken = 1; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1374 | } |
|
1251 | 1375 | ||
- | 1376 | // if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
- | 1377 | if(Looping_Nick || Looping_Roll || (!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: erweitert |
|
1252 | if(Looping_Nick || Looping_Roll) |
1378 | // MartinR: beim ACC-Loop oder beim zurückschalten von HH auf ACC |
1253 | { |
1379 | { |
1254 | IntegralAccNick = 0; |
1380 | IntegralAccNick = 0; |
1255 | IntegralAccRoll = 0; |
1381 | IntegralAccRoll = 0; |
1256 | MittelIntegralNick = 0; |
1382 | MittelIntegralNick = 0; |
Line 1261... | Line 1387... | ||
1261 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1387 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1262 | ZaehlMessungen = 0; |
1388 | ZaehlMessungen = 0; |
1263 | LageKorrekturNick = 0; |
1389 | LageKorrekturNick = 0; |
1264 | LageKorrekturRoll = 0; |
1390 | LageKorrekturRoll = 0; |
1265 | } |
1391 | } |
- | 1392 | ||
- | 1393 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 49)) IntegralFaktor = 0; // MartinR geändert und verschoben |
|
- | 1394 | else IntegralFaktor = Parameter_Gyro_I; // MartinR: geändert |
|
Line 1266... | Line 1395... | ||
1266 | 1395 | ||
1267 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1396 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1268 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1397 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1269 | { |
1398 | { |
Line 1315... | Line 1444... | ||
1315 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1444 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1316 | { |
1445 | { |
1317 | static int cnt = 0; |
1446 | static int cnt = 0; |
1318 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1447 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1319 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1448 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1320 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1449 | //if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
- | 1450 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
- | 1451 | ||
1321 | { |
1452 | { |
1322 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1453 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1323 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1454 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1324 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1455 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1325 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1456 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1483... | Line 1614... | ||
1483 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
1614 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
Line 1484... | Line 1615... | ||
1484 | 1615 | ||
1485 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1616 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1486 | // Kompass |
1617 | // Kompass |
1487 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1618 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1619 | //if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) // MartinR: so war es |
|
1488 | if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
1620 | if((KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) && !(Parameter_UserParam1 > 50)) // MartinR: bei HH über Schalter wird der Kompass abgeschaltet |
1489 | { |
1621 | { |
1490 | if(CalculateCompassTimer-- == 1) |
1622 | if(CalculateCompassTimer-- == 1) |
1491 | { |
1623 | { |
1492 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
1624 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
Line 1540... | Line 1672... | ||
1540 | 1672 | ||
1541 | #define TRIM_MAX 200 |
1673 | #define TRIM_MAX 200 |
1542 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1674 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1675... | ||
- | 1675 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1676 | ||
- | 1677 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1678 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1679 | ||
- | 1680 | if(!IntegralFaktor) // MartinR : HH-Mode hinzugefügt |
|
- | 1681 | { |
|
- | 1682 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1683 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1684 | //MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN); |
|
- | 1685 | //Mess_Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1686 | //Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1687 | } |
|
1543 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1688 | else // MartinR: ACC-Mode so war es |
1544 | 1689 | { |
|
- | 1690 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
- | 1691 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
1545 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1692 | } |
Line 1546... | Line 1693... | ||
1546 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1693 | |
1547 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1694 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1548 | 1695 | ||
Line 1558... | Line 1705... | ||
1558 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1705 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1559 | // Höhenregelung |
1706 | // Höhenregelung |
1560 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1707 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1561 | if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
1708 | if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
1562 | GasMischanteil *= STICK_GAIN; |
1709 | GasMischanteil *= STICK_GAIN; |
- | 1710 | ||
- | 1711 | //MartinR: Höhenregler nur mit 1284er Prozessor: |
|
- | 1712 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 1713 | ||
1563 | // if height control is activated |
1714 | // if height control is activated |
1564 | if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
1715 | if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
1565 | { |
1716 | { |
1566 | #define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
1717 | #define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
1567 | #define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
1718 | #define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
Line 1631... | Line 1782... | ||
1631 | BaroExpandActive--; |
1782 | BaroExpandActive--; |
1632 | } |
1783 | } |
1633 | // if height control is activated by an rc channel |
1784 | // if height control is activated by an rc channel |
1634 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1785 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1635 | { // check if parameter is less than activation threshold |
1786 | { // check if parameter is less than activation threshold |
1636 | if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1787 | // if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR :so war es |
- | 1788 | if((Parameter_HoehenSchalter < 50) || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH ohne Höhenregler über UsererParam1 an |
|
1637 | { //height control not active |
1789 | { //height control not active |
1638 | if(!delay--) |
1790 | if(!delay--) |
1639 | { |
1791 | { |
1640 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1792 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1641 | if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
1793 | if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
Line 1656... | Line 1808... | ||
1656 | } |
1808 | } |
1657 | } |
1809 | } |
1658 | else // no switchable height control |
1810 | else // no switchable height control |
1659 | { |
1811 | { |
1660 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1812 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1813 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1814 | // MartinR : geändert Anfang |
|
- | 1815 | if(Parameter_UserParam1 > 140) // HH über Schalter: HH an + Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1816 | { |
|
- | 1817 | HoehenReglerAktiv = 0; |
|
- | 1818 | } |
|
- | 1819 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1820 | { |
|
1661 | HoehenReglerAktiv = 1; |
1821 | HoehenReglerAktiv = 1; |
- | 1822 | } |
|
- | 1823 | // MartinR : geändert Ende |
|
1662 | } |
1824 | } |
1663 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1825 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1664 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1826 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1665 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1827 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1666 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
1828 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
Line 2016... | Line 2178... | ||
2016 | { |
2178 | { |
2017 | // set undefined state to indicate vario off |
2179 | // set undefined state to indicate vario off |
2018 | FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
2180 | FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
2019 | } // EOF no height control |
2181 | } // EOF no height control |
Line -... | Line 2182... | ||
- | 2182 | ||
- | 2183 | // MartinR: Höhenregler nur noch mit 1284er Prozessor |
|
- | 2184 | #endif |
|
2020 | 2185 | ||
2021 | // Limits the maximum gas in case of "Out of Range emergency landing" |
2186 | // Limits the maximum gas in case of "Out of Range emergency landing" |
2022 | if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
2187 | if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
2023 | { |
2188 | { |
2024 | if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
2189 | if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
Line 2059... | Line 2224... | ||
2059 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
2224 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
2060 | } |
2225 | } |
2061 | tmp_int = MAX_GAS*STICK_GAIN; |
2226 | tmp_int = MAX_GAS*STICK_GAIN; |
2062 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
2227 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
2063 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
2228 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
- | 2229 | ||
- | 2230 | ||
- | 2231 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 2232 | // Nick / Roll-Achse // MartinR: um Code zu sparen wurde Nick und Roll zusammengefasst |
|
- | 2233 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 2234 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 2235 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
Line -... | Line 2236... | ||
- | 2236 | ||
- | 2237 | // PI-Regler für Nick und Roll |
|
- | 2238 | if(EE_Parameter.Gyro_Stability <= 8) |
|
- | 2239 | { |
|
- | 2240 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
|
- | 2241 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
|
- | 2242 | } |
|
- | 2243 | else |
|
- | 2244 | { |
|
- | 2245 | pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
|
- | 2246 | pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
|
- | 2247 | } |
|
- | 2248 | ||
- | 2249 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 2250 | { |
|
- | 2251 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 2252 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2253 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2254 | pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
|
- | 2255 | SummeNickHH = 0 ; |
|
- | 2256 | ||
- | 2257 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 2258 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2259 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2260 | pd_ergebnis_roll += (SummeRoll / Ki); // PI-Regler für Roll |
|
- | 2261 | SummeRollHH = 0; |
|
- | 2262 | ||
- | 2263 | } |
|
- | 2264 | else // MartinR : HH-Mode |
|
- | 2265 | { |
|
- | 2266 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 2267 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2268 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2269 | pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 2270 | SummeNick = 0; |
|
- | 2271 | ||
- | 2272 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 2273 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2274 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2275 | pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 2276 | SummeRoll = 0; |
|
- | 2277 | } |
|
- | 2278 | // MartinR : geändert Ende |
|
- | 2279 | ||
- | 2280 | ||
- | 2281 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2282 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
|
- | 2283 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
|
- | 2284 | ||
- | 2285 | //tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2286 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
|
- | 2287 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2288 | ||
- | 2289 | ||
- | 2290 | // MartinR: alt |
|
2064 | 2291 | /* |
|
2065 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2292 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2066 | // Nick-Achse |
2293 | // Nick-Achse |
2067 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2294 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2068 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
2295 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
Line 2094... | Line 2321... | ||
2094 | 2321 | |
|
2095 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
2322 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
2096 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
2323 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
Line -... | Line 2324... | ||
- | 2324 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2325 | ||
- | 2326 | */ |
|
2097 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
2327 | // MartinR: alt Ende |
2098 | 2328 | ||
2099 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2329 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2100 | // Universal Mixer |
2330 | // Universal Mixer |
2101 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2331 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |