Activity

ego

We now have a massive, highly efficient 3.3V pipeline ready to power the heavy lifters of the system.
But we have a new problem: our LoRa, GPS, and SD card modules are power-hungry, and we don’t want them drinking from the 3.3V main rail when they aren’t actively being used.
alt text
deploy strict power gating. I will show you how I am using dedicated RT9080 LDOs to create isolated, individually switchable power lines for our RF subsystems, ensuring they draw zero power until the ESP32-S3 explicitly calls upon them.
alt text
The E22-900M22S is a powerful radio. When it sends a message, it pulls a lot of energy. If we leave it and the other modules on all the time, our battery will drain very fast. Because this device lives off the grid, we need a way to completely turn them off when we are not using them.

Some parts of our board use a lot of power. This includes our main radio, the E22-900M22S LoRa module, the GPS module (U-blox MIA-M10), and the SD Card.

to fix this We are using the RT9080 as a smart switch. It takes power from our main battery line and passes it safely to our modules. But the most important part is the “Enable” pin.

Attachment
0
ego

We now have dual power inputs: USB fast-charging and solar micro-harvesting. But the ESP32-S3 and the rest of our logic chips run strictly on 3.3V, and they need a lot more current than the harvester’s nano-buck can provide.

now i am going to build the main power sys. I will walk through the schematic for the SY8089 buck converter and show how I’m setting up the central 3.3V supply that will drive the heavy-lifting core of Project Cyrus.
alt text
our main power line (VSYS) is floating anywhere between 3.0V (a nearly dead battery) up to around 5V (USB power). The ESP32-S3 and the vast majority of our logic chips run strictly on 3.3V. If we feed them VSYS directly, they will fry.

we have two options here buck converter and LDO (Low dropout regulators ).
alt text
A lot of simple dev boards use Low-Dropout Regulators (LDOs) to step 5V down to 3.3V. But LDOs bleed off the excess voltage as pure heat. If the ESP32-S3 pulls 500mA during a Wi-Fi transmission, an LDO would act like a tiny space heater.

heat is the enemy of efficiency and battery life.

The SY8089 is a high-efficiency, synchronous step-down switching regulator. Instead of burning off the excess voltage, it rapidly switches on and off, using an inductor to store and release energy. This means we get our 3.3V rail with over 90% efficiency, keeping the board cool and squeezing every last drop of current out of the battery.

0
ego

Solar Harvesting


Standard chargers are terrible at handling small solar panels. If a cloud passes over, the voltage drops, the charger pulls too much current, the panel collapses to zero volts, and charging stops completely. (reference example )
alt text

The BQ25570 solves this with built-in Maximum Power Point Tracking (MPPT). It actively monitors the solar panel and dynamically adjusts how much current it pulls to keep the panel operating at its absolute peak efficiency, even in low light. Plus, it has an ultra-low quiescent current, meaning the IC itself consumes almost zero power while it works, a sudden voltage drop that shuts off the system mid-transmission is catastrophic nightmare.

The “RGRR” variant of the BQ25570 has a massive trick up its sleeve: an integrated nano-power buck converter.
Instead of just charging the battery, it can simultaneously step that battery voltage down to a highly efficient, regulated output. I am configuring this internal buck to output a steady voltage specifically to keep our always-on components alive—like the PCF85063 RTC—ensuring they draw practically nothing from the main battery reserves when the rest of the system is asleep.


Wiring the BQ27220:-

  • BQ27220 relies on a precision sense resistor placed in series with the battery pack. I am wiring the IC’s sense pins directly across a low-ohmic shunt resistor.
Attachment
0
ego

I2C Control for Smart Charging


One of the main reasons I selected the BQ25896 is its I2C interface. I am routing its SDA and SCL lines straight to the primary I2C bus.
alt text
This is a massive advantage. It means the ESP32-S3 isn’t just relying on hardware defaults; it can actively talk to the charger. We can dynamically adjust the input current limit, change the fast-charge current on the fly, or read fault registers if something goes wrong.


Even though we are just in the schematic phase, you have to think about the physical PCB. The BQ25896 is going to handle a fair amount of current, which means heat. I am making specific notes on the schematic to remind myself to drop a solid array of thermal vias directly under the IC’s exposed pad when we move to the 4-layer layout later.


We have power entering the system and a battery charging safely. But an off-grid terminal is useless if it suddenly dies without warning.

Attachment
0
ego

I chose the BQ25896 because it is a highly integrated switch-mode battery charge management IC. It doesn’t just blindly dump current into a lithium cell; it actively manages the power path. This means it dynamically routes power between the USB input, the battery, and the rest of the system. (this is example from same series)
alt text

I am pulling power in through a standard USB-C receptacle. The first schematic step is handling the CC1 and CC2 pins with 5.1kΩ pull-down resistors. This is mandatory to ensure upstream power sources actually recognize Cyrus as a sink device and provide that 5V VBUS.

Once VBUS is established, it routes directly into the star of this subsystem: the BQ25896.


Here is how I am configuring the BQ25896

  • VBUS Input: Tied directly to the USB-C 5V line with decoupling capacitors
  • Battery Terminals (BAT): Routed to our battery connector. I am also wiring in the required NTC thermistor line so the charger can monitor battery temperature and cut off if things get dangerously hot in an off-grid environment.
Attachment
0
ego

The Master Bill of Materials (BOM)


Before wiring a single pin, I’ve spent hours agonizing over this component selection to balance power efficiency with performance.

Here is the exact silicon that will power Project Cyrus:

Power Management & Regulation

  • BQ25896 (Charger): Manages the 5V USB-C input and the primary system voltage (VSYS).
    alt text

  • BQ27220 (Fuel Gauge): Provides precise, real-time battery health and capacity analytics.
    alt text

  • SY8089 (Buck Converter): Steps down VSYS to create our stable, central 3.3V main rail.
    alt text

  • RT9080 (LDOs): Dedicated low-dropout regulators to provide isolated, strictly power-gated lines to our RF and data subsystems.

Core Compute & Expansion

  • ESP32-S3: The main microcontroller.

  • XL9555 (I2C IO Expander): Offloads enable pins and secondary controls to free up the ESP32-S3’s native GPIOs.

  • PCF85063 (RTC): Dedicated real-time clock to ensure accurate timekeeping and wake triggers while the main processor is in deep sleep.

RF & Communications

  • HPB1683 (LoRa): The off-grid backbone, interfacing via SPI for long-range data.

  • U-blox MIA-M10 (GPS): Ultra-low-power location tracking module via UART.
    alt text

  • ST25R3916 (NFC/RFID): Handles near-field data exchange and secure, close-range handshakes.

Attachment
0
ego

center of this build is the ESP32-S3


I needed a microcontroller with enough raw dual-core processing power to handle audio pipelines and RF encryption, but the real deciding factor was the routing flexibility. Between the SPI bus for the LoRa module, UART for the GPS, I2C for the sensors, and I2S for the audio codec, the ESP32-S3 allows me to matrix these interfaces exactly how I need them for a tight layout.


However, even the S3 has its limits.
Because we are relying on internal memory to save layout space, and with the sheer number of peripherals we are driving, we completely run out of native GPIOs. We’ll be solving that with a dedicated expansion layer later on.

I am keeping the workspace clean. I pull my few symbols and footprints strictly from SnapEDA (https://www.snapeda.com/parts/CN3791/Consonance/datasheet/) to ensure professional-grade accuracy, and I completely avoid pulling from SamacSys or Ultra Librarian. The goal is to maintain absolute control over the pad sizes and 3D models before we even think about routing the bottom-mounted SMA connectors.

Attachment
0
ego

my goal here is to build an off-grid communication terminal that doesn’t rely on traditional cellular networks, can survive completely off the grid, and packs a massive amount of functionality into a very tight form factor.

When I first sat down to map out Cyrus,
I knew exactly what it needed to do, but dont know figuring out how to fit it all together was the real challenge.
An off-grid communicator is useless if it dies in a few hours or can’t handle multiple data streams at once.


Here is what the architecture needs to support-

  • Long-Range Comms
  • geo location
  • Energy Independenc
  • Environmental sensing
  • main MCU The ESP32-S3
Attachment
0
ego

Shipped this project!

I built this Lemon Pi, which has a built-in debugger. It’s a custom-built, multi-core mini-computer designed specifically for automotive telemetry, hardware auditing, and computer vision. That doesn’t mean it can’t be used for general purposes. You can refer to it as a generic Pi.

  • I’ll post a full hardware demo as soon as the assembled PCBs arrive!
  • Also, not all the devlogs are visible during my ship, not sure why, so check out the project page for all the devlogs.
    If even one person uses it, it will be enough for me.
ego

Finally the PCB is complete, everything is fine, zero DRC errors

With the routing complete, I ran the final Design Rule Check (DRC). Unlike the logical ERC run during the schematic phase, the DRC checks the physical manufacturing constraints. It verifies that no copper traces are too close together, that vias are the correct drill size, and that components do not physically overlap. The DRC returned zero errors, confirming the board was physically viable.

Attachment
Attachment
Attachment
0
ego

I didn’t want to drag out the PCB design too much, so I’m developing it all in one go.

80% of the routing is now complete, just a few things left like DRC checks and some cleanup for the trace

I configured a strict 4-Layer Stackup:

Layer 1 (Top Layer): Component placement and high-speed signal routing (USB differential pairs,QSPI memory lines).

Layer 2 (Inner Layer 1 - Ground Plane): A continuous, unbroken copper pour dedicated entirely to GND. This provides an immediate, low-impedance return path for every high-speed signal on Layer 1, strictly controlling trace impedance and minimizing EMI.

Layer 3 (Inner Layer 2 - Power Plane): A split copper pour handling the bulk power distribution Utilizing a plane instead of thin traces ensures stable power delivery under transient loads without starving the microcontrollers.

Layer 4 (Bottom Layer): Slower, low-priority signal routing (GPIO breakouts, LED traces, I2C) and debugging headers.

With the footprints verified, the logic checked, and the 4-layer physical foundation established, the architecture phase of the Lemon Pi is officially closed. The next engineering challenge is the physical puzzle: placing the components, respecting the galvanic isolation gap, and routing the high-speed copper.

Attachment
0
ego

schematic completed yeahhhhhhhhhh

By this point in the design process, every major functional block was successfully integrated into the schematic. The power delivery, memory, isolation, automotive, wireless, and vision systems were all logically wired.


When initially laying out a high-pin-count microcontroller like the RP2350B, it is common to break out every pin with generic labels (e.g., GP0 through GP47). While this prevents accidental pin overlap during layout, it is practically useless during firmware development. If a developer looks at the schematic six months later to write a camera driver, seeing GP15 tells them nothing.


To ensure the schematic was self-documenting, I refactored the generic GPIO labels into strict functional labels across the entire sheet.

  • Generic SPI pins became WIFI_SCLK, WIFI_TX, WIFI_RX, and WIFI_CS.

  • Generic parallel pins became CAM_D0 through CAM_D7.

  • The CAN interface was explicitly tagged as CAN_TX and CAN_RX.


here are the final list of component;-

  • Main MCU: Raspberry Pi RP2350B (QFN-80)

  • Primary Storage: W25Q128JVSIQ (16MB QSPI Flash)

  • Buffer Memory: APS1604M-3SQR-SN (8MB QSPI PSRAM)

  • Debugger MCU: Raspberry Pi RP2040 (QFN-56)

  • Debugger Storage: W25Q16JVUXIQ (2MB QSPI Flash)

  • Digital Isolator: Analog Devices ADuM3160

  • Isolated Power: Mornsun B0505S-1WR3 (5V-to-5V DC-DC)

  • USB Hub Controller: Microchip USB2512B (2-Port)

  • ESD Protection: TPD4S012 (Data line clamping)

  • Main Logic Power: AP2112K-3.3 (3.3V LDO for MCUs and ICs)

  • Camera Core Power: AP2112K-1.5 (Dedicated 1.5V LDO for OV5640)

  • MCU Core Power: Internal RP2350 SMPS (Driven by 2.2µH Inductor)

Attachment
Attachment
Attachment
0
ego

Hardware SWD Misconception

A common routing mistake when implementing an onboard programmer is attempting to connect the physical SWCLK and SWDIO pins of the debugger MCU directly to the SWCLK and SWDIO pins of the target MCU.(I did the same thing many times lol yaaaaaaay )

alt text

During the schematic layout, I had to ensure this did not happen. The dedicated hardware SWD pins on the RP2040 (Pins 24 and 25) are strictly input pins meant for debugging the RP2040 itself. If I wired those to the RP2350, both chips would simply wait for an external host to provide a clock signal, resulting in a dead bus.


Routing the Picoprobe Interface

Instead of using hardware SWD peripherals, the Picoprobe firmware utilizes the RP2040’s Programmable I/O (PIO) blocks to “bit-bang” the SWD protocol out of standard general-purpose I/O pins.

To implement this, I established a dedicated 3-wire control bus between the two microcontrollers:

  1. SWCLK_TARGET: Routed from RP2040 GPIO2 to RP2350 SWCLK. This provides the synchronization clock for the debug data.

  2. SWDIO_TARGET: Routed from RP2040 GPIO3 to RP2350 SWDIO. This handles the bidirectional data transfer.

  3. RP2350_RUN: Routed from RP2040 GPIO4 to the RP2350 RUN pin.

The third line (RP2350_RUN) is a critical addition for a reliable development cycle. By giving the RP2040 physical control over the RP2350’s hardware reset pin, the host PC can issue a command via OpenOCD to automatically halt and reset the target MCU immediately before and after flashing a new binary.

Attachment
0
ego

after the USB data was safely crossing into the board’s internal circuitry.
However, that single USB line now needed to communicate with both the RP2350 core and the RP2040 debugger simultaneously.
To multiplex this connection, I implemented a dedicated, embedded USB hub on the PCB using the Microchip USB2512B, a highly reliable 2-port USB 2.0 hub controller.
alt text

Routing the Upstream and Downstream Ports

The physical routing for the data lines was straightforward but required strict impedance control.

  1. Upstream: The differential data lines exiting the ADuM3160 digital isolator were routed directly into the USBDP_UP and USBDM_UP (Upstream) pins of the USB2512B.

  2. Downstream Port 1: Routed to the dedicated USB PHY pins on the main RP2350B.

  3. Downstream Port 2: Routed to the dedicated USB PHY pins on the RP2040 Picoprobe.

alt text
To drive the internal PLLs required for USB 2.0 timing synchronization, I added a dedicated 24MHz crystal oscillator (X2) with 22pF load capacitors specifically for the hub controller.

The USB2512B is a highly programmable IC. In a complex commercial product, you might connect its SDA and SCL pins to a master microcontroller to write custom OEM descriptors or power profiles into the hub via SMBus/I2C.

Likewise, because our downstream devices (the two microcontrollers) are permanently soldered to the board and powered by the main 3.3V LDO, the hub does not need to switch physical port power on and off. Therefore, the Port Power Control (PRTPWR1, PRTPWR21) output pins were also left safely floating.

Attachment
0
ego

ADuM3160

Power is only half the equation; the USB data lines (D+ and D-) also require physical separation. Passing high-speed differential signals across an isolation gap requires specialized silicon.

alt text

I utilized the Analog Devices ADuM3160 full/low-speed USB digital isolator. Instead of optical isolation, this chip uses internal micro-transformers to pass the USB signals magnetically. The upstream side of the chip is powered by the raw USB VBUS and GND_USB, while the downstream side is powered by our isolated +5V_ISO and board GND. This guarantees that even if a catastrophic voltage spike hits the CAN transceiver and shifts the board’s entire ground plane, the energy cannot propagate backward into the host PC’s USB controller.

During the final schematic review of the isolation gap, I identified a critical layout oversight that would have bypassed the entire isolation barrier.

A standard USB Type-C receptacle requires two 5.1kΩ pull-down resistors on the CC1 and CC2 pins to signal the host PC to provide 5V power. In the initial layout, I routed these pull-down resistors to the main board GND.

Attachment
0
ego

B0505S-1WR3

First, I had to isolate the power delivery. You cannot power the onboard microcontrollers directly from the USB VBUS if you want to maintain an isolated ground plane.

To solve this, I routed the incoming USB power into a B0505S-1WR3 isolated DC-DC converter. This component takes the incoming 5V (VBUS) and USB ground (GND_USB) and transfers the energy magnetically across an internal transformer. It outputs a completely separate 5V supply (+5V_ISO) and establishes the main board-level GND.
alt text
This +5V_ISO net is then fed into an AP2112K-3.3 linear regulator to generate the clean +3V3 required by the microcontrollers, ensuring no direct electrical path exists between the PC’s power supply and the board’s logic.

Attachment
0
ego

Because the RP2040 is also a flashless microcontroller, it required its own dedicated memory to hold the probe firmware. I routed a 2MB W25Q16JVUXIQ QSPI Flash chip to the RP2040’s memory bus. To ensure there was no confusion during layout, I prefixed all of its QSPI Net Labels with DBG_ (e.g., DBG_FLASH_CS, DBG_QSPI_SCLK). This ensured the EDA software wouldn’t accidentally merge the debugger’s memory bus with the main processor’s memory bus.
alt text

While routing the core power for the RP2040, I ran into a critical architectural difference between the two generations of silicon.

Since I had just finished designing the 1.1V power supply for the RP2350B, my initial instinct was to duplicate that exact layout for the RP2040—including the 2.2µH external inductor for the Switched-Mode Power Supply (SMPS).

However, reviewing the datasheet revealed a major discrepancy. Unlike the newer RP2350, the older RP2040 does not utilize an internal SMPS. Instead, it relies on a much simpler internal Low-Dropout Regulator (LDO) to generate its 1.1V core voltage. Placing an inductor on the regulator output here would have caused severe voltage instability or failure to boot.
alt text

Attachment
0
ego

If you do any serious bare-metal firmware development, you know the frustration of the physical debug loop.
You end up with an ST-Link or J-Link dangling off the side of your desk, a fragile ribbon cable converting down to a 0.1” pitch header, and the constant fear of knocking a jumper wire loose while stepping through a critical hardware interrupt.
like this example :-
alt text
I wanted a true single-cable development experience. Plugging in one USB Type-C cable should simultaneously power the board, mount a serial console, and establish a high-speed Serial Wire Debug (SWD) connection to the primary core.

To achieve this, I decided to build a hardware programmer directly into the PCB using a second microcontroller: the RP2040.

The Raspberry Pi Foundation provides a firmware called “Picoprobe” (now transitioning to “Debugprobe”) that turns an RP2040 into a dedicated USB-to-SWD and USB-to-UART bridge.
check out here :- https://www.raspberrypi.com/documentation/microcontrollers/c_sdk.html

Attachment
0
ego

dual-chip memory architecture:

  1. Primary Flash (U2): A W25Q128JVSIQ (16MB QSPI Flash) to hold the compiled firmware, the Rust-based CAN parsers, and the RTOS.
    alt text

  2. Buffer PSRAM (U3): An APS1604M-3SQR-SN (8MB QSPI PSRAM) to act as a massive, high-speed RAM drive for buffering video frames before they are piped out over Wi-Fi.
    alt text


Both memory chips utilize a Quad Serial Peripheral Interface (QSPI), meaning they require six pins to operate: a clock (SCLK), four bidirectional data lines (SD0-SD3), and a Chip Enable/Select (CE#).

Because QSPI consumes a lot of high-speed routing space, you don’t want to wire two completely separate buses. Instead, I wired them in parallel. I routed the main clock and all four data lines directly from the RP2350 to both the Flash and the PSRAM simultaneously.

and also To prevent this, I split the Chip Select lines.

  • The 16MB Flash is tied to the RP2350’s dedicated QSPI_SS pin.

  • The 8MB PSRAM is routed to GPIO47.

schemtic is atteched see below

Attachment
0
ego

With the physical architecture defined.
The RP2350 requires two primary voltages: a standard 3.3V supply for its I/O pads (IOVDD), and a tightly regulated 1.1V supply for its internal digital core (DVDD).
3.3v

alt text

1.1v

alt text

Instead of dropping an external linear regulator (LDO) onto the board to generate the 1.1V—which would waste power as heat—the RP2350 includes a built-in Switched-Mode Power Supply (SMPS). To implement this, I routed the main +3V3 plane into VREG_VIN and placed a specific 2.2µH power inductor (L1) between the VREG_LX switching pin and the VREG_FB feedback pin.

This inductor is critical. It acts as the energy storage tank for the switching regulator, allowing the chip to efficiently step down the voltage without thermal throttling. I then routed the resulting 1.1V output to a dedicated +1V1 net, heavily decoupled it with a bank of 100nF MLCC capacitors, and fed it back into the array of DVDD pins.

also RP2350 is a flashless microcontroller; it relies entirely on external memory to boot and run code. Furthermore, because the Lemon Pi is designed to capture parallel video frames from camera and log high-speed CAN-FD telemetry, the internal 520KB of SRAM would be exhausted in milliseconds.
so for that i added dual-chip memory

Attachment
0
ego

I need an in build debugger on my Lemon Pi, which won’t cost much, only about $2.

This eliminates the need for external debuggers. There’s nothing worse than dealing with a loose jumper wire on the SWD header when trying to fix a hard fault in C++ or Rust.
alt text
I placed a second microcontroller—the RP2040 (in a QFN-56 package)—directly on the board.

This chip acts permanently as a “Picoprobe.” It sits on the clean side of the board, connects to the host PC via USB, and translates those USB signals into Serial Wire Debug (SWD) and UART console commands. It then bit-bangs those debugging signals across the isolation barrier directly into the main RP2350B.

By utilizing a dual-MCU architecture, the Lemon Pi becomes a true plug-and-play development platform. One USB-C cable provides power, a high-speed serial console, and a bare-metal hardware debugger, all while keeping the host machine physically protected from the automotive side of the board.

Attachment
0
ego

For the primary brain, I selected the newly released Raspberry Pi RP2350B.

While I frequently use STM32s (like the G431) and ESP32s for embedded projects, the RP2350Bis really cool mcu because its offered few distinct architectural advantages for the Lemon Pi

  • The ‘B’ variant of the RP2350 has 48 GPIO pins. This was a non-negotiable option. I needed a large, continuous block of pins for the camera’s parallel data bus, leaving enough high-speed pins free for the SPI wireless module and external memory.
    alt text

  • he RP-series PIO state machines are perfect for offloading the heavy lifting of the DVP camera protocol and custom CAN engine timing without locking up the main ARM Cortex-M33 cores.
    alt text

  • this is a my most favorite , The RP2350 introduces advanced hardware security features (ARM TrustZone, OTP, secure boot), which aligns perfectly with the cybersecurity and hardware auditing focus of this platform.

Attachment
0
ego

I’m just starting a new project. I’m looking for a more powerful processor, not just one I can buy. I want something with an open community so I can ask questions if I encounter any obstacles. This helps a lot.
My initial plan is something like this:

  • ARM Cortex-M7 processor, 600 MHz
  • 8MB flash memory with EEPROM emulation
  • 1024K RAM with 512K title-coupled for performance
  • Built-in USB host port and microSD card socket
  • 55 total I/O pins, including 42 breadboard-friendly
  • 3 CAN buses (one CAN supports FD)
  • Cryptographic engine and random number generator

This is just planning, let’s see what kind of reliability we get or not.

0
ego

Shipped this project!

Hours: 21.28
Cookies: 🍪 620
Multiplier: 29.16 cookies/hr

finally PCB design is completed now
This hawk 3 design is heavily influenced by recent shifts in Betaflight’s hardware recommendations, focusing heavily on processing power, latency reduction, and delivering the cleanest possible power for high-end FPV systems.
this is major hardware revision So that it remains compatible with the open source flight controller community and BetaFlight firmware.
check here :- https://betaflight.com/docs/development/manufacturer/config-target-guidance
I can’t show a direct hardware demo right now because there are only a couple of good PCB fabrication companies in my country and it takes a lot of time to source components, but I have done some simulation tests to insure the design.
you check here :- https://github.com/ego10-ai/flight-controller/tree/main/simulations

ego

Finally my Hawk 3 fc design is complete with zero DRC errors and perfect differential pair routing.
here is the final look of the PCB(in attachment )

The Design Rule Check (DRC) is completely clear, which means the board is electrically perfect

I spent a couple of hours doing the tedious work of moving every single 0402 component designator so it is clearly readable. But more importantly, I added the user-facing labels. I made sure the 8-pin ESC cluster has clear, bold labels for VBAT, GND, and M1-M4. I labeled all the UARTs (TX1, RX1, etc.) and clearly marked the 5V and 9V test points.

Before hitting the export button, you always have to step out of the 2D routing matrix. I fired up the 3D viewer in the design software to see exactly what the manufactured board will look like in the real world.

Attachment
Attachment
0
ego

The Infinite Loop in DRC

alt text

Here is exactly what the last 3 to 4 hours of my life looked like:

  • Find the Error: The DRC flags a clearance violation on Layer 3. A trace is too close to a via, then i have to modify the rules

alt text

  • The Fix: I grab the trace and nudge it slightly to the left to clear the via.

  • like side Effect: I run the DRC again. The original error is gone, but the trace I just nudged is now 0.05mm too close to a different pad. New error generated.

  • Polygon Problem: (5V 9V copper pour ) I nudge the trace again, pushing it into an empty space. I run the DRC. Now the trace has sliced through a 3.3V copper polygon, cutting off a section of the power plane and creating an “Unrouted Net” error.

  • The Rebuild: I have to rip up the trace, delete the polygon, manually re-route the trace taking a completely different path around the entire block, and re-pour the copper.

I had to repeat this exact cycle dozens of times. Fix an error, create a new error, rip it up, route it again. Run DRC. Fail. Nudge. Run DRC. Fail. Shave copper. Run DRC. Pass one, fail another.

It is a brutal, repetitive grind. But after hours of micro-adjustments, nudging traces by fractions of a millimeter, and constantly re-running the checks, the list of red errors finally started to shrink.

I am currently down to the last 50 clearance violations you can see in attachment ( lol man if like really low number ).

Attachment
0
ego

For the rest of the connections—the UARTs, the receiver, the VTX, and the camera—I kept the layout strictly logical. Every communication lane (like UART1) gets its own dedicated 5V pad and GND pad placed directly next to the TX and RX pads.

This means when you wire up a receiver, all four wires go to one single, organized cluster. No more running a ground wire to one side of the board and a 5V wire to the complete opposite side just to power a single module.
Now 80% of the routing is done,
The STM32H743 is sitting pretty, the 5V and 9V power polygons are fully poured, the high-speed SPI lanes for the gyro and Blackbox are locked in, and the motor signals are routed to the edges. Visually, the board is about 80% routed but Once the critical, high-priority paths are laid down, you are left with the “junk” signals.

Eventually, I forced the last few traces through and hit 100% routed. Then, I made the mistake of hitting the Design Rule Check (DRC) button.

The screen exploded with red warning markers. I had over 367 clearance violations.

Attachment
0
ego

Even though you are surface-soldering your wires to them,
like this
alt text
having a plated hole in the center of the pad physically anchors the copper to all six layers of the fiberglass board. This means you can heat these pads up, solder heavy-gauge wires to them, and crash your quad into a concrete wall without the copper pad ripping right off the PCB.

I arranged the M1, M2, M3, M4, CURR, GND, and VBAT pads into a perfectly straight row to exactly match the standard 8-pin wiring harness used by modern 4-in-1 ESCs. It keeps the build hyper-clean.

I designed custom rectangular test points.
alt text
A rectangle gives your multimeter probe a flat, wide surface to rest against, making it ten times easier to check your voltages. I scattered these rectangular test points strategically across the top layer, tapping into the 5V rail, the 9V rail, the 3.3V logic line, and Ground. If your board ever stops working, you can diagnose the exact power failure in seconds.

Attachment
0
ego

I specifically isolated our 9V video power regulator in a corner so that its inductor wouldn’t introduce magnetic noise into our video feed. I had to carefully thread the video traces entirely within this designated clean zone. I made sure these traces never crossed the M1-M4 motor lines or came near the noisy 5V logic power inductor. Keeping these lines separate guarantees a static-free FPV feed.
alt text

after that I stepped away from drawing traces and focused entirely on designing the physical interface of the Hawk 3.

alt text
The main battery connection and the ESC pads take the most physical abuse during crashes and rebuilds. I didn’t use standard, generic circular pads from the library here. I designed custom, heavy-duty through-hole pads.

Attachment
0
ego

With the massive power polygons poured (you can see img or previous devlog )
I tackled the bulk of the actual wiring: getting the general signals out of the brain and across the board.
Because we set our strict 0.1mm clearance rules back in previous , I was able to carefully thread traces between the outer row of pads.
However, you simply cannot fit 100 traces on the top layer. To get the majority of the signals out, I dropped immediate vias right next to the MCU pins, diving down into Layer 3 (our dedicated Internal Signal layer). This allowed me to fan the traces
alt text

(also called fan out methods ) out safely underneath the top-layer components without creating a tangled mess.

alt text
I had to connect the MCU to our 8-pin ESC pad cluster on the edge of the board. The M1 through M4 traces carry the fast digital DShot signals that tell the motors exactly how fast to spin. I grouped these four traces together on Layer 3.

Attachment
0
ego

Finally I have completed the Copper Polygon, I have created a total of 4 zones.

  • zone 1 :- for the VBAT (0 it will carry around 8v to 28v)
  • zone 2 :- for the 9V power
  • zone 3 :- for the 5V power
  • zone 4 :- for the safe side , i also created 3v3 zone

ICM-42688-P gyro and the 32MB Blackbox flash memory chip incredibly fast. We are using SPI (Serial Peripheral Interface) buses for this.

  • Because ash memory chip is on the top layer next to the MCU, routing this was about keeping it short and clean. I ran the Clock (SCK), MOSI, and MISO lines directly between the two chips. More importantly, I made sure there were zero vias on these traces.

  • Because the gyro sits directly on the bottom layer, so these signals did have to drop through vias. The challenge here was making sure the SPI2 traces never crossed over the noisy inductors from our power regulators. I carefully snaked them down through our Internal Signal layer (Layer 3), safely shielded by the solid Ground planes above and below them.

Attachment
1

Comments

oggythebuilder01

ooooooo gy

ego

USB-C: Differential Pair Routing

Let’s start with the USB-C connection. The data lines coming from the USB port (D+ and D-) don’t operate like normal traces. They carry high-frequency signals, and they act as a “differential pair.”
alt text
This means they send inverted versions of the exact same signal down two parallel wires to cancel out electrical noise.

here is the best example how to do this :-
alt text

The D+ and D- traces must be the exact same length down to the millimeter. If one trace is slightly longer, the signals arrive out of sync, and your PC will hit you with the dreaded “USB Device Not Recognized” error. Because this MCU is much faster than the Pico or PI Zero, you won’t notice it in that.

I routed these traces directly from the physical USB port straight into our PRTR5V0U2X ESD protection chip, and then to the MCU.

Attachment
1

Comments

oggythebuilder01

super

ego

This is a continuation of my previous development because I couldn’t put that data there.
There’s one major problem with using large copper joints: they absorb heat. If I connect the main battery pad directly to a solid, unbroken copper plane, the plane will act as a heatsink. When you try to solder your battery wires to the Hawk 3, the copper will absorb heat from your soldering iron, leaving you with cold, weak solder joints.

To fix this, I turned on “thermal relief” on all the power pads. Instead of melting directly into the copper C of the pad, it connects to four small copper “spokes.” This causes a lot of current to flow, but it traps the heat from your soldering iron on the pad for a while so you can actually melt your solder and get a perfect, shiny joint

Attachment
1

Comments

oggythebuilder01

kay hi bolu

ego

Now, it is time to actually connect the power.

But here is the thing: when you are dealing with a flight controller that pulls heavy amps, you don’t draw lines. You pour copper.( or Your tracks need to be thick to carry high current), like in img
alt text
If you try to push 3 Amps of current from our 5V or 9V regulators through a standard 0.1mm routing trace, that trace will instantly heat up and vaporize like a blown fuse.

TPS54335A buck converters are sitting on the bottom of the board (Layer 6). I started there, pouring thick, custom copper shapes to connect the raw VBAT power into the regulators, and then massive shapes to capture the 5V and 9V output from the inductors.
alt text
But that power needs to get to the rest of the board. That is where Layer 4 (our dedicated Internal Power layer) comes in. I sliced Layer 4 into massive copper regions. One huge region carries 5V to the MCU and the UARTs, while a strictly isolated region carries the 9V power straight to the video quadrant.

Attachment
Attachment
Attachment
0
ego

i forget to mention about ground rules for the board

starting with one of the most critical decisions of the entire project: the layer stackup.
Trying to route an STM32H743, two massive power regulators, and a high-speed gyro on just 4 layers would lead to crossed signals, electrical noise, and poor power delivery Because my STM32 alone is 14x14 mm in size And keeping the standard size in mind, I increased the size of the board a bit by keeping the mounting hole at 30.5 mm.
layer stackup :-

  • Layer 1 (Top Signal): the H7 brain, the ICM-42688-P gyro, the USB-C port, and the short, critical high-speed traces connecting them

  • Layer 2 (Internal Ground): Just beneath the surface is a solid, unbroken sheet of copper tied to Ground (GND).

  • Layer 3 (Internal Signal): I will use this to snake the UARTs, motor signals, and general I/O across the board without cluttering the top surface.

  • Layer 4 (Internal Power): This layer is entirely dedicated to power. carry the 3.3V, 5V, and 9V power rails smoothly across the entire board.

  • Layer 5 (Internal Ground): Another solid sheet of Ground copper. This creates a sandwich effect
    alt text
    (That's right, that's what it's called, I read it here ;- https://www.protoexpress.com/blog/prepreg-the-slice-of-cheese-in-your-pcb/), shielding the internal signal layers from the noisy power regulators sitting on the bottom of the board.

  • Layer 6 (Bottom Signal): This layer holds the heavy lifters—the dual TPS54335A buck converters, the 32MB Blackbox flash, and the AT7456E OSD chip.

Attachment
0
ego

I always route the most sensitive stuff first. For the Hawk 3, that means the SPI1 bus for the ICM-42688-P gyro and the SPI2 bus for the 32MB Blackbox flash. it requires keeping traces short, direct, and under a continuous ground plane to manage high-speed signaling (typically >10 MHz) and minimize parasitic capacitance (unavoidable capacitance forming between conductive components)

alt text,
I also made sure to route them away from any power components so we don’t pick up electromagnetic noise.

alt text

I’ve tried my best to route it so that the trace for the gyro is as short and straight as possible, but I don’t know how successful that was.
alt text
I want these data lanes to go in a perfectly straight line into the STM32H743 brain.

Attachment
0
ego

Shipped this project!

Hours: 31.06
Cookies: 🍪 891
Multiplier: 28.68 cookies/hr

This hawk 3 design is heavily influenced by recent shifts in Betaflight’s hardware recommendations, focusing heavily on processing power, latency reduction, and delivering the cleanest possible power for high-end FPV systems.
this is major hardware revision So that it remains compatible with the open source flight controller community and BetaFlight firmware.
I can’t show a direct hardware demo right now because there are only a couple of good PCB fabrication companies in my country and it takes a lot of time to source components, but I have done some simulation tests to insure the design.
you check here :- https://betaflight.com/

ego

Changelog


Using the updated feedback calculation (R1 = 100k Ohm, R2 = 9.76k Ohm), the 9V rail regulates perfectly at 8.99V. Like the 5V rail, it achieves full regulation in 1.80 ms. This fast initialization ensures the VTX receives stable power before attempting to transmit, preventing initial boot-up static or channel drift. The inductor handles the peak inrush current smoothly at 3.85A.

Attachment
Attachment
0
ego

With every component finally in place, my component placement is complete. With all the components finally locked into their exact, millimeter-perfect coordinates, the board is officially ready for the hardest part of the entire project: routing the copper traces.
I made sure to group the 5V and 9V power circuits tightly together in their own corner, creating a strict “quarantine zone.” i mean restricted zone

Attachment
0
ego

The dual TPS54335A buck converters are amazing for power delivery, but the inductors they use generate a lot of invisible magnetic noise.
this is great-resource if you wanna read about noise :- https://files.resources.altium.com/sites/default/files/uberflip_docs/file_731.pd
alt text
one of my friend told me about, so i want share with you all
https://www.connectortips.com/how-to-manage-emi-at-the-harness-to-pcb-interfaces/

0
ego

In the last update, I did the b block-out—getting the MCU, USB port, and major pad clusters to their general neighborhoods.
Today was all about the meticulous “micro-placement” phase.
Here are the rules I had to follow to make sure this board actually work fine ok gabonparrot
The ICM-42688-P gyro is the most sensitive component on the board. I had to ensure it was placed as close to the absolute physical center of the PCB as possible.
If the gyro is rotated even a tiny fraction of a degree off-axis during placement, the flight controller will constantly mix up roll and pitch movements, making it a nightmare to tune.

0
ego

I started dragging parts onto the actual board outline to figure out where everything should live. It is basically a high-stakes game. I dropped the STM32H743 chip dead in the center, since it is the bulky brain and needs to connect to literally everything else. Next, I placed the ICM-42688-P gyro right next to it, ensuring it sits as close to the center of gravity as possible so the quad flies locked-in.

From there, I pushed the USB-C port and all those heavy-duty motor and power pads out to the extreme edges where they will be easy to solder. Finally, I grouped the 5V and 9V power regulators and pushed them into their own isolated corner so their electrical noise stays far away from the sensitive video and gyro lines.

0
ego

after finishing up the schematic and finally importing everything into the PCB layout editor, I immediately realize about: space constrains .
When you pack a giant STM32H743 bulky mind, two separate power regulators, and a massive 32MB flash chip onto a standard flight controller size, real estate disappears fast. I quickly realized that the standard 0603 and 0805 component sizes I had originally picked for my passives were just way too big. If I kept them, the board was going to be an overcrowded mess, and routing the traces would be impossible.
so, I went back through the entire schematic and changed the footprint of every single subcomponent—every capacitor, every resistor, and every inductor—down to the microscopic 0402 size.

Let me tell you, this was not the fun, creative part of designing a flight controller. It took me about an hour and a half of pure, tedious clicking. Going component by component, updating the part numbers, and verifying the new 0402 footprints was a total grind.

Attachment
0
ego

schematic is done finally yaaaaaaay gabonparrot


Finally, I added a few breakout pads for the LED strip and the Buzzer. Because let’s be honest, no build is complete without a loud buzzer to help you find it in the tall grass after a crash.
And with that, the full schematic, power calculations, and pad mapping for the Hawk 3 are officially done! Every pin on that H7 chip has a purpose.

Attachment
0
ego

Power Management Simulation


To make sure my 5 volt and 9 volt rails are working correctly, I used the Ti official simulator for my design and it is really impressive to me that I have designed and calculated the correct values ​​for registers, capacitors, an inductor.

simulation result:-

  • The simulation confirms that with a 6.8uH inductor on both rails, the peak-to-peak ripple is well within tolerances.

  • The next step is to ensure the TPS54335A’s Thermal Pad (Pin 11) is tied to a massive ground plane, because at 3A, those little chips are going to want to shed some heat!

  • With the 100k resistors tied to ground, the internal oscillator is locked in. The primary goal here was to observe the PH (Phase) node switching waveform.

I looked for two specific things in the sim:

  • Dead-time control: Ensuring the synchronous internal MOSFETs aren’t “shooting through” (turning on at the same time).
  • BOOT-PH Voltage: Verifying that the 100nF bootstrap capacitors maintain enough charge to fully drive the high-side gate, even at high duty cycles.

I simulated a “step-load” (suddenly jumping from 1A to 3A). The goal was to ensure the VSENSE pin recovered quickly without ringing.

Attachment
Attachment
Attachment
Attachment
Attachment
0
ego

this is all about making this board talk to the outside world.
Your flight controller needs to constantly chat with :-

  • your radio receiver
  • your video transmitter
  • your GPS
    It does this using hardware communication ports called UARTs. so i map them with JST ports

UART Map

  • UART 1 (TX1 / RX1): I’ve designated this for the primary radio receiver link
  • UART 2 (TX2 / RX2): I mapped this one out specifically for a GPS module
  • UART 3 (TX3 / RX3): This lane is dedicated to the Video Transmitter
  • UART 4 (TX4): I routed out a fourth, easily accessible UART just to have a spare (It’s always good to have an extra set of TX/RX pads for future expansions, like a Bluetooth module for wireless tuning or a compass.)
Attachment
Attachment
0
ego

Motors Spinning and Reading the Amps


With both the 5V and 9V power delivery networks completely routed and calculated. I focused entirely on the motor outputs and the current sensing.

The STM32H743 it needs a direct way to yell instructions at the electronic speed controller (ESC).
I mapped out the signal lines for our four motor outputs—M1, M2, M3, and M4. These traces are the direct communication link that tells the 4-in-1 ESC exactly how fast to spin each motor.

I routed an analog current sensor line (labeled CURR on the schematic) straight from the ESC connector pad to a dedicated Analog-to-Digital Converter (ADC) pin on the H7 chip so i can know how much power they are sucking out of the battery.
This allows the flight controller to read the real-time amp draw from the main battery lead and display your total milliamp-hours (mAh) consumed right on your OSD.

Attachment
Attachment
0
ego

9V Power Delivery Network (PDN)


Moving right along to the second half of the power system: the 9V rail.

You might be wondering, “Why do we need a completely separate 9V regulator if we already have 5V and raw battery power?”

The answer is video quality and raw power is 6S which mean 22.2 V .

If you power them directly from the battery, every time you throttle up, yuo will face mainly two problem according to my exprince :-

  • you will see horizontal static lines across your goggles because the motors make the power dirty.

  • If you power them from the 5V rail, the high current draw of a powerful VTX might starve the MCU and cause a mid-air reboot.

so that why i added a second, entirely separate TPS54335A buck regulator specifically to generate a clean 9V rail just for the VTX and camera.

alt text

Just like the 5V regulator, we have to calculate the feedback resistors to tell this second TPS54335A to output exactly 9V.

  • Again, I use a 10k resistor for R_2 to keep the Bill of Materials (BOM) simple
Attachment
0
ego

5V Power Delivery Network (PDN)


I’ve been working on the Power Delivery Network (PDN), and I decided to split it into two completely separate systems.
Let’s talk about the first one: the 5V rail.:
To step down the raw, high voltage from the LiPo battery (VBAT which is 6s) to a clean usable 5V,
I am using the TPS54335A buck regulator.
alt text
It is highly efficient and can handle the current draw of all our onboard electronics without getting hot.

Before the power even reaches the regulator, it has to survive the motors. When you do a sharp flip and the motors brake, they shoot massive voltage spikes back into the battery line.

alt text

To protect the board, I wired a heavy-duty TVS diode across the VBAT pads. It acts like a shock absorber, clamping down on those spikes before they can fry the regulator.

i have do The Hall of Calculation for the 5V:

  • I selected a standard 1% tolerance 52.3k resistor for R_1, which gives us a rock-solid, incredibly precise 5V ( exactly 4.98, i get this after a lots of calculation according to data sheet ) rail.
  • To get our 5V output, I picked a standard 10k resistor for R_2
Attachment
0
ego

I caught a significant error in my initial instructions regarding the crystal oscillator setup
my originally connecting , the crystal between CLKIN and CLKOUT, but after a deeper dive into the manufacturer’s datasheet,
I realized that would have been a “no-boot” scenario.
alt text

CLKOUT (Pin 7) is actually a buffered logic-level output designed to drive other ICs on the PCB; it isn’t part of the resonant feedback loop for the crystal itself. To get the OSD chip to actually pulse, the crystal must bridge CLKIN (Pin 5) and XFB (Pin 6).
alt text

Attachment
0
ego

With the power sorted, I moved on to the analog video
’ve got the AT7456E OSD chip wired into the schematic and mapped it directly to the SPI4 bus on the STM32H743.

to make absolutely sure the video feed stays crystal clear even when the motors are pulling huge amps,
I’ve also designed a dedicated LC filter into the OSD circuit. Clean power plus filtered video means no more annoying horizontal lines in the goggles!

Attachment
0
ego

I spent a good chunk of time wiring up the STM 32 H7

  • This involved getting all the necessary VCAP capacitors in place to stabilize the internal core voltage
  • hooking up the 3.3V power rails
  • wiring in an 8MHz external crystal so the timing is dead-on

I also finished the BOOT and RESET circuits—super important, because otherwise, we’d have no way to get Betaflight flashed onto this thing in the first place!

As I mentioned in the last log, we are going full USB-C. I got the D+ and D- data lines routed, but more importantly, I made sure to add a PRTR5V0U2X ESD protection chip,
about the ESD protection

Plugging and unplugging a flight controller in the field can easily send a nasty static shock into the board, and this little chip will act as a bodyguard to make sure we don’t accidentally fry the main MCU.

Attachment
0
ego

Lately, I’ve been staring at a screen for way too many hours, moving from the component phase right into the actual schematic

Clean power is probably one of the most essential parts of a good FC design.
so I spent a lot of time on this. I’m using dual TPS54335A buck converters.

This gives me two dedicated, clean power rails:

  • a 5V rail for the standard electronics and receiver
  • 9V rail specifically to run the video transmitter (VTX)
  • 9V rail specifically to run camera without any noise or dropouts.

the component selection and core architecture are pretty much locked in. I’m really happy with how the feature set is coming together.

Here is what I’ve knocked out so far:

  • I put the ICM-42688-P gyro on its own dedicated SPI1 bus. We want the fastest, lowest-latency path possible between the gyro and the MCU for those tight PID loop times.
  • I put the massive (Blackbox)W25Q256JVEIQ 32MB flash memory chip on SPI2. This way, the FC can dump all that heavy tuning and logging data without fighting the gyro for bandwidth.
Attachment
Attachment
0
ego

FC controller project: the Hawk 3. I wanted to put together a quick update to talk about what I’ve been working on and the design choices I’ve locked in so far.


If you’ve followed my older designs, you know I previously used the STM32F405 and F412 chips. They were great, but no longer supported by beta flight in future.

I decided to make the jump to

  • the STM32H743VIT6 microcontroller.
    alt text
  • I went with the ICM-42688-P. It’s super fast, has great noise characteristics (bit expensive(13 usd), but i have made in china version only for 3 usd)
    alt text
  • I added the BMP388
  • I am sticking with the tried-and-true AT7456E chip
  • Tuning is everything, so I wanted to make sure there was plenty of room for Blackbox logging. I’ve routed in a W25Q256JVEIQ flash memory chip,(hell yeah 32 MB)

which gives the board a massive 32MB of onboard storage to capture flight data.

Attachment
Attachment
0
ego

It’s very bad news for my FC that BetaFlight has changed its guidelines.My previous design, which I worked so hard to perfect, is now considered “legacy” hardware. While it may still fly today(still work ,also with INAV ), it is no longer compatible with the vision of Betaflight’s future updates. As performance demands grow, this board will eventually be left behind, unable to support the latest features and optimizations. so I’ll have to create a new one so that it can meet community standard and community can use it easily.


[!WARNING]

Betaflight Hardware Design Policy Update

Betaflight will no longer accept new flight controller designs using STM32 F4 and F7 series microcontrollers for boards requiring more than 4 motor outputs.

Why this change?

We strive to provide the best flight experience across a wide range of hardware. To maintain this standard, we must limit designs using older microcontrollers that suffer from restrictive timer and DMA resource limitations.

Design Recommendations

  • STM32 F4/F7: Should now be reserved strictly for budget freestyle/racing designs and AIOs limited to 4 motor outputs.
  • STM32 H743: With pricing now comparable to the F405, the H743 is the recommended choice for high-performance, high motor output, and high I/O designs.

Legacy Support

  • Existing designs are not affected by this change.
  • Future Note: Features may be restricted on older hardware in future firmware releases if performance overhead becomes a bottleneck.

Now I am making a 4 motor FC using STM H743, I have removed BMI270 so the whole design is almost changed but for the connecting part most of it will remain the same.

Attachment
Attachment
Attachment
0
ego

Shipped this project!

Hours: 18.28
Cookies: 🍪 501
Multiplier: 27.38 cookies/hr

This is a custom-built hardware debugger powered by the new Raspberry Pi RP2350 microcontroller. help you fix broken code and test custom electronics boards, that not only debugs your code but also protects your computer from electrical spikes, adapts to any voltage, and tells you exactly how much power your project is consuming.

The engineering is complete. Now the waiting game begins until the PCB arrives, as this itself takes a lot of time.

ego

I finally have my PCB routing complete, just a few DRC checks left to sort out.

  • I’ll have to redesign half of my PCB because I overlooked differential impedance previously.
  • When designing, you have to worry about high-speed lines where vias aren’t allowed.
  • Every time a high-speed signal changes layers through a via, it changes impedance and can reflect the signal back at the source.
  • By keeping them all on the Top Layer, the signals remain perfectly clean.
Attachment
0
ego

USB 2.0 full-speed signals operate at 12 Mbps ( dont know where i read it lol ) i have to re roaute every thing i am feeling sad.

  • With power and USB handled, I moved to the RP2350’s external memory.
  • The chip boots and runs code directly from the W25Q128JV QSPI flash memory.
  • This interface runs incredibly fast (up to 133 MHz), meaning trace length and signal integrity are vital.
  • I routed all six lines (QSPI_SS, QSPI_CLK, and the four QSPI_SD data lines) exclusively on the Top Layer.
  • I roughly length-matched these traces. It doesn’t require millimeter-perfect meandering like a PC motherboard’s RAM

Attachment
0
ego

started routing the hardest traces first:

  • the USB data lines
  • the RP2350’s internal switching power supply (SMPS).

alt text
For the SMPS, the datasheet is incredibly strict. I placed the 3.3µH inductor on the top layer right next to the VREG_LX and VREG_FB pins.
alt text

  • The switching node (VREG_LX) generates a lot of electrical noise,
  • so I made that copper trace as short and fat as physically possible.
  • I tied the 4.7µF filtering capacitors directly to the output of the inductor
  • USB 2.0 requires the D+ and D- lines to have a differential impedance of 90 ohms
  • I routed these traces together perfectly parallel, avoiding any sharp 90-degree corners.

Attachment
0
ego

I thought about doing this as a standard 2-layer board to save a few bucks, but I quickly realized that was a terrible idea.

  • Between the high-speed USB lines, the switching inductor for the RP2350 core,
  • the sensitive current measurements of the INA226,

I decided to upgrade to a 4-layer stackup. It makes routing infinitely easier
Here is how I defined my layer stack in EasyEDA:

  • Layer 1 (Top): Signal and local component routing.

  • Layer 2 (Inner 1 - GND): A solid, unbroken Ground plane.

  • Layer 3 (Inner 2 - Power): I split this copper plane into two zones. The top half is my internal 3.3V net

  • Layer 4 (Bottom): Mostly a secondary Ground pour, but reserved for longer, low-speed signal traces (like I2C and LED data) that need to cross the board without interrupting the top layer.

Attachment
0
ego

I decided not to stick to the standard Raspberry Pi Pico dimensions (21x51mm) because I wanted this board to be a bit more robust and easier to handle on a crowded desk. I grabbed the board outline tool and drew a clean rectangle, roughly 31mm by 83mm.

I decided to make the board a clean rectangular shape, roughly the size of a standard Raspberry Pi Pico, but slightly wider to accommodate the extra hardware

Attachment
0
ego

the schematic is officially locked in. I ran the Electrical Rules Check (ERC) and double-checked my USB differential pair traces to make sure they aren’t crossing anything weird.

Looking back, building a custom tool is a lot more complex than just wiring together breakout boards. You have to think about current flow, decoupling, and edge-case protection (like the ESD diodes and the level shifters). But knowing that I have a custom RP2350 design that handles its own switching core power, measures target telemetry via I2C, and safely shifts voltage levels feels incredible.
alt text

Attachment
0
ego

I wanted the ability to power the target board directly from my probe and measure its exact power consumption using an INA226 current monitor. This turned into the most frustrating—and educational—part of the schematic design.
alt text
I set up an LM317 linear regulator, calculating resistor values (240Ω and 390Ω) to output roughly 3.3V from the 5V USB line. I then added a 0.1Ω shunt resistor for the INA226 to measure across.

when I drew my nets, I accidentally created a parallel path. I had the power flowing straight out of the LM317 and into the target board, completely bypassing the shunt resistor. If I had fabricated it like this, the INA226 would have read a permanent 0mA.
alt text

I had to rip up my net labels and carefully redraw the logic: the power must flow out of the LM317, get tagged as IN+, force its way through the 0.1Ω resistor, and only then exit to the TARGET_VCC net. It was a subtle routing logic error that could have ruined the board’s best feature.

I needed physical buttons to interact with the RP2350’s boot cycle. I added a RESET tactile button tied directly between the RUN pin and ground. I added a BOOTSEL button tied between the QSPI_SS pin and ground (via a 1kΩ resistor)

Attachment
0
ego

I needed the probe to safely read and write SWD (Clock/Data) and UART (TX/RX) signals regardless of what voltage the target board operates at.
so i am using TXB0104PWR for this job. It’s a 4-channel bidirectional level shifter with auto-direction sensing.
alt text
This is crucial because the SWDIO (Data) line changes direction dynamically—sometimes the probe speaks, sometimes the target speaks. I hooked the A-side to my internal 3.3V net and the RP2350 GPIOs, and the B-side to a new net I called TARGET_VCC.

I also wanted the ability to force-reset the target board. Since the reset line only goes one way (Probe -> Target), I used a dual-channel GT74LVC2T45.
alt text
I tied the direction pin high to force data from A to B, giving me a rock-solid, level-shifted reset command.

Attachment
0
ego

The RP2350 doesn’t have internal flash memory, so I had to wire up an external QSPI chip.
I chose the trusty Winbond W25Q128JV (16MB).

alt text

I wired the six QSPI data/clock lines directly to the dedicated pins on the RP2350.
alt text

One interesting quirk of the Pi silicon architecture is that the QSPI_SS (Chip Select) pin is also used to trigger Bootloader mode, which I'll have to keep in mind when I add my physical buttons later.

I added a standard 12.000MHz SMD crystal oscillator.
I paired it with two 15pF load capacitors tied to ground. Between the crystal, the inductor, and my massive row of 100nF decoupling capacitors

Attachment
0
ego

My custom keyboards have failed due to poor USB-C implementation, so I made sure to include two 5.1kΩ pull-down resistors on the CC1 and CC2 pins. Without them, a smart host device (like a MacBook) won’t negotiate 5V power, and the board simply won’t turn on.

For protection, I routed the D+ and D- lines through a USBLC6-2SC6 ESD protection diode array before hitting the RP2350.to prevent from Static shocks
alt text

I dropped in an AP2112K-3.3 LDO to step the 5V USB power down to a rock-solid 3.3V for the RP2350
alt text

the logic chips.

Attachment
Attachment
0
ego

The RP2350 upgraded from a simple internal LDO to a highly efficient Switched-Mode Power Supply (SMPS).

RP2350
alt text

old power core
alt text

To make the core boot, I had to completely redesign my power input block. I added a 3.3uH external power inductor between the VREG_LX pin and the VREG_FB/DVDD pins, along with a pair of 4.7uF filtering capacitors. If I had missed this detail, my board would have been completely dead on arrival.

With the core SMPS mapped out, I moved on to the USB interface. I opted for a 16-pin USB-C receptacle because it’s much easier to solder than the 24-pin variants, but it still gives me everything I need for USB 2.0 speeds.

Attachment
0
ego

I’ve been using standard Raspberry Pi Picos as debuggers for a while, but the jumper wire mess is getting old.

example of it
how to use as pico probe

I decided it was time to design a “Super Debug Probe” PCB from scratch, Instead of using the older RP2040, I decided to future-proof the tool and build it around the brand new RP2350A.

I started by mapping out the core RP2350A, but I immediately hit a wall that taught me my first major lesson about this new silicon.
On the old RP2040, providing the 1.1V core voltage was easy—you just hooked up a single capacitor to the VREG_VOUT pin.
alt text
I was searching everywhere in the RP2350 datasheet for that pin, only to realize it doesn’t exist.

0
ego

Shipped this project!

Hours: 23.03
Cookies: 🍪 584
Multiplier: 25.35 cookies/hr

I finally finished the hardware design for Cyrus Solar-powered LoRa communication and GPS tracking node built around the ESP32-S3.

  • I just sent the final gerbers to the fab house(PCB power) for the quotations. I’ll post a full hardware demo as soon as the assembled PCBs arrive!
  • Expect a full outdoor demo coming the second they arrive!

The biggest challenge was definitely the high-frequency RF layout—trying to maintain a perfect 50-ohm impedance.
Also, not all the devlogs are visible during my ship, not sure why, so check out the project page for all the devlogs.

ego

finally my PCB is complete

I thought I had things handled well with my 4-layer stackup, but today I found out that routing 900 MHz (LoRa) and 1.5 GHz (GPS) signals is actually dark magic, I mean I spent an hour figuring it out, but it was worth it in the end..`
alt text
i learn how to create perfect clearances around my RF traces
alt text
(forming what I learned is called a “Coplanar Waveguide” to stop the signal from leaking sideways)

alt text
I was worried about how the RF signals would behave, but I pulled off a great trick: Edge-Launch SMA connectors. By placing the chips on the bottom and soldering the SMA center pins directly to the bottom layer

alt text
The final fix for this session was addressing the bottom layer itself. Looking at my layout, the area around the GPS chip and the U.FL connector was just empty black space. Furthermore, the massive mechanical ground pads for my edge-launch SMA connectors were only attached to the rest of the board by tiny, thin traces. If I screwed an antenna onto that, the connector would probably snap right off.
but at the end every thing is great.

Attachment
Attachment
0
ego

I grouped the board into three strict physical zones to keep the noisy stuff far away from the quiet stuff.

  • Zone 1: for the CN3791 solar MPPT charger and the battery connectors.

  • the MAX-M10S (GPS) and the RA-01SH-P (LoRa) onto opposite edges of the board, pointing their antenna outputs outward.

  • Zone 3: 3.3V LDO regulator to act as the bridge between power and communication.


I distributed the clean 3.3V out to the microcontroller, the LoRa module, and the Source pin of my GPS MOSFET switch. I made sure to keep the LoRa power trace relatively wide—when that SX1262 chip transmits.

I put the RA-01SH-P on the bottom layer to optimize the RF path.
The GPS was much easier. It’s just a simple UART connection (TX to RX, RX to TX)

Attachment
0
ego

I’m finally starting to design my PCB.


I was initially considering building it on a two-layer PCB,
but I’m skipping the two-layer hassle and going straight to a four-layer stack:-

  • layer 1- signal
  • layer 2 which is a inner one so it going to be Ground
  • layer 3 power
  • layer 4 is going to be signal) again .
    The MAX-M10S and SX1262 LoRa chips require a solid, unbroken ground plane beneath their RF traces to maintain a strict 50-ohm impedance.

Trying to stitch together a ground plane on a 2-layer board while avoiding the noise from the solar charger just sounds like a recipe for terrible signal integrity. 4-layer is the way to go.

Attachment
Attachment
0
ego

For the radio, I’m using the RA-01SH-P (which rocks the SX1262 chip).

  • I initially thought about power-gating this module with a MOSFET just like the GPS, but realized that’s a bad idea.

It risks back-powering the chip through the SPI data lines from the microcontroller. Plus, the SX1262 has a deep sleep mode that draws less than 1µA anyway.

  • So, I am wiring it directly to the always-on 3.3V rail. It just needs the standard SPI bus, the critical control pins (CS, RESET, BUSY), and the DIO1 interrupt pin to wake the system up when a transmission finishes or a new packet arrives.
Attachment
0
ego

GPS Subsystem module (MAX-M10S)

The GPS wiring is finally complete.

  • I routed a second SI2301 MOSFET (Q2) as a high-side load switch. Now, my microcontroller can physically cut the 3.3V power to the MAX-M10S when it isn’t tracking.yaaaaaaay

  • I had a funny slip-up where I accidentally placed a thermistor as the gate pull-up resistor for Q2, but caught it and swapped it for a standard 10kΩ.gabonparrot


I completely forgot that the MPPT (in CN3791 IC )pin is completely floating! Since I’m using a 6V solar panel.

I calculated and added a voltage divider (a 402kΩ top resistor and a 100kΩ bottom resistor) to set the MPPT point to ~6V. This will ensure the charger reduces the voltage without draining maximum efficiency from the panel.

(Note to self: I still need to drop an ultra-low quiescent current 3.3V LDO regulator onto the board to safely step the 3.0V–4.2V LiPo voltage down for the logic chips).

Attachment
0
ego

By isolating the solar charging into its own dedicated MPPT chip which is our CN3791, I ensure that even if the panel is partially shaded, it will dynamically adjust to pull the maximum possible wattage into the battery.

  • The LiPo battery connects to the output of both the MCP73871 and the CN3791.

  • I need to add a Schottky diode to the solar panel input so power doesn’t flow backward into the panel at night. JUST like i added in img

  • The XC6220 LDO still sits between the battery and the ESP32-S3, providing a rock-solid 3.3V

just finish the wiring up and calculate the exact resistor values for the CN3791 to set the Maximum Power Point (MPP) for a standard 6V solar panel, and set the charge current to something safe, like 500mA.

Attachment
2

Comments

soosoh
soosoh 20 days ago

so cool

ego
ego 20 days ago

thanks bro

ego

I’m keeping the MCP73871 for USB-C charging (because I still want to be able to plug it into my laptop to test), but I am adding the CN3791 chip specifically for a 6V solar panel.
The tricky part is making sure the USB charger and the Solar charger don’t fight each other when both are connected.
next step for this -

  • Integrating the CN3791 MPPT Solar Charger.

  • Blending solar input with your existing USB-C (MCP73871) charger.

  • Ensuring the XC6220 LDO is optimized for the absolute lowest quiescent current (the electrical current consumed by an integrated circuit (IC) or device when it is powered on and enabled but not actively driving a load or switching)

Attachment
0
ego

Shipped this project!

Hours: 5.41
Cookies: 🍪 137
Multiplier: 25.35 cookies/hr

My original plan was to ship this project and show off the final, assembled hardware to you all right away.

The manufacturing files have been sent out, but PCB Power are taking much longer than usual to process and ship the boards right now. Lead times are stretched, so I don’t have the physical hardware in hand just yet. but that is just part of the hardware development process.

As soon as the bare PCBs arrive in the mail, I will post an update, fire up the soldering iron, and show you exactly how the physical boards turned out.

and during my ship its only showing 3 devlog but i have 5 , so check the project page

ego

The schematic and PCB layout for Hardware Revision 1.0 are complete. The project is currently awaiting physical board fabrication. Firmware development tailored for FIDO2/U2F protocols will commence once the hardware is assembled and verified.

hardwere is release now
https://github.com/ego10-ai/ego-key/releases/tag/v1.0

Attachment
0
ego

The routing is finally done. Connecting the ESP32-S3 pins to the OLED and the buttons was satisfying, but managing the power traces took some patience. I made sure the 5V line from the USB-C to the MCP73871 is nice and thick to handle a full 1-amp charge rate without breaking a sweat.

Attachment
0
ego

I started by placing the ESP32-S3 and the USB-C port. I decided to put the RA-01SH module on the opposite edge of the board from the BME280.

I don’t want the heat from the LoRa transmissions or the ESP32’s Wi-Fi messing with my temperature readings.
I’m paying extra attention to the SMA connector.

alt text
I’m using a coplanar waveguide calculation to make sure my antenna trace is exactly 50 ohms. If I get this wrong, my Long Range device won’t be very Long Range.

Routing the USB-C connector. Those pins are tiny and very close together. I have to make sure my Differential Pairs (the data lines) are the same length so the computer can actually talk to the ESP32 without errors

Attachment
0
ego

I finally started routing my PCB, for a board with high-frequency LoRa signals, a sensitive BME280 sensor, and an ESP32-S3, component placement is everything.

for the esp32 smd module It is suggested to place the module’s on-board PCB antenna outside the base board, and the feed point of the antenna close to the edge of the base board.

alt text|200

The trace going from the RA-01SH to the SMA Connector must be a specific width. If it’s too thin or too wide, the radio signal will “bounce back” and you’ll lose range. for the 50-Ohm Path trace width is going to be .3mm

Attachment
0
ego

I’ve finally finished the full schematic. The last few hours were spent double-checking the RA-01SH-P LoRa module
alt text
pins and the SMA antenna path.
alt text
I’ve ensured that the SPI lines are short and direct to avoid signal interference.

I also mapped out the BME280 on the I2C bus.
alt text

Since it’s a 3.3V sensor, it sits perfectly on the same power rail as the ESP32-S3. I’ve included the necessary pull-up resistors for the I2C lines to ensure the communication is stable.

Attachment
0
ego

I’ve wired the XC6220 LDO(1A low-dropout) to take the output from the charger. I chose this specific LDO because it can handle up to 1A of current—more than enough for the ESP32-S3 even when the Wi-Fi and LoRa are both screaming at full power.

The XC6220 is a Low Dropout (LDO) regulator. Its job is simple: take the messy voltage from the charger and “shave it down” to a perfectly smooth 3.3V.
alt text

If I were to build this on a breadboard right now, plugging in the USB would give me a solid 3.3V rail, and the ESP32 would boot up and stay stable.

Attachment
0
ego

i almost finished MCP73871 implementation with usb Type C

Since I’m using a standard 10k NTC ( thermistor to monitor battery temperature, enabling safe charging by suspending operations if the temperature falls outside the set range),
I have to make sure the voltage divider circuit on that pin matches the datasheet, or the chip will think the battery is “too cold” and won’t charge at all.

Attachment
0
ego

I’m focusing on the MCP73871 implementation because i need fast charging ans t’s a bit more complex than a standard charger because it handles the Power Path.

I’ve decided to wire it so that the device always prioritizes USB power. I’m using a 1k resistor on PROG1, which means I’m aiming for a fast charge. I need to make sure my LiPo battery can handle that (usually a 1000mAh battery or larger is best for this setting).

you see schematic outline in img

Attachment
0
ego

I am very confused between these two IC

  1. BME280 alt text

vs
2, BMP280alt text

The primary difference is that the BME280 measures temperature, pressure, and humidity, while the BMP280 measures only temperature and pressure. The BME280 is an all-in-one environmental sensor suitable for weather monitoring, while the BMP280 is a low-cost, accurate option for barometric pressure and altitude tracking.

So I think I’ll have to go with the BME 280

Attachment
0
ego

my new project: a portable, LoRa-enabled environmental communication device

the Bill of Materials (BOM) I just finalized, this is going to be a dense build. I’m using the ESP32-S3 as the core—mostly because I need that extra PSRAM for future UI elements on the OLED, and the dual-core power for handling LoRa stacks and sensor polling simultaneously.

I’ve decided to start the assembly with the power management circuit. I’m using the MCP73871. I chose this chip specifically because it has System Power Path Management.

0
ego

I am really telling you component placement is 90% of the battle. If you get the components in the right spots, the board practically routes itself.

I started by defining the board outline around the USB-A PCB-edge contacts. This dictated the width of the entire device.
then I placed the USBLC6-2SC6 ESD protection diode and the 500mA PTC fuse as close to the USB pads as physically possible. For ESD protection to actually work, it needs to intercept spikes before they travel deep into the board.

Once the last trace was connected, I flooded the top and bottom layers with a Ground copper pour. This ties everything together, provides a short return path for signals, and helps dissipate any heat from the LDO and MCU.

Attachment
0
ego

Just started designing the PCB for my Ego key
currently using a USB-A_PCB (where the PCB itself acts as the male USB-A plug)

0
ego

FINALLY SCHEMETIC COMPLETE

  • The RP2354A makes the initial wiring surprisingly straightforward.
  • Because it has 2MB of flash memory stacked internally, I didn’t need to route an external QSPI flash chip. That alone saved a significant amount of space and component count.
    The base circuit came together quickly:
  • the MCU, the required decoupling capacitors,
  • a 12MHz crystal oscillator (ABM8-272-T3)
Attachment
0
ego

I’m using a new Raspberry Pi RP2354A For the brain of the operation It has 2MB of stacked flash built right into the chip and dual Hazard3 RISC-V / ARM cores, which makes it an absolute powerhouse for a EGO KEY project.

0
ego

Shipped this project!

Hours: 26.73
Cookies: 🍪 374
Multiplier: 14.0 cookies/hr

after lot of work Here were the some changes I made:

  • Processor Upgrade: Integrated the STM32F405RGT6 (LQFP-64), increasing the clock speed to 168MHz for faster PID loop execution.
  • Sensor Suite: Implementation of the ICM-42688-P high-precision 6-axis IMU and the DPS310 barometer for superior vibration rejection and altitude hold.
  • Integrated OSD: Added the AT7456E chip to support real-time analog video overlays.
  • High-Speed Logging: Included 128M-bit W25Q128JVSIQ flash memory for comprehensive Blackbox flight data recording.
ego

I’m feeling very frustrated.

I hit a major wall trying to route traces for the STM32F405. With 64 pins and those 34 decoupling capacitors fighting for space, my screen resembled a bowl of digital spaghetti.

No matter how I moved the traces, I would repeatedly run into “collisions” or get stuck in a corner where I couldn’t send signals to the ICM-42688-P or AT7456E OSD chip.

Instead of forcing it and making a mess, I decided to do something tricky: I stopped and started “clearing” things. I deleted a large portion of the pre-arranged traces because I realized my component arrangement was actually working against me.

BELIVE ME hard way that PCB design isn’t just about connecting dots; it’s about traffic management

0
ego

My PCB stack has 4 layers - top, ground, 3.3 power lines, and bottom.

I created “copper pores” or power planes for 3V3 and GND.

the entire layer of the board acts like a massive highway for the ground and 3.3V rails.
This helps keep the power stable for the DPS310 barometer and the MCU, especially since this new version runs so much faster.

I spent nearly thirty minutes just trying to route the traces out from under the LQFP-64 package without creating islands in my ground plane. It’s like a puzzle where every piece you move affects five other things.

0
ego

Moving from the 48-pin chip to the 64-pin STM32F405 meant I had a literal spiderweb of connections to manage.
I focused first on the high-speed TRACE specifically the SPI lines that connect the brain to the

  • ICM-42688-P gyro
  • the AT7456E OSD.
    I learned that these lines need to be as short and direct as possible to prevent signal interference.

After the signal lines, I tackled the power distribution.

Attachment
Attachment
0
ego

finallyyyyyy Component arrangement done

It’s finally starting to look like a real flight controller instead of just a mess of lines. Seeing the “brain( I MEAN STM32)” surrounded by its “nervous system(LOL)” of test points and filters is a huge confidence booster, even if I know the actual routing of all those traces is going to be my next big hurdle!

I also spent a lot of time strategically placing the 51( I know it’s excessive but it’s necessary and it’s also for connection) test points. also I know I’m going to need to troubleshoot, so I made sure to spread those pads out where I can actually reach them with a multimeter probe without shorting anything out.

Attachment
Attachment
0
ego

PCB design

To be honest, seeing all those components scattered across my EasyEDA canvas was a bit intimidating at first. I spent a full hour and a half carefully grouping the parts, making sure the high-speed ICM-42688 gyro was right in the middle for optimal flight performance.

The biggest challenge was definitely those 34 tiny 100nF caps; I had to figure out how to squeeze them right in front of the MCU pins so that the power supply for that 168 MHz clock remained clean.
trying to fit a giant 64-pin brain and a mountain of new parts onto a tiny board.

0
ego

Started PCB design

  • I’m moving from a 7x7 mm QFN to a 10 x 10 mm LQFP-64. This chip will take up significantly more space on my PCB.

  • The F405 has more power pins (VDD and VSS). We’ll need more 100nF capacitors (one for each VDD pin) to keep the power clean at 168MHz.

  • LDO: The RT9193-33GB can still handle the 3.3V rail, but monitor the total current draw as the F405 consumes slightly more power at full speed.

Attachment
0
ego

Finally the SCHEMETIC is complete, now I have to design the PCB and start a peaceful day, I am attaching the img which you can see in full

Attachment
0
ego

Just complete the power supply for STM32.

Depending on the data set, I need to add more than 15 capacitors for decoupling. In my previous design, I used around 6 TO 8, but for this design,

I am using higher clock speed STM32. That’s why I need to add so many capacitors. As shown above, each power supply pair must be isolated with a filtering ceramic capacitor. These capacitors must be placed on or as close to the correct pins as possible on the bottom of the PCB for the device to function properly.

Attachment
Attachment
0
ego

OSD for my flight controller

It essentially overlays flight information onto your FPV video feed.

OSD hardware can exist as an external device in the form of a small PCB board, or it can be integrated into another device, such as your flight controller, PDB, or FPV camera. This allows you to monitor your quadcopter’s status in real-time while flying FPV.

Some OSD allows you to set up alarms, to alert you when critical values are reached, such as the battery voltage level, or RSSI being too low and so on.


Attachment
Attachment
Attachment
0
ego

I’ve considered using an LMR 14030.
The LMR14030 is a 40V, 3.5A, step-down regulator with an integrated high-side MOSFET. With a wide input range of 4V to 40V, this device is designed for a variety of applications, from industrial to automotive BUT I AM using it for drone hehehe, for power conditioning from unregulated sources. The regulator’s quiescent current is 40µA in sleep mode, making it ideal for battery-powered systems. The ultra-low 1µA current in shutdown mode can further extend battery life.

Flight time matters, doesn’t it?

Attachment
Attachment
0
ego

I’m upgrading my flight controller to the STM32F405

which is the most popular chip for analog flight controllers because it has a higher clock speed of 168 MHz and larger flash memory.

I’m also considering adding additional flash memory. Although this will increase the price, the upgrade is worth it. This allows for faster PID loop frequencies and more advanced features in Betaflight or INAV.

I’m also building this for FPV, which will include an ESC camera and video transmission, so a fast MCU is essential.

Attachment
0
ego

Shipped this project!

Hours: 17.31
Cookies: 🍪 389
Multiplier: 22.5 cookies/hr

The hardware design phase has officially concluded, and I have ordered the PCBs! The final board features the STM32F412CEU6 as the main flight processor. Components for the 0603-sized footprints on the board are being sourced from LCSC.


As soon as the boards arrive and assembly is complete, I will provide further details.

ego

PCB Design Completed!

I finally crossed the finish line: the PCB layout for my STM32 flight controller is 100% complete with 0 drc error.
I spent the time making sure all the connections for the STM32F412CEU6 were solid and that my vias were correctly placed to bridge the different layers of the board. It was really satisfying to see the green lines turn into actual copper traces connecting the USB-C port, the test points, and the sensors like the ICM-42688-PC and BMP280.

I also finished the copper pours, which act like a big electrical ground for the whole board. seeing the layout go from a mess of “rat’s nest” lines to a clean, professional-looking circuit board feels like a huge accomplishment. I even did a final Design Rule Check (DRC) to make sure I didn’t have any overlapping traces or short circuits that would ruin the board once it’s manufactured.


Time to order the PCB for my flight controller

Attachment
Attachment
Attachment
Attachment
0
ego

I successfully completed fan-out for STM32F411CEU6.

Since this is a high-density package, I had to be very precise with my vias to ensure that signals could run between the top and bottom layers of the board without interference. Routed USB-C data lines.

I learned that these lines need to be close to each other to maintain signal integrity, which is a bit of a challenge when you’re also trying to fit in the CC1 and CC2 resistors. Also, I have placed and added all 21 test points to the layout. From the BZ+ (buzzer) to the various I/O pins, these pads are now strategically located so I can easily check them after building the board.


I accidentally locked the wire speed, so I had to find a solution for a very long time.


Progress Check
MCU Vias: Complete

USB Routing: Complete

Test Point Placement: Complete
just for self remark

Attachment
0
ego

PCB routing

I have completed the wiring for the RT9193-33GB voltage regulator and the B5819WS Schottky diode. These components will stabilize the power supply and protect the board against accidental reverse-polarity faults.


also I have installed a set of 0402 LEDs (yellow and green) so that I can visually monitor the board’s status—such as when it powers up or if the MCU is signaling an error code.


I realized that the 0402 components—specifically the resistors and capacitors I selected—are truly tiny. Seeing them in the 3D view, situated right next to the 8MHz crystal and the USB-C connector, made me realize just how much precision I would need once I finally began the soldering process. Consequently, I decided to upgrade them to the 0603 package to make soldering significantly easier.

Attachment
Attachment
0
ego

PCB layout start

I’ve just started the PCB layout and spent some time organizing my component list to make sure everything is ready for the PCB layout. My “brain” is the STM32F411CEU6, supported by a high-precision ICM-42688-PC (gyro/accel) and a BMP280 (barometer) for altitude sensing.

I’ve also added 21 test points across the board. As a beginner, I know I’ll need to troubleshoot, so having dedicated pads for BZ+, BZ-, and IO1 will make it much easier to use a multimeter or oscilloscope later.

https://www.lcsc.com/product-detail/C83291.html
https://www.lcsc.com/datasheet/C83291.pdf
https://www.lcsc.com/datasheet/C1337664.pdf

Attachment
Attachment
0
ego

Shipped this project!

Hours: 14.84
Cookies: 🍪 415
Multiplier: 27.94 cookies/hr

major hardware revision transforms the badge from a programmable conference tool into a dedicated RF and security auditing platform.

New Hardware Features in V2:

SAO Header (v1.69bis): Added a standard 2x3 pin header with I2C and 3.3V power, allowing full compatibility with DEF CON style Shitty Add-On boards.

Sub-GHz Radio Integration 433MHz/915MHz antennas.
Infrared Capabilities: the MonaOS beacon hunting framework and TV-B-Gone scripts.
BadUSB Payload Switch: Added a physical SPDT slide switch mapped to GPIO44. This allows users to physically toggle the device into HID injection mode upon boot.

ego

Re-routed internal GPIO mapping to safely isolate the RFM69HCW and IR systems from the Murata 1YN Wi-Fi/BT module.

Retains the 4-layer stackup requirement for proper 50-ohm RF impedance and solid ground shielding.

Attachment
0
ego

It took a long time to DEVLOG but it’s necessary because if I had stopped during my routing I might have forgotten where I left off so I thought let’s finish writing the DEVLOG after it’s complete

My PCB routing is complete except for grounding and other than that all routing is done so I can say that routing part is 90% complete. I will face a lot of problems during my routing process.

I struggled to manage the multiple layers in my design. With so many layers to keep track of, it was easy to get confused and make mistakes.

Ensuring that the grounding and power routing were done correctly was a challenge. I had to carefully plan and execute the routing to avoid any issues.

DRC Errors: The software’s DRC feature highlighted several errors in my design. I had to spend time identifying and resolving these errors to ensure that my design was correct.

layer stack up for my project :-
Layer 1: Top Signal
Layer 2: Ground Plane
Layer 3: Power Plane
Layer 4: Bottom Signal

What I learned:

The “Layer Filter” is my friend — toggled between top/bottom to avoid confusion lol
Need to be careful not to route signals over ground plane splits (mental note for later)

Attachment
Attachment
0
ego

After adding the RF module, I’ll need to reroute the RP2350 because I need about 10 more pins for the RF module and the IR Blaster IR receiver.

I’ll also need to reposition my RP2350 for better routing because in the previous design, each GPIO pin can be connected to an internal peripheral via the GPIO function described below. Some internal peripheral connections appear in multiple locations for system-level flexibility.

I had no way to create a network between my RF module, the Air Blaster IR receiver, and the RP2350. I was trying to route as much as possible at the lower layers, but I think I’ll have to use the power out layer and the ground layer for this design.

Attachment
0
ego

I messed up with the E07-M1101D,


I thought it was a SMD component but, you thought that the through hole component would come out or the smd version of it would not be available, so I switched the module high RFM69HCW-915S2R 433MHz SPI 10dBm 1000m Wireless RF Transceiver Module RF Modulation, but I fixed it you can see it in the attachment below,

see you soon

Attachment
0
ego

I’ve just finished my schematic and reviewed every single net pin and passive component, including all the new components I just added. Now all that’s left is a drc check and some rearrangements because not every drawing is perfect.

0
ego

version 2.0


Since we already have a powerful base with the RP2350, Wi-Fi/Bluetooth, and lots of memory, I’m thinking about adding more features for RF play, such as

  • Sub-GHz radio
  • IR transmitter and receiver (the original GitHub Universe badge actually has this built-in for beacon hunting and remote control).
0
ego

The second session focused on delving deeper into my flight controller’s senses and tuning the basic connectivity. I focused on connecting the ICM-42688-P (a high-precision 6-axis motion tracking (https://www.lcsc.com/datasheet/C48586483.pdf) device) and the BMP280 barometric pressure sensor bosch (https://www.lcsc.com/datasheet/C83291.pdf). Reading the data sheets was a challenge i am not able to understand any thing at first , but I successfully mapped the SPI/I2C pins to ensure the STM32 could talk to them without any lag.

Attachment
0
ego

I started creating my schematics for my flight controller, and I’m using an STM-based MCU, the Stm32F412CUE6. I came to this decision after a lot of research and comparisons of STM32 series processors, such as the STM32 F4/G4/F7/H7. Choosing the right flight controller processor is very important when building a drone flight controller. F1, F3, F4, G4, F7, and H7 are all different types of processors used in flight controllers. So for now, I’m going with the stm32F412CUX.

0
ego

Shipped this project!

Hours: 15.01
Cookies: 🍪 202
Multiplier: 22.64 cookies/hr

shipping nowwwwwwwwwwwwwwwww
In this version, the board can now plug directly into a car and safely run on the car’s 12V battery.
Added a 16-pin OBD2 male connector footprint to plug the board straight into a vehicle.

ego

Shipped this project!

Hours: 25.89
Cookies: 🍪 403
Multiplier: 15.58 cookies/hr

I just finished building my own custom HACKable conference badge from scratch! It’s powered by an RP2350 and has full Wi-Fi, Bluetooth, and a display connector.

it can run custom Python apps, games, and live API scripts right out of the box. or use as a conference badge lol


The hardest part was definitely fighting those annoying phantom DRC errors in EasyEDA and learning how to route a 50-ohm RF trace for the antenna without ruining the signal.
I finally figured it out by swapping my wire labels to actual Net Ports.

ego

Version 2.0 is complete.

I have added OBD II port to the plug in car and you can switch between USB and any other car.
componet i have used;-
XL1509-3.3E1
1N5819 - Protection Diode
47uH SMD Inductor
OBD2 port

0
ego

I have completed the PCB routing, now I just have to do DRC checks and solve them. In this version, I have added a OBD port and a Buck converter for direct power. I am thinking of adding a SD port for data logging as well.

0
ego

I have completed the planning, now I have started PCB routing, but almost 1.5 hours of my time in laps has been lost.

0
ego

version 2.0 start


In this version, I added a port to run it on vehicle power and also a buck converter which will reduce the voltage from 40V to 3.3V. I have completed its schematic, I just have to make the buck converter properly so that there is no voltage leak.

0
ego

finally my pcb for HACLABLE BDGE is completed now.


in next version i will ADD some new feature, if you have any ideas which i can add drop in comment

0
ego

What was feared happened, I am redesigning the antenna of my PCB, so everything else is fine. I have read many application notes for this from the company’s side but still found something strange, if I change this chip itself then it will not work with the firmware SIDE , my mind is crazy.

0
ego

finally yeahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh !


Oh my god, finally my PCB is complete, I have uploaded some photos below (many photos, please check them), I have also done DRC check, there is not a single error, I have also done the antenna work, now before shipping this project, I just have to do a final check of all the routing and then it is done.

Attachment
Attachment
Attachment
Attachment
0
ego

What a hard routing it was, but after several hours I finally completed the routing, yes it was fun, now I just have to check the WiFi antenna once and then redesign it because one mistake and it will not work properly at all, I learned a lot from this project.

0
ego

Working on the RP2350b PCB routing, I’m 60% done and now all that’s left is routing my PCB antenna and the most important part of the build.

2

Comments

Slivy
Slivy about 2 months ago

i feel this should be on blueprint not flavourtown lol

ego
ego about 2 months ago

You can build anything technical, so why not hardware, and Blueprint won’t give you any cookies for building the project.

ego

is Routing for the RP2350B is becoming complicated and frustrating in a four layer PCB but I just managed to find the right combination for it and I have deleted my entire routing several times, but yes, I am enjoying it a lot.

0
ego

i am finally able to create custom drc rules and layer stackup for 4 layr pcb
-Layer Stackup:
Top Layer (Red): Components and short signal wires.
Inner Layer 1 (Yellow): SOLID GROUND (GND). Nothing else.
Inner Layer 2 (Green): Power routing (3V3, VSYS, 1V1).
Bottom Layer (Blue): Long signal wires passing under the chips.

0
ego

Completed the schematic and footprints!!!
Part I HAVE USE:-
SM04B-SRSS-TB(LF)(SN)
AFC07-S24FCA-00
3.3uH
19-213/T1D-KS1T1N/3T
PT19-21B/L41/TR8
BSS138
FS8205A
TS-1187A-C-E-B
RP2350B
CYW43439KUBGT
W25Q128JVSIQ
APS6404L-3SQR-SN
MCP73831T-2ACI/OT
XB6096I2SV
PCF85063AT/AAZ
ABM8-272-T3
DW01A
TLV62569DBVR
S2B-PH-K-S(LF)(SN)
TYPE-C16PIN
32.768kHz

Attachment
Attachment
2

Comments

aloyak
aloyak about 2 months ago

is any of these secretly a steam gift card?

ego
ego about 2 months ago

heheyhhehheehehhehe no dude its my component list bro

ego

I spent an hour fixing the RP 2350 and the wiring is proving to be very difficult. I just finished the Type C connections, the Flash IC, the RAM connections and finally the power connection.

Attachment
Attachment
0
ego

power line is complete now
component i added no :-
TLV62569
Join USB and Battery
LiPo Charging
Battery Protection

Attachment
0
ego

i spent hour in component selection for my badge , it kind Frustrating to find a component for hardware projct

Attachment
0
ego

Shipped this project!

Hours: 8.88
Cookies: 🍪 138
Multiplier: 15.56 cookies/hr

This is my first project ship

i final learn to make a 4 layer pcb in EASYEDA(i also want to learn KICAD)
and i am also learn lot about STM32 .
This board is powered entirely by the 5V USB connection, if you use this Do not connect 12V or 24V vehicle power to the CAN header, as the current power regulator is not designed for high voltage.

furtherr i will ship more STM32 based project

ego

version one is completed now please have a look
https://github.com/ego10-ai/can-sniffer/releases/tag/v1.0.0

in this version :–
Core components: STM32G431CBU6 microcontroller and TJA1462 transceiver.
Supports standard CAN 2.0 and CAN FD networks.
Includes a 2-pin header and jumper cap to easily turn the 120 ohm termination resistor on or off.
4 status LEDs on board.

Attachment
0
ego

finally my pcb for can sniffer is completed now.
component list for my can sniffer:-

  • ARM Cortex-M4 Microcontroller STM32
  • TJA1462ATX CAN FD Transceiver
  • 3.3V LDO Linear Regulator
  • USB Type-C Receptacle (SMD 073)

in next version i will OBD port so it directly run using car power

Attachment
Attachment
0
ego

In an attempt to keep the PCB size of my project small, I ended up using a 4-layer PCB, and after that, it was not routing at all. After a lot of effort, I finally managed to route the MCU. Now, routing the remaining components will not take much time.

Attachment
0
ego

MY SCHEMETIC WORK IS DONE AND DRC CHECK IS ALSO WITH 0 ERRORS,
NOW ITS TIME TO MAKE PCB

Attachment
0
ego

SCHEMATIC IS COMPLETE FOR NOW ONLY THING IS REMAINING NOW IS DRC CHECK,
I AM USING STM32 AS A BRAIN FOR MY SNIFFER

Attachment
0
ego

component selection is almost done

Attachment
0
ego

I’m working on my first project! This is so exciting. I can’t wait to share more updates as I build.

Attachment
0