

Octal Brushed Controller
An 8-channel H-bridge motor driver assembly with controller, designed for parade float kinematic animation. Two units (one per side of the float) drive up to 16 geared motors to create spinning pinwheel scenes.
- Size
- 175 × 130 mm
- Copper layers
- 6
- Thickness
- 1.6 mm
- Parts
- 66
- Nets
- 85
- Pads
- 291
- Tracks, vias
- 264, 296
- Pours
- 5
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 19 Mar 2026
- Updated
- 1 Apr 2026
Overview
Octal Brushed Controller is an open-source printed circuit board by jmohos, from the jmohos/Octal_Motor_Controller repository on GitHub. It is a 6-layer board of 175 × 130 mm with 66 parts on 85 nets, routed with 264 tracks and 296 vias.
It is built around the DRV8871DDA and LM1117T-3.3. Its parts include 15 connectors, 14 capacitors, 10 ICs, 9 resistors and 1 fuse. It belongs with the RP2040 boards of this library.
Main components
2DRV8871DDA
SO-8-EP-40℃~+125℃ 1 10uA 3.6A 565mΩ PWM Yes SO-8-EP Brushed DC Motor Drivers ROHSTexas InstrumentsStepper Motor DriverLM1117T-3.3
TO-220-3L-40℃~+125℃@(Tj) 0.003%Vout 1 1.25V@(1A) 10mA 15V 1A 3.3V 75dB@(120Hz) Fixed Over Current Protection、Thermal shutdown Positive TO-220-3L Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSHGSEMIVoltage Regulators - Linear, Low Drop Out (LDO) Regulators
README
README.mdOctal Motor Driver
An 8-channel H-bridge motor driver assembly with controller, designed for parade float kinematic animation. Two units (one per side of the float) drive up to 16 geared motors to create spinning pinwheel scenes. Remote control is provided via the DMX 512 show control protocol.

Features
- Up to 8 motor channels per box, one box per side of the float
- DMX 512 remote control from a master animation station
- Local control interface with four modes: disabled, manual, local animation, and remote DMX
- Motor power: 12–24 VDC with gearhead motors; target speed 0–10 RPM
- 20 kHz PWM motor control for smooth, quiet operation
- Default motor driver: DRV8871 (up to 2 A per channel, off-the-shelf breakout boards)
- Optional high-current driver: BTS7960 (up to 43 A per channel, via ribbon cable to driver blocks)
- Up to 8 limit/endstop inputs (one per motor channel) for travel limits and auto-homing
System Architecture
Top-Level Flow
- The ESP32 UI board receives commands from the master animation controller over the DMX 512 bus.
- The operator selects the control source (remote DMX, local manual, or local automatic) on the UI board.
- The UI board sends the resolved 8-channel direction and speed commands to the Raspberry Pi Pico motor controller over I2C.
- The Pico generates PWM outputs to the motor drivers. Speed is commanded as a percentage from −100% to +100%, which maps directly to direction and PWM duty cycle.
- Optional endstop inputs can halt motion in a given direction (TBD).

Power Distribution
| Rail | Source | Consumers |
|---|---|---|
| 12–24 VDC | External supply | Motor drivers (DRV8871 / BTS7960) |
| 5 V | LM2596 DC:DC buck converter | ESP32 CYD display, Pico motor controller, DMX receiver |
| 3.3 V | LM1117 regulator (from 5 V) | DMX receiver, limit switch pull-ups |
An optional isolated DC:DC converter on the DMX receiver decouples local ground from the DMX bus to prevent ground shifts during high-current motor activity.
Hardware
ESP32 User Interface Board (ESP32-2432S028R "Cheap Yellow Display")
An off-the-shelf development board with a 2.8" touchscreen display.
- On-board power for display, CPU, and touch interface
- Connectors for 5 V in, I2C bus, and GPIO (configured for DMX serial input)
- ESP32 supports Wi-Fi and Bluetooth for future wireless control options
| Front | Back |
|---|---|
![]() | ![]() |
References:
DMX 512 Serial Converter
Provides robust, long-range serial connection to the master animation controller.
Option 1 — RS422 converter board (half-duplex) Connect R+, R−, and GND to the DMX D+, D−, and GND lines; connect GND and TXD to the CYD serial input.

Option 2 — SparkFun DMX interface board Provides full isolation via optoisolators and an isolated DC:DC converter, protecting against voltage shifts from high-current motor activity. Wire GND, 5 V, 3.3 V, and RX pins to the CYD board.

Motor Controller — Raspberry Pi Pico (RP2040)
Generates PWM signals for all 8 motor drivers.
- 16 PWM outputs (2 per channel — direction and speed)
- 8 endstop switch inputs for motor homing
- Dual-core RP2040 (see Software section)

Motor Driver — DRV8871 (default)
| Parameter | Value |
|---|---|
| Current limit | 2 A (30 kΩ limit resistor) |
| Input voltage | 6.5 V – 45 V |
| PWM frequency | up to 20 kHz |
| On-resistance | 565 mΩ (no heatsink needed) |
| Interface | GND + 2 PWM signals |
| Protection | Over-current, over-temp, under-voltage |
Available from Adafruit or Amazon clones. Datasheet: adafruit-drv8871-brushed-dc-motor-driver-breakout.pdf

Motor Driver — BTS7960 (optional, high current)
| Parameter | Value |
|---|---|
| Current rating | up to 43 A |
| Input voltage | 6 V – 27 V |
| PWM frequency | up to 25 kHz |
| Protection | Over/under-voltage, over-current, over-temp |
| Extra requirements | 5 V for gate driver; enable pins pulled high |
Uses the same PWM signals as the DRV8871. Current monitoring pins are available. Datasheet: BTS7960-Motor-Driver.pdf
| Board | Pinout |
|---|---|
![]() | ![]() |
Octal Motor Controller PCB (KiCad)
Custom PCB housing the Raspberry Pi Pico, DRV8871 motor driver sockets, power regulation, and all interconnects.

KiCad project: Hardware/Kicad/Octal_Brushed_Controller/
Software
Both firmware projects use PlatformIO with the Arduino framework. Open each project folder in VS Code with the PlatformIO extension installed — it will auto-detect the platformio.ini and resolve dependencies.
Software/Octal_Motor_Drive_UI — User Interface Application (ESP32)
Runs on the ESP32-2432S028R board. Handles:
- DMX 512 receive and decode
- Touchscreen UI for mode selection and manual motor control
- Local animation sequencer
- I2C command output to the motor controller
Software/Octal_Motor_Drive_Controller — Motor Controller Application (Pico)
Runs on the Raspberry Pi Pico (RP2040). Utilizes both CPU cores:
CPU0
- Communicates with the UI board over I2C
- Monitors endstop limit events
- Updates PWM outputs to motor drivers based on commands and endstop state
CPU1 (watchdog)
- Monitors the I2C bus for timeouts
- Shuts down all motors if the UI node stops sending updates
PWM outputs run at 25 kHz to eliminate audible motor noise.
Repository Structure
Octal_Motor_Controller/
├── README.md
├── Octal_Motor_Driver.docx # Full design document
├── System_Diagram.drawio # Editable system diagrams
├── System_Diagram-Top Flow.png
├── System_Diagram-Power.png
├── Hardware/
│ ├── Kicad/
│ │ └── Octal_Brushed_Controller/ # KiCad PCB project
│ └── Parts/ # Datasheets and reference docs
└── Software/
├── Octal_Motor_Drive_UI/ # ESP32 UI PlatformIO project
└── Octal_Motor_Drive_Controller/ # Pico motor controller PlatformIO projectParts
66| Qty | Value | Footprint | References |
|---|---|---|---|
| 13 | 0.1uF | Capacitor_THT:C_Disc_D5.1mm_W3.2mm_P5.00mm | C1, C2, C3, C4, C6, C7, C8, C9, C10, C11, C12, C13, C14 |
| 9 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal | R1, R2, R3, R4, R5, R6, R7, R8, R9 |
| 8 | Conn_02x04_Odd_Even | Connector_IDC:IDC-Header_2x04_P2.54mm_Vertical | J4, J5, J6, J7, J8, J9, J11, J12 |
| 8 | DRV8871 | 1_Joe_Footprints:DRV8871_Brd | U1, U2, U3, U4, U6, U7, U9, U10 |
| 8 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4, H5, H6, H7, H8 |
| 3 | Conn_01x04 | Connector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_Vertical | J1, J2, J3 |
| 3 | TestPoint | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP1, TP2, TP4 |
| 2 | Screw_Terminal_01x08 | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-8-2.54_1x08_P2.54mm_Horizontal | J13, J15 |
| 1 | 10uF-T | Capacitor_THT:CP_Radial_Tantal_D5.5mm_P2.50mm | C5 |
| 1 | 12-24V in | Connector_Wire:SolderWire-2sqmm_1x02_P7.8mm_D2mm_OD3.9mm | J14 |
| 1 | 3.3V | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP7 |
| 1 | 5V | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP6 |
| 1 | DMX | Connector_JST:JST_PH_B6B-PH-K_1x06_P2.00mm_Vertical | J10 |
| 1 | DMX_RX | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP3 |
| 1 | DMX_TX | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP5 |
| 1 | GND | TestPoint:TestPoint_Loop_D2.50mm_Drill1.0mm | TP8 |
| 1 | LM1117T-3.3 | Package_TO_SOT_THT:TO-220-3_Vertical | U5 |
| 1 | Polyfuse 5A | Fuse:Fuse_Littelfuse_395Series | F1 |
| 1 | RaspberryPi_Pico | Module:RaspberryPi_Pico_Common_THT | A1 |
| 1 | ~ | 1_Joe_Footprints:DCDC_Converter_LM2596_3A | U8 |
Questions
How big is the Octal Brushed Controller PCB?
It measures 175 × 130 mm and has 6 copper layers, 1.6 mm thick.
What parts does the Octal Brushed Controller use?
66 parts, built around the DRV8871DDA and LM1117T-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Octal Brushed Controller KiCad files?
From the jmohos/Octal_Motor_Controller repository on GitHub, at the commit this page was made from: the board is Hardware/Kicad/Octal_Brushed_Controller/Octal_Brushed_Controller.kicad_pcb and its schematic Hardware/Kicad/Octal_Brushed_Controller/Octal_Brushed_Controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Octal Brushed Controller design in my own project?
Its repository states no licence, so its author keeps all rights: ask jmohos before reusing the design.
Similar boards
- 2 layers68.6 × 53.3 mm

- 2 layers

T41-Main+RF board V012
DRWJSCHMIDT/T41
This is the repository for the officially released V10, V11, and V12 versions of the T41 Software Defined Transceiver hardware and kits.
255 parts66 - 4 layers100 × 100 mm

- 2 layers99.9 × 99.9 mm

- 4 layers100 × 100 mm

- 4 layers98.5 × 82 mm

Pico2lvds
ceteras/PicoLVDS
Tested with B089AW01-V.0 and HSD089IFW1-A00-V1.0 on a breadboard. I'm sure it will work with other displays from old netbooks.
43 parts7GPL-3.0 - 2 layers54.5 × 77.5 mm

- 2 layers




