UKHAS Wiki

UK High Altitude Society

User Tools

Site Tools


guides:falcom_fsa03

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
guides:falcom_fsa03 [2010/08/12 12:50] juxtaguides:falcom_fsa03 [2012/06/03 14:42] (current) upu
Line 4: Line 4:
  
 The [[http://www.falcom.de/products/gps-modules/fsa03/|Falcom FSA03]] is an inexpensive Ublox 5 ([[http://www.u-blox.com/en/gps-chips/stand-alone-gps-chips/u-blox-5-chipset-ubx-g5010.html|UBX-G5010]]) GPS module with a small footprint which featuring the Sarantel quadrifilar helix antenna. The [[http://www.falcom.de/products/gps-modules/fsa03/|Falcom FSA03]] is an inexpensive Ublox 5 ([[http://www.u-blox.com/en/gps-chips/stand-alone-gps-chips/u-blox-5-chipset-ubx-g5010.html|UBX-G5010]]) GPS module with a small footprint which featuring the Sarantel quadrifilar helix antenna.
 +
 +Although still available this unit is end of life. 
  
 Ublox modules are capable of operating above 60,000 feet, provided they are configured and placed in airborne mode. The FSA03 does not include any EEPROM or Flash memory, and as such is unable to retain settings unless its RAM is buffered by backup battery. The module should be programmed with UBX whenever power has been lost to place it in airborne mode. Ublox modules are capable of operating above 60,000 feet, provided they are configured and placed in airborne mode. The FSA03 does not include any EEPROM or Flash memory, and as such is unable to retain settings unless its RAM is buffered by backup battery. The module should be programmed with UBX whenever power has been lost to place it in airborne mode.
  
 Some FSA03 modules have been found to have a default baud rate of 9600, whilst others have a default baud rate of 38400, which may be difficult to parse if not using a UART (ie software serial). Some FSA03 modules have been found to have a default baud rate of 9600, whilst others have a default baud rate of 38400, which may be difficult to parse if not using a UART (ie software serial).
 +
  
  
Line 20: Line 23:
 The module draws around 40mA typically, though upto 100mA when acquiring lock. The module draws around 40mA typically, though upto 100mA when acquiring lock.
  
-The antenna on this module appears to be slightly wobbly and this may be one of the causes of the module not getting a lock for long periods of time. Its recommended that you secure it (perhaps with glue) in a position that works.+The antenna on this module appears to be slightly wobbly and this may be one of the causes of the module not getting a lock for long periods of time. It'recommended that you secure it (perhaps with glue) in a position that works.
  
 ===== Configuration ===== ===== Configuration =====
Line 26: Line 29:
 The FSA03 is primarily configured through Ublox's binary protocol (UBX), though some parameters can be altered using NMEA sentences. The [[http://www.u-blox.com/images/downloads/Product_Docs/u-blox5_Protocol_Specifications%28GPS.G5-X-07036%29.pdf|UBX protocol specification]] covers configuring the module. The FSA03 is primarily configured through Ublox's binary protocol (UBX), though some parameters can be altered using NMEA sentences. The [[http://www.u-blox.com/images/downloads/Product_Docs/u-blox5_Protocol_Specifications%28GPS.G5-X-07036%29.pdf|UBX protocol specification]] covers configuring the module.
  
-==== UBX ====+ 
 + 
 +==== Common UBX commands decoded directly from u-center ==== 
 + 
 +<code>                  
 +====== CONFIG NAV MODE (Airbone < 1g) + (Auto 2D/3D) ====== 
 + 
 +09:37:25  SEND   B5 62 06 24 24 00 FF FF 06 03 00 00 00 00 10 27  // Set Navigation Engine Settings 
 +   SEND   00 00 05 00 FA 00 FA 00 64 00 2C 01 00 00 00 00  
 +   SEND   00 00 00 00 00 00 00 00 00 00 16 DC     
 +09:37:25  RECV   B5 62 05 01 02 00 06 24 32 5B                   // Message Acknowledged  
 + 
 +====== SBAS DISABLE ====== 
 + 
 +10:09:35  SEND  B5 62 06 16 08 00 00 07 03 00 51 08 00 00 87 29  // Set SBAS Settings 
 +10:09:35  RECV  B5 62 05 01 02 00 06 16 24 4D                    // Message Acknowledged 
 + 
 +====== SBAS - EGNOS - FOR EU ====== 
 + 
 +10:01:18  SEND  B5 62 06 16 08 00 01 07 03 00 51 08 00 00 88 31  // Set EGNOS                  
 +10:01:18  RECV  B5 62 05 01 02 00 06 16 24 4D                    // Message Acknowledged           
 + 
 +====== DISABLE GPGGA ON ALL PORTS ====== 
 + 
 +10:34:44  SEND  B5 62 06 01 08 00 F0 00 00 00 00 00 00 01 00 24  // Set Message Rate on all I/O ports 
 +10:34:44  RECV  B5 62 05 01 02 00 06 01 0F 38                    // Message Acknowledged 
 + 
 +====== DISABLE GPGLL ON ALL PORTS ====== 
 + 
 +10:37:37  SEND  B5 62 06 01 08 00 F0 01 00 00 00 00 00 01 01 2B                    
 +10:37:37  RECV  B5 62 05 01 02 00 06 01 0F 38                                  
 + 
 +====== DISABLE GPGSA ON ALL PORTS ====== 
 +         
 +10:39:18  SEND  B5 62 06 01 08 00 F0 02 00 00 00 00 00 01 02 32   
 +10:39:18  RECV  B5 62 05 01 02 00 06 01 0F 38                  
 + 
 +====== DISABLE GPGSV ON ALL PORTS ====== 
 +                          
 +10:40:33  SEND  B5 62 06 01 08 00 F0 03 00 00 00 00 00 01 03 39   
 +10:40:33  RECV  B5 62 05 01 02 00 06 01 0F 38                
 + 
 +====== DISABLE GPRMC ON ALL PORTS ====== 
 +              
 +10:41:59  SEND  B5 62 06 01 08 00 F0 04 00 00 00 00 00 01 04 40   
 +10:41:59  RECV  B5 62 05 01 02 00 06 01 0F 38                     
 + 
 +====== DISABLE GPVTG ON ALL PORTS ====== 
 +                    
 +10:43:06  SEND  B5 62 06 01 08 00 F0 05 00 00 00 00 00 01 05 47  
 +10:43:06  RECV  B5 62 05 01 02 00 06 01 0F 38                    
 + 
 +====== DISABLE GPGRS ON ALL PORTS ====== 
 +       
 +10:44:06  SEND  B5 62 06 01 08 00 F0 06 00 00 00 00 00 00 05 4D   
 +10:44:06  RECV  B5 62 05 01 02 00 06 01 0F 38                
 + 
 +====== DISABLE GPGST ON ALL PORTS ====== 
 +               
 +10:44:57  SEND  B5 62 06 01 08 00 F0 07 00 00 00 00 00 00 06 54   
 +10:44:57  RECV  B5 62 05 01 02 00 06 01 0F 38                    
 + 
 +====== DISABLE GPZDA ON ALL PORTS ====== 
 +                  
 +10:45:41  SEND  B5 62 06 01 08 00 F0 08 00 00 00 00 00 00 07 5B   
 +10:45:41  RECV  B5 62 05 01 02 00 06 01 0F 38                   
 + 
 +====== DISABLE GPGBS ON ALL PORTS ====== 
 +               
 +10:46:26  SEND  B5 62 06 01 08 00 F0 09 00 00 00 00 00 00 08 62   
 +10:46:26  RECV  B5 62 05 01 02 00 06 01 0F 38    
 + 
 +====== DISABLE GPDTM ON ALL PORTS ======        
 +                 
 +10:47:07  SEND  B5 62 06 01 08 00 F0 0A 00 00 00 00 00 00 09 69   
 +10:47:07  RECV  B5 62 05 01 02 00 06 01 0F 38                   
 + 
 +====== START GPS ====== 
 + 
 +09:47:29  SEND  B5 62 06 04 04 00 00 00 09 00 17 76          // Hotstart       
 +09:47:29  RECV  24 47 50 54 58 54 2C 30 31 2C 30 31 2C 30 32 2C     // $GPTXT,01,01,02, 
 +   RECV  53 74 61 72 74 69 6E 67 20 47 50 53 2A 30 39 0D 0A  // Starting GPS*09                                             
 +09:47:29  RECV  B5 62 05 01 02 00 06 04 12 3B        // Message Acknowledged 
 + 
 +====== STOP GPS ====== 
 + 
 +09:47:29  SEND  B5 62 06 04 04 00 00 00 08 00 16 74                // Stop  
 +09:47:29  RECV  24 47 50 54 58 54 2C 30 31 2C 30 31 2C 30 32 2C    // $GPTXT,01,01,02, 
 +   RECV  53 74 6F 70 70 69 6E 67 20 47 50 53 2A 30 31 0D 0A // Stopping GPS*01                                            
 +09:47:29  RECV  B5 62 05 01 02 00 06 04 12 3B                      // Message Acknowledged 
 + 
 +====== MAX PERFORMANCE MODE ====== 
 + 
 +11:21:00  SEND  B5 62 06 11 02 00 00 00 19 81                // Max. performance mode 
 +11:21:00  RECV  B5 62 05 01 02 00 06 11 1F 48               // Message Acknowledged 
 +                    
 +====== ECO MODE ====== 
 + 
 +11:19:38  SEND  B5 62 06 11 02 00 00 04 1D 85                 // Eco mode                  
 +11:19:38  RECV  B5 62 05 01 02 00 06 11 1F 48                 // Message Acknowledged  
 + 
 +===== CONFIG DATUM ====== 
 + 
 +09:31:57  SEND  B5 62 06 06 02 00 48 00 56 DA  // Set Standard Datum, 0x48 for GR, Change to yours.                      
 +09:31:57  RECV  B5 62 05 01 02 00 06 06 14 3D  // Message Acknowledged   
 + 
 +===== Baud rate to 4800 ===== 
 + 
 +09:33:45  SEND  B5 62 06 00 14 00 01 00 00 00 D0 08 00 00 C0 12  // Set 4800 
 +          SEND  00 00 03 00 03 00 00 00 00 00 CB C4 
 +09:33:45  RECV  B5 62 05 01 02 00 06 00 25 8D                    // Message Acknowledged  
 +</code> 
 + 
 + 
 +==== Sample code ====
  
 <code c> <code c>
Line 33: Line 150:
 #include <NewSoftSerial.h> #include <NewSoftSerial.h>
  
-NewSoftSerial nss(3, 2); +NewSoftSerial nss(2, 3);  
 + 
 +// GPS Tx output is connected to Arduino input on pin 2 
 +// GPS Rx input is connected to Arduino output on pin 3 
 + 
 +byte navmode = 99;
  
 void setup() { void setup() {
Line 108: Line 230:
  uint8_t ackByteID = 0;  uint8_t ackByteID = 0;
  uint8_t ackPacket[10];  uint8_t ackPacket[10];
- int startTime = millis();+ unsigned long startTime = millis();
  Serial.print(" * Reading ACK response: ");  Serial.print(" * Reading ACK response: ");
          
Line 159: Line 281:
  }  }
 } }
 +
 +//Function to poll the NAV5 status of a Ublox GPS module (5/6)
 +//Sends a UBX command (requires the function sendUBX()) and waits 3 seconds
 +// for a reply from the module. The then isolates the byte which contains 
 +// the information regarding the NAV5 mode,
 +// 0 = Pedestrian mode (default, will not work above 12km)
 +// 6 = Airborne 1G (works up to 50km altitude)
 +//Adapted by jcoxon from getUBX_ACK() from the example code on UKHAS wiki
 +// http://wiki.ukhas.org.uk/guides:falcom_fsa03
 +boolean checkNAV(){
 +  uint8_t b, bytePos = 0;
 +  uint8_t getNAV5[] = { 0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x2A, 0x84 }; //Poll NAV5 status
      
 +  nss.flush();
 +  unsigned long startTime = millis();
 +  sendUBX(getNAV5, sizeof(getNAV5)/sizeof(uint8_t));
 +  
 +  while (1) {
 +    // Make sure data is available to read
 +    if (nss.available()) {
 +      b = nss.read();
 +      
 +      if(bytePos == 8){
 +        navmode = b;
 +        return true;
 +      }
 +                        
 +      bytePos++;
 +    }
 +    // Timeout if no valid response in 3 seconds
 +    if (millis() - startTime > 3000) {
 +      navmode = 0;
 +      return false;
 +    }
 +  }
 +}
 </code> </code>
- 
 ==== NMEA ==== ==== NMEA ====
  
Line 178: Line 334:
  
 As the FSA03 doesn't have any RAM or flash memory, its RAM must be buffered by a backup battery to retain settings. So long as the backup battery remains in place, you can can save your settings as per page 99 of the UBX protocol specification "Clear, Save and Load configurations" As the FSA03 doesn't have any RAM or flash memory, its RAM must be buffered by a backup battery to retain settings. So long as the backup battery remains in place, you can can save your settings as per page 99 of the UBX protocol specification "Clear, Save and Load configurations"
- 
- 
  
 ===== Navigation data ===== ===== Navigation data =====
Line 185: Line 339:
 By default, FSA03 modules are configured to output several NMEA sentences including GPRMC, GPGGA & GPVTG. Of these, GPGGA is the most useful for high altitute balloon applications as it contains altitude data. Un-necessary sentences can be disabled, see the [[guides:falcom_fsa03:#configuration|configuration]] section for more information. By default, FSA03 modules are configured to output several NMEA sentences including GPRMC, GPGGA & GPVTG. Of these, GPGGA is the most useful for high altitute balloon applications as it contains altitude data. Un-necessary sentences can be disabled, see the [[guides:falcom_fsa03:#configuration|configuration]] section for more information.
  
-=== Polling the GPS module for all navigation parameters ===+==== Polling the module ====
  
-Ublox 5 based GPS modules implement a proprietary NMEA extension in the form of a polled sentence which reports all navigation parameters of intrest (to us at least) in a single sentence when requested. Using this provides advantages in that you can request an update exactly when you need it, and you only need to parse one specific sentence to capture latitude, longitude, altitude, speed, course, etc. If you're using a software serial port to your GPS module, this is likely to be very useful.+Ublox 5 based GPS modules implement a proprietary NMEA extension in the form of a polled sentence which reports all navigation parameters of interest (to us at least) in a single sentence when requested. Using this provides advantages in that you can request an update exactly when you need it, and you only need to parse one specific sentence to capture latitude, longitude, altitude, speed, course, etc. For those using a SoftwareSerial library, this method fixes the buffer overrun issues
  
 To use the sentence firstly disable any GPS sentences which are currently switched on: To use the sentence firstly disable any GPS sentences which are currently switched on:
 <code c> <code c>
 +Serial.println("$PUBX,40,GLL,0,0,0,0*5C");
 Serial.println("$PUBX,40,GGA,0,0,0,0*5A"); Serial.println("$PUBX,40,GGA,0,0,0,0*5A");
 Serial.println("$PUBX,40,GSA,0,0,0,0*4E"); Serial.println("$PUBX,40,GSA,0,0,0,0*4E");
Line 209: Line 364:
 |0|$PUBX|string|$PUBX|-|Message ID, UBX protocol header, proprietary sentence| |0|$PUBX|string|$PUBX|-|Message ID, UBX protocol header, proprietary sentence|
 |1|00|numeric|ID|-|Propietary message identifier: 00| |1|00|numeric|ID|-|Propietary message identifier: 00|
-|2|081350.00|hhmmss.sss|hhmmss.ss|-|UTC Time, Current time|+|2|081350.00|hhmmss.ss|hhmmss.ss|-|UTC Time, Current time|
 |3|4717.113210|ddmm.mmmm|Latitude|-|Latitude, Degrees + minutes, see Format description| |3|4717.113210|ddmm.mmmm|Latitude|-|Latitude, Degrees + minutes, see Format description|
 |4|N|character|N|-|N/S Indicator, N=north or S=south| |4|N|character|N|-|N/S Indicator, N=north or S=south|
Line 215: Line 370:
 |6|E|character|E|-|E/W indicator, E=east or W=west| |6|E|character|E|-|E/W indicator, E=east or W=west|
 |7|546.589|numeric|AltRef|m|Altitude above user datum ellipsoid.| |7|546.589|numeric|AltRef|m|Altitude above user datum ellipsoid.|
-|8|G3|string|NavStat|-|Navigation Status, See Table below|+|8|G3|string|NavStat|-|Navigation Status - Example: G3 =Stand alone 3D solutionNF =No Fix|
 |9|2.1|numeric|Hacc|m|Horizontal accuracy estimate.| |9|2.1|numeric|Hacc|m|Horizontal accuracy estimate.|
 |10|2.0|numeric|Vacc|m|Vertical accuracy estimate.| |10|2.0|numeric|Vacc|m|Vertical accuracy estimate.|
Line 232: Line 387:
  
 For details see page 52 of the UBX protocol specification "Proprietary Messages, UBX00". For details see page 52 of the UBX protocol specification "Proprietary Messages, UBX00".
 +
 +
 +==== Modified TinyGPS ====
 +
 +{{code:tinygps.zip|Here's}} a copy of the [[http://arduiniana.org/libraries/tinygps/|TinyGPS]] library by Mikal Hart modified to decode the polled Ublox sentence containing everything likely to be needed for high altitude ballooning. A new method sats() has been added, which will return the number of GPS satellites currently being tracked by the module.
guides/falcom_fsa03.1281617438.txt.gz · Last modified: 2010/08/12 12:50 by juxta

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki