Blueprint

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 Visage

Tier 2

2 views

0 followers

Visage Visage submitted PULSE - Flight Controller for review ago

Visage 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

image
image

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 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

image
image

  • 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, GND etc.
    • Motor pinouts are now labelled.
  • Added Battery polarity signs on the bottom layer.
  • Added FWD arrow 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)

    image

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

    image

Why Pulse? - It references Pulse Width Modulation that drives the motors and also the beat from beatbox theme.

Overall Look

image
image

Visage 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

image

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
image

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.

    image
    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

    image

  • 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 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.

image

Summary

  • It is designed to support a high voltage 6S 25.2V Li-ion power structure with TPS563200 as the Buck Converter to get clean 5V, and AMS1117-3.3 as the LDO to get clean 3V3 without losing much power.
  • Uses ICM-42688-P as the IMU and BMP280 as the barometer to feed gyroscopic and altitudinal data to STM32F405RGT6
  • 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, DRV8313 are 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 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 DRV8313 motor 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.

image

Visage 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 DRV8313 motor 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.

image

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.

image

Summary

  • It is designed to support a high voltage 6S 25.2V Li-ion power structure with TPS563200 as the Buck Converter to get clean 5V, and AMS1117-3.3 as the LDO to get clean 3V3 without losing much power.
  • Uses ICM-42688-P as the IMU and BMP280 as the barometer to feed gyroscopic and altitudinal data to STM32F405RGT6
  • 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, DRV8313 are 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

image

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
image

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.

    image
    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

    image

  • 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

image
image

  • 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, GND etc.
    • Motor pinouts are now labelled.
  • Added Battery polarity signs on the bottom layer.
  • Added FWD arrow 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)

    image

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

    image

Why Pulse? - It references Pulse Width Modulation that drives the motors and also the beat from beatbox theme.

Overall Look

image
image

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

image
image

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.