PULSE - Flight Controller
Pulse is a flight controller built from scratch to replace the standard "black box" of drone tech. Featuring integrated gimbal drivers and a native USB-C interface, it runs on custom firmware engineered purely to bridge the gap between theory and reality.
Created by
Visage
Tier 2
2 views
0 followers
Visage
submitted PULSE - Flight Controller for review ago
Visage
added to the journal ago
Finishing up the Firmware
Finished writing the intended firmware. Had to watch a lot of tutorials and look up stuff on the internet to even understand how the STM32 IDE works. (I wasn't even able to get the .ioc file in the beginning :skull:)
Pinout And Clock Configuration
I used STM32CubeMX to map out pins before writing the firmware to check if I had any conflicting pins (I did, but fixed them).
-
Clock Speed: 168 MHz
- Why? - STM32F405 is a hungry beast, I need to run PID math 1000 times a second without lagging.
-
Pin Mapping
- Receiver uses UART3.
- Raspberry Pi telemetry on UART5.
- Drone Motors on TIM8.
- Gimbal Motors on TIM3 and TIM1
Firmware
- 1kHz Loop - The code runs every 1 ms to account for any wind bumps.
-
Interrupts - The receiver and ESC telemetry use interrupts.
- Why? - It lets the drone listen for radio signals actively while flying without having to wait.
- Real Telemetry - The math converts the raw ADC numbers from voltage divider (2V_FUNNEL) into actual volts to stream it via the Raspberry Pi.
Visage
added to the journal ago
Finalizing PCB Layout and adding Board Documentation
Journal Date: 02/02/2026
Time Spent: 5 hours
Although I had already completed what I had in mind for the FC, since I decided to make this a standalone project, I went ahead and worked on fixing the silkscreen, making things a little clearer, giving it more of a polished vibe.
On-Board Documentation
- Added headers for almost everything that needs to be connected externally, so I don't accidentally fry my PCB just because I connected the battery negative to the positive on the PCB.
- ESC port now has headers for all 8 pins.
- Raspberry Pi port now has labelled headers.
- Receiver port has labelled headers for
5V,GNDetc. - Motor pinouts are now labelled.
- Added Battery polarity signs on the bottom layer.
- Added
FWDarrow on the bottom layer to depict the gyro orientation. - Rearranged all component designators to smooth out the debugging flow.
Personal Touch
-
Added a small artwork on the top layer referencing beatbox (Yes, I like beatbox)

-
Added a little name for the FC I'm making.

Why Pulse? - It references Pulse Width Modulation that drives the motors and also the beat from beatbox theme.
Overall Look
Visage
added to the journal ago
Fixing PCB Schematics and Layout & Routing
Journal Date: 25/01/2026
Time Spent: 7 hours
In my previous schematics for the drone, although I designed it to support a 6S 25.2V Li-Ion battery structure, I did not account for the change in the buck converter. The TPS563200 is designed to support only a 4S battery structure. And I also forgot to include a connector for the Raspberry Pi module.
So, I redesigned the entire power module to support not just 25.2V but up to 40V by changing the buck converter to LMR14030SDDAR
Result
- Now has a connector to connect the Raspberry Pi module.
- Has a robust buck converter supporting up to 40V battery structure.
Drone PCB Layout
Initially, I struggled a lot with the layout as I couldn't fit everything on a board this small. It was then I researched about multi-layer PCBs and decided to go with a 4-layer one. I had little to no experience with multi-layer PCBs so it took me quite a while to figure out how this works.
-
All connectors and the Power module are on the top layer.

The idea was, everything that I may need to interact with should be on the top, and everything that I don't need to interact with goes on the bottom layer. -
The MCU, sensors, and motor drivers are on the bottom layer

Layers 2 and 3 have little to no routing on them, which provides a great heat sink to the PCB.
The Power module being on the top layer keeps all the noise away from the motor drivers, ensuring smooth functioning for the gimbal.
Visage
added to the journal ago
The Schematics
Journal Date: 25/01/2026
Time Spent: 4 hours
Finished the schematics for the drone part. It includes the flight controller and the motor drivers for the gimbal motors. Tried to make the schematic as clean as I possibly can, learning from my last project.
Summary
- It is designed to support a high voltage 6S 25.2V Li-ion power structure with
TPS563200as the Buck Converter to get clean 5V, andAMS1117-3.3as the LDO to get clean 3V3 without losing much power. - Uses
ICM-42688-Pas the IMU andBMP280as the barometer to feed gyroscopic and altitudinal data toSTM32F405RGT6 - Includes a USB-C port for firmware flashing
- Uses a dedicated UART port for the receiver
- Instead of having another separate board for the gimbal motor drivers,
DRV8313are integrated on the FC itself and uses capacitors to filter out any noise. - Includes a dedicated port for ESC.
Initially, I had planned to include an ON/OFF switch on the drone as well, but most motors draw approximately 100 Amps when starting up or when given full throttle, which would burn the switch. Instead, I'll just physically unplug the battery when it's not in use.
Visage
added to the journal ago
Research and components
Initially, I thought I would just build this flight controller with my ongoing Drone Project but then I thought it would be pretty cool if I split this into a separate project since I think I designed a pretty good and robust FC.
Journal Date: 23/01/2026
Time Spent: 3 hours
Since I'm already working on a drone, I wanted to actually design my own flight controller. This gives me an opportunity to actually learn how the FC works and processes data.
The Lineup
MCU: STM32F405RGT6
Why? - It is a 64 PIN beast with a floating point unit, making it capable of handling tons of PID loops.
IMU: ICM-42688-P
Why? - It is newer and has better noise performance.
Barometer: BMP280
Integration Plans
- I plan to include a port for ESC, so it can be changed or replaced later for any unforeseen reasons.
- 2x
DRV8313motor drivers on the FC for gimbal stabilisation. - A port for a receiver, so I can use a custom built receiver or buy one.
- A port for Raspberry Pi for future enhancements.

Visage
started PULSE - Flight Controller ago
2/2/2026 11 AM - Research and components
Initially, I thought I would just build this flight controller with my ongoing Drone Project but then I thought it would be pretty cool if I split this into a separate project since I think I designed a pretty good and robust FC.
Journal Date: 23/01/2026
Time Spent: 3 hours
Since I'm already working on a drone, I wanted to actually design my own flight controller. This gives me an opportunity to actually learn how the FC works and processes data.
The Lineup
MCU: STM32F405RGT6
Why? - It is a 64 PIN beast with a floating point unit, making it capable of handling tons of PID loops.
IMU: ICM-42688-P
Why? - It is newer and has better noise performance.
Barometer: BMP280
Integration Plans
- I plan to include a port for ESC, so it can be changed or replaced later for any unforeseen reasons.
- 2x
DRV8313motor drivers on the FC for gimbal stabilisation. - A port for a receiver, so I can use a custom built receiver or buy one.
- A port for Raspberry Pi for future enhancements.

2/2/2026 1:56 PM - The Schematics
Journal Date: 25/01/2026
Time Spent: 4 hours
Finished the schematics for the drone part. It includes the flight controller and the motor drivers for the gimbal motors. Tried to make the schematic as clean as I possibly can, learning from my last project.
Summary
- It is designed to support a high voltage 6S 25.2V Li-ion power structure with
TPS563200as the Buck Converter to get clean 5V, andAMS1117-3.3as the LDO to get clean 3V3 without losing much power. - Uses
ICM-42688-Pas the IMU andBMP280as the barometer to feed gyroscopic and altitudinal data toSTM32F405RGT6 - Includes a USB-C port for firmware flashing
- Uses a dedicated UART port for the receiver
- Instead of having another separate board for the gimbal motor drivers,
DRV8313are integrated on the FC itself and uses capacitors to filter out any noise. - Includes a dedicated port for ESC.
Initially, I had planned to include an ON/OFF switch on the drone as well, but most motors draw approximately 100 Amps when starting up or when given full throttle, which would burn the switch. Instead, I'll just physically unplug the battery when it's not in use.
2/2/2026 1:59 PM - Fixing PCB Schematics and Layout & Routing
Journal Date: 25/01/2026
Time Spent: 7 hours
In my previous schematics for the drone, although I designed it to support a 6S 25.2V Li-Ion battery structure, I did not account for the change in the buck converter. The TPS563200 is designed to support only a 4S battery structure. And I also forgot to include a connector for the Raspberry Pi module.
So, I redesigned the entire power module to support not just 25.2V but up to 40V by changing the buck converter to LMR14030SDDAR
Result
- Now has a connector to connect the Raspberry Pi module.
- Has a robust buck converter supporting up to 40V battery structure.
Drone PCB Layout
Initially, I struggled a lot with the layout as I couldn't fit everything on a board this small. It was then I researched about multi-layer PCBs and decided to go with a 4-layer one. I had little to no experience with multi-layer PCBs so it took me quite a while to figure out how this works.
-
All connectors and the Power module are on the top layer.

The idea was, everything that I may need to interact with should be on the top, and everything that I don't need to interact with goes on the bottom layer. -
The MCU, sensors, and motor drivers are on the bottom layer

Layers 2 and 3 have little to no routing on them, which provides a great heat sink to the PCB.
The Power module being on the top layer keeps all the noise away from the motor drivers, ensuring smooth functioning for the gimbal.
2/2/2026 3 PM - Finalizing PCB Layout and adding Board Documentation
Journal Date: 02/02/2026
Time Spent: 5 hours
Although I had already completed what I had in mind for the FC, since I decided to make this a standalone project, I went ahead and worked on fixing the silkscreen, making things a little clearer, giving it more of a polished vibe.
On-Board Documentation
- Added headers for almost everything that needs to be connected externally, so I don't accidentally fry my PCB just because I connected the battery negative to the positive on the PCB.
- ESC port now has headers for all 8 pins.
- Raspberry Pi port now has labelled headers.
- Receiver port has labelled headers for
5V,GNDetc. - Motor pinouts are now labelled.
- Added Battery polarity signs on the bottom layer.
- Added
FWDarrow on the bottom layer to depict the gyro orientation. - Rearranged all component designators to smooth out the debugging flow.
Personal Touch
-
Added a small artwork on the top layer referencing beatbox (Yes, I like beatbox)

-
Added a little name for the FC I'm making.

Why Pulse? - It references Pulse Width Modulation that drives the motors and also the beat from beatbox theme.
Overall Look
2/2/2026 11 PM - Finishing up the Firmware
Finished writing the intended firmware. Had to watch a lot of tutorials and look up stuff on the internet to even understand how the STM32 IDE works. (I wasn't even able to get the .ioc file in the beginning :skull:)
Pinout And Clock Configuration
I used STM32CubeMX to map out pins before writing the firmware to check if I had any conflicting pins (I did, but fixed them).
-
Clock Speed: 168 MHz
- Why? - STM32F405 is a hungry beast, I need to run PID math 1000 times a second without lagging.
-
Pin Mapping
- Receiver uses UART3.
- Raspberry Pi telemetry on UART5.
- Drone Motors on TIM8.
- Gimbal Motors on TIM3 and TIM1
Firmware
- 1kHz Loop - The code runs every 1 ms to account for any wind bumps.
-
Interrupts - The receiver and ESC telemetry use interrupts.
- Why? - It lets the drone listen for radio signals actively while flying without having to wait.
- Real Telemetry - The math converts the raw ADC numbers from voltage divider (2V_FUNNEL) into actual volts to stream it via the Raspberry Pi.








