Vega VV16 launch (2020-09-03)

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
3 Likes