Telemetry format of 3CAT-2

The team from the NanoSat Lab in Universidad Politècnica de Catalunya have published a telemetry analyser for 3CAT-2. This analyser is designed to connect to a TCP server and get the AX.25 frames in KISS format.

The telemetry format is rather simple, as one can see by looking at the PrintBeacon() function in 3cat2_telemetry.c. As I imagined, the contents of each beacon are just the numerical values of several telemetry channels written in ASCII. For example:

3 7781 0245 07 06	1 0 3.5e-01 2.5e-01 1.6e-01 6.8e-09 1.2e-09 1.8e-08

All the fields are separated by a space, except the 5th and 6th fields, which are separated by a tab. The content of the first 7 fields is as follows:

  1. Mode. Possible values: 1 survival mode, 2 sun-safe mode, 3 nominal mode, 4 TX communication incoming (data downlink), 5 RX communications (command uplink), 6 and 7 payload mode.
  2. Battery voltage in mV. In the example 7.781V.
  3. Current consumption in mA. In the example 245mA.
  4. EPS temperature (probably in ºC). In the example 7ºC.
  5. Antenna temperature (probably in ºC). In the example 6ºC.
  6. Status of the ADCS system. 0 means detumbling enabled. 1 means SS-nominal.
  7. Control flag of the ADCS routine. Possible values: 0 automatic, 1 manual

The next 3 fields are floating point numbers. If detumbling is enabled, they correspond to magnetomer values in nT for the axes X, Y and Z respectively. If detumbling is not enabled, they correspond to the sun vector, axes X, Y and Z.

The last 3 fields correspond to the control voltages for axes X, Y and Z, regardless of whether detumbling is enabled or not.

Of course, the telemetry format is so easy that it can even be parsed with a “one-line” awk script:

 strings sats/3cat2-20160824-pe0sat.kiss | awk '{if ($1==1) printf "Survival"; if ($1==2) printf "Sun-safe"; if ($1==3) printf "Nominal"; if ($1==4) printf "TX"; if ($1==5) printf "RX"; if ($1>=6) printf "Payload"; printf "  %.2fV  %dmA  EPS: %2dºC  Ant: %2dºC  ", $2*1e-3, $3, $4, $5; if ($7==0) {printf "ADCS auto  "} else {printf "ADCS manual  "}; if ($6==0) {printf "Detumbling  (%f,%f,$f) nT", $8, $9, $10} else {printf "SS-nominal  Sun: (%.2f,%.2f,%.2f)", $8, $9, $10}; printf "  Control (%.1e,%.1e,%.1e)V\n", $11, $12, $13}'

which shows the following output:

Nominal  8.26V  233mA  EPS:  4ºC  Ant:  8ºC  ADCS auto  SS-nominal  Sun: (0.49,0.42,1.00)  Control (6.9e-09,1.7e-09,1.7e-08)V
Nominal  8.28V  221mA  EPS:  5ºC  Ant:  8ºC  ADCS auto  SS-nominal  Sun: (0.16,0.87,0.57)  Control (6.7e-09,1.4e-09,1.7e-08)V
Nominal  8.29V  245mA  EPS:  5ºC  Ant:  8ºC  ADCS auto  SS-nominal  Sun: (0.26,0.96,0.46)  Control (6.7e-09,1.4e-09,1.7e-08)V
Nominal  8.30V  257mA  EPS:  5ºC  Ant:  8ºC  ADCS auto  SS-nominal  Sun: (0.62,0.78,0.42)  Control (6.7e-09,1.4e-09,1.7e-08)V
Nominal  8.30V  257mA  EPS:  5ºC  Ant:  9ºC  ADCS auto  SS-nominal  Sun: (0.64,0.72,0.49)  Control (6.7e-09,1.4e-09,1.7e-08)V
Nominal  8.30V  245mA  EPS:  5ºC  Ant:  9ºC  ADCS auto  SS-nominal  Sun: (0.64,0.66,0.59)  Control (6.8e-09,1.5e-09,1.7e-08)V
Nominal  8.30V  245mA  EPS:  5ºC  Ant:  9ºC  ADCS auto  SS-nominal  Sun: (0.60,0.60,0.71)  Control (6.8e-09,1.5e-09,1.7e-08)V
Nominal  8.30V  245mA  EPS:  5ºC  Ant:  9ºC  ADCS auto  SS-nominal  Sun: (0.54,0.54,0.86)  Control (6.8e-09,1.6e-09,1.7e-08)V
Nominal  8.29V  245mA  EPS:  5ºC  Ant: 10ºC  ADCS auto  SS-nominal  Sun: (0.45,0.49,1.00)  Control (6.9e-09,1.7e-09,1.7e-08)V
Nominal  8.28V  245mA  EPS:  5ºC  Ant: 10ºC  ADCS auto  SS-nominal  Sun: (0.32,0.44,1.00)  Control (6.9e-09,1.7e-09,1.7e-08)V

The KISS file in question was obtained from the recording on 24/08/2016 at 10:54 by PE0SAT that I mentioned at the end of a previous post.

Many thanks to Juan Fran Muñoz and the rest of the NanoSat Lab team for publishing the telemetry analyser and sharing details about the satellite and the operations.

One comment

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.