Skip to the content
PCBKitNew board
6 layers175 × 130 mmOctal Brushed Controller, the printed circuit board in 3D

Octal Brushed Controller

jmohos/Octal_Motor_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

2

README

README.md

Octal 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.

Top Level System Diagram


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

  1. The ESP32 UI board receives commands from the master animation controller over the DMX 512 bus.
  2. The operator selects the control source (remote DMX, local manual, or local automatic) on the UI board.
  3. The UI board sends the resolved 8-channel direction and speed commands to the Raspberry Pi Pico motor controller over I2C.
  4. 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.
  5. Optional endstop inputs can halt motion in a given direction (TBD).

Power Distribution Diagram

Power Distribution

RailSourceConsumers
12–24 VDCExternal supplyMotor drivers (DRV8871 / BTS7960)
5 VLM2596 DC:DC buck converterESP32 CYD display, Pico motor controller, DMX receiver
3.3 VLM1117 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
FrontBack
CYD FrontCYD 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.

RS422 Converter Board

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.

SparkFun DMX Shield

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)

Raspberry Pi Pico

Motor Driver — DRV8871 (default)

ParameterValue
Current limit2 A (30 kΩ limit resistor)
Input voltage6.5 V – 45 V
PWM frequencyup to 20 kHz
On-resistance565 mΩ (no heatsink needed)
InterfaceGND + 2 PWM signals
ProtectionOver-current, over-temp, under-voltage

Available from Adafruit or Amazon clones. Datasheet: adafruit-drv8871-brushed-dc-motor-driver-breakout.pdf

DRV8871 Breakout Board

Motor Driver — BTS7960 (optional, high current)

ParameterValue
Current ratingup to 43 A
Input voltage6 V – 27 V
PWM frequencyup to 25 kHz
ProtectionOver/under-voltage, over-current, over-temp
Extra requirements5 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

BoardPinout
BTS7960 BoardBTS7960 Pinout

Octal Motor Controller PCB (KiCad)

Custom PCB housing the Raspberry Pi Pico, DRV8871 motor driver sockets, power regulation, and all interconnects.

Octal Brushed Controller Schematic

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

text
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 project

Parts

66
QtyValueFootprintReferences
130.1uFCapacitor_THT:C_Disc_D5.1mm_W3.2mm_P5.00mmC1, C2, C3, C4, C6, C7, C8, C9, C10, C11, C12, C13, C14
910KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2, R3, R4, R5, R6, R7, R8, R9
8Conn_02x04_Odd_EvenConnector_IDC:IDC-Header_2x04_P2.54mm_VerticalJ4, J5, J6, J7, J8, J9, J11, J12
8DRV88711_Joe_Footprints:DRV8871_BrdU1, U2, U3, U4, U6, U7, U9, U10
8MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4, H5, H6, H7, H8
3Conn_01x04Connector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ1, J2, J3
3TestPointTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP1, TP2, TP4
2Screw_Terminal_01x08TerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-8-2.54_1x08_P2.54mm_HorizontalJ13, J15
110uF-TCapacitor_THT:CP_Radial_Tantal_D5.5mm_P2.50mmC5
112-24V inConnector_Wire:SolderWire-2sqmm_1x02_P7.8mm_D2mm_OD3.9mmJ14
13.3VTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP7
15VTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP6
1DMXConnector_JST:JST_PH_B6B-PH-K_1x06_P2.00mm_VerticalJ10
1DMX_RXTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP3
1DMX_TXTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP5
1GNDTestPoint:TestPoint_Loop_D2.50mm_Drill1.0mmTP8
1LM1117T-3.3Package_TO_SOT_THT:TO-220-3_VerticalU5
1Polyfuse 5AFuse:Fuse_Littelfuse_395SeriesF1
1RaspberryPi_PicoModule:RaspberryPi_Pico_Common_THTA1
1~1_Joe_Footprints:DCDC_Converter_LM2596_3AU8

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 mmDw probe tht, the printed circuit board in 3D

    Dw probe tht

    felias-fogg/dw-link

    An Arduino-UNO-based debugWIRE hardware-debugger

    28 parts90GPL-3.0
  • 2 layersT41-Main+RF board V012, the printed circuit board in 3D

    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
  • 2 layers99.9 × 99.9 mmIsa debug card, the printed circuit board in 3D

    Isa debug card

    maniekx86/isa_debug_post_card

    8-bit ISA debug and POST card

    85 parts13GPL-3.0
  • 4 layers100 × 100 mmT41, the printed circuit board in 3D

    T41

    ai6ym/t41

    T41-EP SDT Files

    234 parts10
  • 4 layers98.5 × 82 mmPico2lvds, the printed circuit board in 3D

    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 mmEmbedded pcb, the printed circuit board in 3D

    Embedded pcb

    mvx-dev/morphing-airfoil

    UNSW DESN1000 morphing airfoil project

    32 parts6