Skip to the content
PCBKitNew board
2 layers30 × 30 mmCubeSatPowerAnalyticsUnit, the printed circuit board in 3D

CubeSatPowerAnalyticsUnit

Larion2003/CubeSatPowerAnalyticsUnit

CubeSat Power Analytics Unit

Size
30 × 30 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
32
Pads
74
Tracks, vias
146, 16
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
23 Feb 2026
Updated
28 Oct 2026

Overview

CubeSatPowerAnalyticsUnit is an open-source printed circuit board by Larion2003, from the Larion2003/CubeSatPowerAnalyticsUnit repository on GitHub. It is a 2-layer board of 30 × 30 mm with 15 parts on 32 nets, routed with 146 tracks and 16 vias.

Its parts include 3 capacitors, 3 resistors, 1 diode, 1 transistor and 1 connector. It belongs with the STM32 boards of this library.

README

README.md

TiSAT CubeSat - Power Analytics Unit

This repository contains the design and development files for the Power Analytics Unit of the TiSAT CubeSat project. The primary objective is to monitor and analyze the power consumption of various sensors integrated into the satellite.

Project Overview

The core of this project is a custom-designed power measurement circuit. It utilizes a shunt resistor to measure minute currents and voltage levels across specific circuit branches, enabling precise power calculation.

Since the satellite is equipped with solar panels for battery charging, the power management logic accounts for both energy harvesting and consumption cycles to ensure balanced power distribution.

Current Progress

  • Circuit Design: Completed the schematic and PCB layout using KiCad.
  • Component Selection: Selected specialized ICs for precision current sensing (INA199A1) and the STM32L431KC microcontroller.
  • Manufacturing & Assembly: The custom PCB has been fully manufactured, and all SMD and through-hole components (including critical high-precision IC packages) have been successfully soldered and assembled.
  • Firmware Communication Loop: Established a low-level hardware communication interface between the STM32 MCU and a Raspberry Pi Pico W using single-wire, half-duplex UART with inverted polarity (open-drain transmitter, 9600 baud). The firmware is bare-metal and uses blocking (polling) USART access.
  • Ping-Pong Verification: As the first step, confirmed working end-to-end UART communication on the shared single-wire bus — the STM32 replied pong\n to every ping\n sent by the Raspberry Pi Pico W, verifying the physical link between the two microcontrollers.
  • Shunt Resistor Calibration: Performed a 4-point (Kelvin) measurement to precisely determine the shunt resistor's true value (52.2865 mΩ, not the nominal 50 mΩ).
  • TiSAT Protocol Implementation: Replaced the raw ping-pong test with the full, checksum-validated TiSAT frame protocol ($/# direction, 3-character module ID, payload, checksum, terminator), matching the shared master-side specification used across the TiSAT project's other modules.
  • ADC-Based Power Measurement: Implemented calibrated ADC sampling of the shunt voltage — using the internal VREFINT reference to compensate for real VDDA deviation and 64x oversampling to suppress noise — converting the INA199 current-sense amplifier output into live current, voltage and power readings, delivered over the GETDATA command.
  • Current Calibration & Verification: Calibrated the current measurement against known reference currents with a straight-line (linear regression) correction, and added a no-load threshold so an unloaded module reports exactly 0. Verified on 38 reference points between 1 mA and 200 mA: the worst absolute error is 0.194 mA (about 0.1 % of the 200 mA range), the relative error is below 0.3 % from 50 mA up and reaches 8.7 % only at 1 mA, where one ADC step (about 0.31 mA) limits the resolution.

Software Architecture & Development

The software side consists of the low-level firmware of the onboard microcontroller and a test master for the receiving subsystem:

  1. Custom HAL (Hardware Abstraction Layer): Bare-metal foundational drivers written from scratch in C++ to manage the MCU peripherals (RCC, GPIO, ADC, USART), without any vendor HAL or RTOS.
  2. Request-Response Communication: The STM32 acts as a Slave: it waits for a command frame from the Master (ping, GETDATA) and answers it over the shared open-drain bus. Reception and transmission use polling in the main loop, which keeps the firmware simple and its timing predictable.
  3. Calibrated Measurement Pipeline: Every GETDATA request is answered with fresh, calibrated current, voltage and power values, based on the VREFINT-compensated, 64x oversampled ADC readings and the linear-regression current calibration.
  4. Subsystem Master (Test): A CircuitPython-based test master on the Raspberry Pi Pico W periodically sends ping and GETDATA frames, prints the replies, and toggles a diagnostic heartbeat LED.

About the Author

This project is being developed as part of my undergraduate thesis at the University of Szeged (SZTE), under the guidance of my supervisor.

It serves as a practical application of my ongoing studies in C, C++, and Assembly. This mission allows me to bridge the gap between hardware design and low-level software engineering while contributing to the TiSAT satellite mission.


Thank you for visiting this repository!

Parts

15
QtyValueFootprintReferences
3100 nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C3
10.05 OhmResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1
110K OhmResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3
11K OhmResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2
12N7002Package_TO_SOT_SMD:SOT-23Q1
1BAT43W-VDiode_SMD:D_SOD-323_HandSolderingD1
1Conn_01x05_PinConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_HorizontalJ1
1GNDTestPoint:TestPoint_Pad_3.0x3.0mmT3
1INA199xxDCKPackage_TO_SOT_SMD:SOT-363_SC-70-6INA1
1STM32L431KCUxPackage_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mmMCU1
1UARTTestPoint:TestPoint_Pad_3.0x3.0mmT4
1V_In (3,3V)TestPoint:TestPoint_Pad_3.0x3.0mmT1
1V_OutTestPoint:TestPoint_Pad_3.0x3.0mmT2

Questions

How big is the CubeSatPowerAnalyticsUnit PCB?

It measures 30 × 30 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CubeSatPowerAnalyticsUnit use?

15 parts. 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 CubeSatPowerAnalyticsUnit KiCad files?

From the Larion2003/CubeSatPowerAnalyticsUnit repository on GitHub, at the commit this page was made from: the board is Hardware/CubeSatPowerAnalyticsUnit/CubeSatPowerAnalyticsUnit.kicad_pcb and its schematic Hardware/CubeSatPowerAnalyticsUnit/CubeSatPowerAnalyticsUnit.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the CubeSatPowerAnalyticsUnit design in my own project?

Its repository states no licence, so its author keeps all rights: ask Larion2003 before reusing the design.

Similar boards

  • 2 layers19 × 76 mmSub, the printed circuit board in 3D

    Sub

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    15 parts3kApache-2.0
  • 2 layers26.7 × 62.2 mmDeniseadapter, the printed circuit board in 3D

    Deniseadapter

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    15 parts1kGPL-3.0
  • 2 layers100 × 44 mmVideoslot, the printed circuit board in 3D

    Videoslot

    mntmn/amiga2000-gfxcard

    MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

    15 parts1k
  • 2 layers91 × 51 mmBusinessCard, the printed circuit board in 3D

    BusinessCard

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    15 parts915
  • 2 layers24.3 × 57.9 mmFlosspods pro flex, the printed circuit board in 3D

    Flosspods pro flex

    kenp-io/not-for-airpods-repairs

    The content of this repository is licensed under the WTFPL License. Please have a close look at the terms before using this material.

    15 parts609WTFPL
  • 2 layers20.3 × 15.2 mmL0 Load, the printed circuit board in 3D

    L0 Load

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    15 parts546MIT
  • 2 layers68 × 50 mmEleLab v2 PowerFeed, the printed circuit board in 3D

    EleLab v2 PowerFeed

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    15 parts531GPL-3.0
  • 2 layers50.8 × 35.6 mmInterface, the printed circuit board in 3D

    Interface

    harbaum/I2C-Tiny-USB

    Cheap and simple I²C to USB interface

    15 parts454