
OpenDrone FC F405 HW
phonght32/OpenDrone_HW_FC_F405
OpenDrone Project - Fly Controller hardware using STM32F405RG.

Designing and building a TVC rocket controlled by a custom PCB wired to a ESP32-WROOM board
ROCKET is an open-source printed circuit board by Pingu207, from the Pingu207/ROCKET repository on GitHub. It is a 4-layer board of 99.5 × 76.7 mm with 113 parts on 88 nets, routed with 756 tracks and 127 vias.
It is built around the ESP-WROOM-32D, AP63203WU and BMP280, with the CH340K, ICM-42688-P and USBLC6-2SC6 among its other parts. Its parts include 41 resistors, 34 capacitors, 10 ICs, 8 diodes and 8 connectors.
A custom flight computer for a TVC model rocket that steers the rocket during boost and deploys its parachutes on the way down.
An ESP32 reads an ICM-42688 IMU and a BMP280 barometer. It detects launch, tracks the rocket's orientation and drives the servos to correct any tilt. When the barometer shows the rocket has stopped climbing, it fires the drogue; the main fires lower on the way down. Each pyro channel is optoisolated by an optocoupler to protect the ESP32 and has continuity sensing, so the board confirms the e-matches are connected before launch.
The logic, servos and pyros each run from their own battery, so a servo stall or a pyro firing can't brown out the computer. The board is programmed over USB-C
Contains the ESP32 as the 'brain' of the board, contains decoupling/bulk capacitors for the ESP power pins, RC decoupling for sensing pins, 2 SPI and an I2C communication circuit, 2 switches for RESET/BOOT on the ESP, various other resistors for signal lines and pull up on I2C/SPI lines, and a buzzer for detection of the apparatus after landing.
Uses a 14 pin USB-C Receptacle for programming of the ESP32 over USB(Note: On the PCB, only one side of the receptacle footprint is routed correctly due to space constraints, so it will only work when the cable is plugged in one specific way, not both). Contains a USBLC6-2SC6 transient voltage suppression diode array for ESD/Surge protection. The USB-UART conversion is handled by the CH340K, an auto reset transistor circuit is also in place to make the ESP32 enter boot mode when data is transferred. The VBUS from the USB can also power logic on the chip by feeding into the logic power buck converter(ORing with the battery), the line also contains a Schottky diode for protection.
Uses the BMP280 as the barometer, contains 2 decoupling caps for the power pins and a pull up resistor for the SCL line. Wired for I2C communication with the ESP32. Since SDO is tied to GND and CSB is pulled high to +3V3, the BMP280 will be set to the I2C adress 0x76.
Uses a generic connector symbol(JST PH 2.0 connector is used on the PCB). Contains reverse protection and voltage testing(facilitated by ESP ADC pin(Sensor_VN or pin 5)) before the buck converter. The buck converter input is OR'd between the battery and the USBC VBUS input, so either can power the chip. The buck converter used is the AP63203WU, a 2A synchronous step-down (buck) DC-DC switching voltage regulator, which is used here to step down the voltage of the battery(2S LiPO, 7.4V nominal) to a usable 3.3V for the ESP32. It is fitted with its correct passives(Input and Output capacitors, inductors, and bootstrap capacitor) as specified by its datasheet(Note: No feedback resistors are required here because the chip outputs a fixed 3.3V due to its internal feedback loop). The output of the chip supplies power for all logic functions on the chip.
Uses an SD card slot for flight data logging. Wired SPI from the ESP32. Contains pullup resistors and proper decoupling/bulk caps.
Uses generic pin connectors here on the schematic and JST PH 2.0 on the PCB again. Uses an IRF7404 transistor for reverse protection. Power feeds into 2 TPS563200s, 3A step down voltage regulators. They have proper passives(Input and Output capacitors, inductors, bootstrap capacitor, and feedback resistor). They also have LEDs alongside each for indication. Power feeds into 2x3 pin headers where the servos will feed from, each power line contains a 470uF bulk cap. Each servo is also controlled via PWM from the ESP32.
Uses a generic connector symbol (JST PH 2.0 on the PCB). An SS34 Schottky diode provides reverse protection, and an LED shows when the pyro battery is connected. The battery voltage is measured by the ESP32. There are two firing channel(Drogue/Main). Each is driven by an ESP32 GPIO through a PC817 optocoupler. The optocoupler switches the gate of an IRLZ44N, with a 10k pulldown. The MOSFET switches the low side of the e-match, which connects to the board through 2-pin screw terminals. Each e-match has a flyback diode across it for protection. Each channel also has continuity sensing via an ESP32 ADC pin. The pyro ground is connected to the main GND through a 0Ω resistor. (Note: The continuity and voltage sensing need the grounds tied together. Also, the main channel uses an ESP strapping pin(IO5) so the pyro battery should only be connected once the board is powered on and on the pad.)
I decided to design a PCB for this project in order to get experience with designing a more complex PCB with multiple subsystems, learn about embedded control, and fly a rocket without having to buy a COTS flight computer, because thats really cool you know?!!
| Qty | Value | Footprint | References |
|---|---|---|---|
| 18 | 10k | LCSCParts:R0603 | R1, R2, R3, R11, R15, R17, R19, R20, R21, R27, R28, R34, R35, R39, R40, R41 +2 |
| 17 | 0.1uF | LCSCParts:C0603 | C1, C3, C4, C5, C6, C8, C12, C18, C23, C24, C26, C28, C30, C33, C34, C35 +1 |
| 8 | 22uF | LCSCParts:C0805 | C13, C14, C15, C19, C20, C21, C31, C32 |
| 7 | 10uF | LCSCParts:C0805 | C2, C10, C11, C16, C17, C27, C29 |
| 6 | 4.7k | LCSCParts:R0603 | R12, R13, R26, R30, R32, R33 |
| 4 | 150 | LCSCParts:R0603 | R22, R23, R24, R25 |
| 3 | Conn_01x02_Socket | LCSCParts:CONN-TH_2P-P2.00_HC-PH-2A-M | J2, J3, J4 |
| 3 | LED_Small | LCSCParts:LED0603-FD | D3, D4, D5 |
| 2 | 100 | LCSCParts:R0603 | R10, R14 |
| 2 | 3.3uH | LCSCParts:IND-SMD_L4.4-W4.2-A | L1, L2 |
| 2 | 470 | LCSCParts:R0603 | R5, R31 |
| 2 | 470uF | LCSCParts:CAP-SMD_BD10.0-L10.3-W10.3-FD | C7, C22 |
| 2 | 5.1k | LCSCParts:R0603 | R6, R7 |
| 2 | 68.1k | LCSCParts:R0603 | R16, R18 |
| 2 | D_Schottky_Small | LCSCParts:SMC_L6.9-W5.9-LS7.9-RD | D6, D7 |
| 2 | IRLZ44N | LCSCParts:TO-220-3_L10.0-W4.5-P2.54-T | Q3, Q5 |
| 2 | M7 | LCSCParts:SMA_L4.3-W2.6-LS5.2-RD | D1, D2 |
| 2 | PC817 | LCSCParts:DIP-4_L6.4-W4.6-P2.54-LS7.6-BL | U7, U8 |
| 2 | Q_NPN | LCSCParts:SOT-23-3_L3.0-W1.7-P0.95-LS2.9-BR | Q1, Q2 |
| 2 | Screw_Term_1x2 | LCSCParts:CONN-TH_XY126V-5.0-2P | J5, J6 |
| 2 | TPS563200 | LCSCParts:TSOT-26_L2.9-W1.6-P0.95-LS2.8-BL | U9, U10 |
| 2 | Tactile | LCSCParts:SW-SMD_L3.9-W3.0-P4.45 | SW1, SW2 |
| 1 | 0 | LCSCParts:R0603 | R38 |
| 1 | 100k | LCSCParts:R0603 | R37 |
| 1 | 1k | LCSCParts:R0603 | R4 |
| 1 | 3.9uH | LCSCParts:IND-SMD_L5.0-W5.0 | L3 |
| 1 | 330 | LCSCParts:R0603 | R42 |
| 1 | 33k | LCSCParts:R0603 | R36 |
| 1 | AP63203WU | LCSCParts:TSOT-26_L2.9-W1.6-P0.95-LS2.8-BL | U6 |
| 1 | BMP280 | LCSCParts:LGA-8_L2.5-W2.0-P0.65_AMP6127 | U5 |
| 1 | Buzzer | LCSCParts:BUZ-TH_BD9.0-P4.00-D0.6-FD | BZ1 |
| 1 | CH340K | LCSCParts:ESOP-10_L4.9-W3.9-P1.00-LS6.2-BL-EP | U3 |
| 1 | Conn_02x03_Odd_Even | LCSCParts:HDR-TH_6P-P2.54-V-R2-C3-S2.54_A2541WV-2X3P | J8 |
| 1 | ESPWROOM32 | LCSCParts:WIFIM-SMD_ESP32-WROOM-32-N4 | U1 |
| 1 | ICM-42688-P | LCSCParts:LGA-14_L3.0-W2.5-P0.50-TL | U2 |
| 1 | IRF7404 | LCSCParts:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL | Q4 |
| 1 | Micro_SD_Card | LCSCParts:TF-SMD_TF-115 | J7 |
| 1 | PN2222A | LCSCParts:TO-92-3_L4.9-W3.7-P1.27-L | Q6 |
| 1 | SS34 | LCSCParts:SMC_L6.9-W5.9-LS7.9-RD | D8 |
| 1 | USBLC6-2SC6 | LCSCParts:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U4 |
| 1 | USB_C_Receptacle_USB2.0_14P | LCSCParts:USB-C-TH_KH-TYPE-C-CY-14P | J1 |
It measures 99.5 × 76.7 mm and has 4 copper layers, 1.6 mm thick.
113 parts, built around the ESP-WROOM-32D, AP63203WU, BMP280 and CH340K. 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.
From the Pingu207/ROCKET repository on GitHub, at the commit this page was made from: the board is PCB/Rocket.kicad_pcb and its schematic PCB/Rocket.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Pingu207 before reusing the design.

phonght32/OpenDrone_HW_FC_F405
OpenDrone Project - Fly Controller hardware using STM32F405RG.

Bhakti-A/Maya_V_FlightController
This is a custom flight controller PCB designed for drones.


Gupatron/Gupsfirstpcb
This is the first pcb that I will manufacture and intend to use for teleop usecases in my personal projects.

HazzerTheGreat/SPAR
A flight controller for fixed wing UAVs based on the STM32H7 and designed to run betaflight or INAV


