Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 167 → Rev 182

/branches/salvo_gps/fc.c
448,7 → 448,6
{
ROT_ON; //led blitzen lassen
}
 
//******PROVISORISCH***************
GRN_ON;
 
641,27 → 640,31
w = (abs(Mittelwert_AccNick));
v = (abs(Mittelwert_AccRoll));
ANALOG_ON; // ADC einschalten
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT))
{
if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
}
else if ((w < 2*ACC_WAAGRECHT_LIMIT) && (v < 2*ACC_WAAGRECHT_LIMIT)) // langsamer kompensieren, weil ACC Werte unsicherer sind, was die Neigung angeht
// Abgleich Roll und Nick Gyro nur wenn auch keine wilden Manoever stattfinden 26.9.2007
if ((abs(StickNick - GPS_Nick) < 30) && (abs(StickRoll - GPS_Roll) < 30))
{
if(IntegralFehlerNick > 500*2/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500*2/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500*2/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500*2/DRIFT_FAKTOR) AdNeutralRoll--;
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT))
{
if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
}
else if ((w < 2*ACC_WAAGRECHT_LIMIT) && (v < 2*ACC_WAAGRECHT_LIMIT)) // langsamer kompensieren, weil ACC Werte unsicherer sind, was die Neigung angeht
{
if(IntegralFehlerNick > 500*2/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500*2/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500*2/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500*2/DRIFT_FAKTOR) AdNeutralRoll--;
}
else // noch langsamer kompensieren, weil ACC Werte unsicherer sind, was die Neigung angeht
{
if(IntegralFehlerNick > 500*4/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500*4/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500*4/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500*4/DRIFT_FAKTOR) AdNeutralRoll--;
}
}
else // noch langsamer kompensieren, weil ACC Werte unsicherer sind, was die Neigung angeht
{
if(IntegralFehlerNick > 500*4/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500*4/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500*4/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500*4/DRIFT_FAKTOR) AdNeutralRoll--;
}
// Salvo End
 
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
683,6 → 686,7
 
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
// Salvo 1.9.2007 Volle Korrektur nur wenn waagrechte Lage, sonst abgeschawecht *****************
 
w = (abs(Mittelwert_AccNick));
v = (abs(Mittelwert_AccRoll));
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT))
723,7 → 727,7
// Salvo End *************************
ANALOG_ON; // ADC einschalten
 
// Salvo Ersatzkompass 8.9.2007 **********************
// Salvo Ersatzkompass 26.9.2007 **********************
if ((Kompass_Neuer_Wert > 0))
{
Kompass_Neuer_Wert = 0;
731,7 → 735,7
v = (abs(Mittelwert_AccRoll));
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass nur mit Magnetkompass aktualisieren wenn alle sok
{
if ((abs(KompassValue - Kompass_Value_Old)) < 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
{
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet
754,8 → 758,7
++GyroKomp_Int;
}
if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360;
 
GyroKomp_Int = (GyroKomp_Int%360) * GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
GyroKomp_Int = (GyroKomp_Int%360) * GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
ANALOG_ON; // ADC einschalten
}
}