Subversion Repositories FlightCtrl

Rev

Rev 153 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 153 Rev 156
Line 11... Line 11...
11
*/
11
*/
12
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
13
Peter Muehlenbrock
13
Peter Muehlenbrock
14
Auswertung der Daten vom GPS im ublox Format
14
Auswertung der Daten vom GPS im ublox Format
15
Regelung fuer GPS noch nicht implementiert
15
Regelung fuer GPS noch nicht implementiert
16
Stand 11.9.2007
16
Stand 14.9.2007
17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18
*/
18
*/
19
#include "main.h"
19
#include "main.h"
-
 
20
//#include "gps.h"
Line 20... Line 21...
20
 
21
 
21
// Defines fuer ublox Messageformat um Auswertung zu steuern
22
// Defines fuer ublox Messageformat um Auswertung zu steuern
22
#define                 UBLOX_IDLE      0
23
#define                 UBLOX_IDLE      0
23
#define                 UBLOX_SYNC1     1
24
#define                 UBLOX_SYNC1     1
Line 49... Line 50...
49
static unsigned int ptr_payload_data_end;
50
static unsigned int ptr_payload_data_end;
Line 50... Line 51...
50
 
51
 
51
static uint8_t *ptr_payload_data;
52
static uint8_t *ptr_payload_data;
Line -... Line 53...
-
 
53
static uint8_t *ptr_pac_status;
Line 52... Line 54...
52
static uint8_t *ptr_pac_status;
54
 
53
 
55
short int Get_GPS_data(void);
54
 
56
 
Line 55... Line 57...
55
NAV_POSUTM_t actual_pos;    // Aktuelle Nav Daten werden hier im ublox Format abgelegt
57
NAV_POSUTM_t actual_pos;    // Aktuelle Nav Daten werden hier im ublox Format abgelegt
-
 
58
NAV_STATUS_t actual_status; // Aktueller Nav Status
-
 
59
NAV_VELNED_t actual_speed;  // Aktueller Geschwindigkeits und Richtungsdaten
Line -... Line 60...
-
 
60
 
56
NAV_STATUS_t actual_status; // Aktueller Nav Status
61
GPS_ABS_POSITION_t              gps_act_position;               // Alle wichtigen Daten zusammengefasst
57
NAV_VELNED_t actual_speed;  // Aktueller Geschwindigkeits und Richtungsdaten
62
GPS_ABS_POSITION_t              gps_home_position;      // Die Startposition, beim Kalibrieren ermittelt
58
 
63
GPS_REL_POSITION_t              gps_rel_act_position;   // Die aktuelle relative Position bezogen auf Home Position
59
GPS_POSITION_t gps_act_position;  // Alle wichtigen Daten zusammengefasst
64
 
60
 
65
// Initialisierung
61
void GPS_Neutral(void) // Initialisierung
66
void GPS_Neutral(void)
-
 
67
{
62
{
68
        ublox_msg_state                 = UBLOX_IDLE;
Line 63... Line 69...
63
        ublox_msg_state = UBLOX_IDLE;
69
        actual_pos.status               = 0;
-
 
70
        actual_speed.status             = 0;
64
        actual_pos.status= 0;
71
        actual_status.status    = 0;
-
 
72
        gps_home_position.status= 0; // Noch keine gueltige Home Position
-
 
73
}
-
 
74
 
-
 
75
// Home Position sichern falls Daten verfuegbar sind. 
-
 
76
void GPS_Save_Home(void)
-
 
77
{
-
 
78
        short int n;
-
 
79
        n = Get_GPS_data();
-
 
80
        if (n == 0)   // Gueltige  und aktuelle Daten ?   
-
 
81
        {
-
 
82
                // Neue GPS Daten liegen vor
-
 
83
//                beeptime                                              = 500; // Piepsen um korrekte Home Position anzuzeigen
-
 
84
//                gps_act_position.status               = 0;
-
 
85
                  gps_home_position.utm_east    = gps_act_position.utm_east;   
-
 
86
                  gps_home_position.utm_north   = gps_act_position.utm_north;  
-
 
87
                  gps_home_position.utm_alt             = gps_act_position.utm_alt;
-
 
88
                  gps_home_position.status              = 1; // Home Position gueltig                   
-
 
89
        }
-
 
90
}
-
 
91
 
-
 
92
// Relative Position zur Home Position bestimmen
-
 
93
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig
-
 
94
short int Get_Rel_Position(void)
-
 
95
{
-
 
96
        short int n = 0;
-
 
97
        n = Get_GPS_data();
-
 
98
        if (n >=1) return (n); // nix zu tun, weil keine neue Daten da sind
-
 
99
        if  (gps_home_position.status > 0) //Nur wenn Home Position vorliegt
-
 
100
        {
-
 
101
                gps_rel_act_position.utm_east   = (int)  (gps_act_position.utm_east - gps_home_position.utm_east);
-
 
102
                gps_rel_act_position.utm_north  = (int)  (gps_act_position.utm_north - gps_home_position.utm_north);
-
 
103
                gps_rel_act_position.status     = 1; // gueltige Positionsdaten
-
 
104
                n = 0;
-
 
105
        }
-
 
106
        else
-
 
107
        {
-
 
108
                n = 2; //keine gueltigen Daten vorhanden
-
 
109
                gps_rel_act_position.status = 0; //keine gueltige Position weil keine home Position da ist.
-
 
110
        }      
-
 
111
        return (n);
-
 
112
}
-
 
113
 
65
        actual_speed.status= 0;
114
// Daten aus aktuellen ublox Messages extrahieren 
66
        actual_status.status= 0;
115
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig
67
}
116
short int Get_GPS_data(void)
68
 
117
{
69
void Get_GPS_data(void)  // Daten aus aktuellen ublox Messages extrahieren 
118
        short int n = 1;
70
{
119
 
Line 79... Line 128...
79
                        gps_act_position.utm_alt        = actual_pos.utm_alt/10;
128
                        gps_act_position.utm_alt        = actual_pos.utm_alt/10;
80
                        gps_act_position.speed_gnd      = actual_speed.speed_gnd/10;
129
                        gps_act_position.speed_gnd      = actual_speed.speed_gnd/10;
81
                        gps_act_position.speed_gnd      = actual_speed.speed_gnd/10;
130
                        gps_act_position.speed_gnd      = actual_speed.speed_gnd/10;
82
                        gps_act_position.heading        = actual_speed.heading/100000;
131
                        gps_act_position.heading        = actual_speed.heading/100000;
83
                        gps_act_position.status         = 1;
132
                        gps_act_position.status         = 1;
-
 
133
                        n                                                       = 0; //Daten gueltig
-
 
134
                }
-
 
135
                else
-
 
136
                {
-
 
137
                        gps_act_position.status = 0; //Keine gueltigen Daten
-
 
138
                        n                                               = 2;
84
                }
139
                }
85
                        actual_pos.status               = 0;
140
                actual_pos.status               = 0; //neue ublox Messages anfordern
86
                        actual_status.status    = 0;
141
                actual_status.status    = 0;
87
                        actual_speed.status     = 0;
142
                actual_speed.status     = 0;
88
        }              
143
        }      
-
 
144
        return (n);    
89
}
145
}
Line 90... Line 146...
90
 
146
 
91
 
147
 
92
/*
148
/*
93
Daten vom GPS im ublox MSG Format auswerten
149
Daten vom GPS im ublox MSG Format auswerten
94
Die Routine wird bei jedem Empfang eines Zeichens vom GPS Modul  durch den UART IRQ aufgerufen
150
Die Routine wird bei jedem Empfang eines Zeichens vom GPS Modul durch den UART IRQ aufgerufen
95
// Die UBX Messages NAV_POSUTM, NAV_STATUS und NAV_VALED muessen aktiviert sein
151
// Die UBX Messages NAV_POSUTM, NAV_STATUS und NAV_VALED muessen aktiviert sein
96
*/
152
*/
Line 141... Line 197...
141
                                                ublox_msg_state                 = UBLOX_LEN1;
197
                                                ublox_msg_state                 = UBLOX_LEN1;
142
                                        }
198
                                        }
143
                                        break;
199
                                        break;
Line 144... Line 200...
144
 
200
 
145
                                case UBLOX_NAV_VELED:
201
                                case UBLOX_NAV_VELED:
146
                                        ptr_pac_status  =       &actual_speed.status;
202
                                        ptr_pac_status          =       &actual_speed.status;
147
                                        if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE;
203
                                        if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE;
148
                                        else
204
                                        else
149
                                        {
205
                                        {
150
                                                ptr_payload_data                = &actual_speed;
206
                                                ptr_payload_data                = &actual_speed;
Line 184... Line 240...
184
                                chk_b   += chk_a;
240
                                chk_b   += chk_a;
185
                                --rx_len;      
241
                                --rx_len;      
186
                                if ((rx_len > 0) && (ptr_payload_data <= ptr_payload_data_end))                          
242
                                if ((rx_len > 0) && (ptr_payload_data <= ptr_payload_data_end))                          
187
                                {
243
                                {
188
                                        ptr_payload_data++;
244
                                        ptr_payload_data++;
189
                                        ublox_msg_state = UBLOX_PAYLOAD;
245
                                        ublox_msg_state = UBLOX_PAYLOAD;
190
                            }
246
                            }
191
                                else ublox_msg_state = UBLOX_CKA;
247
                                else ublox_msg_state = UBLOX_CKA;
192
                        }      
248
                        }      
193
                        else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler
249
                        else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler
194
                        break;
250
                        break;