Subversion Repositories FlightCtrl

Rev

Rev 499 | Rev 514 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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