Subversion Repositories FlightCtrl

Rev

Rev 566 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 566 Rev 579
Line 469... Line 469...
469
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
469
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
470
        GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
470
        GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
471
    if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20;
471
    if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20;
472
//Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen
472
//Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen
473
// und dieser dann langsam zwangsweise reduziert
473
// und dieser dann langsam zwangsweise reduziert
474
        if (UBat <= EE_Parameter.UnterspannungsWarnung - 2)     //Unterhalb der Piepser Schwelle aktivieren
474
        if (UBat <= EE_Parameter.UnterspannungsWarnung - 4)     //Unterhalb der Piepser Schwelle aktivieren
475
        {
475
        {
476
                if (ubat_cnt > 1000)
476
                if (ubat_cnt > 1000)
477
                {
477
                {
478
                        ubat_cnt = 0;
478
                        ubat_cnt = 0;
479
                        if (gas_actual > ((gas_mittel*12)/15)) gas_actual--;
479
                        if (gas_actual > ((gas_mittel*12)/15)) gas_actual--;
Line 938... Line 938...
938
             LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
938
             LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
939
            }
939
            }
940
           else last_n_n = 1;
940
           else last_n_n = 1;
941
         } else  last_n_n = 0;
941
         } else  last_n_n = 0;
942
        } else cnt = 0;
942
        } else cnt = 0;
943
//Salvo 11.12.2007
943
//Salvo 26.12.2007
944
                w = (abs(Mittelwert_AccNick));
944
                w = (abs(Mittelwert_AccNick));
945
                v = (abs(Mittelwert_AccRoll));
945
                v = (abs(Mittelwert_AccRoll));
946
                if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen
946
                if  ((w  < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur in annaehend waagrechter Lage nachtrimmen
947
                {
947
                {
948
                if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
948
                if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
949
                if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
949
                if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
950
                if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
950
                if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
951
                }
951
                }
Line 980... Line 980...
980
         } else  last_r_n = 0;
980
         } else  last_r_n = 0;
981
        } else
981
        } else
982
        {
982
        {
983
         cnt = 0;
983
         cnt = 0;
984
        }
984
        }
985
//Salvo 11.12.2007
985
//Salvo 26.12.2007
986
                w = (abs(Mittelwert_AccNick));
-
 
987
                v = (abs(Mittelwert_AccRoll));
-
 
988
                if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen
986
                if  ((w  < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur inannaehernd waagrechter Lage nachtrimmen
989
                {
987
                {
990
                if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
988
                if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
991
                if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
989
                if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
992
                if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
990
                if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
993
             }
991
            }
994
//Salvo End
992
//Salvo End
995
//DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
993
//DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
996
//DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
994
//DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
997
  }
995
  }
998
  else
996
  else
Line 1003... Line 1001...
1003
  if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
1001
  if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
1004
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
1002
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
1005
   MittelIntegralNick_Alt = MittelIntegralNick;      
1003
   MittelIntegralNick_Alt = MittelIntegralNick;      
1006
   MittelIntegralRoll_Alt = MittelIntegralRoll;      
1004
   MittelIntegralRoll_Alt = MittelIntegralRoll;      
1007
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
1005
// +++++++++++++++++++++++++++++++++++++++++++++++++++++     
1008
    IntegralAccNick = 0;
1006
   IntegralAccNick = 0;
1009
    IntegralAccRoll = 0;
1007
   IntegralAccRoll = 0;
1010
    IntegralAccZ = 0;
1008
   IntegralAccZ = 0;
1011
    MittelIntegralNick = 0;
1009
   MittelIntegralNick = 0;
1012
    MittelIntegralRoll = 0;
1010
   MittelIntegralRoll = 0;
1013
    MittelIntegralNick2 = 0;
1011
   MittelIntegralNick2 = 0;
1014
    MittelIntegralRoll2 = 0;
1012
   MittelIntegralRoll2 = 0;
1015
    ZaehlMessungen = 0;
1013
   ZaehlMessungen = 0;
1016
 
-
 
1017
 
-
 
1018
 } // Ende Abgleich
1014
 } // Ende Abgleich
Line 1019... Line 1015...
1019
 
1015
 
-
 
1016
// Salvo Ersatzkompass  und Giergyrokompensation 15.12.2007 **********************
-
 
1017
if ((Kompass_Neuer_Wert > 0)) //nur wenn Kompass einen neuen Wert geliefert hat
1020
        // Salvo Ersatzkompass  und Giergyrokompensation 15.12.2007 **********************
1018
{
-
 
1019
           Kompass_Neuer_Wert = 0;
-
 
1020
   w = (abs(Mittelwert_AccNick));
-
 
1021
   v = (abs(Mittelwert_AccRoll));
-
 
1022
   if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro  nur mit Magnetkompass aktualisieren wenn alles ok
-
 
1023
   {
1021
        if ((Kompass_Neuer_Wert > 0))
1024
        if  ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
1022
        {
-
 
1023
           Kompass_Neuer_Wert = 0;
-
 
1024
           w = (abs(Mittelwert_AccNick));
-
 
1025
           v = (abs(Mittelwert_AccRoll));
-
 
1026
           if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro  nur mit Magnetkompass aktualisieren wenn alles ok
-
 
1027
           {
-
 
1028
                if  ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
-
 
Line 1029... Line 1025...
1029
                 {
1025
        {
-
 
1026
 
-
 
1027
          if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass
-
 
1028
          {
1030
 
1029
                        if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1;
1031
                  if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass
-
 
1032
                        {
-
 
1033
                                if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1;
-
 
1034
                                if (cnt_stickgier_zero > 1) // nur Abgleichen wenn keine Stickbewegung da
1030
                        if (cnt_stickgier_zero > 2) // nur Abgleichen wenn keine Stickbewegung da
1035
                                {
1031
                        {
1036
                                        w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT);
1032
                                w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT);
1037
                                        v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen
1033
                                v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen
1038
                                        if (v <-180) v +=360; // Uberlaufkorrektur
1034
                                if (v <-180) v +=360; // Uberlaufkorrektur
1039
                                        if (v > 180) v -=360; // Uberlaufkorrektur
1035
                                if (v > 180) v -=360; // Uberlaufkorrektur
1040
 
1036
 
1041
                                        v = w -v;  //Differenz Gyro zu Kompass ist der Driftfehler
1037
                                v = w-v;  //Differenz Gyro zu Kompass ist der Driftfehler
1042
 
1038
 
1043
                                        #define GIER_COMP_MAX 4
1039
                                #define GIER_COMP_MAX 8
1044
                                        if (v > GIER_COMP_MAX)  v= GIER_COMP_MAX;
1040
                                if (v > GIER_COMP_MAX)  v= GIER_COMP_MAX;
1045
                                        if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX;
1041
                                if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX;
1046
                                        if (abs(w) > 1)
1042
                                if (abs(w) > 1)
1047
                                        {      
1043
                                {      
1048
                                                GyroGier_Comp           = 0;
1044
                                        GyroGier_Comp           = 0;
1049
                                                gyrogier_kompass        = KompassValue; // Kompasswert merken
-
 
1050
                                                AdNeutralGier           -= v;
1045
                                        gyrogier_kompass        = KompassValue; // Kompasswert merken
1051
                                        }
1046
                                        AdNeutralGier           -= v;
-
 
1047
                                }
1052
                                }
1048
                        }
1053
                        }
1049
          }
1054
                  else
1050
          else
1055
                  {
1051
          {
1056
                        gyrogier_kompass        = KompassValue; // Kompasswert merken
1052
                gyrogier_kompass        = KompassValue; // Kompasswert merken
1057
                        cnt_stickgier_zero      = 0;
1053
                cnt_stickgier_zero      = 0;
1058
                        GyroGier_Comp = 0;
1054
                GyroGier_Comp = 0;
1059
                  }
1055
          }
1060
 
1056
 
1061
                  magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet 
1057
          magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet 
1062
                  GyroKomp_Int = (GyroKomp_Int )/(long)GYROKOMP_INC_GRAD_DEFAULT;
1058
          GyroKomp_Int = (GyroKomp_Int )/(long)GYROKOMP_INC_GRAD_DEFAULT;
1063
 
1059
 
1064
                  w = KompassValue - GyroKomp_Int;
1060
          w = KompassValue - GyroKomp_Int;
1065
                  if ((w > 0) && (w < 180))
1061
          if ((w > 0) && (w < 180))
1066
                  {
1062
          {
1067
                   ++GyroKomp_Int;
1063
           ++GyroKomp_Int;
1068
                  }
1064
          }
1069
                  else if ((w > 0) && (w >= 180))
1065
          else if ((w > 0) && (w >= 180))
1070
                  {
1066
          {
1071
                   --GyroKomp_Int;
1067
           --GyroKomp_Int;
1072
                  }
1068
          }
1073
                  else if ((w < 0) && (w >= -180))
1069
          else if ((w < 0) && (w >= -180))
1074
                  {
1070
          {
1075
                   --GyroKomp_Int;
1071
           --GyroKomp_Int;
1076
                  }
1072
          }
1077
                  else if ((w < 0) && (w < -180))
1073
          else if ((w < 0) && (w < -180))
1078
                  {
1074
          {
1079
                   ++GyroKomp_Int;
1075
           ++GyroKomp_Int;
1080
                  }
1076
          }
1081
                  if (GyroKomp_Int < 0)  GyroKomp_Int = GyroKomp_Int + 360L;
1077
          if (GyroKomp_Int < 0)  GyroKomp_Int = GyroKomp_Int + 360L;
1082
                  GyroKomp_Int = (GyroKomp_Int%360L) * (long)GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
1078
          GyroKomp_Int = (GyroKomp_Int%360L) * (long)GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
1083
                 }
1079
        }
1084
           }
1080
   }
1085
           else
1081
   else //Kompassfehler
1086
           {
1082
   {
1087
            magkompass_ok = 0;
1083
    magkompass_ok = 0;
1088
                GyroGier_Comp = 0;
1084
        GyroGier_Comp = 0;
1089
      }
1085
   }
1090
        Kompass_Value_Old       =       KompassValue;
1086
   Kompass_Value_Old    =       KompassValue;
Line 1091... Line 1087...
1091
        }
1087
}
1092
// Salvo End *************************
1088
// Salvo End *************************
1093
 
1089
 
Line 1205... Line 1201...
1205
        DebugOut.Analog[25] =  GPS_Roll;
1201
        DebugOut.Analog[25] =  GPS_Roll;
1206
        DebugOut.Analog[26] =  gps_rel_act_position.utm_east; //in 10cm ausgeben
1202
        DebugOut.Analog[26] =  gps_rel_act_position.utm_east; //in 10cm ausgeben
1207
        DebugOut.Analog[27] =  gps_rel_act_position.utm_north;
1203
        DebugOut.Analog[27] =  gps_rel_act_position.utm_north;
1208
        DebugOut.Analog[28] =  gps_rel_act_position.utm_alt;
1204
        DebugOut.Analog[28] =  gps_rel_act_position.utm_alt;
1209
        DebugOut.Analog[29] =  gps_state + (gps_sub_state*10)+(50*gps_cmd);
1205
        DebugOut.Analog[29] =  gps_state + (gps_sub_state*10)+(50*gps_cmd);
1210
        DebugOut.Analog[30] =  GPS_dist_2trgt;
1206
        DebugOut.Analog[30] =  dist_flown;
-
 
1207
        DebugOut.Analog[31] =  (int) dist_2home;
-
 
1208
//      DebugOut.Analog[31] =  (int) GPS_hdng_abs_2trgt;
1211
        DebugOut.Analog[31] =  (int) GyroGier_Comp;
1209
//      DebugOut.Analog[31] =  (int) GyroGier_Comp;
1212
/*    DebugOut.Analog[16] = motor_rx[0];
1210
/*    DebugOut.Analog[16] = motor_rx[0];
1213
    DebugOut.Analog[17] = motor_rx[1];
1211
    DebugOut.Analog[17] = motor_rx[1];
1214
    DebugOut.Analog[18] = motor_rx[2];
1212
    DebugOut.Analog[18] = motor_rx[2];
1215
    DebugOut.Analog[19] = motor_rx[3];
1213
    DebugOut.Analog[19] = motor_rx[3];
1216
    DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3];
1214
    DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3];