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.
One comment