Skip to the content
PCBKitNew board
4 layers55 × 154.1 mmGPS module, the printed circuit board in 3D

This project uses an STM32H743VGT6 MCU along with some innertial measurement units (IMU)s and barometric pressure sensors to and an SD card to record flight data from a model rocket and for later analysis, graphing, and plotting using Python.

Size
55 × 154.1 mm
Copper layers
4
Thickness
1.6 mm
Parts
161
Nets
173
Pads
550
Tracks, vias
1,266, 325
Pours
4
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
19 Apr 2026
Updated
26 Apr 2026

Overview

GPS module is an open-source printed circuit board by Dizzerin, from the Dizzerin/Rocket-Flight-Data-Computer repository on GitHub. It is a 4-layer board of 55 × 154.1 mm with 161 parts on 173 nets, routed with 1,266 tracks and 325 vias.

It is built around the BME680, MMC5983MA and MS5611-01BA03, with the SN74LVC8T245PW, AMS1117-3.3 and ICM-20948 among its other parts. Its parts include 45 capacitors, 29 resistors, 20 connectors, 12 ICs and 5 diodes. It belongs with the sensors and measurement and radio and wireless boards and the STM32 boards of this library.

Main components

9

README

README.md

Rocket Flight Data Computer

A flight data logger for model rockets built around the STM32H743VGT6 microcontroller. It records inertial (accelerometer + gyroscope) data at 100Hz and environmental (pressure, temperature, humidity) data at 20Hz to an SD card in CSV format for post-flight analysis, graphing, and plotting.


Table of Contents

  1. Future Improvements and Known Bugs
  2. Hardware Overview
  3. Project Structure
  4. Third-Party Libraries
  5. Module Architecture
  6. LED Behavior
  7. Cooperative Scheduler
  8. DataLogger
  9. SD Card Driver
  10. Log File Format
  11. Debug UART Connection
  12. SPI Bus & Pin Assignments

Future Improvements and Known Bugs

Known Limitations and Bugs

  • Limitation/Bug: Currently the system doesn't seem to support SD card removal and re-insertion while the system remains powered and running. In this case, the SD card seems to fail to mount on the second, and any subsequent insertions, however it should usually work on the first insertion or if the system is booted with the SD card already in.
  • Limitation: This code currently only supports SD cards that support SPI mode, typically these cards tend to be less than 8GB. Furthermore, only some cards and card manufacturers seems to work. You will likely have the best luck with cards around 1-2GB.
  • Limitation: Currently this code doesn't have LFN (long file name) support enabled, so filenames are limited to using the 8.3 format (8 characters for filename, period, then 3 characters for extension).
  • Potential Bug: Sometimes the SD card will fail to mount the first time, this is probably because SD cards in SPI mode are very sensitive to clocking etc. This issue seems to be very common for people trying to use SD cards in SPI mode with small microcontrollers such as this.

Future Improvements

  • General
    • Fix known bugs listed above.
    • Reduce limitations listed above.
  • SPI
    • Could create a custom SPI communication state machine that wraps the lower level HAL library code and change the SPI bus to be non-blocking using DMA or interrupts instead of the current blocking nature. This would require a decent amount of work though and is not necessary at this time.
  • LSM6DSO
    • Could experiment with increasing the SPI clock rate if a higher ODR (output data rate) is desired, and determine the max communication rate with the sensor.
  • SD Card
    • Could experiment with increasing the SPI clock rate, and determine the max communication rate supported.
    • Verify support for having multiple files open and writing to multiple files at a time. This could be useful in the future if we add a camera module and want to save/record pictures or videos during a flight.
  • UART3 Debug Console
    • Could implement much better buffering and data handling, consider implementing software ring buffer.
    • Could rename the myprintf() function to something better and optimize it more.
    • Could create a debugPrint() function which is compiler optimized and will only print if “#define DEBUG” is defined.
  • Camera
    • Add support for a camera module such as the ArduCam
  • PCB improvements next iteration
    • Add momentary buttons for BOOT0 and NRST pins
    • Consider adding a button to start and stop data logging
    • Remove unused/unnecessary sensors
    • Add series current limiting resistors to RGB LED
    • Fix USB issue
    • Consider adding active control capabilities - servos etc.
    • Add pads or some sort of connector for a LIPO battery
  • Python Data Analysis (post processing the log file)

Hardware Overview

MCU: STM32H743VGT6 — ARM Cortex-M7, running at 64 MHz (internal HSI oscillator, no PLL)

PeripheralInterfaceUser ModuleDescription
LSM6DSO32 IMUSPI1 (16-bit)Middlewares/ST/lsm6dso/lsm6dso32_device.c/.h6-axis IMU — accelerometer up to ±32 g (scale configurable via LSM6DSO_ACCEL_FS), gyroscope up to ±2000 dps (scale configurable via LSM6DSO_GYRO_FS), 104 Hz ODR — see lsm6dso32_device.h
BME680 BarometerSPI3 (8-bit)UserCode/bme680_device.c/.hPressure, temperature, humidity — forced-mode, 20 Hz triggered
SD CardSPI2 (8-bit)UserCode/SD_Card.c/.hFAT filesystem via FatFs — CSV data logging
LEDGPIO (PB3)Core/Src/main.cHeartbeat blink (1 Hz); fast-blink on fatal error

Note on the LED:
  • PB3 is a test pad only in the current PCB schematic — however the code is setup for an LED to be connected to this pin.
IMU scale configuration:

The accelerometer and gyroscope full-scale ranges are set by two #defines at the top of lsm6dso32_device.h. Change only the #define — the correct conversion function is selected automatically at init time.

DefineDefaultOptions
LSM6DSO_ACCEL_FSLSM6DSO32_16gLSM6DSO32_4g / _8g / _16g / _32g
LSM6DSO_GYRO_FSLSM6DSO32_2000dpsLSM6DSO32_125dps / _250dps / _500dps / _1000dps / _2000dps

Note on Dynamic Pressure Effects and PCB Placement in Rocket

If the BME680 is in a sealed or partially-sealed enclosure on the rocket, ram air pressure at high velocity can add a stagnation pressure on top of the static pressure, making the sensor read higher than true static pressure and therefore lower than true altitude. For a rocket traveling at 100 m/s (360 km/h), the dynamic pressure is:

q = 0.5 × ρ × v² = 0.5 × 1.225 × 100² ≈ 6125 Pa = 61 hPa

This would cause a significant altitude error. To avoid this, the sensor enclosure should be vented with a small port facing perpendicular to the airflow (not forward-facing), so it sees only static pressure.


Project Structure

text
Rocket-Flight-Data-Computer/
├── STM32_CubeIDE_Rocket_Project/       # STM32CubeIDE firmware project
│   ├── Core/
│   │   ├── Inc/main.h                  # CubeMX-generated pin/peripheral definitions
│   │   └── Src/main.c                  # Startup, init, scheduler registration
│   ├── UserCode/                       # User-written application code
│   │   ├── DataLogger.c/.h             # Ties IMU + BME680 → SD card CSV rows
│   │   ├── Scheduler.c/.h              # Cooperative task scheduler
│   │   ├── SD_Card.c/.h                # SD card state machine + FatFs wrappers
│   │   └── bme680_device.c/.h          # BME680 wrapper around Bosch API
│   ├── Middlewares/
│   │   ├── Third_Party/BOSCH_BME/      # Bosch BME68x SensorAPI v4.4.8
│   │   │   ├── bme68x.c
│   │   │   ├── bme68x.h
│   │   │   └── bme68x_defs.h
│   │   ├── Third_Party/FatFs/          # Chan's FatFs (bundled via STM32CubeMX)
│   │   └── ST/lsm6dso/                 # ST LSM6DSO32 register-level driver
│   │       ├── lsm6dso32_device.c/.h   # High-level init/read functions
│   │       └── lsm6dso32_reg.c/.h      # Low-level register map (ST-provided)
│   └── Drivers/                        # STM32 HAL (CubeMX-generated)
├── PCB_Schematics_KiCAD/               # KiCad PCB schematic files
├── Python_Data_Analyzer/               # Post-flight data analysis scripts
├── Datasheets/                         # Component datasheets
└── README.md

CubeMX note: Files in Core/ are managed by STM32CubeMX. All user edits inside those files must stay within /* USER CODE BEGIN */ / /* USER CODE END */ blocks to survive code regeneration.


Third-Party Libraries

LibraryVersionLocation in RepoSource
Bosch BME68x SensorAPIv4.4.8Middlewares/Third_Party/BOSCH_BME/github.com/boschsensortec/BME68x_SensorAPI
ST LSM6DSO32 driver(STM32CubeH7)Middlewares/ST/lsm6dso/github.com/STMicroelectronics/lsm6dso32-pid
FatFsR0.12cMiddlewares/Third_Party/FatFs/Bundled by STM32CubeMX (Chan's FatFs)
STM32 HAL / BSPSTM32CubeH7Drivers/Bundled by STM32CubeMX

The Bosch BME68x SensorAPI and ST LSM6DSO32 driver files are not modified. Custom wrappers (bme680_device.c/.h and lsm6dso32_device.c/.h) sit on top of them.


Module Architecture

The firmware uses a non-blocking cooperative scheduler. There is no RTOS — all modules are polled from a single main loop via Scheduler_Run(). No HAL_Delay() calls exist in the main loop or in any task function.

text
main.c  (init + main loop)
  └── Scheduler_Run()
        │
        ├── DataLogger_StateMachine_Task  [every 5 ms]
        │     │
        │     ├── bme680_device           (BME680 wrapper)
        │     │     └── Bosch BME68x API  (bme68x.c)
        │     │
        │     ├── lsm6dso32_device        (IMU high-level driver)
        │     │     └── lsm6dso32_reg     (ST register-level driver)
        │     │
        │     └── SD_Card                 (file write wrappers)
        │           └── FatFs             (ff.c)
        │
        ├── SD_StateMachine               [every 100 ms]
        │     └── SD_Card (mount/detect state machine)
        │
        └── LED_Toggle                    [every 500 ms]

LED Behavior

Pin: PB3 (LED_Pin, LED_GPIO_Port) — active-high. Note: PB3 is a test pad only in the current PCB schematic and is not connected to a discrete LED component.

The LED flash pattern indicates current system state at a glance:

StatePatternPeriodRate
Running — not logging (no SD card or SD not yet mounted)500 ms on, 250 ms off750 ms~1.3 Hz
Running — actively logging to SD card250 ms on, 250 ms off500 ms2 Hz
Fatal error (Error_Handler())100 ms on, 100 ms off200 ms5 Hz
Locked up, infinite loop, unpoweredStuck on or stuck off——

The LED task (LED_Task in main.c) is registered with the scheduler at a 50 ms poll interval and manages its own asymmetric on/off timing internally using HAL_GetTick(). It queries DataLogger_IsLogging() each cycle to select the correct flash pattern. The Error_Handler() fast-blink runs as a busy-wait loop after interrupts are disabled, so it does not depend on the scheduler or SysTick.


Cooperative Scheduler

Files: UserCode/Scheduler.c / Scheduler.h

A lightweight cooperative task scheduler based on HAL_GetTick() (1 ms SysTick resolution). Each task is a void fn(void) function pointer with an associated period in milliseconds.

How It Works

  1. Scheduler_Init() — resets the task list at startup.
  2. Scheduler_RegisterTask(fn, periodMs) — registers a task; records HAL_GetTick() as the initial baseline so the first execution is deferred by one full period.
  3. Scheduler_Run() — called in the while(1) main loop. Iterates all registered tasks; executes any whose elapsed time (HAL_GetTick() - lastRunTick) has reached or exceeded their period.

All elapsed-time comparisons use unsigned 32-bit subtraction, which is inherently wrap-around safe across the full 49.7-day HAL_GetTick() rollover range — the same pattern used throughout the codebase.

Limits

  • Maximum registered tasks: 8 (SCHEDULER_MAX_TASKS)
  • Timing resolution: 1 ms (HAL SysTick)
  • Tasks must be non-blocking — any task that stalls blocks all other tasks

Registered Tasks

Task FunctionPeriodEffective RateDescription
DataLogger_StateMachine_Task5 ms200 HzPolls BME680 state machine; reads IMU and writes CSV at 100 Hz sub-interval
SD_StateMachine100 ms10 HzProcesses SD card insert/remove events, manages mount state
LED_Toggle500 ms2 Hz (1 Hz blink)Heartbeat LED on PB3

DataLogger

Files: UserCode/DataLogger.c / DataLogger.h

The DataLogger is the central orchestrator. It reads from both sensors and writes a row to the CSV log file on every IMU read cycle.

Timing

Interval ConstantValueAction
Task schedule period5 msDataLogger_StateMachine_Task is called by the scheduler
DATALOGGER_BME_TRIGGER_MS50 ms (20 Hz)Triggers a new BME680 forced-mode measurement
DATALOGGER_CSV_WRITE_MS10 ms (100 Hz)Reads IMU + writes one CSV row
DATALOGGER_SYNC_MS1000 ms (1 Hz)Calls f_sync to flush data to physical SD card media

Measurement Flow (per 5 ms call)

  1. Every call (5 ms): bme680_stateMachine() is polled. If the BME680 has completed a measurement, the result is cached in bmeCache.
  2. Every 50 ms: bme680_triggerMeasurement() starts a new forced-mode TPHG conversion.
  3. Every 10 ms: lsm6_readData() reads fresh IMU data (accel, gyro, temperature), then writeCSVRow() writes one row to the open log file using the latest IMU data and the most recently cached BME680 data.
  4. Every 1000 ms: SD_FileSync() flushes the file to physical media. Worst-case data loss on sudden power loss is 1 second of data.

DataLogger State Machine

text
DL_IDLE ──(SD mounts)──► DL_OPENING ──(file created)──► DL_LOGGING
   ▲                                                          │
   └────────────────(SD card removed)─────────────────────────┘
                                          │
                                     (f_write error)
                                          ▼
                                      DL_ERROR
StateDescription
DL_IDLESensors polled, but SD card not mounted or no file open
DL_OPENINGSD just mounted; scanning for next available log filename
DL_LOGGINGFile open and active; writing CSV rows every 10 ms
DL_ERRORFile operation failed; waits for card removal and re-insertion

Before the BME680 completes its first measurement, the four BME columns in the CSV are written as empty fields (consecutive commas). Normal data appears from the second or third row onward.


SD Card Driver

Files: UserCode/SD_Card.c / SD_Card.h

Provides a thin state-machine wrapper around FatFs for safer hot-plug card handling and simple file I/O.

Card Detection

  • Pin: SD_CARD_DETECT (PA8), active-low, hardware pull-up on the PCB
  • Mechanism: EXTI interrupt fires on both rising and falling edges; SD_StateMachine() processes the event flag and reads the current pin level to distinguish insertion from removal

State Machine

text
SD_NOT_PRESENT ──(card inserted)──► SD_PRESENT_UNMOUNTED
                                          │ (500 ms settle)
                                          ▼
                                     SD_MOUNTING
                                    /            \
                             (f_mount OK)    (f_mount fail)
                                  │                │
                                  ▼                ▼
                             SD_MOUNTED        SD_ERROR
                                  │
                        (card removed from any state)
                                  │
                                  ▼
                           SD_NOT_PRESENT
StateDescription
SD_NOT_PRESENTNo card detected
SD_PRESENT_UNMOUNTEDCard inserted; waiting 500 ms for power/signal settling
SD_MOUNTINGf_mount() in progress
SD_MOUNTEDFilesystem mounted; file operations available
SD_ERRORMount failed; waits for card removal before retrying

File Naming

Log files are named LOG_XXXX.CSV in 8.3 FAT format (LFN disabled):

  • Range: LOG_0001.CSV through LOG_9999.CSV
  • On each new mount, the driver scans the root directory for the highest existing log number and creates the next one (e.g., if LOG_0003.CSV exists, creates LOG_0004.CSV)
  • If 9999 is reached, LOG_9999.CSV is overwritten
  • Files are never deleted automatically

File API

All functions return FR_NOT_READY if the card is not in SD_MOUNTED state.

FunctionDescription
SD_FileOpen(fp, path, mode)Open or create a file
SD_FileClose(fp)Close a file
SD_FileWrite(fp, buf, len, bw)Write data
SD_FileSync(fp)Flush data sector, FAT, and directory entry to physical media
SD_DirOpen / SD_DirRead / SD_DirCloseDirectory traversal (used for log number scan)
SD_GetState()Returns current SD_State_t

Log File Format

Each power-on or SD card insertion creates a new LOG_XXXX.CSV file. The first line is the CSV header; subsequent lines are data rows written at 100 Hz (one row every 10 ms).

CSV Header

text
WriteTime_ms,IMU_Timestamp_ms,Accel_New,Accel_X_mg,Accel_Y_mg,Accel_Z_mg,Gyro_New,Gyro_X_mdps,Gyro_Y_mdps,Gyro_Z_mdps,Temp_New,IMU_Temp_C,BME_Timestamp_ms,Pressure_hPa,BME_Temp_C,Humidity_pctRH,Altitude_AGL_ft

Column Definitions

#Column NameUnitFormatMinMaxTypical at Rest / Notes
1WriteTime_msms%lu04,294,967,295Wall-clock tick at time of row write (rolls over after ~49.7 days)
2IMU_Timestamp_msms%lu04,294,967,295HAL_GetTick() captured at SPI read time
3Accel_Newflag%u011 = fresh accelerometer data this row; 0 = repeated from previous read
4Accel_X_mgmilli-g%.2f−32000+32000~0 mg at rest (sensor X-axis horizontal); actual range depends on LSM6DSO_ACCEL_FS
5Accel_Y_mgmilli-g%.2f−32000+32000~0 mg at rest (sensor Y-axis horizontal); actual range depends on LSM6DSO_ACCEL_FS
6Accel_Z_mgmilli-g%.2f−32000+32000~+1000 mg at rest (1 g gravity on Z-axis); actual range depends on LSM6DSO_ACCEL_FS
7Gyro_Newflag%u011 = fresh gyroscope data this row
8Gyro_X_mdpsmilli-dps%.2f−2,000,000+2,000,000~0 mdps at rest; actual range depends on LSM6DSO_GRYO_FS
9Gyro_Y_mdpsmilli-dps%.2f−2,000,000+2,000,000~0 mdps at rest; actual range depends on LSM6DSO_GRYO_FS
10Gyro_Z_mdpsmilli-dps%.2f−2,000,000+2,000,000~0 mdps at rest; actual range depends on LSM6DSO_GRYO_FS
11Temp_Newflag%u011 = fresh IMU die temperature this row
12IMU_Temp_C°C%.2f−40+85~25 °C at room temperature
13BME_Timestamp_msms%lu04,294,967,295HAL_GetTick() when BME680 measurement completed; empty until first reading
14Pressure_hPahPa%.2f3001100~1013 hPa at sea level; ~950 hPa at 500 m altitude; empty until first reading
15BME_Temp_C°C%.2f−40+85~20–30 °C indoors; empty until first reading
16Humidity_pctRH%RH%.2f0100~30–60 %RH indoors; empty until first reading
17Altitude_AGL_ftft%.2f——AGL altitude from barometric formula; reads 0.00 during the ground pressure calibration window; altitude computation begins once GROUND_PRESSURE_NUM_SAMPLES BME680 readings have been averaged into P₀; empty until first BME reading

Notes:

  • Columns 13–17 are blank (empty fields) until the BME680 completes its first measurement.
  • The Accel_New, Gyro_New, and Temp_New flags indicate whether the LSM6DSO's data-ready status register reported fresh data at the time of that specific SPI read. Even when 0, the value columns contain the most recent valid reading.
  • WriteTime_ms and IMU_Timestamp_ms could differ by 1–2 ms due to SPI read overhead.
  • Altitude_AGL_ft is computed on-board using h = 44330 × (1 − (P/P₀)^0.1903) × 3.28084. P₀ is the average of the first GROUND_PRESSURE_NUM_SAMPLES valid BME680 pressure readings after power-on or SD card insertion.
  • Maximum CSV row size is approximately 147 characters (160-byte buffer allocated with 13-byte margin).

Example Row

text
12345,12344,1,23.50,-15.25,998.00,1,120.30,-45.10,30.20,1,27.43,12300,1013.25,24.61,52.30,125.48

For even more details on this log file, see the Flight Data Reference document.


Debug UART Connection

Debug messages are sent over UART3 at 115200 baud, 8N1 using the myprintf() function (works like printf, outputs to UART3). This is useful for verifying sensor initialization and logging state transitions.

Connecting a USB-to-UART/TTL Bridge

Important: The PCB runs at 3.3 V logic levels. Use a bridge that supports 3.3 V (or is 3.3 V tolerant). Do not use a 5 V TTL bridge without a level shifter.

PCB PinPCB SignalConnect To
PB10UART3 TX (PCB transmits here)RX on USB bridge
PB11UART3 RX (PCB receives here)TX on USB bridge
GNDGroundGND on USB bridge
3.3 VPower reference3.3 V (VCC) on USB bridge

TX and RX are always crossed: the PCB's TX connects to the bridge's RX, and the PCB's RX connects to the bridge's TX.

On the host PC, open the bridge's COM/tty port at 115200 baud, 8 data bits, no parity, 1 stop bit using any serial terminal (e.g., PuTTY, RealTerm, Tera Term, screen, minicom).

Live CSV Echo to UART

To see CSV rows printed live to the debug UART during bench testing, set DATALOGGER_UART_ECHO to 1 in DataLogger.h:

c
#define DATALOGGER_UART_ECHO     1    /* 0 = disabled (default), 1 = enabled */
#define DATALOGGER_UART_ECHO_MS  500U /* print interval in ms (default 2 Hz) */

Why the rate limit? myprintf() is blocking — a worst-case 147-byte row takes ~12.8 ms to transmit at 115200 baud, which is longer than the 10 ms CSV write period. Printing at 100 Hz would also require ~14,700 bytes/sec, exceeding the UART's ~11,520 byte/sec capacity. At the default 500 ms interval, UART load is ~294 bytes/sec and the brief blocking window (~12.8 ms every 500 ms) has negligible impact on logging. Set DATALOGGER_UART_ECHO back to 0 before flight — the debug printing code is disabled by default and doesn't even compile when 0.

Startup Messages

On a successful boot you should see messages similar to:

text
LSM6DSO init OK
BME680 init OK (chip ID 0x61)
DataLogger init OK
SD card not present

When a card is inserted:

text
SD card inserted — mounting...
SD mounted OK
DataLogger: opened LOG_0005.CSV

SPI Bus & Pin Assignments

SPI Bus Configuration

PeripheralSPI HandleData SizeClock SpeedMode
LSM6DSO32 IMUhspi18-bit~4 MHz (64 MHz / 16)Mode 0 (CPOL=Low, CPHA=1Edge)
SD Cardhspi28-bit~250 kHz at init (64 MHz/256) → ~4 MHz at runtime (64 MHz/16)Mode 0 (CPOL=Low, CPHA=1Edge)
BME680hspi38-bit~4 MHz (64 MHz / 16)Mode 0 (CPOL=Low, CPHA=1Edge)

Primary Pin Mappings

SignalCubeMX NameGPIOPinActive
LSM6DSO32 chip selectLSM6DSO_CS_PinGPIOAPA3Low
SD card chip selectSD_CS_PinGPIOBPB12Low
BME680 chip selectBARO2_CS_PinGPIOCPC9Low
SD card detectSD_CARD_DETECT_PinGPIOAPA8Low (card present)
LEDLED_PinGPIOBPB3High

All CS pins are configured as push-pull GPIO outputs. CS lines are driven by user code (not by the SPI peripheral hardware NSS). The SD card detect pin uses a hardware pull-up on the PCB and is connected to an EXTI line for interrupt-driven hot-plug detection.

UART3 Serial Debug Pins
PCB PinPCB SignalConnect To
PB10UART3 TX (PCB transmits here)RX on USB bridge
PB11UART3 RX (PCB receives here)TX on USB bridge
GNDGroundGND on USB bridge
3.3 VPower reference3.3 V (VCC) on USB bridge

Parts

161
QtyValueFootprintReferences
30TestPointTestPoint:TestPoint_THTPad_2.0x2.0mm_Drill1.0mm3.1, 3.2, 3.3, 3.5, 3.31, 3.32, 3.34, MISO3, MOSI3, PB3, PB4, PB5, PB6, PB7, PB10, PB11 +14
17100 nFCapacitor_SMD:C_0603_1608MetricC3, C4, C5, C6, C7, C17, C20, C24, C26, C27, C28, C29, C30, C36, C40, C43 +1
1410 kohmResistor_SMD:R_0603_1608MetricR3, R5, R8, R9, R11, R12, R19, R22, R23, R24, R25, R26, R27, R28
8Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ13, J14, J15, J16, J17, J18, J19, J20
8Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ4, J5, J6, J7, J8, J9, J10, J11
710 uFCapacitor_SMD:C_0805_2012MetricC15, C16, C21, C33, C34, C41, C42
6SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1, JP2, JP3, JP4, JP5, JP6
51 uFCapacitor_SMD:C_0603_1608MetricC9, C10, C11, C25, C32
522 ohmResistor_SMD:R_0603_1608MetricR13, R14, R16, R17, R18
40.1 uFCapacitor_SMD:C_0603_1608MetricC12, C13, C14, C23
422 uFCapacitor_SMD:C_1206_3216MetricC18, C19, C44, C45
4TestPointTestPoint:TestPoint_Pad_D4.0mmTP3, TP4, TP6, TP7
4TestPointTestPoint:TestPoint_THTPad_D4.0mm_Drill2.0mm5.0, 5.1, 5.2, 5.3
310 uFCapacitor_SMD:C_Elec_4x5.4C31, C37, C39
3100 kohmResistor_SMD:R_0805_2012MetricR1, R4, R20
20 ohmResistor_SMD:R_0603_1608MetricR10, R15
218 kohmResistor_SMD:R_0805_2012MetricR2, R21
22.2 uFCapacitor_SMD:C_0603_1608MetricC1, C2
22.2 uHInductor_SMD:L_Bourns_SRP5030TL1, L2
25.1 kohmResistor_SMD:R_0603_1608MetricR6, R7
2SN74LVC8T245Package_SO:SSOP-24_3.9x8.7mm_P0.635mmU10, U11
2SS34Diode_SMD:D_SMAD2, D6
2TPS565208DDCRTPS565208DDCR:SOT95P280X110-6NU4, U12
11 MohmResistor_SMD:R_0603_1608MetricR29
122 uFCapacitor_SMD:CP_Elec_4x5.3C22
14.7 nFCapacitor_SMD:C_0603_1608MetricC38
14.7 uFCapacitor_SMD:C_0805_2012MetricC35
1600Ω@100MHzInductor_SMD:L_0603_1608MetricFB1
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U6
1BME680Package_LGA:Bosch_LGA-8_3x3mm_P0.8mm_ClockwisePinNumberingU8
1BuzzerBuzzer_Beeper:Buzzer_12x9.5RM7.6BZ1
1Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1Conn_02x04_Odd_EvenConnector_PinSocket_2.54mm:PinSocket_2x04_P2.54mm_VerticalJ12
1ICM-20948Sensor_Motion:InvenSense_QFN-24_3x3mm_P0.4mmU2
1LEDLED_SMD:LED_0805_2012MetricD5
1LED_BGKRLED_SMD:LED_SK6812_PLCC4_5.0x5.0mm_P3.2mmD1
1LSM6DSOPackage_LGA:LGA-14_3x2.5mm_P0.5mm_LayoutBorder3x4yU7
1MMC5983MAMMC5983MA:PQFN50P300X300X100-16NU9
1MS5611-01BAPackage_LGA:LGA-8_3x5mm_P1.25mmU3
1MountingHoleLogo1:idk1H1
1SD_Card_ReceptacleConnector_Card:SD_TE_2041021J1
1SP0502BAHTPackage_TO_SOT_SMD:SOT-23D3
1STM32H743VGTxPackage_QFP:LQFP-100_14x14mm_P0.5mmU1
1TLV70018_SOT23-5Package_TO_SOT_SMD:SOT-23-5U5
1TestPointTestPoint:TestPoint_Pad_D2.0mmTP5
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2

Questions

How big is the GPS module PCB?

It measures 55 × 154.1 mm and has 4 copper layers, 1.6 mm thick.

What parts does the GPS module use?

161 parts, built around the BME680, MMC5983MA, MS5611-01BA03 and SN74LVC8T245PW. 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 GPS module KiCad files?

From the Dizzerin/Rocket-Flight-Data-Computer repository on GitHub, at the commit this page was made from: the board is PCB_Schematics_KiCAD/GPS module.kicad_pcb and its schematic PCB_Schematics_KiCAD/GPS module.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the GPS module design in my own project?

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

Similar boards

  • 4 layers74.5 × 69.2 mmBrian Dai, the printed circuit board in 3D

    Brian Dai

    rice-eclipse/AFSElec

    ECLIPSE: AFS

    104 parts
  • 4 layersACS PCB, the printed circuit board in 3D

    ACS PCB

    aesirkth/rocket-guidance-hardware

    ACS PCB *not the used version*

    88 parts
  • 4 layers101.5 × 83.4 mmThermostat, the printed circuit board in 3D

    Thermostat

    jrtaylor71/Smart-Thermostat-Alt-Firmware

    A comprehensive, feature-rich smart thermostat firmware for ESP32-S3 microcontrollers with touch display, web interface, and Home Assistant integration.

    91 parts2
  • 4 layers128 × 84 mmDronemagnav2, the printed circuit board in 3D

    Dronemagnav2

    ajisrawi/DroneMagNav2.0

    DroneMagNav 2.0 - survey-fluxgate magnetic-anomaly navigation board for drones (IGRF-14 + EMAG2v3 continued to flight altitude)

    222 parts
  • 2 layers40 × 40 mmDronedrivers, the printed circuit board in 3D

    Dronedrivers

    CARS-Carleton-Robotics/driver-pcbs

    64 parts
  • 4 layers100 × 100 mmData logger, the printed circuit board in 3D

    Data logger

    Conor-Dunlop/FYP_datalogger

    render of the datalogger with power board (yes i know it need routed)

    176 parts
  • 4 layers98.7 × 104 mmFlight Controller, the printed circuit board in 3D

    Flight Controller

    ThaoMinhHoang/350_Flight_controller

    ECTE350 storage room for Locus team

    233 parts3
  • 8 layers34 × 34 mmFMUv3-revG imported, the printed circuit board in 3D

    FMUv3-revG imported

    yagamy4680/drone-study

    AUAV-OpenSource/FMUv4-PixRacer is the open hardware design of PixHawk FMUv4. It uses STM32F427 and MPU6000. (github)

    169 parts