Uncle Magic's Liquid Turntable

Uncle Magic's Liquid Turntable: Hardware Overview#

How the turntable is built: what the parts are, how they are connected, how power flows, and what protects what. For operating it, see the User Guide. For exact pin-by-pin detail and the history of design decisions, see the README and the changelog; the KiCad files in kicad_mainboard/ are the authority on connections.

1. System overview#

The turntable is built from two printed circuit boards, a stepper motor and the panel controls, fed by two external DC supplies.

PartWhat it is
Mainboard100 × 100 mm board that carries three plug-in modules, the motor driver, the power protection and every connector. It is the brain of the unit.
LED ring boardA separate ring-shaped board with 178 addressable LEDs. It is fixed near the top of the case and does not turn with the platter.
Stepper motorA NEMA 17 bipolar stepper, joined directly to the platter by a flexible shaft coupler. No gearbox.
Panel controlsFour rotary encoders (with push buttons) and a tap button, wired to the mainboard through small headers. There is no separate panel board.
Power suppliesA 24 V supply (motor and electronics) and a 5 V supply (LEDs), outside the board.

Three computers share the mainboard, all running at 3.3 V:

ModuleRole
Waveshare ESP32-S3-ETHThe main controller. Runs this project's firmware: tempo, speed control, web pages, OSC, encoders. Has wired Ethernet (W5500) and Wi-Fi.
BigTreeTech TMC2209 (stepper driver module)Drives the motor coils. Configured over a one-wire serial link.
Espressif ESP32-S3-DevKitC-1 (N16R8)Runs the open-source WLED software and drives the LED ring. The main controller sends it the colour over a serial link.

All three are socketed: they plug into female headers, so each can be replaced or reflashed.

Power flow#

Power flow The 24 volt supply goes through fuse F1 and diode D1 to the motor rail, which feeds the motor driver and the 3.3 volt regulator. The 5 volt supply goes through fuse F3 and a reverse-protection FET to the LED ring. 24 V side 5 V side 24 V supplyexternal 5 V supplyexternal J-PWR-INMini-Fit Jr, 8 pin F1 fuse2.5 A D1 diodeblocks reverse +24V_MOTOR200 µF bulk, TVS,bleeder TMC2209motor supply U2 regulator24 V to 3.3 V, 2 A +3V3 ESP32-S3-ETHWLED DevKitCdriver logic, expander F3 fuse15 A Q5 P-FETreverse protection +5V_LED_RINGup to about 11 A LED ring178 LEDs, via J5 U3 bufferLED data level
Power flow: 24 V and 5 V supplies through fuses and protection to the rails and loads

Signal flow#

Signal flow The ESP32-S3-ETH main controller talks to the network, reads the panel controls directly and through an I2C expander, drives the TMC2209 motor driver with step, direction and enable plus a serial link, and sends colour over serial to the WLED board, whose data goes through a level buffer to the LED ring. NetworkOSC and web pages ESP32-S3-ETH main controller tempo, speed, web, OSC Panel controls4 encoders, tap button direct inputs 3 push buttons,spare inputs MCP23017I/O expander I2C step, dir, enable serial link TMC2209motor driver MotorNEMA 17 serial, JSON WLED boardDevKitC-1 U33.3 V to 5 V LED ring178 LEDs
Signal flow: main controller, panel, motor driver, expander and lighting

2. The mainboard#

Mainboard, top view
Mainboard, top view
Size100 × 100 mm, two copper layers, 1.6 mm. Order at 2 oz copper for the LED current path.
MountingFour M3 holes (3.2 mm) at the corners.
Design toolKiCad 10 (kicad_mainboard/Mainboard.kicad_pcb)
SchematicA one-page index plus five function sheets, below. PDF: Mainboard_schematic.pdf

Schematic sheets#

SheetContains
PowerPower input connector, the two fuse clip pairs, reverse-polarity FET Q5, TVS diode, bulk capacitors, the 3.3 V regulator U2.
ControllerSockets for the ESP32-S3-ETH (J1-H1, J1-H2), the boot-strap resistors, and a series resistor on one encoder line.
MotorSockets for the TMC2209 (J2-MODE, J2-MOTOR), the UART resistor, and the motor connector J3.
LEDSockets for the WLED DevKitC (J6-J1, J6-J3), the 3.3 V to 5 V data buffer U3, and the ring connector J5.
Panel IOThe MCP23017 I/O expander U1, its I2C pull-ups, and every encoder and button header.

Module orientation#

Each module fits its socket only one way up. The board is silkscreened to match, but a module plugged in backwards would put power on the wrong pins.

ModuleHow it goes in
ESP32-S3-ETHRJ45 side up, with the RJ45 and USB-C end at the top edge of the board. The 72.8 × 21 mm module overhangs the board edge by about 16 mm, which is where the network socket and USB port are reached.
ESP32-S3-DevKitC-1Component side up, USB ports at the top edge.
TMC2209Standard stepper-driver orientation: the EN and VM pins at the top.

Key parts#

RefPartJob
U2TRACO TSR 2-2433N24 V to 3.3 V converter, 2 A, fixed output, short-circuit protected
Q5SQJ407EP P-channel MOSFETBlocks reversed 5 V; carries the ring current
U374AHCT1G125Lifts the LED data signal from 3.3 V to 5 V
U1MCP23017I2C input/output expander (address 0x20)
D11N5822 SchottkyStops reverse 24 V and stops motor energy flowing back
D5SMBJ26AClamps voltage spikes on the 24 V rail
D4PESD3V3S1ULStatic-discharge protection on 3.3 V
F1, F3T508VS blade-fuse clipsTake standard (ATO) car fuses: 2.5 A in F1, 15 A in F3
C6220 µFBulk capacitor on the 5 V input
C8, C112 × 100 µF, 35 VBulk capacitance for the motor driver
R23, R24, R251 k, 10 k, 1 kHold the motor-control pins at safe levels during boot
R2610 kKeeps the LED data line low while WLED starts, so the ring doesn't flash
R274.7 k, 1206Bleeder across the 24 V capacitors so the rail drains after power-off
R281 kIn series with one encoder line (see section 4)

3. Power#

Rails#

RailSourceFeedsProtection
+24V_MOTOR24 V supply via J-PWR-IN pin 5Motor driver supply; regulator U2F1 2.5 A fuse; D1; 200 µF bulk; D5 TVS; R27 bleeder
+3V3U2 from +24V_MOTORESP32-S3-ETH, WLED DevKitC, TMC2209 logic, MCP23017, encoder pull-upsU2 limits its own current; D4 is static protection only
+5V_LED_RING5 V supply via J-PWR-IN pins 1 and 3LED ring, data buffer U3F3 15 A fuse; Q5 reverse-polarity FET

The three rails do not share a protection path: a fault on one cannot ride through into another. The 5 V supply is used only for the LED ring; everything else runs from the 24 V supply through U2.

Design choices worth knowing#

Power budget#

RailTypicalWorst case
3.3 V logic0.6 to 0.75 A, Wi-Fi offAbout 1 A, Wi-Fi on in both chips (2 A available)
24 V motorThe motor runs at 800 mA per phaseF1 opens at 2.5 A
5 V ringDepends on colour and brightnessAbout 10.7 A at full white (60 mA × 178 LEDs)

Mains side: two switch-mode supplies together draw about 100 to 120 W in steady state, with a 20 to 60 A inrush for a few milliseconds at switch-on. A slow-blow fuse and a switch rated at 10 A or more are recommended.

Power connector J-PWR-IN#

Molex Mini-Fit Jr, 8 positions, two rows of four. The 5 V is on two pins because of the ring current.

PinNetPinNet
1+5V5+24V
2GND6GND
3+5V7spare (not connected)
4GND8GND

These pins connect ahead of the fuses. Never plug or unplug this connector with power on.

4. Signals and control#

Main controller pin use#

GPIOSignalGoes to
0STEPTMC2209 step input
45DIRTMC2209 direction input
3ENABLETMC2209 enable (active low)
39 / 40UART TX / RXTMC2209 one-wire serial, via R9 (1 k)
41 / 42UART TX / RXWLED DevKitC serial link
44 / 48I2C SDA / SCLMCP23017 expander
1 / 2 / 43Main encoder A / B / buttonPanel (button through R28)
16 / 17Hue encoder A / BPanel
15 / 18Saturation encoder A / BPanel
47 / 38Value encoder A / BPanel
21Tap buttonPanel
9 to 14Ethernet chipInside the ESP32-S3-ETH module
19 / 20USBProgramming and log port

Every pin on the ESP32-S3-ETH socket was checked against Waveshare's published pinout, and the TMC2209 and DevKitC sockets against their makers' pinouts.

The motor driver#

The lighting path#

  1. The main controller sends the colour as a short text (JSON) message over the serial link at 115,200 baud.
  2. The WLED DevKitC turns it into LED data on its GPIO 4.
  3. The data passes through R18 (330 Ω) into U3, which lifts it from 3.3 V to 5 V (it must be the AHCT part, whose inputs accept 3.3 V as a "high"), and on to the ring.
  4. R26 holds the data line low while WLED starts, so the ring stays dark rather than flashing.

Panel controls and the expander#

Encoder header pin order#

All eight encoder headers use the same five pins, in this order:

Pin12345
Signal+3V3SW (push)DTCLKGND

(The board is silkscreened V, S, D, C, G.) The tap button header has two pins: GND and TAP. Suggested panel wire colours: main encoder blue, hue red, saturation green, value yellow, buttons orange, ground black.

Network#

Wired Ethernet comes from the W5500 chip on the ESP32-S3-ETH module. Wi-Fi is the module's own 2.4 GHz radio. Both are active at once and share the same OSC port and web pages.

5. Connector reference#

RefConnectorUse
J-PWR-INMolex Mini-Fit Jr, 8 pinPower in (see above)
J3JST-XH, 4 pinMotor: 1 A+, 2 A−, 3 B+, 4 B− (pins 1+2 are one coil, 3+4 the other)
J5Molex Mini-Fit Jr, 6 pin, verticalLED ring: 1 data (5 V), 2 spare (tied to 5 V), 3 and 4 ground, 5 and 6 +5 V
J1-H1, J1-H2Two 20-pin sockets (1 × 20 each), 2.54 mmESP32-S3-ETH
J6-J1, J6-J322-pin sockets (a 20 + 2 pin pair each), 2.54 mmWLED DevKitC-1 (only a few pins are used)
J2-MODE, J2-MOTOR8-pin sockets, 2.54 mmTMC2209 driver module
J-ENC-MAIN, -HUE, -SAT, -VAL5-pin headersThe four panel encoders
J-ENC-EXP1 to 35-pin headersSpare encoders (unused by the firmware)
J-BTN-TAP2-pin headerTap button

The motor connector follows the common stepper wiring, so a motor cable wired black, green, red, blue (A+, A−, B+, B−) plugs straight in. If the platter turns the wrong way, swap two wires of one coil, or tick Reverse motor direction on the settings page.

6. The LED ring board#

Designkicad_led_ring_offset/ (KiCad), a separate project
SizeAbout 203 × 203 mm, two layers; order at 2 oz copper
LEDs178 × SK6812 (RGB, 5 V), in an offset "brick" pattern, wired as one long chain
Per LEDOne 100 nF capacitor each
Other partsOne 1,000 µF bulk capacitor; one 470 Ω resistor in series with the data input
ConnectorJ1, Molex Mini-Fit Jr 6 pin, right-angle (5569-06A2), pin-for-pin the same as the mainboard's J5
Current60 mA per LED, about 10.7 A for the whole ring at full white
MountingFour M3 holes; fixed near the top of the case; does not rotate with the platter

A straight-through six-wire cable joins J5 on the mainboard to J1 on the ring. Power and ground are spread across the board as copper planes (5 V on the top layer, ground on the bottom) instead of traces; an estimate of the voltage drop to the farthest LED came out under 12 mV. Both boards pass design-rule and electrical-rule checks with no errors.

7. Motor and mechanics#

8. Current, heat and protection notes#

9. Manufacturing and files#

ItemWhere
Schematic (sources)kicad_mainboard/*.kicad_sch, rendered to Mainboard_schematic.pdf
PCBkicad_mainboard/Mainboard.kicad_pcb, renders Mainboard_render_top.png and _bottom.png
Manufacturing fileskicad_mainboard/jlc_export/: Gerbers and drill, plus bills of materials and part-placement files in two versions (surface-mount only, or full assembly)
Ring boardkicad_led_ring_offset/ with its own jlc_export/
Check reportserc_report.rpt (electrical rules) and drc_report.rpt (layout rules), in each KiCad folder
Part-number toolkicad_mainboard/tools/build_jlc_assembly.py, which rebuilds the bills of materials from the board

Ordering from JLCPCB. Surface-mount only: 24 part types, 68 solder joints. Full assembly (through-hole parts too): 49 parts, 267 joints. Every part has an LCSC number (JLCPCB re-checks stock when you upload). Notable ones: regulator U2 C45406999, data buffer U3 C12495, TVS D5 C123820, bulk capacitors C8 and C11 C176683 (an "extended" part: confirm stock when ordering).

Before ordering the board, check:

10. Verification status and limits#

Checked on the computer

Checked on a bench unit. A standalone ESP32-S3-ETH running the current firmware boots, joins Wi-Fi, announces liquidturntable.local and serves its web pages. The automatic renaming of a taken hostname was tested against a name owned by a PC on the network: the unit detected the clash and announced itself as -1.

Not yet verified. No fully assembled mainboard has been powered up yet. Still to confirm on real hardware: the motor driver link and motor behaviour, the boot straps with the driver module fitted, the WLED link and ring, encoder feel, and the fuse clip fit with real fuses. The project README lists these under "Open items".

Known limits