The uGravity Mission
Data generated by uG mission utilizes the followind dataframe structure:
Frame sent to uG Host mission: 41 BytesSOF (3B) + Payload (35B) + EOF (3B)
Ex: {{{BBB..BBB}\n\r
7b 7b 7b 00 01 02 03 04 05 05 00 00 00 00 00 00 00 00 00 00 00 01 00 00 09 00 0d 01 02 03 04 05 06 07 08 09 0a 06 7d 0a 0d
Frame raw content:
Start of Frame:
ugFrame[0] = '{'; // 0x7B
ugFrame[1] = '{'; // 0x7B
ugFrame[2] = '{'; // 0x7B
Frame payload:
ugFrame[3] = obdh_sysclock_s_H
ugFrame[4] = obdh_sysclock_s_L
ugFrame[5] = obdh_sysclock_ms_H
ugFrame[6] = obdh_sysclock_ms_L
ugFrame[7] = obdh_internal_temperature_H
ugFrame[8] = obdh_internal_temperature_L
ugFrame[9] = obdh_statuscode
ugFrame[10] = imu_acc_x_H
ugFrame[11] = imu_acc_x_L
ugFrame[12] = imu_acc_y_H
ugFrame[13] = imu_acc_y_L
ugFrame[14] = imu_acc_z_H
ugFrame[15] = imu_acc_z_L
ugFrame[16] = imu_gyr_x_H
ugFrame[17] = imu_gyr_x_L
ugFrame[18] = imu_gyr_y_H
ugFrame[19] = imu_gyr_y_L
ugFrame[20] = imu_gyr_z_H
ugFrame[21] = imu_gyr_z_L
ugFrame[22] = radio_counter1_H
ugFrame[23] = radio_counter1_L
ugFrame[24] = radio_counter2_H
ugFrame[25] = radio_counter2_L
ugFrame[26] = eps_current_H
ugFrame[27] = eps_current_L
ugFrame[28] = eps_voltage_bat1_H
ugFrame[29] = eps_voltage_bat1_L
ugFrame[30] = eps_voltage_bat2_H
ugFrame[31] = eps_voltage_bat2_L
ugFrame[32] = eps_temperature_H
ugFrame[33] = eps_temperature_L
ugFrame[34] = eps_current_acc_H
ugFrame[35] = eps_current_acc_L
ugFrame[36] = eps_batmon_reg
ugFrame[37] = CRC FIELD
End of Frame:
ugFrame[38] = '}'; // 0x7D
ugFrame[39] = '\n'; // 0x0A
ugFrame[40] = '\r'; // 0x0D
The above data is sent to the mission host (uG control/rocket) and later recovered. The recorded data can be decoded using the following formulas:
Conversion formulas:
SOF: x7Bx7Bx7B
OBDH System Clock (s) = (obdh_sysclock_s_H << 8) + obdh_sysclock_s_L
OBDH System Clock (ms) = (obdh_sysclock_ms_H << 8) + obdh_sysclock_ms_L
OBDH Status code = obdh_statuscode
IMU_ACC_RANGE = 16.0
IMU ACC X = (((imu_acc_x_H << 8 | imu_acc_x_L) * IMU_ACC_RANGE) / 32768.0)
IMU ACC Y = (((imu_acc_y_H << 8 | imu_acc_y_L) * IMU_ACC_RANGE) / 32768.0)
IMU ACC Z = (((imu_acc_z_H << 8 | imu_acc_z_L) * IMU_ACC_RANGE) / 32768.0)
IMU_GYR_RANGE = 250.0
IMU GYR X = (((imu_acc_x_H << 8 | imu_acc_x_L) * IMU_GYR_RANGE) / 32768.0)
IMU GYR X = (((imu_acc_y_H << 8 | imu_acc_y_L) * IMU_GYR_RANGE) / 32768.0)
IMU GYR Z = (((imu_acc_z_H << 8 | imu_acc_z_L) * IMU_GYR_RANGE) / 32768.0)
Radio Counter 1 = (radio_counter1_H << 8) + radio_counter1_L
Radio Counter 2 = (radio_counter2_H << 8) + radio_counter2_L
EPS Current = ((eps_current_H << 8) + eps_current_L) * (0.0000015625 / 0.015)
EPS Voltage Bat 1 = ((eps_voltage_bat1_H << 8) + eps_voltage_bat1_L) * 0.004886
EPS Voltage Bat 2 = ((eps_voltage_bat2_H << 8) + eps_voltage_bat2_L) * 0.004886
EPS Temperature = ((eps_temperature_H << 8) + eps_temperature_L) * 0.125
EPS Current Acc = ((eps_current_acc_H << 8) + eps_current_acc_L) * (0.00000625 / 0.015)
EPS Bat Mon Reg = eps_batmon_reg
EOF: x7Dx0Ax0D