F405 flight controller pcb

my flight controller I made in Altium: an STM32F405 board, 40 by 37 mm, four layers, on the 30 by 30 mm mounting pattern. Every picture on this page is the boards own fabrication data.

What the board is

All twelve layers of the flight controller laid over each other, white on black
all plates at low opacity, so an edge four layers agree on comes out four times brighter than one only the paste has

STM32F405RGT6 mcu, a Cortex-M4 with a floating point unit, 168 MHz and a megabyte of flash in an LQFP64. Attitude comes from a BMI270 six axis IMU in a 2 by 2 mm LGA, altitude from a BMP384 barometer, and both sit on the same I2C bus as the MCU.

Power is the part that took the most board area. USB-C and the battery can both be plugged in at once, so a TPS2113A autoswitching mux decides which one feeds the board rather than leaving two supplies fighting over the same rail. This was the most difficult part to design. An MP2325 synchronous buck makes the 5 V rail at up to 3 A from the battery, through a flat wire high current inductor, and a TPS76633 LDO drops that to 3.3 V for the logic. A 1.1 A resettable PTC and a 600 Ohm ferrite bead sit on the input ahead of all of it.

Off the board there are four motor nets, an ESC input, telemetry, a current sense line, UART3, the I2C bus and SWD. Those leave through ten solder pads and an eight pin JST-SH side entry header. On top there is a 5 mm surface mount buzzer, two tact switches and two LEDs, and the edge pads are labelled in the overlay: DTA, SCK, 3V3, GND, RST for the debug row and TX, RX, 3V3, GND for the UART.

two builds: 1 carries the buck, and one drops U6, its inductor and its feedback divider for boards that are fed 5 V from somewhere else. in the one made i used the one without any buck converter, i made the mistake of shorting one of the pads on the inductor to the ground plane and it smoked the chip, so i had to order a new one. the one with the buck is more expensive, but it is more convenient to use.

All twelve layers of the flight controller laid over each other, white on black
components added
Board40.0 x 37.0 mm, four copper layers
Mounting30 x 30 mm pattern, four 4 mm non plated holes
MCUSTM32F405RGT6, Cortex-M4F, 168 MHz, 1 MB flash, LQFP64
IMUBMI270, six axis, LGA-10
BarometerBMP384
InputUSB-C and battery, switched by a TPS2113A power mux
5 V railMP2325 synchronous buck, 3 A, 500 kHz, TSOT23-8
3.3 V railTPS76633 LDO, 250 mA
Protection1.1 A PTC, 600 Ω ferrite bead
Clock8 MHz, plus or minus 20 ppm
Connectors8 pin JST-SH side entry, 10 solder pads
Signals out4 motor nets, ESC in, telemetry, current sense, UART3, I2C, SWD
Also on board5 mm SMT buzzer, 2 tact switches, 2 LEDs
Holes125 total, smallest 0.2 mm
Placements56 parts across 36 BOM lines
Variantswith the onboard buck, and without it
Drawn inAltium Designer 26.5.1

layers

Contact sheet of all twelve layers of the board, each labelled
the whole set: profile, four coppers, two masks, two pastes, two overlays and the drill

fiber optic transceiver

Every layer of the fiber optic transceiver over each other, white on black
67 by 37 mm, two layers

built to talk to the F405 over a UART (nets f405_tx and f405_RX), just carried over fiber instead of wire. A laser diode sends and an InGaAs photodiode receives, both on swappable pads at 1310/1550 nm.

The photodiode feeds a transimpedance amp (1 MHz op amp, 1 megohm gain) on its own filtered 3.3 V rail so it doesnt pick up board noise. A 2N7002K switches the laser, and an STM32G071 runs the link with three status LEDs and a power LED.

Contact sheet of all ten layers of the transceiver, each labelled
all ten layers
Top copper of the transceiver in white
top copper
Top silkscreen of the transceiver in white
top silkscreen
Board67.0 x 37.0 mm, two copper layers
Mountingfour 4 mm non plated holes, as on the flight controller
MCUSTM32G071CBT6, Cortex-M0+, 128 KB flash, LQFP48
Optical outlaser diode, three lead can, driven by a 2N7002K
Optical inInGaAs photodiode into a 1 MHz rail to rail op amp, SOT-23-5
Transimpedance1 megohm, 0402
Wavelength1310 / 1550 nm
RailsAP2112K 3.3 V LDO, 600 mA, with 3v3opt split off behind a 600 Ω bead
Link to the FCUART, on nets named f405_tx and f405_RX
DebugSWD: SWCLK, SWDIO, NRST
Indicators3 link LEDs (yellow, red, green) plus a power LED
PadsGND, LD-, LD+, GND, PD+, PD-
Holes35 total: 21 x 0.3, 6 x 0.9, 2 x 3 mm, 2 x 3 mm slots, 4 x 4 mm
Drawn inAltium Designer 26.5.1