University Student Project: Custom FC PCB Board & Space Application Study

Introduction

I’m Alejandro Boadella, an Aerospace Engineer from Spain. I recently finished my dual Master’s degree in Space & Drones (UAS) at UPC-EETAC. For one of my Master’s Thesis (TFM), I decided to take on a challenge: designing a custom Flight Controller PCB to run ArduPilot.

The title of the thesis: Design and development of the control PCB for a drone with a study of potential space applications

Full disclosure:

I learned Altium Designer and many other programs from scratch for this project. The design definitely has flaws and room for improvement, but the goal was to push my limits and understand flight controllers. All the design was done over 5 months within the context of 15 European ECTS (half a semester’s workload).

The Hardware:

The board is a 4-layer custom PCB designed in Altium.

  • MCU: STM32H743 (100-pin package)
  • Sensors: 2x IMU (BMI088, ICM20602), 1x Baro (BMP388), 1x Compass (BMM150)
  • Interfaces: 1x USB-C, 1x CAN, 2x Telem (UART), 2x GPS (UART + I2C), 1x SPI, 1x I2C, 1x MicroSD.
  • Power Distribution: Multiple connectors ranging from the standard Pixhawk pinout to a direct battery connection, designed using WEBENCH.

Porting ArduPilot: During the thesis, I defined the hwdef files and ported ArduPilot to a custom board using STM32CubeProgrammer/IDE.

Clock Issue: My initial BOM included a 26MHz HSE clock (SIT1602-22-33E-26.000000D). I learned that this was incompatible with ArduPilot for generating the correct PLL configurations. The functional flight controller version carries an ASEMB-24.000MHZ-LC-T HSE (24MHz) clock instead. Both clocks share the same package, so a simple substitution in the BOM was enough for manufacturing.

The Space Analysis:

Since my master covers Space, the thesis didn’t stop at the hardware. I performed a simple space audit comparing multiple standards (IPC / ECSS / NASA / MIL-STD) and conducted a space radiation analysis using SPENVIS to evaluate what it would take for a COTS board like this to survive in a LEO environment.

Flight Testing: It Actually Flies.

I compiled ArduPilot, mounted the custom FC on a multirotor frame, configured it, and went to the field. I did 3 tests: anchored test, geofence loiter test, and an autonomous mission test. All tests were performed successfully. Unfortunately, I didn’t remember to record the autonomous mission, but I have footage of the others!

Flaws:

As with any first-time PCB, it’s not perfect, and I want to be fully transparent about its flaws:

  1. Magnetometer (BMM150): Currently not functional. I suspect it is due to the manufacturing process. I have 2 boards, one of them has the x-axis value static while the other one has it on the y-axis. Most probably because of a bad soldering or an internal crack.
  2. MicroSD Card (SDMMC): Not functional. This is likely a combination of high-speed routing issues and some misconfigurations in my hwdef file.

Open Source:

This project has no commercial purpose; it’s 100% open source and devoted to education. My goal is for this to serve as a possible tutorial for other students who want to understand how a flight controller works.

You can find all Altium design files, schematics, Gerber files, the CPL, the BOM, and the full Master Thesis PDF explaining the entire development process on my GitHub: https://github.com/AlexBoa45/TFM_Custom_FC_Ardupilot/tree/main

6 Likes