Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 123 → Rev 124

/branches/salvo_gierkompass/analog.c
62,6 → 62,8
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
GyroKomp_Int += wert;
GyroKomp_Int2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
/branches/salvo_gierkompass/fc.c
76,7 → 76,9
unsigned char Notlandung = 0;
unsigned char HoehenReglerAktiv = 0;
static int SignalSchlecht = 0;
//Salvo 2.9.2007 Ersatzkompass
volatile long GyroKomp_Int,GyroKomp_Int2;
// Salvo End
float GyroFaktor;
float IntegralFaktor;
 
170,6 → 172,10
KompassStartwert = KompassValue;
GPS_Neutral();
beeptime = 50;
//Salvo 2.9.2007 Ersatzkompass
GyroKomp_Int = 0;
GyroKomp_Int2 = 0;
// Salvo End
}
 
//############################################################################
598,43 → 604,57
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define DRIFT_FAKTOR 3
if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
{
IntegralFehlerNick = IntegralNick2 - IntegralNick;
IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
ZaehlMessungen = 0;
{
IntegralFehlerNick = IntegralNick2 - IntegralNick;
IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
ZaehlMessungen = 0;
// Salvo 1.9.2007 *************************
// Abgleich Roll und Nick Gyro nur, wenn nahezu waagrechte Lage
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
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--;
}
// Abgleich Roll und Nick Gyro vollsteandig nur, wenn nahezu waagrechte Lage, ansonsten abschwaechen
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
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
{
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--;
}
// Salvo End
 
// Salvo 31.8.2007 Abgleich Giergyro nur wenn Kompass aktiv und ok ist ***********************
// Ohne Kompass wird die Pseudo-Gyrodrift durch die Driftkompensation nur verschlimmert
// Ohne Driftkompensation ist die Gierachse wesentlich stabiler
if ((EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (!SignalSchlecht))
{
if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
}
else
{
Mess_Integral_Gier2 = 0;
}
if ((EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (!SignalSchlecht))
{
if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
}
else
{
Mess_Integral_Gier2 = 0;
}
// Salvo End ***********************
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
Mess_Integral_Gier2 = Integral_Gier;
ANALOG_ON; // ADC einschalten
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
Mess_Integral_Gier2 = Integral_Gier;
ANALOG_ON; // ADC einschalten
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
658,18 → 678,18
}
else if ((w < 2 * ACC_WAAGRECHT_LIMIT) && (v < 2 * ACC_WAAGRECHT_LIMIT))
{
Mess_IntegralNick -= tmp_long/8;
Mess_IntegralRoll -= tmp_long/8;
Mess_IntegralNick -= tmp_long/2; //Vorher 8
Mess_IntegralRoll -= tmp_long2/2;
}
else if ((w < 4 * ACC_WAAGRECHT_LIMIT) && (v < 4 * ACC_WAAGRECHT_LIMIT))
{
Mess_IntegralNick -= tmp_long/16;
Mess_IntegralRoll -= tmp_long/16;
Mess_IntegralNick -= tmp_long/4;
Mess_IntegralRoll -= tmp_long2/4;
}
else
{
Mess_IntegralNick -= tmp_long/32;
Mess_IntegralRoll -= tmp_long2/32;
Mess_IntegralNick -= tmp_long/8;
Mess_IntegralRoll -= tmp_long2/8;
}
// Salvo End ***********************
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
746,8 → 766,9
DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
DebugOut.Analog[7] = GasMischanteil;
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = tmp_long;
DebugOut.Analog[10] = tmp_long2;
DebugOut.Analog[9] = GyroKomp_Int;
DebugOut.Analog[10] = GyroKomp_Int2;
 
// DebugOut.Analog[9] = SollHoehe;
// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
// DebugOut.Analog[11] = KompassStartwert;
/branches/salvo_gierkompass/fc.h
33,8 → 33,10
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
//Salvo 2.9.2007 Ersatzkompass
extern volatile long GyroKomp_Int,GyroKomp_Int2;
// Salvo End
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
/branches/salvo_gierkompass/flight_ctrl.aps
1,0 → 0,0
<AVRStudio><MANAGEMENT><ProjectName>flight_ctrl</ProjectName><Created>28-Aug-2007 19:41:41</Created><LastEdit>28-Aug-2007 20:05:42</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>28-Aug-2007 19:41:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>flight_ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Mikrokopter\Flight_Crtl\work\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>flight_ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Programme\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Programme\WinAVR-20070525\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>fc.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002></Files><Workspace><File00000><Position>4 147 978 587</Position><LineCol>190 25</LineCol></File00000><File00001><Position>29 178 1022 619</Position><LineCol>693 0</LineCol></File00001><File00002><Position>-2 107 1402 765</Position><LineCol>85 0</LineCol><State>Maximized</State></File00002></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
<AVRStudio><MANAGEMENT><ProjectName>flight_ctrl</ProjectName><Created>28-Aug-2007 19:41:41</Created><LastEdit>01-Sep-2007 23:33:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>28-Aug-2007 19:41:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>flight_ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Mikrokopter\Flight_Crtl\svn\work\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>flight_ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Programme\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Programme\WinAVR-20070525\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Mikrokopter\Flight_Crtl\svn\work\uart.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\_Settings.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\analog.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\fc.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\gps.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\main.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\menu.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\old_macros.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\printf_P.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\rc.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\Settings.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\timer0.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\twimaster.h</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\main.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\uart.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\analog.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\eeprom.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\fc.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\GPS.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\menu.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\printf_P.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\rc.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\timer0.c</Name><Name>C:\Mikrokopter\Flight_Crtl\svn\work\twimaster.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>fc.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>makefile</FileName><Status>1</Status></File00002></Files><Workspace><File00000><Position>242 165 862 631</Position><LineCol>17 41</LineCol></File00000><File00001><Position>262 81 1402 765</Position><LineCol>681 2</LineCol><State>Maximized</State></File00001><File00002><Position>374 257 1344 691</Position><LineCol>6 22</LineCol></File00002></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/salvo_gierkompass/makefile
4,7 → 4,7
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 03
NEBEN_VERSION = 04
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------