Subversion Repositories FlightCtrl

Rev

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

Rev 890 Rev 891
Line 69... Line 69...
69
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
69
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
70
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
70
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
71
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
71
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
72
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
72
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
73
volatile long Mess_Integral_Hoch = 0;
73
volatile long Mess_Integral_Hoch = 0;
-
 
74
 
74
volatile int  KompassValue = 0;
75
int  KompassValue = 0;
75
volatile int  KompassStartwert = 0;
76
int  KompassStartwert = 0;
76
volatile int  KompassRichtung = 0;
77
int  KompassRichtung = 0;
-
 
78
uint8_t updKompass;
-
 
79
 
77
unsigned int  KompassSignalSchlecht = 500;
80
unsigned int  KompassSignalSchlecht = 500;
78
unsigned char  MAX_GAS,MIN_GAS;
81
unsigned char  MAX_GAS,MIN_GAS;
79
unsigned char Notlandung = 0;
82
unsigned char Notlandung = 0;
80
unsigned char HoehenReglerAktiv = 0;
83
unsigned char HoehenReglerAktiv = 0;
81
unsigned char TrichterFlug = 0;
84
unsigned char TrichterFlug = 0;
Line 156... Line 159...
156
               
159
               
157
        acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
160
        acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
158
        acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
161
        acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
Line -... Line 162...
-
 
162
        acc_neutral.Z = Aktuell_az;
-
 
163
       
-
 
164
        Piep(2);
-
 
165
        while (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100)       //Warten, bis Benutzer den Kopter neu ausgerichtet hat
-
 
166
       
-
 
167
        Delay_ms_Mess(100);
159
        acc_neutral.Z = Aktuell_az;
168
        acc_neutral.compass = Aktuell_az;
160
       
169
       
Line 161... Line 170...
161
        eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct));
170
        eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct));
162
}
171
}
Line 985... Line 994...
985
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
994
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
986
//  Kompass
995
//  Kompass
987
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
996
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
988
//DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll);
997
//DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll);
Line 989... Line 998...
989
 
998
 
990
    if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
999
        if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
991
     {
1000
        {
-
 
1001
                int w,v,r,fehler,korrektur;
-
 
1002
               
-
 
1003
                if (!updKompass--)              // Aufruf mit ~20 Hz
-
 
1004
                {
-
 
1005
                        updKompass = 25;
-
 
1006
                        KompassValue = heading_MM3();
-
 
1007
                        KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
992
       int w,v,r,fehler,korrektur;
1008
                }
993
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
1009
                        w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
994
       v = abs(IntegralRoll /512);
1010
                        v = abs(IntegralRoll /512);
995
       if(v > w) w = v; // grösste Neigung ermitteln
1011
                        if(v > w) w = v; // grösste Neigung ermitteln
996
       korrektur = w / 8 + 1;
1012
                        korrektur = w / 8 + 1;
997
       if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht)    
1013
                        if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht)    
998
        {
1014
                        {
999
         beeptime = 200;
1015
                                beeptime = 200;
1000
//         KompassStartwert = KompassValue;
1016
                                //KompassStartwert = KompassValue;
1001
         KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
1017
                                KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
1002
         NeueKompassRichtungMerken = 0;
1018
                                NeueKompassRichtungMerken = 0;
1003
        }
1019
                        }
1004
       fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
1020
                        fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
1005
       ErsatzKompass += (fehler * 8) / korrektur;
1021
                        ErsatzKompass += (fehler * 8) / korrektur;
1006
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
1022
                        w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
1007
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1023
                        w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1008
       if(w > 0)
1024
                        if(w > 0)
1009
        {
1025
                        {
1010
          if(!KompassSignalSchlecht)
1026
                                if(!KompassSignalSchlecht)
1011
          {
1027
                                {
1012
           GierGyroFehler += fehler;
1028
                                        GierGyroFehler += fehler;
1013
           v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;  
1029
                                        v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;  
1014
           r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
1030
                                        r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
1015
//           r = KompassRichtung;
1031
                                        //r = KompassRichtung;
1016
           v = (r * w) / v;  // nach Kompass ausrichten
1032
                                        v = (r * w) / v;  // nach Kompass ausrichten
1017
           w = 3 * Parameter_KompassWirkung;
1033
                                        w = 3 * Parameter_KompassWirkung;
1018
           if(v > w) v = w; // Begrenzen
-
 
1019
           else
1034
                                        if(v > w) v = w; // Begrenzen
1020
           if(v < -w) v = -w;
1035
                                        else if(v < -w) v = -w;
1021
           Mess_Integral_Gier += v;
1036
                                        Mess_Integral_Gier += v;
1022
          }
1037
                                }
1023
          if(KompassSignalSchlecht) KompassSignalSchlecht--;
1038
                        if(KompassSignalSchlecht) KompassSignalSchlecht--;
1024
        }  
1039
                        }  
-
 
1040
        else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek
1025
        else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek
1041
        }
1026
       
-
 
1027
     }
1042
 
Line 1028... Line 1043...
1028
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1043
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1029
 
1044
 
1030
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1045
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++