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:
- 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.
- Battery voltage in mV. In the example 7.781V.
- Current consumption in mA. In the example 245mA.
- EPS temperature (probably in ºC). In the example 7ºC.
- Antenna temperature (probably in ºC). In the example 6ºC.
- Status of the ADCS system. 0 means detumbling enabled. 1 means SS-nominal.
- 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.