diff --git a/pcb/esp32-s3-pinout.yml b/pcb/esp32-s3-pinout.yml new file mode 100644 index 0000000..1bb04d4 --- /dev/null +++ b/pcb/esp32-s3-pinout.yml @@ -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 diff --git a/pcb/schematic_netlist.md b/pcb/schematic_netlist.md new file mode 100644 index 0000000..5bcd9e5 --- /dev/null +++ b/pcb/schematic_netlist.md @@ -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 37–49, 51–52, 56–61 | 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 (U5–U12) + +### 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 (J8–J15, 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 0–100%, 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 | +| U5–U12 | 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 | +| J8–J15 | 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 | +| C5–C8 | 0.1 µF | 0805 | 10 | Bypass caps | +| C9–C16 | 100 nF | 0603 | 8 | TMC2209 VCC_IO bypass | +| C17–C24 | 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 | +| R5–R12 | 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` |