A 3U CubeSat designed for Low Earth Orbit — carrying experimental vaccum arch thruster units.
Amateur Radio Callsign: KQ4NPQ | George Washington University
Disclaimer:
A satellite project of 1 cannot be accomplished without the help of a long list of mentors guiding the way while using AI to drastically cut down on learning time and implementation of ideas. Using the tools at our disposal many mission critical tasks have been achieved in a short timeline.
GWU-Sat is a student-built 3U CubeSat developed at George Washington University. The primary mission objective is to test experimental vaccum arc thruster units in LEO. The satellite integrates a primary UHF communication link, a standalone LoRa digipeater, and supporting subsystems including an EPS, OBC, and thruster controller.
The OBC firmware is written in C and targets a Pumpkin PPM D2 (dsPIC33FJ256GP710), running under the Salvo RTOS. All flight-critical code attempt to follow NASA's 10 Rules for Safety-Critical Software.
| Subsystem | Hardware |
|---|---|
| OBC | Pumpkin PPM D2 (dsPIC33FJ256GP710, 8MHz FOSC) on Pumpkin CubeSat Kit Dev Board |
| EPS | AAC Clyde Space Starbuck-NANO w/ integrated battery |
| UHF Transceiver | EnduroSat UHF II (ESTTC protocol, I2C @ 0x22) |
| Thruster Controller | Adafruit ItsyBitsy 5V (ATmega32u4), I2C slave @ 0x05 |
| Digipeater | Adafruit Feather 32u4 + RFM95 LoRa module |
| Packet Logger | Adafruit M0 Adalogger |
| Ground Station | Kenwood TH-D7 + 436CP30 Yagi + Yaesu G-5500 rotator |
- RTOS: Salvo (PIC flavor, large memory model, pro-lib)
- Compiler: MPLAB X + MCC30
- Language: C (NASA safety-critical rules enforced)
- Project path:
Main_Build/Salvo/Example/PIC/PIC24/Simulator/Tut/Tut5/MCC30
Note: Salvo library files are not included in this repository and must be acquired separately.
| Task | Description |
|---|---|
task_system |
One-shot system initialization, destroys itself on completion |
task_idle |
Entered when no other tasks are runnable |
task_status_check |
Periodic component health polling |
task_thrusters_1 |
Thruster command and status management |
| Address | Component |
|---|---|
0x01 |
OBC (internal) |
0x02 |
Telemetry |
0x03 |
EPS |
0x04 |
UHF Transceiver |
0x05 |
Thruster Controller |
- AX.25 payload max: 66 bytes
- OBC command flag:
0xAA(chosen for HDLC bit-stuffing safety —10101010never triggers stuffing) - ESTTC protocol used for transceiver communication
- Digipeater is fully standalone — powered from EPS with no OBC data connection
- Uplink/Downlink: UHF at 436.42 MHz (IARU coordinated)
- Digipeater: LoRa-based standalone digipeater at the same frequency allocation
- Ground Software: Direwolf software TNC + Kenwood TH-D7
- Simulator runs successfully in MPLAB X
- Introductory tasks:
StartSystem,SystemInit - Compiles and flashes to PPM D2 via PICkit 3
- Serial output confirmed from Pumpkin Dev Board
- Basic system tasks running
- OBC — Alive; 12-hour long-haul sims passed
- UHF Transceiver — Procured and tested
- EPS — Procured and tested
- Battery — Procured and tested
- ADCS — Not yet tested
- Ping all individual components on startup
- System timer running
- multi-hour long-haul test per version
- 32-byte general status telemetry packet implemented and downlinked
- Command processing pipeline (
I2C_CommandIncoming) - Global shutdown (
0x01 0x07) with last-gasp telemetry +pwrsav
- Link budget analysis (CommsDocs)
- Working LoRa digipeater at 436.42 MHz
- 3D printed CubeSat mount (Models Folder)
- Integrated into 3V and GND power buses
- Thruster subroutine inside
Main.candsatellite_defs.h - ItsyBitsy firmware producing clean ~20Hz PWM pulse signal
- I2C thruster status command (
0x05 0x01) working - Physical thruster attached to system and worked validating ground -> OBC -> thruster command flow
- Resolve remaining thruster status bytes returning
0xFF(requestEventtruncation fix) - Datalogging task
- Solar panel configuration (8× independent BCR inputs)
- Ground station mechanical assembly (mast, LMR-400 cabling, rotator)
This project is developed by Bogdan Bunea at The George Washington University