GPS Module: Difference between revisions

From Smithnet Wiki
Jump to navigation Jump to search
 
(45 intermediate revisions by the same user not shown)
Line 1: Line 1:
== HW-595 Board  ==
== HW-595 Board  ==
 
 
[[Image:UBlox_GPS_Module.jpg|top|thumbnail|uBlox GPS Board]]
[[Image:UBlox_GPS_Module.jpg|top|thumbnail|uBlox GPS Board]]


* Based on [https://www.u-blox.com/en/product/neo-6-series uBlox NEO-6M-0-001]
* Based on [https://www.u-blox.com/en/product/neo-6-series uBlox NEO-6M-0-001]
* [https://content.u-blox.com/sites/default/files/products/documents/u-blox6_ReceiverDescrProtSpec_%28GPS.G6-SW-10018%29_Public.pdf Receiver Description]
* 5V operation (3.3 V regulator onboard)
* 5V operation (3.3 V regulator onboard)
* UART: 4800 - 230400 bps (9600 bps 8N1 default), TTL levels buffered by 220R resistors
* UART: 4800 - 230400 bps (9600 bps 8N1 default), TTL levels buffered by 220R resistors
* [https://en.wikipedia.org/wiki/Hirose_U.FL U.FL] connector supplies 3.3 V to active antenna
* [https://en.wikipedia.org/wiki/Hirose_U.FL U.FL] connector supplies 3.3 V to active antenna
* Crystal Osc, not TCXO
* Crystal Osc, not TCXO
* LED:
* PPS LED: Invertion of PPS pin
** Constant: Searching
** Blink 1s: Position fix
* Battery-backed RAM contains config data and clock and speeds first-time-to-fix
* Battery-backed RAM contains config data and clock and speeds first-time-to-fix
* Data in [http://www.gpsinformation.org/dale/nmea.htm NMEA] 0183 format
* Data in [http://www.gpsinformation.org/dale/nmea.htm NMEA] 0183 format
Line 24: Line 23:
|1
|1
|PPS
|PPS
|1 pulse/s, synchronised at rising edge, length 100 ms
|1 pulse/s, synchronised at rising edge, length 100 ms (by default)
|-
|-
|2
|2
Line 43: Line 42:
|}
|}


PPS can be reconfigured as a frequency reference:
PPS:
* Send PPS to UART via CTS
* Send PPS to UART via CTS to allow GPSD to acurately sync
* 0.25 Hz - 10 MHz
* Can be configured as a frequency reference: 0.25 Hz - 10 MHz
** Output has high frequency accuracy
** Suffers from jitter except at a few specific frequencies that divide into internal 48 MHz clock
* Configure in u-Center [[Media:u-Center Configuration.png|here]]
* Configure in u-Center [[Media:u-Center Configuration.png|here]]
* Output has high frequency accuracy, but suffers from jitter except at a few specific frequencies
* Different frquencies/duty cycles can be configure for GPS synced/not synced


== Software ==
== Software ==
Line 54: Line 55:


* [https://www.u-blox.com/en/product/u-center U-Center]
* [https://www.u-blox.com/en/product/u-center U-Center]
* Select COM port and Baud rate
* Communicates with uBlox with binary UBX Protocol
View -> Configuration View; to activate change: Send
* CFG (Configuration)
** Select: Save current configuration
** Select in Devices: 2-I2C-EEPROM
* PRT (Ports)
** Baud Rate : 9600 -> 115200
* TP5 (Timepulse 5)
** PPS Settings for no GPS lock (eg use as an "alert" signal):
*** Frequency : 1 Hz
*** Duty Cycle : 0% (for permanent low output)
** PPS Settings for GPS Locked:
*** Frequency Locked : 1 Hz
*** Duty Locked : 50%
** Falling Edge on TOS
** Cable Delay : 50 ns -> 20 ns (This compensates for cable delay between antenna and receiver)
*** At 0.7c, 1 m <=> 4.8 ns
View -> Message View:
* Firmware version: UBX -> MON (Monitor) -> VER (Version)
** Currently: 7.03 (45969)


=== GPSD ===
=== GPSD ===


* [https://gpsd.gitlab.io/gpsd/index.html gpsd]
* [https://gpsd.gitlab.io/gpsd/index.html gpsd]
* Packages: gpsd, gpsd-clients
Use of a serial device (eg ttyS0) is prefered over a USB/serial interface (eg ttyUSB0) due to lower latency and [https://docs.kernel.org/driver-api/pps.html PPS] availability.


Can be tested with something like (Debug level 4) :
Can be tested with something like (Debug level 4) :
  gpsd -N -n -s 9600 -D 4 /dev/ttyS0 /dev/pps0
  gpsd -N -n -s 9600 -D 4 /dev/ttyS0 /dev/pps0


Configuration in /etc/sysconfig/gpsd
Lines showing visible/used satellites:
gpsd:PROG: SVINFO: visible=15 used=5 mask={SATELLITE|USED}
gpsd:INFO: CORE: PRN  6 az  47.0 el 20.0 ( 0.687248,  0.640869,  0.342020)
gpsd:INFO: CORE: PRN  11 az  93.0 el 22.0 ( 0.925913, -0.048525,  0.374607)
gpsd:INFO: CORE: PRN  12 az  70.0 el 58.0 ( 0.497961,  0.181243,  0.848048)
gpsd:INFO: CORE: PRN  28 az 301.0 el 35.0 (-0.702150,  0.421894,  0.573576)
gpsd:INFO: CORE: PRN  32 az 257.0 el 44.0 (-0.700903, -0.161816,  0.694658)
gpsd:INFO: CORE: Sats used (5):
 
Line showing time in [https://www.epochconverter.com/clock UNIX Epoch]:
gpsd:PROG: TIMEGPS: time= 1728071281.000150311 mask={TIME}
 
Line showing PPS is asserted on control line. Here the control line is asserted with 0.5s delay:
gpsd:PROG: PPS:/dev/ttyUSB0 Assert accepted @  1728071281.503229046 offset  0.496770954
 
Configuration in /etc/sysconfig/gpsd, which by default enables detection of USB devices via udev events including creation of a PPS device (/dev/pps0):
USBAUTO="true"
 
Options can be forced, eg:
  OPTIONS="-n -s 9600"
  OPTIONS="-n -s 9600"
  DEVICES="/dev/ttyS0 /dev/pps0"
  DEVICES="/dev/ttyS0 /dev/pps0"


Enable and start gpsd. Should auto-detect which UART is GPS connected to (baud rate, etc, with no configuration):
Check data stream with [https://gpsd.gitlab.io/gpsd/gpsmon.html gpsmon]:
gpsmon /dev/ttyS0
 
when gpsd is not started, or connected to gpsd:
gpsmon
 
Show raw data:
gpscat -p -s 9600 /dev/ttyS0
 
Enable and start gpsd:
  systemctl enable gpsd
  systemctl enable gpsd
  systemctl start gpsd
  systemctl start gpsd


Use gpsmon to monitor GPS data, or xgps.
By default, gpsd listens on port 2947.
 
Monitor with:
cgps -s
gpsmon
gpscsv
gpsplot --image gps.png
xgps


=== Pulse Per Second (PPS) ===
=== Pulse Per Second (PPS) ===
With PPS output connected to a serial port pin, GPSD should detect it. If it is on GPIO or other serial port, this can be used to create a PPS device:


  dnf install pps-tools
  dnf install pps-tools
  modprobe pps_ldisc
  modprobe pps_ldisc
  ldattach 18 /dev/ttyS0
setserial -v /dev/ttyS0 low_latency
  ldattach PPS /dev/ttyS0


Check PPS signal:
Check PPS signal:
  ppstest /dev/pps0
  ppstest /dev/pps0
  ppscheck /dev/ttyS0
  ppscheck /dev/ttyS0
Can set at boot with udev rule (/etc/udev/rules.d/gps.rules):
KERNEL=="ttyS0", SYMLINK+="gps0"
KERNEL=="ttyS0", RUN+="/usr/bin/setserial -v /dev/%k low_latency"
KERNEL=="ttyS0", RUN+="/usr/sbin/ldattach PPS /dev/%k"

Latest revision as of 20:05, 24 October 2024

HW-595 Board

uBlox GPS Board
  • Based on uBlox NEO-6M-0-001
  • Receiver Description
  • 5V operation (3.3 V regulator onboard)
  • UART: 4800 - 230400 bps (9600 bps 8N1 default), TTL levels buffered by 220R resistors
  • U.FL connector supplies 3.3 V to active antenna
  • Crystal Osc, not TCXO
  • PPS LED: Invertion of PPS pin
  • Battery-backed RAM contains config data and clock and speeds first-time-to-fix
  • Data in NMEA 0183 format
  • More background here

Board pinouts:

Pin Function Description
1 PPS 1 pulse/s, synchronised at rising edge, length 100 ms (by default)
2 RXD UART input
3 TXD UART output
4 GND Ground
5 VCC 3.3 - 5 V

PPS:

  • Send PPS to UART via CTS to allow GPSD to acurately sync
  • Can be configured as a frequency reference: 0.25 Hz - 10 MHz
    • Output has high frequency accuracy
    • Suffers from jitter except at a few specific frequencies that divide into internal 48 MHz clock
  • Configure in u-Center here
  • Different frquencies/duty cycles can be configure for GPS synced/not synced

Software

U-Center

  • U-Center
  • Select COM port and Baud rate
  • Communicates with uBlox with binary UBX Protocol

View -> Configuration View; to activate change: Send

  • CFG (Configuration)
    • Select: Save current configuration
    • Select in Devices: 2-I2C-EEPROM
  • PRT (Ports)
    • Baud Rate : 9600 -> 115200
  • TP5 (Timepulse 5)
    • PPS Settings for no GPS lock (eg use as an "alert" signal):
      • Frequency : 1 Hz
      • Duty Cycle : 0% (for permanent low output)
    • PPS Settings for GPS Locked:
      • Frequency Locked : 1 Hz
      • Duty Locked : 50%
    • Falling Edge on TOS
    • Cable Delay : 50 ns -> 20 ns (This compensates for cable delay between antenna and receiver)
      • At 0.7c, 1 m <=> 4.8 ns

View -> Message View:

  • Firmware version: UBX -> MON (Monitor) -> VER (Version)
    • Currently: 7.03 (45969)

GPSD

  • gpsd
  • Packages: gpsd, gpsd-clients

Use of a serial device (eg ttyS0) is prefered over a USB/serial interface (eg ttyUSB0) due to lower latency and PPS availability.

Can be tested with something like (Debug level 4) :

gpsd -N -n -s 9600 -D 4 /dev/ttyS0 /dev/pps0

Lines showing visible/used satellites:

gpsd:PROG: SVINFO: visible=15 used=5 mask={SATELLITE|USED}
gpsd:INFO: CORE: PRN   6 az  47.0 el 20.0 ( 0.687248,  0.640869,  0.342020)
gpsd:INFO: CORE: PRN  11 az  93.0 el 22.0 ( 0.925913, -0.048525,  0.374607)
gpsd:INFO: CORE: PRN  12 az  70.0 el 58.0 ( 0.497961,  0.181243,  0.848048)
gpsd:INFO: CORE: PRN  28 az 301.0 el 35.0 (-0.702150,  0.421894,  0.573576)
gpsd:INFO: CORE: PRN  32 az 257.0 el 44.0 (-0.700903, -0.161816,  0.694658)
gpsd:INFO: CORE: Sats used (5):

Line showing time in UNIX Epoch: gpsd:PROG: TIMEGPS: time= 1728071281.000150311 mask={TIME}

Line showing PPS is asserted on control line. Here the control line is asserted with 0.5s delay:

gpsd:PROG: PPS:/dev/ttyUSB0 Assert accepted @  1728071281.503229046 offset  0.496770954

Configuration in /etc/sysconfig/gpsd, which by default enables detection of USB devices via udev events including creation of a PPS device (/dev/pps0):

USBAUTO="true"

Options can be forced, eg:

OPTIONS="-n -s 9600"
DEVICES="/dev/ttyS0 /dev/pps0"

Check data stream with gpsmon:

gpsmon /dev/ttyS0

when gpsd is not started, or connected to gpsd:

gpsmon

Show raw data:

gpscat -p -s 9600 /dev/ttyS0

Enable and start gpsd:

systemctl enable gpsd
systemctl start gpsd

By default, gpsd listens on port 2947.

Monitor with:

cgps -s
gpsmon
gpscsv
gpsplot --image gps.png
xgps

Pulse Per Second (PPS)

With PPS output connected to a serial port pin, GPSD should detect it. If it is on GPIO or other serial port, this can be used to create a PPS device:

dnf install pps-tools
modprobe pps_ldisc
setserial -v /dev/ttyS0 low_latency
ldattach PPS /dev/ttyS0

Check PPS signal:

ppstest /dev/pps0
ppscheck /dev/ttyS0

Can set at boot with udev rule (/etc/udev/rules.d/gps.rules):

KERNEL=="ttyS0", SYMLINK+="gps0"
KERNEL=="ttyS0", RUN+="/usr/bin/setserial -v /dev/%k low_latency"
KERNEL=="ttyS0", RUN+="/usr/sbin/ldattach PPS /dev/%k"