Subversion Repositories FlightCtrl

Rev

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
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++