Project Overview
This project, as part of the Michigan Aeronautical Science Association (MASA), focuses on developing a robust, long-range telemetry system for high-altitude rockets. The primary goal is to ensure reliable, real-time data transmission from the rocket to a ground station, even at altitudes up to 75,000 feet.
The system utilizes LoRa (Long Range) communication in the 2.4GHz band, leveraging Chirp Spread Spectrum (CSS) modulation to achieve a resilient communication link. This is critical for post-flight analysis, especially in scenarios where the primary black box data recorder may be unrecoverable. This project addresses a key failure point from past launches by creating a redundant, live telemetry backup.
Technical Approach
LoRa Communication & Antennas
The core of the system is built around the SX1280 LoRa transceiver module. On the rocket, a patch antenna is integrated into one of the tailfins to provide a compact and aerodynamic solution for transmitting data. This placement helps maintain a clear signal path, especially during the rocket's descent phase.
LoRa modulation provides excellent resilience to interference and requires low power, making it ideal for a rocket's constrained environment. Our target is a 40Kbps telemetry data rate, which is a balance between data throughput and link reliability over long distances.
Dual-Antenna Ground Station
To maximize signal reception, the ground station employs a dual-antenna setup. This includes a high-gain directional Yagi antenna that must be aimed at the rocket and a semi-omni-directional dome antenna. This diversity helps mitigate signal loss due to rocket orientation changes during flight. An antenna splitter combines the signals before they are processed.
Link Budget Analysis
A critical part of the design process is the RF link budget analysis. By accounting for transmitter power (12.5 dBm), antenna gains (8 dBi ground, 6 dBi rocket), free-space path loss at 20km, and other system losses, we calculated a received power of -108.9 dBm. This is well within the SX1280's receive sensitivity of -132 dBm, providing a healthy link margin to ensure reliable communication.
Data Analysis & Results
Initial testing of the transmitter and receiver test boards has yielded promising data. The following plots show the Received Signal Strength Indicator (RSSI) and Signal-to-Noise Ratio (SNR) over time during a hotfire test, demonstrating a stable link against rocket plume.
RSSI Over Time
RSSI remains consistently around -75 dBm, indicating a strong signal.
SNR Over Time
SNR is stable above 10 dB, indicating a clear signal with low noise.
Firmware Driver Development
As the Radio Lead, I am pioneering the development of a bare-metal C driver for the Semtech SX1280 transceiver. A key challenge is ensuring data integrity in a multi-threaded environment. The firmware is architected for radio configuration, packet handling, and data buffering, and leverages FreeRTOS critical sections for thread-safe SPI communication.
static void SX1280_SPI_TransmitReceive(uint8_t *pTxData, uint8_t *pRxData, uint16_t size)
{
// wait for radio to not be busy before starting SPI transaction
SX1280_WaitForReady(100); // 100ms timeout
// enter critical section for thread safety
taskENTER_CRITICAL();
// set NSS low to select the radio
HAL_GPIO_WritePin(sx1280_hal_config->nssPort, sx1280_hal_config->nssPin, GPIO_PIN_RESET);
// perform SPI transaction
if (pRxData == NULL)
{
HAL_SPI_Transmit(sx1280_hal_config->spiHandle, pTxData, size, HAL_MAX_DELAY);
}
else
{
HAL_SPI_TransmitReceive(sx1280_hal_config->spiHandle, pTxData, pRxData, size, HAL_MAX_DELAY);
}
// set NSS high to deselect the radio
HAL_GPIO_WritePin(sx1280_hal_config->nssPort, sx1280_hal_config->nssPin, GPIO_PIN_SET);
// exit critical section
taskEXIT_CRITICAL();
// wait for radio to be ready after transaction
SX1280_WaitForReady(100); // 100ms timeout
}