TTU100 information
UHF band radio frequency is 435.45 MHz. Satellite callsign is ES1WS , it sends frames addressed to groundstation with callsign ES1ZW
There is an X-Band transmitted on board, on frequency 10.465 GHz, but it is currently silent, and will remain so for quite a while.
Modulation on UHF is FSK 9600 baud, standard G3RUH encoded AX25 packets. Telemetry data is broadcast periodically by sending a burst of 3 identical AX25 frames, followed by morse transmission on a same frequency using unmodulated carrier. Morse transmissions begin with either “CQ ES1WS B:” or “CQ ES1WS C:” depending on backup radio (B) or main communication module (COM) being used. out of every 3 telemetry broadcasts 2 are made using main COM, one using backup radio. Backup radio normally has much weaker signal, being 100mW transmitted instead of main radio’s 1W.
How to decode telemetry frames
/*
Example of telemetry frame:
8a a6 62 b4 ae 40 60 8a a6 62 ae a6 40 61 03 f0
a0 01 56 05 0a 13 f9 03 f9 fa f9 00 9f b8 00 c6
04 dd 07 53 07 ff 00 00 22 04 07 02 d0 d0 3b 01
46 01 01 02 04 17 02 0c 00 00 0c 00 00 00 4f 00
63 00 00 00
first 16 bytes are AX25 header
then comes 4 byte command header:
a0 01 56 05 : module 10 (supervisor) -> module 0 (groundstation), sequence #1,
frame type 0x0556 from there on to end of frame is command payload, for telemetry
frame it is a sequence of module number,N,data[N] where N is number of bytes in
this chunk. Module numbers are 1 = COM, 2 = ADCS, 4 = EPS (power supply),
10 = supervisor. Some chunks may be missing if the module is turned off or not
responding, the absolute minimum is just the supervisor chunk being present.
The data of each chunk contains telemetry information for that module, the
structure of each is below. In future more fields may be added to the end
of these, and more frame types may be added for the modules that are currently
not sending telemetry
The same data is also sent in morse code using unmodulated carrier. Morse message
begins with “CQ ES1WS B:” or “CQ ES1WS C:”, followed by the telemetry data,
and ends with “:”.
Telemetry data is sent encoded so that 4 bits are sent as one morse character,
instead of using the module+len+data encoding, the module number is sent as one
character, without encoding the leading zero, followed by data bytes. chunks are
separated by “,”. The morse characters used for 16 possible nibble values are
{‘E’, ‘I’, ‘A’, ‘D’, ‘N’, ‘H’, ‘M’, ‘R’,‘S’, ‘U’, ‘B’, ‘F’, ‘G’, ‘K’, ‘L’, ‘T’};
These letters were experimentally chosen to minimise the morse message transmission
time for typical telemetry frames, for exmaple 0x00 gets sent as “EE” and 0x0f gets
sent as “ET”.
*/
typedef struct PACKED
{
uint8_t
u_obc_m, // main OBC power rail volage, mV
u_obc_b, // backup OBC power rail voltage, mV
u_comx, // xband transmitter power rail voltage, mV
u_com, // UHF radio power rail voltage, mV
u_adcs, // ADCS power rail voltage, mV
u_beacon, // backup radio power rail voltage, mV
u_sol, // solar cell power rail (input to EPS) voltage, mV
u_bata, // battery A voltage, mV
i_obc; // main OBC consumed current, mA
uint16_t // little-endian byte order
u_radsens1, // radiation sensor 1 measured voltage, mV
u_radsens2, // radiation sensor 2 measured voltage, mV
u_radref; // radiation sensor reference measured voltage, mV
uint8_t
com_resets, // COM module power-cycled counter due to unresponsivene
eps_adcs_checks, // number of requests sent to EPS and ADCS
com_comx_checks, // number of requests sent to COM modules
obcm_obcb_checks; // number of requests sent to OBC modules
} supervisor_telemetry_t;
// 8-bit voltage and current values are in 20 mV and 20 mA steps, so
// a value of 250 means 5000 mV/mA
//
// module check counters are 4 bits each,
// (ADCS<<4)|EPS
// (COM<<4)|COMX
// (OBCM<<4)|OBCB
typedef struct PACKED
{
uint8_t
eps_status; // latest received EPS status in response to keepalive
uint8_t
bata_voltage, // battery a voltage
batb_voltage; // battery b voltage
uint16_t // little-endian
bata_temp, // battery a temperature in tenths of deg Celsius
batb_temp; // battery b temperature in tenths of deg Celsius
} eps_telemetry_t;
// eos_status bits, when set:
// b7 -> deployer error,
// b6 -> charger B error,
// b5 -> charger A error,
// b4 -> power blackout time (10m) counting down,
// b3 -> bank B empty,
// b2 -> bank A empty,
// b1 -> deployment ended (maybe with error),
// b0 -> backup radio has taken over as main UHF transmitter
typedef struct PACKED
{
uint8_t
rssi_floor, // raw values from Si chip
rssi;
} com_telemetry_t;
// to convert raw values to dBm v=v/2-134
typedef struct PACKED
{
uint16_t // little endian
gyro1, // X direction deg/s
gyro2, // Y direction deg/s
gyro3; // Z direction deg/s
uint16_t // little endian
mag1, // X direction mGs
mag2, // Y direction mGs
mag3; // Z direction mGs
} adcs_telemetry_t;
// note that due to software error negative values are
// currently showing as 0