Subversion Repositories FlightCtrl

Rev

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

Rev 744 Rev 805
Line 57... Line 57...
57
unsigned char h,m,s;
57
unsigned char h,m,s;
58
volatile unsigned int I2CTimeout = 100;
58
volatile unsigned int I2CTimeout = 100;
59
volatile int MesswertNick,MesswertRoll,MesswertGier;
59
volatile int MesswertNick,MesswertRoll,MesswertGier;
60
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
60
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
61
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
61
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
-
 
62
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
62
volatile float NeutralAccZ = 0;
63
volatile float NeutralAccZ = 0;
63
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
64
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
64
long IntegralNick = 0,IntegralNick2 = 0;
65
long IntegralNick = 0,IntegralNick2 = 0;
65
long IntegralRoll = 0,IntegralRoll2 = 0;
66
long IntegralRoll = 0,IntegralRoll2 = 0;
66
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
67
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
Line 211... Line 212...
211
        Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
212
        Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
212
        Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L;
213
        Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L;
213
        Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
214
        Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
214
    IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
215
    IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
215
    IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
216
    IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
-
 
217
    NaviAccNick    += AdWertAccNick;
-
 
218
    NaviAccRoll    += AdWertAccRoll;
-
 
219
    NaviCntAcc++;
216
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
220
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
217
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
221
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
218
            ErsatzKompass +=  MesswertGier;
222
            ErsatzKompass +=  MesswertGier;
219
            Mess_Integral_Gier +=  MesswertGier;
223
            Mess_Integral_Gier +=  MesswertGier;
220
            Mess_Integral_Gier2 += MesswertGier;
224
            Mess_Integral_Gier2 += MesswertGier;
Line 595... Line 599...
595
    int tmp_int;
599
    int tmp_int;
596
        static int stick_nick,stick_roll;
600
        static int stick_nick,stick_roll;
597
    ParameterZuordnung();
601
    ParameterZuordnung();
598
    stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
602
    stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
599
    stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
603
    stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
600
    StickNick = stick_nick - GPS_Nick;
604
    StickNick = stick_nick - (GPS_Nick + GPS_Nick2);
601
//    StickNick  = (StickNick  * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; 
605
//    StickNick  = (StickNick  * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; 
Line 602... Line 606...
602
 
606
 
603
    stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
607
    stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
604
    stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
608
    stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
Line 605... Line 609...
605
    StickRoll = stick_roll - GPS_Roll;
609
    StickRoll = stick_roll - (GPS_Roll + GPS_Roll2);
Line 606... Line 610...
606
 
610
 
607
//    StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
611
//    StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
Line 963... Line 967...
963
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
967
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
964
       v = abs(IntegralRoll /512);
968
       v = abs(IntegralRoll /512);
965
//v /= 4;
969
//v /= 4;
966
//w /= 4;
970
//w /= 4;
967
       if(v > w) w = v; // grösste Neigung ermitteln
971
       if(v > w) w = v; // grösste Neigung ermitteln
968
       korrektur = w + 8;
972
       korrektur = w + 4;
969
       if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht)    
973
       if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht)    
970
        {
974
        {
971
         KompassStartwert = KompassValue;
975
         KompassStartwert = KompassValue;
972
         NeueKompassRichtungMerken = 0;
976
         NeueKompassRichtungMerken = 0;
973
        }
977
        }
-
 
978
 
-
 
979
       fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
-
 
980
       ErsatzKompass += (fehler * 8);// / korrektur;
-
 
981
//           DebugOut.Analog[10] = fehler;
974
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
982
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
975
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
983
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
976
       if(w > 0)
984
       if(w > 0)
977
        {
985
        {
978
          if(!KompassSignalSchlecht)
986
          if(!KompassSignalSchlecht)
979
          {
987
          {
980
           fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
-
 
981
           GierGyroFehler += fehler;
988
           GierGyroFehler += fehler;
982
//           DebugOut.Analog[10] = fehler;
-
 
983
           ErsatzKompass += (fehler * 16) / korrektur;
-
 
984
           v = (KompassRichtung * w) / 32;  // nach Kompass ausrichten
989
           v = (KompassRichtung * w) / 32;  // nach Kompass ausrichten
985
           w = Parameter_KompassWirkung;
990
           w = Parameter_KompassWirkung;
986
           if(v > w) v = w; // Begrenzen
991
           if(v > w) v = w; // Begrenzen
987
           else
992
           else
988
           if(v < -w) v = -w;
993
           if(v < -w) v = -w;
Line 998... Line 1003...
998
//  Debugwerte zuordnen
1003
//  Debugwerte zuordnen
999
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1004
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1000
  if(!TimerWerteausgabe--)
1005
  if(!TimerWerteausgabe--)
1001
   {
1006
   {
1002
    TimerWerteausgabe = 24;
1007
    TimerWerteausgabe = 24;
-
 
1008
 
1003
    DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
1009
    DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
1004
    DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
1010
    DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
1005
    DebugOut.Analog[2] = Mittelwert_AccNick;
1011
    DebugOut.Analog[2] = Mittelwert_AccNick;
1006
    DebugOut.Analog[3] = Mittelwert_AccRoll;
1012
    DebugOut.Analog[3] = Mittelwert_AccRoll;
1007
    DebugOut.Analog[4] = MesswertGier;
1013
    DebugOut.Analog[4] = MesswertGier;
1008
    DebugOut.Analog[5] = HoehenWert;
1014
    DebugOut.Analog[5] = HoehenWert;
1009
    DebugOut.Analog[6] =(Mess_Integral_Hoch / 512);
1015
    DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
1010
    DebugOut.Analog[8] = KompassValue;
1016
    DebugOut.Analog[8] = KompassValue;
1011
    DebugOut.Analog[9] = UBat;
1017
    DebugOut.Analog[9] = UBat;
1012
    DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR;  
1018
    DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR;  
1013
    DebugOut.Analog[10] = SenderOkay;
1019
    DebugOut.Analog[10] = SenderOkay;
1014
    DebugOut.Analog[16] = Mittelwert_AccHoch;
1020
    DebugOut.Analog[16] = Mittelwert_AccHoch;
Line 1017... Line 1023...
1017
    DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
1023
    DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
Line 1018... Line 1024...
1018
 
1024
 
1019
    DebugOut.Analog[30] = GPS_Nick;
1025
    DebugOut.Analog[30] = GPS_Nick;
Line -... Line 1026...
-
 
1026
    DebugOut.Analog[31] = GPS_Roll;
-
 
1027
 
-
 
1028
/*    DebugOut.Analog[19] += (DebugOut.Analog[1] - Mittelwert_AccRoll)/32;
-
 
1029
    DebugOut.Analog[19] -= DebugOut.Analog[19]/32;
-
 
1030
    if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++;
-
 
1031
GPS_Roll2 = (1 * GPS_Roll + ((DebugOut.Analog[19] / 16) * Poti3) / 32) / 2;
-
 
1032
 
-
 
1033
    DebugOut.Analog[20] += (DebugOut.Analog[0] - Mittelwert_AccNick)/32;
-
 
1034
    DebugOut.Analog[20] -= DebugOut.Analog[20]/32;
-
 
1035
    if(DebugOut.Analog[20] > 0) DebugOut.Analog[20]--; else DebugOut.Analog[20]++;
-
 
1036
GPS_Nick2 = (1 * GPS_Roll + ((DebugOut.Analog[20] / 16) * Poti3) / 32) / 2;
-
 
1037
*/
-
 
1038
//GPS_Nick = (GPS_Nick + (DebugOut.Analog[20] * Poti3) / 32) / 2;
-
 
1039
 
-
 
1040
 
-
 
1041
//    DebugOut.Analog[19] -= DebugOut.Analog[19]/128;
1020
    DebugOut.Analog[31] = GPS_Roll;
1042
//    if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++;
1021
 
1043
 
1022
/*    DebugOut.Analog[16] = motor_rx[0];
1044
/*    DebugOut.Analog[16] = motor_rx[0];
1023
    DebugOut.Analog[17] = motor_rx[1];
1045
    DebugOut.Analog[17] = motor_rx[1];
1024
    DebugOut.Analog[18] = motor_rx[2];
1046
    DebugOut.Analog[18] = motor_rx[2];
Line 1144... Line 1166...
1144
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1166
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1145
// Nick-Achse
1167
// Nick-Achse
1146
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1168
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1147
    DiffNick = MesswertNick - StickNick;        // Differenz bestimmen
1169
    DiffNick = MesswertNick - StickNick;        // Differenz bestimmen
1148
    if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung
1170
    if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung
1149
//    DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen
-
 
1150
//    if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung
-
 
Line 1151... Line 1171...
1151
 
1171
 
1152
    else  SummeNick += DiffNick; // I-Anteil bei HH 
1172
    else  SummeNick += DiffNick; // I-Anteil bei HH 
1153
    if(SummeNick >  16000) SummeNick =  16000;
1173
    if(SummeNick >  16000) SummeNick =  16000;
1154
    if(SummeNick < -16000) SummeNick = -16000;
1174
    if(SummeNick < -16000) SummeNick = -16000;
Line 1172... Line 1192...
1172
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1192
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1173
// Roll-Achse
1193
// Roll-Achse
1174
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1194
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1175
        DiffRoll = MesswertRoll - StickRoll;    // Differenz bestimmen
1195
        DiffRoll = MesswertRoll - StickRoll;    // Differenz bestimmen
1176
    if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - StickRoll;// I-Anteil bei Winkelregelung
1196
    if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - StickRoll;// I-Anteil bei Winkelregelung
1177
//      DiffRoll = MesswertRoll - (StickRoll  - GPS_Roll);      // Differenz bestimmen
-
 
1178
//    if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll  - GPS_Roll);// I-Anteil bei Winkelregelung
-
 
Line 1179... Line 1197...
1179
 
1197
 
1180
    else                 SummeRoll += DiffRoll;  // I-Anteil bei HH
1198
    else                 SummeRoll += DiffRoll;  // I-Anteil bei HH
1181
    if(SummeRoll >  16000) SummeRoll =  16000;
1199
    if(SummeRoll >  16000) SummeRoll =  16000;
1182
    if(SummeRoll < -16000) SummeRoll = -16000;
1200
    if(SummeRoll < -16000) SummeRoll = -16000;