Subversion Repositories FlightCtrl

Rev

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

Rev 921 Rev 927
Line 55... Line 55...
55
#include "main.h"
55
#include "main.h"
56
#include "eeprom.c"
56
#include "eeprom.c"
Line 57... Line 57...
57
 
57
 
58
unsigned char h,m,s;
58
unsigned char h,m,s;
59
volatile unsigned int I2CTimeout = 100;
59
volatile unsigned int I2CTimeout = 100;
-
 
60
volatile int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias;
60
volatile int MesswertNick,MesswertRoll,MesswertGier;
61
int AdNeutralGierBias;  
61
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
62
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
62
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
63
int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
63
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
64
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
64
volatile float NeutralAccZ = 0;
65
volatile float NeutralAccZ = 0;
65
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
66
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
66
long IntegralNick = 0,IntegralNick2 = 0;
67
long IntegralNick = 0,IntegralNick2 = 0;
Line 157... Line 158...
157
        NeutralAccY = 0;
158
        NeutralAccY = 0;
158
        NeutralAccZ = 0;
159
        NeutralAccZ = 0;
159
    AdNeutralNick = 0; 
160
    AdNeutralNick = 0; 
160
        AdNeutralRoll = 0;     
161
        AdNeutralRoll = 0;     
161
        AdNeutralGier = 0;
162
        AdNeutralGier = 0;
-
 
163
    AdNeutralGierBias = 0;
162
    Parameter_AchsKopplung1 = 0;
164
    Parameter_AchsKopplung1 = 0;
163
    Parameter_AchsGegenKopplung1 = 0;
165
    Parameter_AchsGegenKopplung1 = 0;
164
    CalibrierMittelwert();     
166
    CalibrierMittelwert();     
165
    Delay_ms_Mess(100);
167
    Delay_ms_Mess(100);
166
        CalibrierMittelwert();
168
        CalibrierMittelwert();
Line 170... Line 172...
170
     }
172
     }
Line 171... Line 173...
171
 
173
 
172
     AdNeutralNick= AdWertNick;
174
     AdNeutralNick= AdWertNick;
173
         AdNeutralRoll= AdWertRoll;    
175
         AdNeutralRoll= AdWertRoll;    
-
 
176
         AdNeutralGier= AdWertGier;
174
         AdNeutralGier= AdWertGier;
177
     AdNeutralGierBias = AdWertGier;
175
     StartNeutralRoll = AdNeutralRoll;
178
     StartNeutralRoll = AdNeutralRoll;
176
     StartNeutralNick = AdNeutralNick;
179
     StartNeutralNick = AdNeutralNick;
177
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
180
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
178
    {
181
    {
Line 193... Line 196...
193
    Mess_IntegralRoll2 = 0;
196
    Mess_IntegralRoll2 = 0;
194
    Mess_Integral_Gier = 0;    
197
    Mess_Integral_Gier = 0;    
195
    MesswertNick = 0;
198
    MesswertNick = 0;
196
    MesswertRoll = 0;
199
    MesswertRoll = 0;
197
    MesswertGier = 0;
200
    MesswertGier = 0;
-
 
201
 Delay_ms_Mess(100);
198
    StartLuftdruck = Luftdruck;
202
    StartLuftdruck = Luftdruck;
199
    HoeheD = 0;
203
    HoeheD = 0;
200
    Mess_Integral_Hoch = 0;
204
    Mess_Integral_Hoch = 0;
201
    KompassStartwert = KompassValue;
205
    KompassStartwert = KompassValue;
202
    GPS_Neutral();
206
    GPS_Neutral();
Line 216... Line 220...
216
void Mittelwert(void)
220
void Mittelwert(void)
217
//############################################################################
221
//############################################################################
218
{      
222
{      
219
    static signed long tmpl,tmpl2;     
223
    static signed long tmpl,tmpl2;     
220
    MesswertGier = (signed int) AdNeutralGier - AdWertGier;
224
    MesswertGier = (signed int) AdNeutralGier - AdWertGier;
-
 
225
    MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier;
221
    MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
226
    MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
222
    MesswertNick = (signed int) AdWertNick - AdNeutralNick;
227
    MesswertNick = (signed int) AdWertNick - AdNeutralNick;
Line 223... Line 228...
223
 
228
 
224
//DebugOut.Analog[26] = MesswertNick;
229
//DebugOut.Analog[26] = MesswertNick;
Line 235... Line 240...
235
    NaviCntAcc++;
240
    NaviCntAcc++;
236
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
241
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
237
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
242
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
238
            ErsatzKompass +=  MesswertGier;
243
            ErsatzKompass +=  MesswertGier;
239
            Mess_Integral_Gier +=  MesswertGier;
244
            Mess_Integral_Gier +=  MesswertGier;
240
            Mess_Integral_Gier2 += MesswertGier;
245
//            Mess_Integral_Gier2 += MesswertGier;
241
                    if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR;  // 360° Umschlag
246
                    if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR;  // 360° Umschlag
242
                    if(ErsatzKompass < 0)                          ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
247
                    if(ErsatzKompass < 0)                          ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
243
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
248
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
244
      if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
249
      if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
245
         {
250
         {
246
            tmpl = (MesswertGier * Mess_IntegralNick) / 2048L;
251
            tmpl = (MesswertGierBias * Mess_IntegralNick) / 2048L;
247
            tmpl *= Parameter_AchsKopplung1;  //125
252
            tmpl *= Parameter_AchsKopplung1;  //125
248
            tmpl /= 4096L;
253
            tmpl /= 4096L;
249
            tmpl2 = (MesswertGier * Mess_IntegralRoll) / 2048L;
254
            tmpl2 = (MesswertGierBias * Mess_IntegralRoll) / 2048L;
250
            tmpl2 *= Parameter_AchsKopplung1;
255
            tmpl2 *= Parameter_AchsKopplung1;
251
            tmpl2 /= 4096L;
256
            tmpl2 /= 4096L;
252
            if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1;
257
            if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1;
253
         }
258
         }
254
      else  tmpl = tmpl2 = 0;
259
      else  tmpl = tmpl2 = 0;
Line 338... Line 343...
338
//############################################################################
343
//############################################################################
339
// Messwerte beim Ermitteln der Nullage
344
// Messwerte beim Ermitteln der Nullage
340
void CalibrierMittelwert(void)
345
void CalibrierMittelwert(void)
341
//############################################################################
346
//############################################################################
342
{                
347
{                
343
    if(PlatinenVersion >= 12) SucheGyroOffset();
348
    if(PlatinenVersion >= 13) SucheGyroOffset();
344
    // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
349
    // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
345
        ANALOG_OFF;
350
        ANALOG_OFF;
346
        MesswertNick = AdWertNick;
351
        MesswertNick = AdWertNick;
347
        MesswertRoll = AdWertRoll;
352
        MesswertRoll = AdWertRoll;
348
        MesswertGier = AdWertGier;
353
        MesswertGier = AdWertGier;
Line 520... Line 525...
520
                if(modell_fliegt == 250)
525
                if(modell_fliegt == 250)
521
                 {
526
                 {
522
                  NeueKompassRichtungMerken = 1;
527
                  NeueKompassRichtungMerken = 1;
523
                  sollGier = 0;
528
                  sollGier = 0;
524
                  Mess_Integral_Gier = 0;      
529
                  Mess_Integral_Gier = 0;      
525
                  Mess_Integral_Gier2 = 0;
530
//                  Mess_Integral_Gier2 = 0;
526
                 }
531
                 }
527
                } else MikroKopterFlags |= FLAG_FLY;
532
                } else MikroKopterFlags |= FLAG_FLY;
Line 528... Line 533...
528
               
533
               
529
            if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
534
            if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
Line 865... Line 870...
865
    Mess_IntegralNick2 -= IntegralFehlerNick;
870
    Mess_IntegralNick2 -= IntegralFehlerNick;
866
    Mess_IntegralRoll2 -= IntegralFehlerRoll;
871
    Mess_IntegralRoll2 -= IntegralFehlerRoll;
Line 867... Line 872...
867
 
872
 
868
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
873
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
869
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
874
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
870
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) AdNeutralGier++;
875
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; AdNeutralGierBias++; }
Line 871... Line 876...
871
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) AdNeutralGier--;
876
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; AdNeutralGierBias--; }
872
 
877
 
873
DebugOut.Analog[22] = MittelIntegralRoll / 26;
878
DebugOut.Analog[22] = MittelIntegralRoll / 26;
Line 996... Line 1001...
996
     {
1001
     {
997
      KompassSignalSchlecht = 1000;
1002
      KompassSignalSchlecht = 1000;
998
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX))
1003
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX))
999
       {
1004
       {
1000
         NeueKompassRichtungMerken = 1;
1005
         NeueKompassRichtungMerken = 1;
1001
         KompassStartwert = ErsatzKompass;
-
 
1002
        };
1006
        };
1003
     }
1007
     }
1004
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
1008
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
1005
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
1009
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
1006
    sollGier = tmp_int;
1010
    sollGier = tmp_int;