Subversion Repositories FlightCtrl

Rev

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

Rev 469 Rev 492
Line 45... Line 45...
45
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
46
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
47
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
47
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
48
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
48
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
49
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
49
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-
 
51
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
52
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
51
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
53
// +  POSSIBILITY OF SUCH DAMAGE. 
52
// +  POSSIBILITY OF SUCH DAMAGE. 
54
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
53
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Line 55... Line 54...
55
 
54
 
Line 80... Line 79...
80
unsigned char HoehenReglerAktiv = 0;
79
unsigned char HoehenReglerAktiv = 0;
81
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
80
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
Line 82... Line 81...
82
 
81
 
83
float GyroFaktor;
82
float GyroFaktor;
84
float IntegralFaktor;
-
 
85
 
83
float IntegralFaktor;
86
volatile int  DiffNick,DiffRoll;
84
volatile int  DiffNick,DiffRoll;
87
int  Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
85
int  Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
88
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
86
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
89
unsigned char MotorWert[5];
87
unsigned char MotorWert[5];
Line 114... Line 112...
114
unsigned char Parameter_ServoNickControl = 100;
112
unsigned char Parameter_ServoNickControl = 100;
115
unsigned char Parameter_LoopGasLimit = 70;
113
unsigned char Parameter_LoopGasLimit = 70;
116
unsigned char Parameter_AchsKopplung1 = 0;
114
unsigned char Parameter_AchsKopplung1 = 0;
117
unsigned char Parameter_AchsGegenKopplung1 = 0;
115
unsigned char Parameter_AchsGegenKopplung1 = 0;
118
struct mk_param_struct EE_Parameter;
116
struct mk_param_struct EE_Parameter;
-
 
117
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
Line 119... Line 118...
119
 
118
 
120
void Piep(unsigned char Anzahl)
119
void Piep(unsigned char Anzahl)
121
{
120
{
122
 while(Anzahl--)
121
 while(Anzahl--)
Line 171... Line 170...
171
    KompassStartwert = KompassValue;
170
    KompassStartwert = KompassValue;
172
    GPS_Neutral();
171
    GPS_Neutral();
173
    beeptime = 50;  
172
    beeptime = 50;  
174
        Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
173
        Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
175
        Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
174
        Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
-
 
175
    ExternHoehenValue = 0;
176
}
176
}
Line 177... Line 177...
177
 
177
 
178
//############################################################################
178
//############################################################################
179
// Bearbeitet die Messwerte
179
// Bearbeitet die Messwerte
Line 265... Line 265...
265
//++++++++++++++++++++++++++++++++++++++++++++++++
265
//++++++++++++++++++++++++++++++++++++++++++++++++
266
// ADC einschalten
266
// ADC einschalten
267
    ANALOG_ON; 
267
    ANALOG_ON; 
268
//++++++++++++++++++++++++++++++++++++++++++++++++
268
//++++++++++++++++++++++++++++++++++++++++++++++++
269
DebugOut.Analog[11] = MesswertRoll;
269
DebugOut.Analog[11] = MesswertRoll;
-
 
270
//DebugOut.Analog[11] = AdWertNick;
Line 270... Line 271...
270
 
271
 
271
    Integral_Gier  = Mess_Integral_Gier;
272
    Integral_Gier  = Mess_Integral_Gier;
272
    IntegralNick = Mess_IntegralNick;
273
    IntegralNick = Mess_IntegralNick;
273
    IntegralRoll = Mess_IntegralRoll;
274
    IntegralRoll = Mess_IntegralRoll;
Line 539... Line 540...
539
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
540
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
540
// neue Werte von der Funke
541
// neue Werte von der Funke
541
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
542
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
542
 if(!NewPpmData-- || Notlandung)  
543
 if(!NewPpmData-- || Notlandung)  
543
  {
544
  {
-
 
545
    int tmp_int;
544
    ParameterZuordnung();
546
    ParameterZuordnung();
545
    StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
547
    StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
546
    StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
548
    StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
547
    StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
549
    StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
548
    StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
550
    StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
549
    StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
551
    StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
550
    GyroFaktor     = ((float)Parameter_Gyro_P + 10.0) / 256.0;
552
    GyroFaktor     = ((float)Parameter_Gyro_P + 10.0) / 256.0;
551
    IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
553
    IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
Line -... Line 554...
-
 
554
 
-
 
555
#define KEY_VALUE (Parameter_UserParam1 * 4)  //(Poti3 * 8)
-
 
556
if(DubWiseKeys[1]) beeptime = 10;
-
 
557
    if(DubWiseKeys[1] & DUB_KEY_UP)    tmp_int = KEY_VALUE;   else
-
 
558
    if(DubWiseKeys[1] & DUB_KEY_DOWN)  tmp_int = -KEY_VALUE;  else   tmp_int = 0;
-
 
559
    ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
-
 
560
    if(DubWiseKeys[1] & DUB_KEY_LEFT)  tmp_int = KEY_VALUE; else
-
 
561
    if(DubWiseKeys[1] & DUB_KEY_RIGHT) tmp_int = -KEY_VALUE; else tmp_int = 0;
-
 
562
    ExternStickRoll = (ExternStickRoll * 7 + tmp_int) / 8;
-
 
563
 
-
 
564
    if(DubWiseKeys[0] & 8)  ExternStickGier = 50;else
-
 
565
    if(DubWiseKeys[0] & 4)  ExternStickGier =-50;else ExternStickGier = 0;
-
 
566
    if(DubWiseKeys[0] & 2)  ExternHoehenValue++;
-
 
567
    if(DubWiseKeys[0] & 16) ExternHoehenValue--;
-
 
568
 
-
 
569
    StickNick += ExternStickNick / 8;
-
 
570
    StickRoll += ExternStickRoll / 8;
-
 
571
    StickGier += ExternStickGier;
552
 
572
 
553
    if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor =  0;
573
    if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor =  0;
554
    if(GyroFaktor < 0) GyroFaktor = 0;
574
    if(GyroFaktor < 0) GyroFaktor = 0;
555
    if(IntegralFaktor < 0) IntegralFaktor = 0;
575
    if(IntegralFaktor < 0) IntegralFaktor = 0;
556
    // greift in den Stick ein, um ungewolltes überschlagen zu verhindern
576
    // greift in den Stick ein, um ungewolltes überschlagen zu verhindern
Line 672... Line 692...
672
   long tmp_long, tmp_long2;
692
   long tmp_long, tmp_long2;
673
    tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
693
    tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
674
    tmp_long /= 16;
694
    tmp_long /= 16;
675
    tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
695
    tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
676
    tmp_long2 /= 16;
696
    tmp_long2 /= 16;
677
 #define AUSGLEICH 32
697
 #define AUSGLEICH 32 //(Parameter_UserParam1 / 2)
678
    if(tmp_long >  AUSGLEICH)  tmp_long  = AUSGLEICH;
698
    if(tmp_long >  AUSGLEICH)  tmp_long  = AUSGLEICH;
679
    if(tmp_long < -AUSGLEICH)  tmp_long  =-AUSGLEICH;
699
    if(tmp_long < -AUSGLEICH)  tmp_long  =-AUSGLEICH;
680
    if(tmp_long2 > AUSGLEICH)  tmp_long2 = AUSGLEICH;
700
    if(tmp_long2 > AUSGLEICH)  tmp_long2 = AUSGLEICH;
681
    if(tmp_long2 <-AUSGLEICH)  tmp_long2 =-AUSGLEICH;
701
    if(tmp_long2 <-AUSGLEICH)  tmp_long2 =-AUSGLEICH;
682
    Mess_IntegralNick -= tmp_long;
702
    Mess_IntegralNick -= tmp_long;
Line 694... Line 714...
694
    MittelIntegralNick  /= ABGLEICH_ANZAHL;
714
    MittelIntegralNick  /= ABGLEICH_ANZAHL;
695
    MittelIntegralRoll  /= ABGLEICH_ANZAHL;
715
    MittelIntegralRoll  /= ABGLEICH_ANZAHL;
696
        IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
716
        IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
697
        IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
717
        IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
698
    IntegralAccZ    = IntegralAccZ / ABGLEICH_ANZAHL;
718
    IntegralAccZ    = IntegralAccZ / ABGLEICH_ANZAHL;
699
#define MAX_I 1//(Poti2/10)
719
#define MAX_I 0//(Poti2/10)
700
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
720
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
701
    IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
721
    IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
702
    ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
722
    ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
703
    if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < 5000)
723
/*    if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < 5000)
704
     {
724
     {
705
       tmp_long = IntegralFehlerNick / 700L;
725
       tmp_long = IntegralFehlerNick / 256L;
706
       if(tmp_long > MAX_I) tmp_long = MAX_I;
726
       if(tmp_long > MAX_I) tmp_long = MAX_I;
707
       if(tmp_long <-MAX_I) tmp_long =-MAX_I;
727
       if(tmp_long <-MAX_I) tmp_long =-MAX_I;
708
       I_LageNick = tmp_long;    
728
       I_LageNick = tmp_long;    
709
     }
729
     }
710
     else
730
     else
711
     {
731
     {
712
      I_LageNick /= 2;
732
      I_LageNick /= 2;
713
     }
733
     }
-
 
734
*/
714
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++     
735
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++     
715
    IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
736
    IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
716
    ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
737
    ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
717
    if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < 5000)
738
/*    if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < 5000)
718
     {
739
     {
719
      tmp_long2 = IntegralFehlerRoll / 700L;
740
      tmp_long2 = IntegralFehlerRoll / 256L;
720
      if(tmp_long2 > MAX_I) tmp_long2 = MAX_I;
741
      if(tmp_long2 > MAX_I) tmp_long2 = MAX_I;
721
      if(tmp_long2 <-MAX_I) tmp_long2 =-MAX_I;
742
      if(tmp_long2 <-MAX_I) tmp_long2 =-MAX_I;
722
      I_LageRoll = tmp_long2;    
743
      I_LageRoll = tmp_long2;    
723
     }
744
     }
724
     else
745
     else
725
     {
746
     {
726
      I_LageRoll /=2;
747
      I_LageRoll /=2;
727
     }
748
     }
728
 
749
*/
729
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
-
 
730
   MittelIntegralNick_Alt = MittelIntegralNick;      
-
 
731
   MittelIntegralRoll_Alt = MittelIntegralRoll;      
-
 
732
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
-
 
733
    Mess_IntegralNick -= ausgleichNick;
750
    Mess_IntegralNick -= ausgleichNick;
734
    Mess_IntegralRoll -= ausgleichRoll;
751
    Mess_IntegralRoll -= ausgleichRoll;
Line 735... Line 752...
735
 
752
 
736
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
753
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
737
// Gyro-Drift ermitteln
754
// Gyro-Drift ermitteln
738
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
755
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
739
    MittelIntegralNick2 /= ABGLEICH_ANZAHL;
756
    MittelIntegralNick2 /= ABGLEICH_ANZAHL;
740
    MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
757
    MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
741
    tmp_long  = (long)(MittelIntegralNick2 - (long)IntegralAccNick);
758
//    tmp_long  = (long)(MittelIntegralNick2 - (long)IntegralAccNick); 
-
 
759
//    tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll); 
-
 
760
    tmp_long  = IntegralNick2 - IntegralNick;
742
    tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll);
761
    tmp_long2 = IntegralRoll2 - IntegralRoll;
Line 743... Line 762...
743
    //DebugOut.Analog[25] = MittelIntegralRoll2 / 26;
762
    //DebugOut.Analog[25] = MittelIntegralRoll2 / 26;
744
 
763
 
745
    IntegralFehlerNick = tmp_long;
764
    IntegralFehlerNick = tmp_long;
Line 759... Line 778...
759
DebugOut.Analog[22] = MittelIntegralRoll / 26;
778
DebugOut.Analog[22] = MittelIntegralRoll / 26;
760
//DebugOut.Analog[28] = ausgleichNick;
779
//DebugOut.Analog[28] = ausgleichNick;
761
DebugOut.Analog[29] = ausgleichRoll;
780
DebugOut.Analog[29] = ausgleichRoll;
762
DebugOut.Analog[30] = I_LageRoll * 10;
781
DebugOut.Analog[30] = I_LageRoll * 10;
Line 763... Line 782...
763
 
782
 
764
#define FEHLER_LIMIT  (ABGLEICH_ANZAHL/2)
783
#define FEHLER_LIMIT  (ABGLEICH_ANZAHL * 4)
765
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL*4)
-
 
-
 
784
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16)
766
 
785
#define BEWEGUNGS_LIMIT 20000
767
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
786
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
-
 
787
        cnt = 1;// + labs(IntegralFehlerNick) / 4096;
-
 
788
        if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT)
768
        cnt = 1;// + labs(IntegralFehlerNick) / 4096;
789
        {
769
        if(IntegralFehlerNick >  FEHLER_LIMIT2)
790
        if(IntegralFehlerNick >  FEHLER_LIMIT2)
770
         {
791
         {
771
           if(last_n_p)
792
           if(last_n_p)
772
           {
793
           {
773
            cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
794
            cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
774
            ausgleichNick = IntegralFehlerNick / 12;
795
            ausgleichNick = IntegralFehlerNick / 8;
775
            if(ausgleichNick > 5000) ausgleichNick = 5000;
796
            if(ausgleichNick > 5000) ausgleichNick = 5000;
776
//            Mess_IntegralNick -= ausgleichNick;
797
            Mess_IntegralNick -= ausgleichNick;
777
           }
798
           }
778
           else last_n_p = 1;
799
           else last_n_p = 1;
779
         } else  last_n_p = 0;
800
         } else  last_n_p = 0;
780
        if(IntegralFehlerNick < -FEHLER_LIMIT2)
801
        if(IntegralFehlerNick < -FEHLER_LIMIT2)
781
         {
802
         {
782
           if(last_n_n)
803
           if(last_n_n)
783
            {
804
            {
784
             cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
805
             cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
785
             ausgleichNick = IntegralFehlerNick / 12;
806
             ausgleichNick = IntegralFehlerNick / 8;
786
             if(ausgleichNick < -5000) ausgleichNick = -5000;
807
             if(ausgleichNick < -5000) ausgleichNick = -5000;
787
//             Mess_IntegralNick -= ausgleichNick;
808
             Mess_IntegralNick -= ausgleichNick;
788
            }
809
            }
789
           else last_n_n = 1;
810
           else last_n_n = 1;
790
         } else  last_n_n = 0;
-
 
-
 
811
         } else  last_n_n = 0;
791
 
812
        } else cnt = 0;
-
 
813
        if(cnt > 4) cnt = 4;
792
        if(cnt > 5) cnt = 5;
814
//        if(cnt > Poti2 / 40) cnt =  Poti2 / 40;
793
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
815
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
Line 794... Line 816...
794
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
816
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
795
 
817
 
-
 
818
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
796
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
819
        cnt = 1;// + labs(IntegralFehlerNick) / 4096;
-
 
820
 
-
 
821
ausgleichRoll = 0;
797
        cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
822
        if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT)
798
ausgleichRoll = 0;
823
        {
799
        if(IntegralFehlerRoll >  FEHLER_LIMIT2)
824
        if(IntegralFehlerRoll >  FEHLER_LIMIT2)
800
         {
825
         {
801
           if(last_r_p)
826
           if(last_r_p)
802
           {
827
           {
803
            cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
828
            cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
804
            ausgleichRoll = IntegralFehlerRoll / 12;
829
            ausgleichRoll = IntegralFehlerRoll / 8;
-
 
830
            if(ausgleichRoll > 5000) ausgleichRoll = 5000;
805
            if(ausgleichRoll > 5000) ausgleichRoll = 5000;
831
            Mess_IntegralRoll -= ausgleichRoll;
806
//            Mess_IntegralRoll -= ausgleichRoll;
832
//            beeptime = 50;
807
           }
833
           }
808
           else last_r_p = 1;
834
           else last_r_p = 1;
809
         } else  last_r_p = 0;
835
         } else  last_r_p = 0;
810
        if(IntegralFehlerRoll < -FEHLER_LIMIT2)
836
        if(IntegralFehlerRoll < -FEHLER_LIMIT2)
811
         {
837
         {
812
           if(last_r_n)
838
           if(last_r_n)
813
           {
839
           {
814
            cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
840
            cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
815
            ausgleichRoll = IntegralFehlerRoll / 12;
841
            ausgleichRoll = IntegralFehlerRoll / 8;
-
 
842
            if(ausgleichRoll < -5000) ausgleichRoll = -5000;
816
            if(ausgleichRoll < -5000) ausgleichRoll = -5000;
843
            Mess_IntegralRoll -= ausgleichRoll;
817
//            Mess_IntegralRoll -= ausgleichRoll;
844
//            beeptime = 50;
818
           }
845
           }
-
 
846
           else last_r_n = 1;
-
 
847
         } else  last_r_n = 0;
-
 
848
        } else
-
 
849
        {
819
           else last_r_n = 1;
850
         beeptime = 50;
820
         } else  last_r_n = 0;
851
         cnt = 0;
821
 
852
        }
-
 
853
DebugOut.Analog[27] = ausgleichRoll;
-
 
854
        if(cnt > 4) cnt = 4;
822
DebugOut.Analog[27] = ausgleichRoll;
855
//        if(cnt > Poti2 / 40) cnt =  Poti2 / 40;
823
        if(cnt > 5) cnt = 5;
856
 
-
 
857
        if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
824
        if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
858
        if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
Line 825... Line 859...
825
        if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
859
DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
-
 
860
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
-
 
861
 
-
 
862
  }
-
 
863
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
826
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
864
   MittelIntegralNick_Alt = MittelIntegralNick;      
827
 
865
   MittelIntegralRoll_Alt = MittelIntegralRoll;      
828
  }
866
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
829
    IntegralAccNick = 0;
867
    IntegralAccNick = 0;
830
    IntegralAccRoll = 0;
868
    IntegralAccRoll = 0;
Line 961... Line 999...
961
      else  
999
      else  
962
        HoehenReglerAktiv = 1;
1000
        HoehenReglerAktiv = 1;
963
    }
1001
    }
964
    else
1002
    else
965
    {
1003
    {
966
     SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
1004
     SollHoehe = ((int) ExternHoehenValue + (int) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung - 20;
967
     HoehenReglerAktiv = 1;
1005
     HoehenReglerAktiv = 1;
968
    }
1006
    }
Line 969... Line 1007...
969
 
1007
 
970
    if(Notlandung) SollHoehe = 0;
1008
    if(Notlandung) SollHoehe = 0;