feat(pcb): add 8-belt CNC router board — FluidNC YAML config + schematic netlist

- esp32-s3-pinout.yml: complete FluidNC machine config for 4×axis, 2-motors-per-axis (8 TMC2209, UART mode)
- schematic_netlist.md: component-level connection table (ESP32-S3, TMC2209, power, connectors, BOM)
- pins derived from Maslow 4 ESP32-S3 board layout adapted for 4-axis gantry
- TMC2209s on 2 UART buses (GPIO17/18), 4 addresses each, VREF resistor matrix
This commit is contained in:
2026-06-20 16:15:25 +03:00
parent f9cf6aa5e7
commit f26f15db61
2 changed files with 862 additions and 0 deletions

440
pcb/esp32-s3-pinout.yml Normal file
View File

@@ -0,0 +1,440 @@
# =============================================================================
# FluidNC Machine Configuration — 8-Belt CNC Router Controller Board
# Board: ESP32-S3-WROOM-1 based custom PCB
# Architecture: 4 axes (X/Y/Z/A), 2 motors per axis (gantry)
# Driver: 8 × TMC2209 in UART mode, 2 buses (4 drivers each)
# Kinematics: Cartesian (dual-motor gantry)
# =============================================================================
# Pin assignments derived from Maslow 4 ESP32-S3 board layout
# (github.com/MaslowCNC/Maslow_4) adapted for a 4-axis 8-motor CNC router.
#
# TMC2209 bus topology:
# UART1 (txd_pin: gpio.17): addr 0..3 → motors X0, Y0, Z0, A0
# UART2 (txd_pin: gpio.18): addr 0..3 → motors X1, Y1, Z1, A1
#
# TMC2209 ADDR selection per driver (VREF resistor to GND):
# ADDR 0: no resistor (short) → 0 Ω
# ADDR 1: → 2.2 kΩ
# ADDR 2: → 4.7 kΩ
# ADDR 3: → 8.2 kΩ
# =============================================================================
board: "8-Belt CNC Router S3"
name: "8-Belt CNC Router"
# ---- Stepping Engine -------------------------------------------------------
stepping:
engine: RMT # RMT for ESP32-S3 (cleaner than Timed on S3)
idle_ms: 250
pulse_us: 2
dir_delay_us: 1
disable_delay_us: 0
segments: 12
# ---- UART Buses (for TMC2209 UART control) ---------------------------------
# UART0 → console (USB-serial bridge), not used for TMC.
# UART1 → TMC2209 drivers, ADDR 0..3
# UART2 → TMC2209 drivers, ADDR 0..3
uart:
uart1:
txd_pin: gpio.17
rxd_pin: gpio.17 # single-wire half-duplex — TXD tied to PDN_UART
baud: 115200
mode: 8N1
rts_pin: NO_PIN
cts_pin: NO_PIN
uart2:
txd_pin: gpio.18
rxd_pin: gpio.18 # single-wire half-duplex
baud: 115200
mode: 8N1
rts_pin: NO_PIN
cts_pin: NO_PIN
# ---- SPI Bus (SD card) -----------------------------------------------------
spi:
miso_pin: gpio.41
mosi_pin: gpio.42
sck_pin: gpio.43
sdcard:
cs_pin: gpio.4
card_detect_pin: NO_PIN
frequency_hz: 8000000
# ---- Kinematics (Cartesian — dual motor gantry) ----------------------------
# Cartesian is the default; no kinematics section needed for standard
# X/Y/Z/A. Each axis has two TMC2209-driven motors (motor0, motor1).
# ----------------------------------------------------------------------------
kinematics:
Cartesian: # default, explicit for clarity
# No sub-items needed for Cartesian
# ---- Axes ------------------------------------------------------------------
axes:
# Shared disable pin — active low, disables all TMC2209 drivers
shared_stepper_disable_pin: NO_PIN # TMC2209 has internal enable via UART
# --------------------------------------------------------------------------
# X-Axis — Dual Motor Gantry (left/right)
# --------------------------------------------------------------------------
x:
steps_per_mm: 80.0
max_rate_mm_per_min: 3000.0
acceleration_mm_per_sec2: 60.0
max_travel_mm: 1200.0
soft_limits: true
homing:
cycle: 2 # home X then Y
positive_direction: false
mpos_mm: 0
feed_mm_per_min: 100.0
seek_mm_per_min: 400.0
settle_ms: 250
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.35:low:pu # shared X home/limit
hard_limits: true
pulloff_mm: 2.0
tmc_2209:
uart_num: 1
step_pin: gpio.15
direction_pin: gpio.16
disable_pin: NO_PIN # each TMC driver manages its own enable via UART
r_sense_ohms: 0.11
run_amps: 1.2
hold_amps: 0.6
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 0
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
motor1:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: NO_PIN # uses motor0's limit pin for homing
hard_limits: false
pulloff_mm: 2.0
tmc_2209:
uart_num: 2
step_pin: gpio.46
direction_pin: gpio.38
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.2
hold_amps: 0.6
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 0
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
# --------------------------------------------------------------------------
# Y-Axis — Dual Motor Gantry (front/back)
# --------------------------------------------------------------------------
y:
steps_per_mm: 80.0
max_rate_mm_per_min: 3000.0
acceleration_mm_per_sec2: 60.0
max_travel_mm: 800.0
soft_limits: true
homing:
cycle: 2
positive_direction: false
mpos_mm: 0
feed_mm_per_min: 100.0
seek_mm_per_min: 400.0
settle_ms: 250
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.36:low:pu
hard_limits: true
pulloff_mm: 2.0
tmc_2209:
uart_num: 1
step_pin: gpio.21
direction_pin: gpio.47
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.2
hold_amps: 0.6
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 1
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
motor1:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 2.0
tmc_2209:
uart_num: 2
step_pin: gpio.48
direction_pin: gpio.45
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.2
hold_amps: 0.6
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 1
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
# --------------------------------------------------------------------------
# Z-Axis — Dual Motors (lead-screw/gantry, mirrored)
# --------------------------------------------------------------------------
z:
steps_per_mm: 400.0
max_rate_mm_per_min: 800.0
acceleration_mm_per_sec2: 25.0
max_travel_mm: 200.0
soft_limits: true
homing:
cycle: 1 # home Z first
positive_direction: true
mpos_mm: 0
feed_mm_per_min: 50.0
seek_mm_per_min: 200.0
settle_ms: 500
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.37:low:pu
hard_limits: true
pulloff_mm: 3.0
tmc_2209:
uart_num: 1
step_pin: gpio.14
direction_pin: gpio.13
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.0
hold_amps: 0.5
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 2
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
motor1:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 3.0
tmc_2209:
uart_num: 2
step_pin: gpio.12
direction_pin: gpio.11
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.0
hold_amps: 0.5
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 2
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
# --------------------------------------------------------------------------
# A-Axis — Dual Motors (4th axis, e.g. rotary/aux)
# --------------------------------------------------------------------------
a:
steps_per_mm: 80.0
max_rate_mm_per_min: 2000.0
acceleration_mm_per_sec2: 40.0
max_travel_mm: 500.0
soft_limits: false
homing:
cycle: -1 # no homing — manual positioning
allow_single_axis: true
positive_direction: true
mpos_mm: 0
feed_mm_per_min: 50.0
seek_mm_per_min: 200.0
settle_ms: 250
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: gpio.39:low:pu
hard_limits: true
pulloff_mm: 2.0
tmc_2209:
uart_num: 1
step_pin: gpio.8
direction_pin: gpio.3
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.0
hold_amps: 0.5
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 3
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
motor1:
limit_neg_pin: NO_PIN
limit_pos_pin: NO_PIN
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 2.0
tmc_2209:
uart_num: 2
step_pin: gpio.9
direction_pin: gpio.10
disable_pin: NO_PIN
r_sense_ohms: 0.11
run_amps: 1.0
hold_amps: 0.5
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: true
addr: 3
run_mode: StealthChop
homing_mode: StealthChop
stallguard: 0
stallguard_debug: false
toff_coolstep: 3
# ---- Control Pins ----------------------------------------------------------
control:
safety_door_pin: NO_PIN
reset_pin: NO_PIN
feed_hold_pin: NO_PIN
cycle_start_pin: NO_PIN
macro0_pin: NO_PIN
macro1_pin: NO_PIN
macro2_pin: NO_PIN
macro3_pin: NO_PIN
# ---- Coolant ---------------------------------------------------------------
coolant:
flood_pin: gpio.7
mist_pin: NO_PIN
delay_ms: 0
# ---- Probe ----------------------------------------------------------------
probe:
pin: gpio.40:low:pu
check_mode_start: true
# ---- Macros ----------------------------------------------------------------
macros:
startup_line0:
startup_line1:
macro0:
macro1:
macro2:
macro3:
# ---- Start / Park ----------------------------------------------------------
start:
must_home: true
deactivate_parking: false
check_limits: false
parking:
enable: false
axis: Z
target_mpos_mm: -5.0
rate_mm_per_min: 800.0
pullout_mm: 5.0
pullout_rate_mm_per_min: 250.0
# ---- Spindle (PWM / VFD) ----------------------------------------------------
PWM:
pwm_hz: 5000
output_pin: gpio.5
enable_pin: NO_PIN
direction_pin: gpio.6
disable_with_s0: false
s0_with_disable: true
spinup_ms: 0
spindown_ms: 0
tool_num: 0
speed_map: 0=0% 10000=100%
# ---- User Outputs -----------------------------------------------------------
user_outputs:
analog0_pin: NO_PIN
analog1_pin: NO_PIN
analog2_pin: NO_PIN
analog3_pin: NO_PIN
digital0_pin: NO_PIN
digital1_pin: NO_PIN
digital2_pin: NO_PIN
digital3_pin: NO_PIN
digital4_pin: NO_PIN
digital5_pin: NO_PIN
digital6_pin: NO_PIN
digital7_pin: NO_PIN
analog_hz: 5000
# ---- General Settings -------------------------------------------------------
arc_tolerance_mm: 0.002
junction_deviation_mm: 0.010
verbose_errors: false
report_inches: false
enable_parking_override_control: false
use_line_numbers: false
planner_blocks: 16

422
pcb/schematic_netlist.md Normal file
View File

@@ -0,0 +1,422 @@
# 8-Belt CNC Router — Controller Board Schematic Netlist
**Board revision:** 1.0
**Controller:** ESP32-S3-WROOM-1 (16 MB Flash / 8 MB PSRAM)
**Drivers:** 8× TMC2209 (UART mode, 2 buses × 4 addresses)
**Form factor:** 4-layer PCB, 100×80 mm, 1.6 mm thickness
**Power:** 24 VDC (motor), 5 VDC (logic), 3.3 VDC (ESP32)
> Connections are listed as `REF_DES ── PIN ── SIGNAL ── DESTINATION`.
> Signals with `~` prefix are active low.
---
## 1 — Microcontroller: ESP32-S3-WROOM-1 (U1)
| Pin | Signal | Destination | Notes |
|-----|--------|-------------|-------|
| 1 | GND | GND plane | |
| 2 | GPIO1 / TX0 | USB-UART bridge (RX) | Console UART |
| 3 | GPIO2 / RX0 | USB-UART bridge (TX) | Console UART |
| 4 | GPIO3 / ADC1_CH3 | J1-8 (A0_DIR) → U10 (DIR) | A-axis motor1 direction |
| 5 | GPIO4 | J2-5 (SD_CS) → microSD (CS) | SD card chip-select |
| 6 | GPIO5 | J3 (SPINDLE_PWM) → spindle MOSFET | Spindle speed PWM out |
| 7 | GPIO6 | J3 (SPINDLE_DIR) → spindle MOSFET | Spindle direction |
| 8 | GPIO7 | J7-1 (COOLANT_FLOOD) → MOSFET | Coolant flood relay |
| 9 | GPIO8 | J1-7 (A0_STEP) → U11 (STEP) | A-axis motor0 step |
| 10 | GPIO9 | J1-9 (A1_STEP) → U12 (STEP) | A-axis motor1 step |
| 11 | GPIO10 | J1-10 (A1_DIR) → U12 (DIR) | A-axis motor1 direction |
| 12 | GPIO11 | J1-6 (Z1_DIR) → U9 (DIR) | Z-axis motor1 direction |
| 13 | GPIO12 | J1-5 (Z1_STEP) → U9 (STEP) | Z-axis motor1 step |
| 14 | GPIO13 | J1-3 (Z0_DIR) → U8 (DIR) | Z-axis motor0 direction |
| 15 | GPIO14 | J1-2 (Z0_STEP) → U8 (STEP) | Z-axis motor0 step |
| 16 | GPIO15 | J1-1 (X0_STEP) → U5 (STEP) | X-axis motor0 step |
| 17 | GPIO16 | J1-4 (X0_DIR) → U5 (DIR) | X-axis motor0 direction |
| 18 | GPIO17 | UART TX1 → TMC2209 (PDN_UART) bus | UART1 single-wire (4 drivers: X0, Y0, Z0, A0) |
| 19 | GPIO18 | UART TX2 → TMC2209 (PDN_UART) bus | UART2 single-wire (4 drivers: X1, Y1, Z1, A1) |
| 20 | GND | GND plane | |
| 21 | GPIO21 | J1-12 (Y0_STEP) → U6 (STEP) | Y-axis motor0 step |
| 22 | GPIO35 | J4-1 (X_LIMIT) → limit switch | X-axis limit/home |
| 23 | GPIO36 | J4-2 (Y_LIMIT) → limit switch | Y-axis limit/home |
| 24 | GPIO37 | J4-3 (Z_LIMIT) → limit switch | Z-axis limit/home |
| 25 | GPIO38 | J2-9 (X1_DIR) → U7 (DIR) | X-axis motor1 direction |
| 26 | GPIO39 | J4-4 (A_LIMIT) → limit switch | A-axis limit/home |
| 27 | GPIO40 | J4-5 (PROBE) → probe input | Probe input |
| 28 | GPIO41 | SPI_MISO → microSD card (DO) | SD card data-out |
| 29 | GPIO42 | SPI_MOSI → microSD card (DI) | SD card data-in |
| 30 | GPIO43 | SPI_SCLK → microSD card (SCLK) | SD card clock |
| 31 | GPIO44 | (reserved) | NC — available for user I/O |
| 32 | GPIO45 | J2-10 (Y1_DIR) → U8 (DIR) | Y-axis motor1 direction |
| 33 | GPIO46 | J2-7 (X1_STEP) → U7 (STEP) | X-axis motor1 step |
| 34 | GPIO47 | J2-11 (Y0_DIR) → U6 (DIR) | Y-axis motor0 direction |
| 35 | GPIO48 | J2-8 (Y1_STEP) → U8 (STEP) | Y-axis motor1 step |
| 36 | GND | GND plane | |
| 37~49 | NC (space) | — | Module-internal flash pins |
| 50 | GND | GND plane | |
| 51~52 | NC | — | Internal flash |
| 53~54 | VBAT / CHIP_PU | 3.3V + 10 kΩ pullup + 0.1 µF to GND | Enable pin |
| 55 | 3V3 | 3.3V rail | Core supply |
| 56~61 | NC | — | Internal flash/PSRAM |
| 62 | GND | GND plane | |
| 63 | USB_DP | USB-UART bridge (D+) | Also accessible via USB-C |
| 64 | USB_DN | USB-UART bridge (D) | Also accessible via USB-C |
| 65 | VDD_USB | 5V rail (USB VBUS) | USB power detect |
| 66 | NC | — | |
| 67~68 | NC | — | |
| 69 | GND | GND plane | |
**Module-internal connections (ESP32-S3-WROOM-1):**
| Pin | Signal | Notes |
|-----|--------|-------|
| Module pins 3749, 5152, 5661 | Flash/PSRAM interface | Internal — NC on PCB |
| | 3.3V supply | LDO (U2) output to module pin 55 |
| | EN / CHIP_PU | RC delay (10 kΩ + 1 µF) for power sequencing |
---
## 2 — Power Regulation
### 2.1 — 24V Input Connector (J6)
| Pin | Signal | Destination | Notes |
|-----|--------|-------------|-------|
| 1 | VIN_24V | F1 (5A fuse) → C1 (100 µF/35V) → motor supply rail | Motor/bus power |
| 2 | GND | GND plane | Power ground |
**Protection:** TVS diode (SMBJ30A) from VIN_24V to GND, reverse-polarity protection (P-MOSFET or Schottky).
### 2.2 — 5V Buck Regulator (U3) — MP9942 or TPS54360
| Component | Pin | Signal | Destination |
|-----------|-----|--------|-------------|
| U3-1 | BOOT | Cboot (0.1 µF) → U3-8 (SW) | Bootstrap cap |
| U3-2 | VIN | VIN_24V → C2 (10 µF/50V) → GND | Input |
| U3-3 | EN | 24V via 100 kΩ pullup | Enable |
| U3-4 | SS | Css (10 nF) → GND | Soft-start |
| U3-5 | RT | Rrt (51 kΩ) → GND | Switching frequency (~500 kHz) |
| U3-6 | COMP | Rc (10 kΩ) + Cc (4.7 nF) → GND | Compensation |
| U3-7 | FB | R1 (10 kΩ) → 5V rail; R2 (2.32 kΩ) → GND | Feedback divider |
| U3-8 | SW | L1 (10 µH) → C3 (47 µF/16V) → 5V rail | Inductor + output cap |
| — | PGND | GND plane | Power ground |
| — | — | 5V rail → TMC2209 VM + 3.3V LDO input | 5V distribution |
### 2.3 — 3.3V LDO Regulator (U4) — AMS1117-3.3
| Component | Pin | Signal | Destination |
|-----------|-----|--------|-------------|
| U4-1 | GND | GND plane | |
| U4-2 | VOUT | 3.3V rail → C4 (10 µF) + C5 (0.1 µF) → ESP32-S3 module, TMC2209 VIO | 3.3V logic supply |
| U4-3 | VIN | 5V rail → C6 (10 µF) | Input from 5V buck |
---
## 3 — TMC2209 Stepper Drivers (U5U12)
### 3.1 — TMC2209 Pinout (common to all 8 drivers)
| Pin # | Name | Function | Connection |
|-------|------|----------|------------|
| 1 | EN | Enable (active low) | 10 kΩ pullup to VIO (3.3V); optional ESP32 GPIO44 |
| 2 | MS1 / ADDR_CFG | UART address select | Resistor to GND (see §3.3) |
| 3 | MS2 / VREF | Current reference / UART addr | Resistor to GND if UART addressing; else VREF divider |
| 4 | VCC_IO | Logic supply | 3.3V rail + C7 (0.1 µF) to GND near each driver |
| 5 | GND | Ground | GND plane |
| 6 | V3_1 | Internal regulator cap | 100 nF cap to GND |
| 7 | V3_2 | Internal regulator cap | 100 nF cap to GND |
| 8 | V3_3 | Internal regulator cap | 100 nF cap to GND |
| 9 | CAP | Internal charge pump | 22 nF cap to V3_3 |
| 10 | VCC | Motor supply | 5V rail (or 24V, see §3.4) |
| 11 | A2 | Motor coil A2 | Motor connector |
| 12 | A1 | Motor coil A1 | Motor connector |
| 13 | B1 | Motor coil B1 | Motor connector |
| 14 | B2 | Motor coil B2 | Motor connector |
| 15 | VCC | Motor supply | 5V rail (or 24V, see §3.4) |
| 16 | GND | Ground | GND plane |
| 17 | VREF | Analog reference / Select | Resistor to GND (UART addressing) or voltage divider |
| 18 | PDN_UART | UART data / Power-down | UART TX line (single-wire half-duplex) |
| 19 | CLK | Internal clock | 10 nF to GND; or external clock if precision needed |
| 20 | NC | Not connected | — |
| 21 | DIAG | Diagnostic output | 10 kΩ pullup to 3.3V; optional to ESP32 GPIO |
| 22 | DRV_EN | Driver enable | Pull high via 10 kΩ to VIO for active; pull low to disable |
| 23 | STEP | Step input | From ESP32 GPIO via 100 Ω series resistor (see table below) |
| 24 | DIR | Direction input | From ESP32 GPIO via 100 Ω series resistor (see table below) |
### 3.2 — TMC2209 Address Selection (VREF resistor to GND)
| ADDR | R_VREF to GND | Driver | Axis | UART Bus |
|------|---------------|--------|------|----------|
| 0 | 0 Ω (short) | U5 | X motor0 | UART1 (gpio.17) |
| 1 | 2.2 kΩ | U6 | Y motor0 | UART1 (gpio.17) |
| 2 | 4.7 kΩ | U7 | Z motor0 | UART1 (gpio.17) |
| 3 | 8.2 kΩ | U8 | A motor0 | UART1 (gpio.17) |
| 0 | 0 Ω (short) | U9 | X motor1 | UART2 (gpio.18) |
| 1 | 2.2 kΩ | U10 | Y motor1 | UART2 (gpio.18) |
| 2 | 4.7 kΩ | U11 | Z motor1 | UART2 (gpio.18) |
| 3 | 8.2 kΩ | U12 | A motor1 | UART2 (gpio.18) |
### 3.3 — Step/Dir Pin Mapping (ESP32-S3 → TMC2209)
| Ref | Axis | Motor | ADDR | STEP GPIO | DIR GPIO | UART Bus |
|-----|------|-------|------|-----------|----------|----------|
| U5 | X | motor0 | 0 | GPIO15 | GPIO16 | UART1 |
| U6 | Y | motor0 | 1 | GPIO21 | GPIO47 | UART1 |
| U7 | Z | motor0 | 2 | GPIO14 | GPIO13 | UART1 |
| U8 | A | motor0 | 3 | GPIO8 | GPIO3 | UART1 |
| U9 | X | motor1 | 0 | GPIO46 | GPIO38 | UART2 |
| U10 | Y | motor1 | 1 | GPIO48 | GPIO45 | UART2 |
| U11 | Z | motor1 | 2 | GPIO12 | GPIO11 | UART2 |
| U12 | A | motor1 | 3 | GPIO9 | GPIO10 | UART2 |
### 3.4 — TMC2209 Motor Supply (VCC)
All TMC2209s powered by 5V rail from buck regulator (U3).
For high-torque applications, VCC can be fed from 24V rail (remove LDO jumper).
Each motor output (coils A1/A2/B1/B2) connects to J1/J2 XH-8 motor connectors via 100 nF + 47 µF electrolytic per driver pair.
---
## 4 — Motor Output Connectors
### 4.1 — JST XH-8 Pinout (J1, J2) — Motor Connector Blocks
**J1 — Motors A0, A1, B0, B1 (top row, nearer UART1 drivers):**
| J1 Pin | Signal | Driver | Driver Pin | Wire Color (typ) |
|--------|--------|--------|------------|-------------------|
| 1 | X0_STEP | U5 | STEP (23) | — (test point) |
| 2 | Z0_STEP | U8 | STEP (23) | — (test point) |
| 3 | Z0_DIR | U8 | DIR (24) | — (test point) |
| 4 | X0_DIR | U5 | DIR (24) | — (test point) |
| 5 | Z1_STEP | U11 | STEP (23) | — (test point) |
| 6 | Z1_DIR | U11 | DIR (24) | — (test point) |
| 7 | A0_STEP | U7 | STEP (23) | — (test point) |
| 8 | A0_DIR | U7 | DIR (24) | — (test point) |
| 9 | A1_STEP | U12 | STEP (23) | — (test point) |
| 10 | A1_DIR | U12 | DIR (24) | — (test point) |
| 11 | GND | GND | — | Black |
| 12 | Y0_STEP | U6 | STEP (23) | — (test point) |
**J2 — Motors A2, A3, B2, B3 (bottom row, nearer UART2 drivers):**
| J2 Pin | Signal | Driver | Driver Pin | Wire Color (typ) |
|--------|--------|--------|------------|-------------------|
| 1 | VCC_5V | 5V rail | — | Red |
| 2 | GND | GND | — | Black |
| 3 | VIN_24V | 24V rail | — | Red/Thick |
| 4 | GND | GND | — | Black |
| 5 | SD_CS | U1 (GPIO4) | — | — |
| 6 | GND | GND | — | Black |
| 7 | X1_STEP | U9 | STEP (23) | — (test point) |
| 8 | Y1_STEP | U10 | STEP (23) | — (test point) |
| 9 | X1_DIR | U9 | DIR (24) | — (test point) |
| 10 | Y1_DIR | U10 | DIR (24) | — (test point) |
| 11 | Y0_DIR | U6 | DIR (24) | — (test point) |
### 4.2 — Motor Coil Connectors (J8J15, 4-pin JST XH)
| Connector | Driver | Axis | Pin 1 (A1) | Pin 2 (A2) | Pin 3 (B1) | Pin 4 (B2) |
|-----------|--------|------|------------|------------|------------|------------|
| J8 | U5 | X motor0 | U5-12 | U5-11 | U5-13 | U5-14 |
| J9 | U6 | Y motor0 | U6-12 | U6-11 | U6-13 | U6-14 |
| J10 | U7 | Z motor0 | U7-12 | U7-11 | U7-13 | U7-14 |
| J11 | U8 | A motor0 | U8-12 | U8-11 | U8-13 | U8-14 |
| J12 | U9 | X motor1 | U9-12 | U9-11 | U9-13 | U9-14 |
| J13 | U10 | Y motor1 | U10-12 | U10-11 | U10-13 | U10-14 |
| J14 | U11 | Z motor1 | U11-12 | U11-11 | U11-13 | U11-14 |
| J15 | U12 | A motor1 | U12-12 | U12-11 | U12-13 | U12-14 |
---
## 5 — Limit Switches & Probe (J4)
| J4 Pin | Signal | ESP32 GPIO | Pull | Notes |
|--------|--------|------------|------|-------|
| 1 | X_LIMIT | GPIO35 | 10 kΩ to 3.3V (internal :pu) | NC, active low |
| 2 | Y_LIMIT | GPIO36 | 10 kΩ to 3.3V (internal :pu) | NC, active low |
| 3 | Z_LIMIT | GPIO37 | 10 kΩ to 3.3V (internal :pu) | NC, active low |
| 4 | A_LIMIT | GPIO39 | 10 kΩ to 3.3V (internal :pu) | NC, active low |
| 5 | PROBE | GPIO40 | 10 kΩ to 3.3V (internal :pu) | NC, active low |
| 6 | GND | GND | — | Ground reference |
---
## 6 — Spindle / Coolant Outputs (J3, J7)
| Connector | Pin | Signal | ESP32 GPIO | Driver | Notes |
|-----------|-----|--------|------------|--------|-------|
| J3-1 | SPINDLE_ENA | GPIO5 | Gate of N-MOSFET (IRLZ44N) | PWM 0100%, 5 kHz |
| J3-2 | SPINDLE_DIR | GPIO6 | Gate of N-MOSFET (IRLZ44N) | CW/CCW |
| J3-3 | GND | — | GND | |
| J7-1 | COOLANT_FLOOD | GPIO7 | Gate of N-MOSFET + relay | 12V/1A rated |
| J7-2 | GND | — | GND | |
---
## 7 — SD Card Socket (mSD, J5)
| J5 Pin | Signal | Destination | Notes |
|--------|--------|-------------|-------|
| 1 | DAT2 | NC (1-bit SD mode) | |
| 2 | CD/DAT3 | 10 kΩ pullup to 3.3V | Card detect not used |
| 3 | CMD | SPI_MOSI (GPIO42) | Data in |
| 4 | VDD | 3.3V + C8 (0.1 µF) to GND | Supply |
| 5 | CLK | SPI_SCLK (GPIO43) | Clock |
| 6 | VSS | GND | Ground |
| 7 | DAT0 | SPI_MISO (GPIO41) | Data out |
| 8 | DAT1 | NC (1-bit SD mode) | |
| CD | CARD_DETECT | GPIO44 (optional) | Use if 4-bit SD mode |
---
## 8 — USB / Serial Console (J16)
| J16 Pin | Signal | ESP32 GPIO | Connects to |
|---------|--------|------------|-------------|
| 1 (D+) | USB_DP | U1-63 | CP2102N or CH343 D+ |
| 2 (D) | USB_DN | U1-64 | CP2102N or CH343 D |
| 3 | VUSB | 5V from USB | 5V rail (OR-ing with 24V buck) |
| 4 | GND | GND | GND |
**USB-UART bridge (CP2102N or CH343):**
| Bridge Pin | Signal | ESP32 GPIO |
|------------|--------|------------|
| TXD | TX0 | GPIO1 (RX0) |
| RXD | RX0 | GPIO2 (TX0) |
---
## 9 — UART Bus Topology
```
UART1 (ESP32 GPIO17) ──┬── 1 kΩ ── U5 (X motor0) PDN_UART ADDR=0
├── 1 kΩ ── U6 (Y motor0) PDN_UART ADDR=1
├── 1 kΩ ── U7 (Z motor0) PDN_UART ADDR=2
└── 1 kΩ ── U8 (A motor0) PDN_UART ADDR=3
UART2 (ESP32 GPIO18) ──┬── 1 kΩ ── U9 (X motor1) PDN_UART ADDR=0
├── 1 kΩ ── U10 (Y motor1) PDN_UART ADDR=1
├── 1 kΩ ── U11 (Z motor1) PDN_UART ADDR=2
└── 1 kΩ ── U12 (A motor1) PDN_UART ADDR=3
```
> **Note:** Each TMC2209 PDN_UART pin gets a 1 kΩ series resistor to prevent contention during multi-drop operation.
> The ESP32's TXD pin is configured as open-drain and re-connected to its RXD for half-duplex operation (`rxd_pin: gpio.17` in config for a shared pin, or a discrete 1 kΩ feedback from TX to RX).
---
## 10 — UART Address Resistor Matrix (VREF → GND)
| Driver | Axis | ADDR | R_VREF (1% tolerance) | Resistor Ref |
|--------|------|------|----------------------|--------------|
| U5 | X motor0 | 0 | 0 Ω (jumper) | R5 |
| U6 | Y motor0 | 1 | 2.2 kΩ | R6 |
| U7 | Z motor0 | 2 | 4.7 kΩ | R7 |
| U8 | A motor0 | 3 | 8.2 kΩ | R8 |
| U9 | X motor1 | 0 | 0 Ω (jumper) | R9 |
| U10 | Y motor1 | 1 | 2.2 kΩ | R10 |
| U11 | Z motor1 | 2 | 4.7 kΩ | R11 |
| U12 | A motor1 | 3 | 8.2 kΩ | R12 |
---
## 11 — Netlist Summary by Net Name
| Net Name | Type | ESP32 Pin | Driver Pins | Connector | Other |
|----------|------|-----------|-------------|-----------|-------|
| X0_STEP | Output | GPIO15 | U5-23 | J1-1 | 100 Ω series R |
| X0_DIR | Output | GPIO16 | U5-24 | J1-4 | 100 Ω series R |
| X1_STEP | Output | GPIO46 | U9-23 | J2-7 | 100 Ω series R |
| X1_DIR | Output | GPIO38 | U9-24 | J2-9 | 100 Ω series R |
| Y0_STEP | Output | GPIO21 | U6-23 | J1-12 | 100 Ω series R |
| Y0_DIR | Output | GPIO47 | U6-24 | J2-11 | 100 Ω series R |
| Y1_STEP | Output | GPIO48 | U10-23 | J2-8 | 100 Ω series R |
| Y1_DIR | Output | GPIO45 | U10-24 | J2-10 | 100 Ω series R |
| Z0_STEP | Output | GPIO14 | U7-23 | J1-2 | 100 Ω series R |
| Z0_DIR | Output | GPIO13 | U7-24 | J1-3 | 100 Ω series R |
| Z1_STEP | Output | GPIO12 | U11-23 | J1-5 | 100 Ω series R |
| Z1_DIR | Output | GPIO11 | U11-24 | J1-6 | 100 Ω series R |
| A0_STEP | Output | GPIO8 | U8-23 | J1-7 | 100 Ω series R |
| A0_DIR | Output | GPIO3 | U8-24 | J1-8 | 100 Ω series R |
| A1_STEP | Output | GPIO9 | U12-23 | J1-9 | 100 Ω series R |
| A1_DIR | Output | GPIO10 | U12-24 | J1-10 | 100 Ω series R |
| UART1_TX | Bidir | GPIO17 | U5-18, U6-18, U7-18, U8-18 | — | 1 kΩ R per driver |
| UART2_TX | Bidir | GPIO18 | U9-18, U10-18, U11-18, U12-18 | — | 1 kΩ R per driver |
| X_LIMIT | Input | GPIO35 | — | J4-1 | 10 kΩ pullup |
| Y_LIMIT | Input | GPIO36 | — | J4-2 | 10 kΩ pullup |
| Z_LIMIT | Input | GPIO37 | — | J4-3 | 10 kΩ pullup |
| A_LIMIT | Input | GPIO39 | — | J4-4 | 10 kΩ pullup |
| PROBE | Input | GPIO40 | — | J4-5 | 10 kΩ pullup |
| SPINDLE_PWM | Output | GPIO5 | — | J3-1 | MOSFET gate |
| SPINDLE_DIR | Output | GPIO6 | — | J3-2 | MOSFET gate |
| COOLANT | Output | GPIO7 | — | J7-1 | Relay driver |
| SD_CS | Output | GPIO4 | — | J2-5, J5-3 | |
| SD_MISO | Input | GPIO41 | — | J5-7 | |
| SD_MOSI | Output | GPIO42 | — | J5-3 | |
| SD_SCLK | Output | GPIO43 | — | J5-5 | |
| VIN_24V | Power | — | — | J6-1, J2-3 | Fused 5A, TVS |
| VCC_5V | Power | U1-65 | U5-10,15 through U12-10,15 | J2-1 | From U3 buck |
| VCC_3V3 | Power | U1-55 | U5-4 through U12-4 | — | From U4 LDO |
| GND | Ground | U1-1,20,36,50,62,69 | U5-5,16 through U12-5,16 | J1-11, J2-2,4,6, J4-6, J3-3, J6-2 | Ground plane |
---
## 12 — Bill of Materials (Key Components)
| Ref | Part | Package | Qty | Notes |
|-----|------|---------|-----|-------|
| U1 | ESP32-S3-WROOM-1-N16R8 | 36-pin castellation | 1 | 16 MB flash, 8 MB PSRAM |
| U2 | CP2102N / CH343G | QFN-28 / MSOP-10 | 1 | USB-UART bridge |
| U3 | MP9942 / TPS54360 | SOP-8 | 1 | 5V buck regulator |
| U4 | AMS1117-3.3 | SOT-223 | 1 | 3.3V LDO |
| U5U12 | TMC2209-LA | QFN-24 | 8 | Stepper driver |
| J1, J2 | JST XH-12 | 12-pin header | 2 | Signal breakout |
| J3 | JST XH-3 | 3-pin header | 1 | Spindle |
| J4 | JST XH-6 | 6-pin header | 1 | Limits + probe |
| J5 | microSD socket | SMT | 1 | SD card |
| J6 | 2-pin terminal block | 5.08 mm | 1 | 24V power input |
| J7 | JST XH-2 | 2-pin header | 1 | Coolant |
| J8J15 | JST XH-4 | 4-pin header | 8 | Motor coils |
| J16 | USB-C receptacle | SMT | 1 | Programming |
| C1 | 100 µF/35V | SMD electrolytic | 1 | 24V input bulk cap |
| C2 | 10 µF/50V | 1206 | 1 | Buck input cap |
| C3 | 47 µF/16V | SMD electrolytic | 1 | 5V output cap |
| C4 | 10 µF/10V | 0805 | 1 | 3.3V output cap |
| C5C8 | 0.1 µF | 0805 | 10 | Bypass caps |
| C9C16 | 100 nF | 0603 | 8 | TMC2209 VCC_IO bypass |
| C17C24 | 47 µF/16V | 1206 | 8 | TMC2209 motor supply |
| F1 | 5A resettable fuse | 1812 | 1 | 24V input protection |
| L1 | 10 µH shielded | SMD | 1 | Buck inductor |
| R5R12 | ADDR resistors | 0805 | 8 | See ADDR resistor matrix |
| RxD-xS | 100 Ω | 0603 | 16 | Step/Dir line termination |
| RxU-xS | 1 kΩ | 0603 | 8 | UART bus series resistors |
| — | 10 kΩ | 0603 | 5 | Limit pullups |
| — | TVS (SMBJ30A) | DO-214AA | 1 | 24V input protection |
---
## 13 — Board Stackup (4-Layer)
| Layer | Type | Notes |
|-------|------|-------|
| L1 (Top) | Signal + Ground pour | ESP32-S3, TMC2209s, signal routing |
| L2 (Inner 1) | Ground plane | Solid GND, no splits |
| L3 (Inner 2) | Power plane | 3.3V, 5V split |
| L4 (Bottom) | Signal + Ground pour | Connectors, bulk caps, routing |
---
## 14 — References
| Source | URL |
|--------|-----|
| Maslow 4 firmware maslow.yaml | `github.com/MaslowCNC/Maslow_4/blob/Maslow-Main/firmware/FluidNC/data/maslow.yaml` |
| Maslow 4 Hardware (Boards repo) | `github.com/MaslowCNC/Boards` |
| Maslow 4 Electronics (old Arduino) | `github.com/MaslowCNC/Electronics` |
| Maslow 4 PCB files (OSHWLabs) | `oshwlab.com/BarbourSmith/maslow4` |
| FluidNC 4-axis TMC2209 board | `wiki.fluidnc.com/en/hardware/official/TMC2209_4_Axis` |
| FluidNC config IO docs | `wiki.fluidnc.com/en/config/config_IO` |
| FluidNC kinematics docs | `wiki.fluidnc.com/en/config/kinematics` |
| FluidNC dual-motor/homing | `wiki.fluidnc.com/en/config/homing_and_limit_switches` |
| FluidNC official config examples | `github.com/bdring/fluidnc-config-files` |
| TMC2209 datasheet | `trinamic.com/products/integrated-circuits/tmc2209/` |
| ESP32-S3 datasheet | `espressif.com/en/products/socs/esp32-s3` |