Rev 2380 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2380 | Rev 2384 | ||
---|---|---|---|
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 207... | Line 215... | ||
207 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
215 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
208 | DebugOut.Analog[12] = Motor[0].SetPoint; |
216 | DebugOut.Analog[12] = Motor[0].SetPoint; |
209 | DebugOut.Analog[13] = Motor[1].SetPoint; |
217 | DebugOut.Analog[13] = Motor[1].SetPoint; |
210 | DebugOut.Analog[14] = Motor[2].SetPoint; |
218 | DebugOut.Analog[14] = Motor[2].SetPoint; |
211 | DebugOut.Analog[15] = Motor[3].SetPoint; |
219 | DebugOut.Analog[15] = Motor[3].SetPoint; |
- | 220 | ||
- | 221 | DebugOut.Analog[16] = cosinus; // MartinR: zur Einstellung der Pan-Funktion |
|
- | 222 | DebugOut.Analog[17] = sinus; // MartinR: test zur Einstellung der Pan-Funktion |
|
- | 223 | DebugOut.Analog[18] = ServoPanValue; // MartinR: zur Einstellung der Pan-Funktion |
|
- | 224 | DebugOut.Analog[19] = ServoRollValue; // MartinR: Test |
|
- | 225 | ||
212 | DebugOut.Analog[20] = ServoNickValue; |
226 | DebugOut.Analog[20] = ServoNickValue; |
213 | DebugOut.Analog[21] = HoverGas; |
227 | DebugOut.Analog[21] = HoverGas; |
214 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
228 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
215 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
229 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
216 | DebugOut.Analog[24] = SollHoehe/10; |
230 | DebugOut.Analog[24] = SollHoehe/10; |
Line 487... | Line 501... | ||
487 | tmpl4 *= Parameter_AchsKopplung2; //65 |
501 | tmpl4 *= Parameter_AchsKopplung2; //65 |
488 | tmpl4 /= 4096L; |
502 | tmpl4 /= 4096L; |
489 | KopplungsteilNickRoll = tmpl3; |
503 | KopplungsteilNickRoll = tmpl3; |
490 | KopplungsteilRollNick = tmpl4; |
504 | KopplungsteilRollNick = tmpl4; |
491 | tmpl4 -= tmpl3; |
505 | tmpl4 -= tmpl3; |
- | 506 | if(IntegralFaktor) // MartinR: nur im ACC-Mode |
|
- | 507 | { |
|
492 | ErsatzKompass += tmpl4; |
508 | ErsatzKompass += tmpl4; |
493 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
509 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
494 | 510 | } |
|
495 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
511 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
496 | tmpl *= Parameter_AchsKopplung1; // 90 |
512 | tmpl *= Parameter_AchsKopplung1; // 90 |
497 | tmpl /= 4096L; |
513 | tmpl /= 4096L; |
498 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
514 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
499 | tmpl2 *= Parameter_AchsKopplung1; |
515 | tmpl2 *= Parameter_AchsKopplung1; |
Line 543... | Line 559... | ||
543 | #define D_LIMIT 128 |
559 | #define D_LIMIT 128 |
Line 544... | Line 560... | ||
544 | 560 | ||
545 | MesswertNick = HiResNick / 8; |
561 | MesswertNick = HiResNick / 8; |
Line -... | Line 562... | ||
- | 562 | MesswertRoll = HiResRoll / 8; |
|
- | 563 | ||
- | 564 | // MartinR : so war es Anfang |
|
546 | MesswertRoll = HiResRoll / 8; |
565 | /* |
547 | 566 | |
|
548 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
567 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
549 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
568 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
550 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
569 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
551 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
570 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
- | 571 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
|
- | 572 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 573 | |
|
- | 574 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 575 | */ |
|
- | 576 | // MartinR : so war es Ende |
|
- | 577 | ||
- | 578 | #ifdef NO_GYRO_PROGRESSION // MartinR; keine Begrenzung |
|
- | 579 | #warning : "### NO_GYRO_PROGRESSION ###" |
|
- | 580 | //nichts tun |
|
- | 581 | #else // mit Begrenzung |
|
- | 582 | // MartinR : Neu Anfang |
|
- | 583 | if(PlatinenVersion == 10) |
|
- | 584 | { |
|
- | 585 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 586 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 587 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 588 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 589 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 590 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 591 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 592 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 593 | } |
|
- | 594 | else |
|
- | 595 | { |
|
- | 596 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 597 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 598 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 599 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 600 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 601 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 602 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 603 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
- | 604 | } |
|
Line 552... | Line 605... | ||
552 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
605 | // MartinR : Neu Ende |
553 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
606 | #endif |
554 | 607 | ||
555 | if(Parameter_Gyro_D) |
608 | if(Parameter_Gyro_D) |
Line 696... | Line 749... | ||
696 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
749 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
697 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
750 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
698 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
751 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
699 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
752 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
700 | Ki = 10300 / (Parameter_I_Faktor + 1); |
753 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 754 | //Ki = (10300 / (Parameter_I_Faktor + 4)) + (StickGas /2); // MartinR: Test Gasabhängige Regelung |
|
- | 755 | ||
- | 756 | if(Parameter_UserParam1 > 50) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 757 | //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 |
|
- | 758 | //Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 759 | Parameter_NaviGpsModeControl = GetChannelValue(EE_Parameter.NaviGpsModeChannel); //MartinR: Standard: EE_Parameter.NaviGpsModeChannel wird übertragen |
|
- | 760 | ||
- | 761 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 762 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 763 | ||
- | 764 | ||
701 | MAX_GAS = EE_Parameter.Gas_Max; |
765 | MAX_GAS = EE_Parameter.Gas_Max; |
702 | MIN_GAS = EE_Parameter.Gas_Min; |
766 | MIN_GAS = EE_Parameter.Gas_Min; |
Line 703... | Line 767... | ||
703 | 767 | ||
704 | if(EE_Parameter.CareFreeChannel) |
768 | if(EE_Parameter.CareFreeChannel) |
Line 743... | Line 807... | ||
743 | void MotorRegler(void) |
807 | void MotorRegler(void) |
744 | //############################################################################ |
808 | //############################################################################ |
745 | { |
809 | { |
746 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
810 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
747 | int GierMischanteil,GasMischanteil; |
811 | int GierMischanteil,GasMischanteil; |
- | 812 | ||
- | 813 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: hinzugefügt |
|
- | 814 | ||
748 | static long sollGier = 0,tmp_long,tmp_long2; |
815 | static long sollGier = 0,tmp_long,tmp_long2; |
749 | static long IntegralFehlerNick = 0; |
816 | static long IntegralFehlerNick = 0; |
750 | static long IntegralFehlerRoll = 0; |
817 | static long IntegralFehlerRoll = 0; |
751 | static unsigned int RcLostTimer; |
818 | static unsigned int RcLostTimer; |
752 | static unsigned char delay_neutral = 0; |
819 | static unsigned char delay_neutral = 0; |
Line 1036... | Line 1103... | ||
1036 | // ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
1103 | // ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
1037 | NeueKompassRichtungMerken = 100; // 2 sekunden |
1104 | NeueKompassRichtungMerken = 100; // 2 sekunden |
1038 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1105 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1039 | SpeakHoTT = SPEAK_STARTING; |
1106 | SpeakHoTT = SPEAK_STARTING; |
1040 | #endif |
1107 | #endif |
- | 1108 | // MartinR: hinzugefügt Anfang |
|
- | 1109 | stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
|
- | 1110 | stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // aktueller Stickwert wird als Neutralposition im HH verwendet, MartinR |
|
- | 1111 | SummeNickHH = 0 ; // Zurücksetzen der Integratoren |
|
- | 1112 | SummeRollHH = 0 ; // Zurücksetzen der Integratoren |
|
- | 1113 | // MartinR: hinzugefügt Ende |
|
1041 | } |
1114 | } |
1042 | else |
1115 | else |
1043 | { |
1116 | { |
1044 | beeptime = 1500; // indicate missing calibration |
1117 | beeptime = 1500; // indicate missing calibration |
1045 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1118 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
Line 1116... | Line 1189... | ||
1116 | { |
1189 | { |
1117 | static int stick_nick,stick_roll; |
1190 | static int stick_nick,stick_roll; |
1118 | unsigned char stick_p; |
1191 | unsigned char stick_p; |
1119 | ParameterZuordnung(); |
1192 | ParameterZuordnung(); |
1120 | stick_p = EE_Parameter.Stick_P; |
1193 | stick_p = EE_Parameter.Stick_P; |
- | 1194 | // MartinR: original: |
|
- | 1195 | /* |
|
1121 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
1196 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
1122 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
1197 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
1123 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
1198 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
1124 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
1199 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
- | 1200 | */ |
|
- | 1201 | // MartinR: geändert Anfang |
|
- | 1202 | ||
- | 1203 | if(IntegralFaktor) // ACC-Mode |
|
- | 1204 | { |
|
- | 1205 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
|
- | 1206 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
|
- | 1207 | stick_nick_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 1208 | stick_roll_neutral = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 1209 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 1210 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 1211 | ||
- | 1212 | } |
|
- | 1213 | else // HH-Mode |
|
- | 1214 | { |
|
- | 1215 | if(Parameter_UserParam1 > 49) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 1216 | { |
|
- | 1217 | stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * Parameter_UserParam3); |
|
- | 1218 | stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * Parameter_UserParam3); |
|
- | 1219 | } |
|
- | 1220 | ||
- | 1221 | else |
|
- | 1222 | { |
|
- | 1223 | stick_nick = ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] - stick_nick_neutral) * stick_p); |
|
- | 1224 | stick_roll = ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] - stick_roll_neutral) * stick_p); |
|
- | 1225 | } |
|
- | 1226 | } |
|
- | 1227 | // MartinR: geändert Ende |
|
Line 1125... | Line 1228... | ||
1125 | 1228 | ||
1126 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1229 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1127 | // CareFree und freie Wahl der vorderen Richtung |
1230 | // CareFree und freie Wahl der vorderen Richtung |
1128 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1231 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1232 | //if(CareFree) // MartinR: so war es |
|
1129 | if(CareFree) |
1233 | if(CareFree && IntegralFaktor) // MartinR: CareFree nur im ACC-Mode |
1130 | { |
1234 | { |
1131 | signed int nick, roll; |
1235 | signed int nick, roll; |
1132 | nick = stick_nick / 4; |
1236 | nick = stick_nick / 4; |
1133 | roll = stick_roll / 4; |
1237 | roll = stick_roll / 4; |
1134 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
1238 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
1135 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
1239 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
1136 | } |
1240 | } |
1137 | else |
1241 | else |
1138 | { |
1242 | { |
- | 1243 | //FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; //MartinR: so war es |
|
1139 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
1244 | FromNC_Rotate_C = (sintab[EE_Parameter.OrientationAngle * 2 + 12]) / 2; //MartinR: feinere Auflösung |
- | 1245 | //FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; //MartinR: so war es |
|
1140 | FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
1246 | FromNC_Rotate_S = (sintab[EE_Parameter.OrientationAngle * 2]) / 2; //MartinR: feinere Auflösung |
1141 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
1247 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
1142 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
1248 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
Line 1143... | Line 1249... | ||
1143 | } |
1249 | } |
Line 1162... | Line 1268... | ||
1162 | StickNick -= GPS_Nick; |
1268 | StickNick -= GPS_Nick; |
1163 | StickRoll -= GPS_Roll; |
1269 | StickRoll -= GPS_Roll; |
1164 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
1270 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
Line 1165... | Line 1271... | ||
1165 | 1271 | ||
1166 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
1272 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
1167 | IntegralFaktor = Parameter_Gyro_I; |
1273 | // IntegralFaktor = Parameter_Gyro_I; // MartinR: war mal hier |
1168 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
1274 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
Line 1169... | Line 1275... | ||
1169 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
1275 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
1170 | 1276 | ||
Line 1279... | Line 1385... | ||
1279 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1385 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1280 | MittelIntegralRoll += IntegralRoll; |
1386 | MittelIntegralRoll += IntegralRoll; |
1281 | MittelIntegralNick2 += IntegralNick2; |
1387 | MittelIntegralNick2 += IntegralNick2; |
1282 | MittelIntegralRoll2 += IntegralRoll2; |
1388 | MittelIntegralRoll2 += IntegralRoll2; |
Line -... | Line 1389... | ||
- | 1389 | ||
- | 1390 | if((!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: |
|
- | 1391 | // nur im Moment des Umschaltens von HH auf ACC erfolgt ein Reset der Integrale, nicht aber bei normalem HH |
|
- | 1392 | // um einen im HH-Mode eventuell schwindelig geflogenen ACC_Mode zu resetten! |
|
- | 1393 | // bis zur Umschaltung werden die Integrale für den Kameraausgleich verwendet |
|
- | 1394 | { |
|
- | 1395 | IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1396 | IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1397 | Mess_IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1398 | Mess_IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1399 | Mess_Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1400 | sollGier = 0; |
|
- | 1401 | Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1402 | //Mess_Integral_Gier2 = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1403 | KompassSollWert = KompassValue; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1404 | ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1405 | NeueKompassRichtungMerken = 1; // MartinR: aktuelle Ausrichtung beibehalten |
|
- | 1406 | } |
|
1283 | 1407 | ||
- | 1408 | // if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
- | 1409 | if(Looping_Nick || Looping_Roll || (!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: erweitert |
|
1284 | if(Looping_Nick || Looping_Roll) |
1410 | // MartinR: beim ACC-Loop oder beim zurückschalten von HH auf ACC |
1285 | { |
1411 | { |
1286 | IntegralAccNick = 0; |
1412 | IntegralAccNick = 0; |
1287 | IntegralAccRoll = 0; |
1413 | IntegralAccRoll = 0; |
1288 | MittelIntegralNick = 0; |
1414 | MittelIntegralNick = 0; |
Line 1293... | Line 1419... | ||
1293 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1419 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1294 | ZaehlMessungen = 0; |
1420 | ZaehlMessungen = 0; |
1295 | LageKorrekturNick = 0; |
1421 | LageKorrekturNick = 0; |
1296 | LageKorrekturRoll = 0; |
1422 | LageKorrekturRoll = 0; |
1297 | } |
1423 | } |
- | 1424 | ||
- | 1425 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 49)) IntegralFaktor = 0; // MartinR geändert und verschoben |
|
- | 1426 | else IntegralFaktor = Parameter_Gyro_I; // MartinR: geändert |
|
Line 1298... | Line 1427... | ||
1298 | 1427 | ||
1299 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1428 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1300 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1429 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1301 | { |
1430 | { |
Line 1347... | Line 1476... | ||
1347 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1476 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1348 | { |
1477 | { |
1349 | static int cnt = 0; |
1478 | static int cnt = 0; |
1350 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1479 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1351 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1480 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1352 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1481 | //if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
- | 1482 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
- | 1483 | ||
1353 | { |
1484 | { |
1354 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1485 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1355 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1486 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1356 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1487 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1357 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1488 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1515... | Line 1646... | ||
1515 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
1646 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
Line 1516... | Line 1647... | ||
1516 | 1647 | ||
1517 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1648 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1518 | // Kompass |
1649 | // Kompass |
1519 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1650 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1651 | //if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) // MartinR: so war es |
|
1520 | if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
1652 | if((KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) && !(Parameter_UserParam1 > 50)) // MartinR: bei HH über Schalter wird der Kompass abgeschaltet |
1521 | { |
1653 | { |
1522 | if(CalculateCompassTimer-- == 1) |
1654 | if(CalculateCompassTimer-- == 1) |
1523 | { |
1655 | { |
1524 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
1656 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
Line 1572... | Line 1704... | ||
1572 | 1704 | ||
1573 | #define TRIM_MAX 200 |
1705 | #define TRIM_MAX 200 |
1574 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1706 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1707... | ||
- | 1707 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1708 | ||
- | 1709 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1710 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1711 | ||
- | 1712 | if(!IntegralFaktor) // MartinR : HH-Mode hinzugefügt |
|
- | 1713 | { |
|
- | 1714 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1715 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1716 | //MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN); |
|
- | 1717 | //Mess_Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1718 | //Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1719 | } |
|
1575 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1720 | else // MartinR: ACC-Mode so war es |
1576 | 1721 | { |
|
- | 1722 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
- | 1723 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
1577 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1724 | } |
Line 1578... | Line 1725... | ||
1578 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1725 | |
1579 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1726 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1580 | 1727 | ||
Line 1590... | Line 1737... | ||
1590 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1737 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1591 | // Höhenregelung |
1738 | // Höhenregelung |
1592 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1739 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1593 | if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
1740 | if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
1594 | GasMischanteil *= STICK_GAIN; |
1741 | GasMischanteil *= STICK_GAIN; |
- | 1742 | ||
- | 1743 | //MartinR: Höhenregler nur mit 1284er Prozessor: |
|
- | 1744 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 1745 | ||
1595 | // if height control is activated |
1746 | // if height control is activated |
1596 | if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
1747 | if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
1597 | { |
1748 | { |
1598 | #define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
1749 | #define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
1599 | #define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
1750 | #define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
Line 1660... | Line 1811... | ||
1660 | BaroExpandActive--; |
1811 | BaroExpandActive--; |
1661 | } |
1812 | } |
1662 | // if height control is activated by an rc channel |
1813 | // if height control is activated by an rc channel |
1663 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1814 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1664 | { // check if parameter is less than activation threshold |
1815 | { // check if parameter is less than activation threshold |
1665 | if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1816 | // if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR :so war es |
- | 1817 | if((Parameter_HoehenSchalter < 50) || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH ohne Höhenregler über UsererParam1 an |
|
1666 | { //height control not active |
1818 | { //height control not active |
1667 | if(!delay--) |
1819 | if(!delay--) |
1668 | { |
1820 | { |
1669 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1821 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1670 | if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
1822 | if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
Line 1685... | Line 1837... | ||
1685 | } |
1837 | } |
1686 | } |
1838 | } |
1687 | else // no switchable height control |
1839 | else // no switchable height control |
1688 | { |
1840 | { |
1689 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1841 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1842 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1843 | // MartinR : geändert Anfang |
|
- | 1844 | if(Parameter_UserParam1 > 140) // HH über Schalter: HH an + Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1845 | { |
|
- | 1846 | HoehenReglerAktiv = 0; |
|
- | 1847 | } |
|
- | 1848 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1849 | { |
|
1690 | HoehenReglerAktiv = 1; |
1850 | HoehenReglerAktiv = 1; |
- | 1851 | } |
|
- | 1852 | // MartinR : geändert Ende |
|
1691 | } |
1853 | } |
1692 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1854 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1693 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1855 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1694 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1856 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1695 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
1857 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
Line 2045... | Line 2207... | ||
2045 | { |
2207 | { |
2046 | // set undefined state to indicate vario off |
2208 | // set undefined state to indicate vario off |
2047 | FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
2209 | FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
2048 | } // EOF no height control |
2210 | } // EOF no height control |
Line -... | Line 2211... | ||
- | 2211 | ||
- | 2212 | // MartinR: Höhenregler nur noch mit 1284er Prozessor |
|
- | 2213 | #endif |
|
2049 | 2214 | ||
2050 | // Limits the maximum gas in case of "Out of Range emergency landing" |
2215 | // Limits the maximum gas in case of "Out of Range emergency landing" |
2051 | if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
2216 | if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
2052 | { |
2217 | { |
2053 | if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
2218 | if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
Line 2088... | Line 2253... | ||
2088 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
2253 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
2089 | } |
2254 | } |
2090 | tmp_int = MAX_GAS*STICK_GAIN; |
2255 | tmp_int = MAX_GAS*STICK_GAIN; |
2091 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
2256 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
2092 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
2257 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
- | 2258 | ||
- | 2259 | ||
- | 2260 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 2261 | // Nick / Roll-Achse // MartinR: um Code zu sparen wurde Nick und Roll zusammengefasst |
|
- | 2262 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 2263 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 2264 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
- | 2265 | ||
- | 2266 | // PI-Regler für Nick und Roll |
|
- | 2267 | if(EE_Parameter.Gyro_Stability <= 8) |
|
- | 2268 | { |
|
- | 2269 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
|
- | 2270 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
|
- | 2271 | } |
|
- | 2272 | else |
|
- | 2273 | { |
|
- | 2274 | pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
|
- | 2275 | pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
|
- | 2276 | } |
|
- | 2277 | ||
- | 2278 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 2279 | { |
|
- | 2280 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 2281 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2282 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2283 | pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
|
- | 2284 | SummeNickHH = 0 ; |
|
- | 2285 | ||
- | 2286 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 2287 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2288 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2289 | pd_ergebnis_roll += (SummeRoll / Ki); // PI-Regler für Roll |
|
- | 2290 | SummeRollHH = 0; |
|
- | 2291 | ||
- | 2292 | } |
|
- | 2293 | else // MartinR : HH-Mode |
|
- | 2294 | { |
|
- | 2295 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 2296 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2297 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2298 | pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 2299 | SummeNick = 0; |
|
- | 2300 | ||
- | 2301 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 2302 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2303 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2304 | pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 2305 | SummeRoll = 0; |
|
- | 2306 | } |
|
- | 2307 | // MartinR : geändert Ende |
|
- | 2308 | ||
- | 2309 | ||
- | 2310 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2311 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
|
- | 2312 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
|
Line -... | Line 2313... | ||
- | 2313 | ||
- | 2314 | //tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2315 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
|
- | 2316 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2317 | ||
- | 2318 | ||
- | 2319 | // MartinR: alt |
|
2093 | 2320 | /* |
|
2094 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2321 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2095 | // Nick-Achse |
2322 | // Nick-Achse |
2096 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2323 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2097 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
2324 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
Line 2123... | Line 2350... | ||
2123 | 2350 | |
|
2124 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
2351 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
2125 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
2352 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
Line -... | Line 2353... | ||
- | 2353 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2354 | ||
- | 2355 | */ |
|
2126 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
2356 | // MartinR: alt Ende |
2127 | 2357 | ||
2128 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2358 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2129 | // Universal Mixer |
2359 | // Universal Mixer |
2130 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2360 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |