

Open Source Earth Imaging Satellite Hardware + Firmware
- Size
- 80 × 80 mm
- Copper layers
- 6
- Thickness
- 1.6 mm
- Parts
- 413
- Nets
- 316
- Pads
- 1,345
- Tracks, vias
- 4,165, 712
- Pours
- 98
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 23 Aug 2025
- Updated
- 8 Nov 2026
Overview
Eps is an open-source printed circuit board by OSUSat, from the OSUSat/cubesat repository on GitHub, published under the MIT licence. It is a 6-layer board of 80 × 80 mm with 413 parts on 316 nets, routed with 4,165 tracks and 712 vias.
It is built around the 74LVC1G07SE-7-MS, SN65HVD230D and IRLML0030. Its parts include 135 resistors, 116 capacitors, 40 ICs, 20 transistors and 12 diodes.
Main components
374LVC1G07SE-7-MS
SC-70-5SC-70-5 Buffers, Drivers, Receivers, Transceivers ROHSMSKSEMIBuffers, Drivers, Receivers, TransceiversSN65HVD230D
SOIC-8-40℃~+85℃ 1 17mA 1Mbps 370uA 3V~3.6V CAN Transceiver Low-power mode、Wake-up function、ESD protection、Thermal shutdown protection、Bus fault protection、Hot-swap protection SOIC-8 CAN Transceivers ROHSTexas InstrumentsCAN TransceiversIRLML0030
SOT-23-55℃~+150℃ 1 N-channel 2.3V 2.6nC 27mΩ@10V 30V 382pF 39pF 5.3A SOT-23 MOSFETs ROHSGuangdong HottechMOSFETs
README
README.mdOregon State University (OSU) AIAA OSUSat/SCRT Climate Science CubeSat
Welcome to the central repository for the OSUSat Climate Science CubeSat project. This repository contains the hardware designs, firmware, and documentation for the sub-systems comprising the satellite.
Mission Context & Goals
The OSUSat Climate Science CubeSat is a low-Earth orbit (LEO) satellite designed to capture high-resolution imagery and scientific data for climate science research.
Mission Objectives
- Earth Observations: Capture multispectral or high-resolution imagery using a dual-camera payload to study surface health, atmospheric conditions, cloud formations.
- Reliable Power Delivery (EPS): Harvest solar power from 6 body-mounted solar panels, manage charge for 4x 18650 Li-ion batteries, and distribute and regulate power rails to prevent overcurrent/overvoltage events.
- Command & Telemetry (OBC): Orchestrate system operations, manage communication buses (CANBus, UART, I2C, SPI), process ground commands, and monitor satellite health.
System Architecture
The satellite is divided into five primary subsystems interconnected via a shared backplane connector (exposing power rails and UART/CAN control buses):
graph TD
Solar[Solar Panels & Batteries] --> EPS[Electrical Power System - EPS]
EPS -->|Power| OBC[On-Board Computer - OBC]
EPS -->|Power| Payload[Science Camera Payload]
EPS -->|Power| ADCS[Attitude Determination & Control - ADCS]
EPS -->|Power| Comms[UHF Communications]
OBC <-->|Control Bus| EPS
OBC <-->|Control Bus| Payload
OBC <-->|Control Bus| ADCS
OBC <-->|Control Bus| Comms
Comms <-->|Radio Link| Ground[Ground Station]1. Electrical Power System (EPS)
- Microcontroller: NXP S32K3 Series / STM32L496xx (ARM Cortex-M4)
- Responsibilities:
- Solar energy harvesting with Maximum Power Point Tracking (MPPT).
- Battery charge/discharge management (2 independent packs of 2x 18650 cells).
- Voltage regulation (3.3V & 5V rails) with software-controllable load switches.
- Fast hardware-level and software-level overcurrent protection.
- Hardware watchdog monitoring.
- Broad mission context management using the MCU
2. On-Board Computer (OBC)
- Microcontroller: Main MCU + STM32H743xx (ARM Cortex-M7)
- Responsibilities:
- Master command parsing and state management.
- Health heartbeats and telemetry collection.
- Orbital calculations and scheduling payload imaging windows.
- Ground station radio communication interface.
3. Payload
- Processor: Raspberry Pi Compute Module 4 (CM4)
- Responsibilities:
- High-speed dual-camera scientific imaging.
- Actuator/motor driver control (e.g., lens shutters, filter wheels) (V1 Only).
- Image compression and storage before downlink.
4. Attitude Determination and Control System (ADCS)
- Responsibilities: Detumbling the spacecraft, aligning the imaging payload to nadir pointing, and tracking target orientations.
5. UHF Communications (Comms)
- Responsibilities: Uplinking commands and telemetry requests from ground stations, and downlinking collected science data and telemetry beacons.
Repository Structure
The project uses a versioned directory structure separating hardware and firmware iterations:
.
├── .github/ # GitHub Workflows & Issue/PR Templates
│ └── workflows/
│ ├── build_and_docs.yml # CI/CD action defining the pipeline
│ └── build_and_test.sh # Dynamic build script runner
│
├── adcs/ # Attitude Determination and Control System
│ ├── v1/
│ └── v2/
│
├── eps/ # Electrical Power System Subsystem
│ ├── v1/ # Version 1 (Prototype Model)
│ │ ├── firmware/ # STM32L4 firmware (CMake, CUnit tests, mocks)
│ │ ├── hardware/ # KiCad schematic, layout, symbols, & footprints
│ │ └── documentation/ # Doxygen, Sphinx configuration & spec files
│ ├── v2/ # Version 2 (Placeholder for v2 development)
│ └── documentation/ # Bootflows, subsystem specifications, & kickoff info
│
├── obc/ # On-Board Computer Subsystem
│ ├── v1/ # Version 1 (Prototype Model)
│ │ ├── firmware/ # STM32H7 firmware (CMake)
│ │ ├── hardware/ # KiCad schematic and layout
│ │ └── tests/ # Pico-based LoRa packet transmission test
│ ├── v2/ # Version 2 (Placeholder for v2 development)Getting Started & Building
1. Prerequisite Toolchains
Ensure you have the following installed on your host system:
- ARM Cross Compiler:
gcc-arm-none-eabi - Build System Tools:
cmake,make,g++ - Documentation Generators:
doxygen, Python 3 +sphinx
2. Fetching Submodules
This repository utilizes submodules (such as osusat/core and osusat/messaging). Clone with submodules or initialize them:
git submodule update --init --recursive3. Hardware Development & KiCad Templates
To create new expansion / daughterboard hardware designs in KiCad, symlink the shared template directory to your local KiCad user template path:
- Linux:
bash mkdir -p ~/.local/share/kicad/10.0/template ln -sf /path/to/cubesat/repo/shared/kicad/templates/test_board ~/.local/share/kicad/10.0/template/test_board - Windows (PowerShell):
powershell New-Item -ItemType Directory -Force -Path "$env:APPDATA\kicad\10.0\template" New-Item -ItemType SymbolicLink -Path "$env:APPDATA\kicad\10.0\template\test_board" -Target "C:\path\to\cubesat\repo\shared\kicad\templates\test_board"
Once symlinked, open KiCad, click File → New Project from Template..., select the User Templates tab, and choose OSUSat Backplane Test Board Template.
For full manual setup options and details, see shared/kicad/README.md.
4. Compilation Guide
Building for the ARM Target (e.g., EPS v1)
To build the firmware binaries to flash onto the MCU:
cd eps/v1/firmware
cmake -B build_arm -S . -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi-toolchain.cmake
cmake --build build_armOutputs: .elf, .hex, and .bin files will be generated under build_arm/.
Building Host Tests / Hardware-in-the-Loop (HITL) Mocks
To build and execute unit tests on your local machine:
cd eps/v1/firmware
cmake -B build_hitl -S . -DTARGET_ARCH=HOST -DBUILD_HITL=ON
cmake --build build_hitl
cd build_hitl && ctest --output-on-failureCI/CD Pipeline
The repository uses a generalized GitHub Actions workflow:
- Scope-Based Execution: Uses git diffs to detect which subsystem version has been modified (e.g.
eps/v1/vsobc/v1/) and builds only the affected firmware. - Continuous Integration: Runs host-based CTests automatically to verify changes.
- Documentation Deployments: Generates Doxygen API listings and Sphinx documentation on successful builds. Pull Requests automatically receive a comment with links to Pages-hosted previews of the documentation.
Quality Assurance & Contributions
Before submitting a Pull Request, contributors must follow the project's QA procedures found in /documentation:
- Issue Checkout: Before work or contributions begin, ensure your changes are encapsulated by an issue in the GitHub project
- Design Guidelines: For any and all changes, follow the design guidelines.
- Design Reviews: Complete the Schematic Review Checklist and Layout Review Checklist checklists before fabricating PCBs.
- Firmware Guidelines: Adhere to the HITL Guidelines and Keeping the HAL Policy Free design rules.
- Acceptance Tests: All hardware deliverables require a formal ATP (Acceptance Test Procedure).
Parts
413| Qty | Value | Footprint | References |
|---|---|---|---|
| 58 | 100n | Capacitor_SMD:C_0402_1005Metric | C10, C13, C103, C105, C113, C114, C115, C116, C117, C118, C119, C120, C121, C122, C123, C124 +42 |
| 25 | 1M | Resistor_SMD:R_0402_1005Metric | R4, R23, R24, R26, R48, R49, R51, R54, R55, R57, R60, R61, R63, R66, R67, R69 +9 |
| 18 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18 +2 |
| 17 | 0 | Resistor_SMD:R_0402_1005Metric | R6, R21, R25, R46, R50, R52, R56, R58, R62, R64, R68, R70, R74, R76, R80, R82 +1 |
| 16 | IRLML0030 | Package_TO_SOT_SMD:SOT-23 | Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20 |
| 15 | 100k | Resistor_SMD:R_0402_1005Metric | R5, R22, R30, R47, R53, R59, R65, R71, R77, R83, R105, R106, R114, R115, R133 |
| 10 | 1.5k | Resistor_SMD:R_0402_1005Metric | R122, R123, R124, R125, R126, R127, R128, R129, R130, R131 |
| 10 | 22u | Capacitor_SMD:C_0805_2012Metric | C94, C95, C96, C97, C98, C106, C107, C108, C109, C110 |
| 9 | 10k | Resistor_SMD:R_0402_1005Metric | R13, R19, R29, R89, R90, R96, R97, R109, R112 |
| 9 | 1uF | Capacitor_SMD:C_0402_1005Metric | C3, C26, C54, C59, C64, C69, C74, C79, C84 |
| 8 | 22n | Capacitor_SMD:C_0402_1005Metric | C4, C5, C14, C21, C89, C92, C101, C104 |
| 8 | 74LVC1G07SE-7 | Package_TO_SOT_SMD:SOT-353_SC-70-5 | U6, U12, U16, U20, U24, U28, U32, U36 |
| 8 | NCS214RSQT2G | Package_TO_SOT_SMD:SOT-363_SC-70-6 | U5, U11, U15, U19, U23, U27, U31, U35 |
| 8 | NetTie_2 | NetTie:NetTie-2_SMD_Pad0.5mm | NT1, NT2, NT3, NT4, NT5, NT6, NT7, NT8 |
| 8 | TPS22810DRVR | Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm | U8, U14, U18, U22, U26, U30, U34, U38 |
| 8 | ~ | Package_TO_SOT_SMD:SOT-23-6 | U7, U13, U17, U21, U25, U29, U33, U37 |
| 7 | 20m | Resistor_SMD:R_1206_3216Metric | R31, R35, R37, R39, R41, R43, R45 |
| 6 | 4.7u | Capacitor_SMD:C_0402_1005Metric | C7, C8, C9, C12, C19, C46 |
| 6 | Conn_01x02 | Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical | J3, J4, J5, J6, J7, J8 |
| 6 | D_Schottky | Diode_SMD:D_SOD-323 | D2, D4, D6, D8, D10, D12 |
| 6 | D_TVS | Diode_SMD:D_SOD-523 | D1, D3, D5, D7, D9, D11 |
| 6 | Fiducial | Fiducial:Fiducial_1mm_Mask2mm | FID1, FID2, FID3, FID4, FID5, FID6 |
| 6 | Polyfuse | Fuse:Fuse_0402_1005Metric | F1, F2, F3, F4, F5, F6 |
| 5 | 1u | Capacitor_SMD:C_0402_1005Metric | C11, C18, C36, C90, C102 |
| 4 | 4.7k | Resistor_SMD:R_0402_1005Metric | R9, R10, R15, R16 |
| 4 | 470k | Resistor_SMD:R_0402_1005Metric | R110, R111, R119, R120 |
| 4 | 499k | Resistor_SMD:R_0402_1005Metric | R88, R91, R95, R98 |
| 4 | 50k | Resistor_SMD:R_0402_1005Metric | R107, R108, R116, R117 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 4 | NMOS | footprints:TRANS_FDMC8327L | Q1, Q2, Q3, Q4 |
| 2 | 100u | Capacitor_Tantalum_SMD:CP_EIA-7343-15_Kemet-W | C87, C99 |
| 2 | 10m | Resistor_SMD:R_1206_3216Metric | R14, R20 |
| 2 | 10p | Capacitor_SMD:C_0402_1005Metric | C48, C50 |
| 2 | 10u | Capacitor_SMD:C_0402_1005Metric | C15, C22 |
| 2 | 10u | Capacitor_SMD:C_1206_3216Metric | C16, C23 |
| 2 | 120 | Resistor_SMD:R_0402_1005Metric | R135, R137 |
| 2 | 120R | Inductor_SMD:L_0603_1608Metric | FB1, FB2 |
| 2 | 140k | Resistor_SMD:R_0402_1005Metric | R32, R34 |
| 2 | 16m | Resistor_SMD:R_1206_3216Metric | R11, R17 |
| 2 | 18k | Resistor_SMD:R_0402_1005Metric | R7, R8 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric | C47, C49 |
| 2 | 20p | Capacitor_SMD:C_0402_1005Metric | C38, C40 |
| 2 | 22u | Capacitor_SMD:C_0603_1608Metric | C88, C100 |
| 2 | 2k | Resistor_SMD:R_0402_1005Metric | R27, R102 |
| 2 | 300k | Resistor_SMD:R_0402_1005Metric | R38, R42 |
| 2 | 4.7u | Capacitor_SMD:C_1206_3216Metric | C111, C112 |
| 2 | 4.7u | Inductor_SMD:L_KOHERelec_MDA5030 | L4, L5 |
| 2 | 430k | Resistor_SMD:R_0402_1005Metric | R93, R100 |
| 2 | 5.1k | Resistor_SMD:R_0402_1005Metric | R1, R2 |
| 2 | 51k | Resistor_SMD:R_0402_1005Metric | R134, R136 |
| 2 | 6.8u | Inductor_SMD:L_Vishay_IHLP-2020 | L2, L3 |
| 2 | 63.4k | Resistor_SMD:R_0402_1005Metric | R12, R18 |
| 2 | 680k | Resistor_SMD:R_0402_1005Metric | R104, R113 |
| 2 | Conn_01x03 | Connector_JST:JST_PH_S3B-PH-K_1x03_P2.00mm_Horizontal | J9, J10 |
| 2 | LOGO | LOGO | G***, G*** |
| 2 | LTC4162-L | Package_DFN_QFN:QFN-28-1EP_4x5mm_P0.5mm_EP2.65x3.65mm | U3, U4 |
| 2 | LTC4415 | Package_SO:MSOP-16-1EP_3x4.039mm_P0.5mm_EP1.651x2.845mm | U41, U42 |
| 2 | MP28167-A | Package_DFN_QFN:MPS_QFN-16_3x3mm_P0.5mm | U39, U40 |
| 2 | SN65HVD230 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U43, U44 |
| 1 | 107k | Resistor_SMD:R_0402_1005Metric | R101 |
| 1 | 10M | Resistor_SMD:R_0402_1005Metric | R3 |
| 1 | 10n | Capacitor_SMD:C_0402_1005Metric | C51 |
| 1 | 187k | Resistor_SMD:R_0402_1005Metric | R94 |
| 1 | 1k | Resistor_SMD:R_0402_1005Metric | R103 |
| 1 | 200k | Resistor_SMD:R_0402_1005Metric | R36 |
| 1 | 20k | Resistor_SMD:R_0402_1005Metric | R44 |
| 1 | 22u | Capacitor_SMD:C_1206_3216Metric | C6 |
| 1 | 2m | Resistor_SMD:R_1206_3216Metric | R33 |
| 1 | 32KHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y2 |
| 1 | 390 | Resistor_SMD:R_0402_1005Metric | R28 |
| 1 | 4.7uF | Capacitor_SMD:C_0402_1005Metric | C2 |
| 1 | 402k | Resistor_SMD:R_0402_1005Metric | R132 |
| 1 | 47uF | Capacitor_SMD:C_1206_3216Metric | C1 |
| 1 | 49.9k | Resistor_SMD:R_0402_1005Metric | R40 |
| 1 | 6.8uH | Inductor_SMD:L_Sunlord_SWPA4018S | L1 |
| 1 | 806k | Resistor_SMD:R_0402_1005Metric | R99 |
| 1 | 8MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 900k | Resistor_SMD:R_0402_1005Metric | R92 |
| 1 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | Conn_02x20_Counter_Clockwise | Connector_Samtec_EdgeRate:Samtec_ERM8-020-XX.X-DV_2x20_P0.8mm_Terminal | J12 |
The 386 most common of 413 parts.
Questions
How big is the Eps PCB?
It measures 80 × 80 mm and has 6 copper layers, 1.6 mm thick.
What parts does the Eps use?
413 parts, built around the 74LVC1G07SE-7-MS, SN65HVD230D and IRLML0030. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Eps KiCad files?
From the OSUSat/cubesat repository on GitHub, at the commit this page was made from: the board is eps/v1/hardware/eps.kicad_pcb and its schematic eps/v1/battery_contact_l/battery_contact.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Eps design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from OSUSat/cubesat
6- 4 layers80 × 80 mm

- 4 layers80 × 80 mm

- 2 layers73 × 28 mm

Battery contact panel
OSUSat/cubesat
Open Source Earth Imaging Satellite Hardware + Firmware
34 parts8MIT - 2 layers35 × 28 mm

- 2 layers35 × 28 mm

- 4 layers12.6 × 17 mm

Similar boards
- 4 layers68 × 87 mm

Spha gateway
sillevl/spha-gateway-hardware
Gateway PCB integrating a Raspberry Pi Compute Module 4, CAN circuitry, and power circuitry.
75 parts - 4 layers55 × 14.7 mm

- 4 layers54.6 × 57.1 mm

CM5 MINIMA
piecol/CM5_MINIMA_REV1
CM5 LoRaWAN carrier board in a compact, feature-filled footprint
98 parts63CERN-OHL-S-2.0 - 2 layers114 × 102 mm

Rpi cm4-switch board
sequoia-hope/rpi-cm4-switch-board
A Raspberry Pi (RPi) Compute Module 4 (CM4) Carrier Board with integrated gigabit switch
94 parts45 - 6 layers76 × 56 mm

CM4 MANET
ties1887/Mesh-radio-Halow-LoRa
Modular mesh radio system using Raspberry Pi + HaLow (802.11ah) + LoRa.
122 parts40 - 4 layers170 × 170 mm

CM5IO
sanctuary-systems-com/rpi-cm5io-mini-itx
A mini ITX board with PCIe x16 based on the Raspberry Pi Comput Module 5 IO board
75 parts29CERN-OHL-P-2.0 - 6 layers80.9 × 63 mm

- 4 layers110 × 100 mm
