Hardware Architecture — v1

Cleaner Robot PCB Design

How the four circuit boards are split, what each one does, and how they talk to each other.

← Back to project

Four Boards, Two Domains

Every board belongs to one of two electrical domains. Clean boards handle sensitive signals. Dirty boards handle high-current power and motors. They never share power regulation.

🔵 Clean Domain — signal sensitive
🧠 Main Board 4-layer
Raspberry Pi 5 STM32F405 UART link
📡 Sensor Board 4-layer
LiDAR interface ICM-42688-P IMU VL53L0X ×4 TCRT5000 ×4
🔴 Dirty Domain — high current
Motor Driver Board 2-layer
A89301 ×4 Brushroll driver PWM in
🔋 Power Board 2-layer
BMS BQ25798 TPS65987 Buck ×N USB-C EPR

Interactive 3D Model

Fully routed board — FreeRouting with 362 traces. Drag to orbit, scroll to zoom, right-drag to pan.

Three.js · OrbitControls · copper traces extruded as 3D geometry

How It All Connects

Every board draws raw battery voltage and regulates locally. The only signal crossing the domain boundary goes through an electrical isolator.

Clean Domain
Main Board
RPi5 — navigation / ROS2
STM32 — real-time control
UART (on-board, 115200 baud)
Buck → 5V → 3.3V
Sensor Board
LiDAR — SPI from STM32
IMU — I²C from STM32
Cliff ToF ×4 — I²C
Cliff IR ×4 — GPIO
★ Star Ground
Single ground point
@ Battery connector
All 4 boards connect here
JST
harness
Dirty Domain
Motor Driver Board
A89301 ×4 — drive wheels
Brushroll driver
PWM in from STM32
Fault GPIO → STM32
Power Board
3S2P battery (11.1–12.6V)
BMS — cell protection
Buck ×N → 12V to each board
BQ25798 — charge management
TPS65987 — USB-C PD
USB-C EPR (48V/5A input)
ISO1540 → I²C → STM32

Harness Map

All connections between boards use JST-XH wire harnesses. No board-to-board stacking — boards are distributed around the chassis.

Connection Signals Notes
Power → Main 12V raw I²C ISO GND★ 12V for local buck. I²C from BQ25798 passes through ISO1540 isolator — battery % and charge state to STM32.
Power → Sensor 12V raw GND★ 12V for local buck. Sensor board regulates its own 3.3V.
Power → Motor Driver 12V raw GND★ 12V direct to motor drivers. Motors run at battery voltage.
Power → Main (USB data) D+ D− USB-C data lines only. Low current. Enables STM32 debug over USB-C port.
Main → Sensor SPI I²C GPIO 3.3V SPI to LiDAR. I²C shared bus to IMU + cliff ToF ×4. GPIO interrupts from cliff IR ×4. Both boards are clean domain — no isolator needed.
Main → Motor Driver PWM ×5 Fault GPIO 5× PWM channels: 4 drive wheel motors + 1 brushroll. Fault lines allow STM32 to detect driver failures per motor independently.

The Invariants

These rules must hold across every board design. Violating any one of them introduces noise, thermal, or respin risk.

AD-1

4 boards — never merge without re-evaluating noise isolation

Each board is sized to respin independently. Merging two boards couples their failure modes and doubles respin cost when one section needs a fix.

AD-2

Every board has its own buck converter from raw battery

No board takes regulated power from another board. Motor switching noise stays in the dirty domain and cannot reach the RPi5, STM32, or sensors.

AD-3

Single star ground at the battery connector

All board grounds meet at one point only. Motor return currents cannot flow through clean domain ground planes and shift voltage references.

AD-4

ISO1540 isolator on every signal crossing dirty → clean

The only dirty→clean signal is I²C from BQ25798. It passes through an ISO1540 electrical isolator. No exceptions.

AD-5

Charging current stays on the Power board — never crosses the harness

USB-C → BQ25798 → battery is fully contained on the Power board. Only the low-current USB data lines (D+/D−) cross to the Main board.

AD-9

Clean boards are 4-layer — dirty boards are 2-layer

4-layer adds a solid ground plane that absorbs motor switching EMI before it reaches sensor traces. Dirty boards carry DC only — 2-layer is sufficient and saves ~$15 per board.

Key Parts

Every major IC and their role in the system.

Navigation SBC
Raspberry Pi 5
Real-time MCU
STM32F405RGT6
Motor driver IC
Allegro A89301
Charge management
TI BQ25798
USB-C PD
TI TPS65987
I²C isolator
ISO1540
IMU
ICM-42688-P
Cliff ToF
VL53L0X ×4
Cliff IR
TCRT5000 ×4
LiDAR
YDLIDAR T-mini Plus
Buck converter
MP2307
Battery
3S2P 18650 — 57.7Wh
Navigation OS
ROS2 + Nav2
Real-time OS
FreeRTOS
PCB manufacturer
JLCPCB

Deferred to CAD

These decisions are intentionally left open until the physical chassis design provides the answers.

Physical board placement inside the 340mm chassis — depends on space margins around motors, brushroll, battery, and suction fan
Exact JST harness wire gauge and pin count per connector — follows from board layout and current calculations
Buck converter selection per board — follows from final component power budgets
LiDAR mounting and cable routing — mechanical design dependency
Cliff sensor wiring — may need small breakout PCBs at chassis corners depending on available space