Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 166 → Rev 167

/branches/salvo_gps/GPS.c
283,8 → 283,10
//Zentrale Statemachine fuer alle GPS relevanten Regelungsablauefe
short int GPS_CRTL(short int cmd)
{
static unsigned int cnt; //Zaehler fuer diverse Verzoegerungen
static unsigned int cnt; //Zaehler fuer diverse Verzoegerungen
static int int_east,int_north; //Integrierer
static signed int dist_north,dist_east;
int diff_east,diff_north; // Differenzierer (Differenz zum vorhergehenden x bzw. y Wert)
int n;
long int dist;
switch (cmd)
349,18 → 351,22
return (GPS_STST_OK);
break;
 
case GPS_CRTL_HOLD_ACTIVE: // Hier werden die Daten fuer Nick und Roll errechnet
case GPS_CRTL_HOLD_ACTIVE: // Hier werden die Daten fuer Nick und Roll errechnet
if (gps_updte_flag == 1) //nur wenn neue GPS Daten vorliegen
{
gps_updte_flag = 0;
// ab hier wird geregelt
signed int dist_north,dist_east;
 
diff_east = -dist_east; //Alten Wert schon mal abziehen
diff_north = -dist_north;
dist_east = gps_rel_hold_position.utm_east - gps_rel_act_position.utm_east;
dist_north = gps_rel_hold_position.utm_north - gps_rel_act_position.utm_north;
int_east += dist_east;
int_north += dist_north;
diff_east += dist_east; // Differenz zur vorhergehenden East Position
diff_north += dist_north; // Differenz zur vorhergehenden North Position
 
#define GPSINT_MAX 1000
#define GPSINT_MAX 2048 //neuer Wert ab 25.9.2007 Begrenzung
if ((abs(int_east) > GPSINT_MAX) || (abs(int_north)> GPSINT_MAX)) //Bei zu hohem Wert Integrator auf Wert halten
{
int_east -= dist_east;
367,15 → 373,15
int_north -= dist_north;
}
#define DIST_MAX 200 //neu ab 19.9. 1900 Begrenzung
#define DIST_MAX 100 //neuer Wert ab 24.9.2007 Begrenzung
if (dist_east > DIST_MAX) dist_east = DIST_MAX;
if (dist_east <-DIST_MAX) dist_east = -DIST_MAX;
if (dist_north > DIST_MAX) dist_north = DIST_MAX;
if (dist_north <-DIST_MAX) dist_north = -DIST_MAX;
 
//PI Regler
gps_reg_x = ((int_east * Parameter_UserParam1)/16) + ((dist_east * Parameter_UserParam2)/8); // P+I Anteil
gps_reg_y = ((int_north * Parameter_UserParam1)/16) + ((dist_north * Parameter_UserParam2)/8); // P+I Anteil
//PID Regler
gps_reg_x = ((int_east * Parameter_UserParam1)/32) + ((dist_east * Parameter_UserParam2)/2)+ ((diff_east * Parameter_UserParam3)/2); //
gps_reg_y = ((int_north * Parameter_UserParam1)/32) + ((dist_north * Parameter_UserParam2)/2)+ ((diff_north * Parameter_UserParam3)/2); // I + P +D Anteil Y Achse
 
//Richtung bezogen auf Nordpol bestimmen
GPS_hdng_abs_2trgt = arctan_i((long)gps_reg_x,(long)gps_reg_y);
387,7 → 393,7
// Relative Richtung in bezug auf Nordachse des Kopters errechen
n= GyroKomp_Int/GYROKOMP_INC_GRAD_DEFAULT;
GPS_hdng_rel_2trgt = GPS_hdng_abs_2trgt - n;
if ((GPS_hdng_rel_2trgt >180) && (GPS_hdng_abs_2trgt >=180))GPS_hdng_rel_2trgt = GPS_hdng_rel_2trgt-360;
if ((GPS_hdng_rel_2trgt >180) && (GPS_hdng_abs_2trgt >=180)) GPS_hdng_rel_2trgt = GPS_hdng_rel_2trgt-360;
else if (GPS_hdng_rel_2trgt >180) GPS_hdng_rel_2trgt = 360 - GPS_hdng_rel_2trgt;
else if (GPS_hdng_rel_2trgt <-180) GPS_hdng_rel_2trgt = 360 + GPS_hdng_rel_2trgt;
/branches/salvo_gps/README_Gps.txt
1,6 → 1,6
*********************************************************************
GPS Implementierung von Peter Muehlenbrock ("Salvo") fuer Mikrokopter/FlightCrtl
Stand 19.9.2007
Stand 25.9.2007
Verwendung der SW ohne Gewaehr. Siehe auch die Lizenzbedingungen in den Files gps.c, math.c
 
*********************************************************************
26,16 → 26,16
Alle Einstellungen beziehen sich auf AVR Studio von Atmel und den WIN_AVR Compiler.
 
Parametrierung:
DER GPS Hold Regler ist ein PI Regler, der ueber die UserParameter1 und 2 gesteuert wird.
UserParameter1 beschreibt den I-Anteil, UserParameter2 den P Anteil.
Hier kann gespielt werden. Wenn beide 0 sind, ist der Regler deaktiviert.
Standardwerte sind 16 fuer Parameter1 und 64 fuer Parameter 2.
Der GPS Hold Regler ist ein PID Regler, der ueber die UserParameter1(I), 2(P) und D(3) gesteuert wird.
UserParameter1 beschreibt den I-Anteil, UserParameter2 den P Antei, UserParameter3 den D Anteil.
Hier kann gespielt werden. Wenn alle 0 sind, ist der Regler deaktiviert.
Standardwerte sind 1 fuer Parameter1, 32 fuer Parameter 2 und 4 fuer Parameter 3.
 
Voraussetzungen für GPS_Hold:
Neben den genannten HW und SW Voraussetzungen muß beim Kalibrieren das GPS MOdul bereits Positions
daten liefern. Nur dann wird die Home Position abgespeichert und nur dann wird GPS_Hold aktiviert.
Kenntlich gemacht wird dies durch einen etwas laengeren Piepser nach dem Kalibrieren.
Das GPS Aktiv Flag im Setting muss aktiviert sein. Eine Ausrichtung des Kopters nach Nord etc ist nicht erforderlich.
Das GPS Aktiv Flag im Setting muss aktiviert sein. Eine Ausrichtung des Kopters nach Nord etc. ist nicht erforderlich.
 
Aktivierung GPS_Hold im Flug:
Wenn alle genannten Voraussetzungen erfüllt sind, wird GPS Hold im Flug automatisch aktiviert, sobald der Nick und Roll Stick
45,7 → 45,7
GPS_Hold regelt nur horizontale Abweichungen, keine Hoehe.
Der Magnetkompass wird nur in waagrechter Lage dazu benutzt einen
internen aus dem Giergyro ermittelten "Ersatz"kompasswert nach zu kalibrieren. Daher funktioniert die
bestimmung der Kopterausrichtung in jeder Lebenslage, sofern nur ab und zu der Magnetkompass in die waagrechte Lage kommt.
Bstimmung der Kopterausrichtung in jeder Lebenslage, sofern nur ab und zu der Magnetkompass in die waagrechte Lage kommt.
Ein 3D Kompass ist damit überfluessig.
 
Bekannte Maengel:
/branches/salvo_gps/fc.c
317,7 → 317,7
EE_Parameter.Stick_P = 2; //2 // Wert : 1-6
EE_Parameter.Stick_D = 4; //8 // Wert : 0-64
EE_Parameter.Gier_P = 16; // Wert : 1-20
EE_Parameter.Gas_Min = 20; // Wert : 0-32
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 64; // Wert : 0-250
360,7 → 360,7
EE_Parameter.Stick_P = 2; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 16; // Wert : 1-20
EE_Parameter.Gas_Min = 20; // Wert : 0-32
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 64; // Wert : 0-250
/branches/salvo_gps/fc.h
24,7 → 24,7
 
extern unsigned char Parameter_UserParam1 ;
extern unsigned char Parameter_UserParam2 ;
 
extern unsigned char Parameter_UserParam3 ;
// Salvo End
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
/branches/salvo_gps/gps.h
96,5 → 96,5
#define GPS_STST_ERR 2 // Fehler
 
// GPS Lageregler
#define GPS_NICKROLL_MAX 15 //Maximaler Einfluss des GPS Lagereglers auf Nick und Roll
#define GPS_NICKROLL_MAX 20 //Maximaler Einfluss des GPS Lagereglers auf Nick und Roll