Skip to the content
PCBKitNew board
2 layers156 × 156 mmMaster board, the printed circuit board in 3D

A full-stack modular controller that is feature-rich, usable, responsive, and robust. Can be used for any HID-compliant purpose, but we focus on developing swappable modules that can form customizable gamepads.

Size
156 × 156 mm
Copper layers
2
Thickness
1.6 mm
Parts
83
Nets
95
Pads
373
Tracks, vias
959, 175
Pours
11
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
10 Oct 2022
Updated
18 Apr 2023

Overview

Master board is an open-source printed circuit board by roboryman, from the roboryman/prototroller repository on GitHub, published under the MIT licence. It is a 2-layer board of 156 × 156 mm with 83 parts on 95 nets, routed with 959 tracks and 175 vias.

It is built around the SC0914(13), W25Q16JVSSIQ and NCP1117LPST33T3G-MS, with the C0402X7R100-104KNE-CT, RC0402FR-7W1KL and RC0402FR-7W49R9L among its other parts. Its parts include 17 capacitors, 16 resistors, 5 ICs, 3 connectors and 3 switches. It belongs with the keyboards and input boards and the RP2040 boards of this library.

Main components

12

README

README.md

About

The Prototroller is a modular controller that is full-stack, feature-rich, responsive, and robust. The controller could be used for any HID-compliant purpose, but we focus on developing hot-swappable modules that can form customizable gamepads.

A potential use case is general hardware level remapping for quality of life. Another is rapidly prototyping different controller layouts for games or simulations in development.

Our team consists of 5 members:

  • Yu-yang Hsieh
  • Britton McLeavy
  • Caleb O'Malley
  • Merrick Ryman
  • Evan Zhang

This project is developed in conjunction with the UF CpE Capstone program (Fall 2022 - Spring 2023). This project is self-funded. As such, donations are appreciated in this educational pursuit (hardware is not cheap nowadays).

Architecture and Aesthetics

At the highest abstraction the Prototroller consists of the following:

  • Master Board
  • Module Boards
  • Component Interfaces
  • Enclosures
  • Firmware

Master Board

The master board handles the data store of connected modules, transfers and receives data with modules over SPI, transfers and receives HID data over USB with the host, rescans modules, has buttons for various functions, etc. Most of the master board also serves as the the 4x5 grid of module slots the user can snap modules to using magnetic pogo-pin connectors.


The master board has buttons for rescanning, resetting, and flashing. There are header pins for interfacing with haptic feedback motors. A 3-pin JST-SH header (1.00mm) is available for serial wire debug. There is a USB-C receptacle (2.0) for power and data connection with the host.

The connection interface between the master board and module boards uses 6-pin magnetic pogo-pin connectors. These carry VCC, GND, and SPI signals, while maintaining a solid physical connection. The master board feeds modules with 3.3V.

Module Boards

Module boards are generic and constrained at 30x30mm with no direct user interface (except for the connector and SWD headers). On the sides are headers providing 14 signals to a component interface board that would sit above. This way there are no unique module boards for each component, and we simply offload the task to the component interface board by hand.

Component Interface Boards

The component interface boards are veroboards sitting above the module board headers. We may freely route signals from the module board to a component, the direct user interface.

Enclosures

This would not be a very comfortable controller to use without enclosures.

The master board is enclosed by a chassis and grips. The master board is screwed to the chassis.

The module enclosures contain the module board and component interface boards, but do not cover the component.

Firmware

Each type of module has its own assosciated firmware that can be flashed via the SWD header pins with picoprobe firmware. The master board can be flashed via the normal way of "dragging" the binaries. See below for more details on flashing. The Prototroller has been extensively tested on Windows systems, but will likely work on Mac, Linux, and generally any OS that supports HID gamepads.

Usage

There are a few ways you may use the Prototroller.

Our Hardware, Our Software

Recommended. This combines our hardware listed above with the firmware to do the job. The end result is a full-stack modular controller.

Our recommended PCB supplier is JLCPCB, and we are working on formalizing our recommendations for ordering.

Your Hardware, Our Software

If you want to develop your own hardware to use with our software, that is excellent! In fact, we are curious to see your designs.

You may use our designs as a starting point. For example, you may want to make the modules slightly larger.

Building and Flashing Master Boards

You may use the provided VSCode launch debug configuration and flash task. This requires a Picoprobe, OpenOCD, and Cortex Debug. Instructions are available in /ide. An easier way is to use the USB receptacle to mount and flash RP2040 binaries (.uf2), accessible by holding down BOOTSEL and performing a reset. If you are using VSCode, you can simply edit settings.json for your SDK path, build the target, and proceed to step 5. Otherwise, the process to generate the binary is as so:

  1. Ensure you have the Pico SDK cloned somewhere, such as ~/pico-sdk.
  2. Make and cd into a 'build' subdirectory, and export the Pico SDK path:
    text
    $ cd prototroller
    $ mkdir build
    $ cd build
    $ export PICO_SDK_PATH=...
  3. Generate the build targets:
    text
    $ cmake -DPICO_BOARD=prototroller ..
  4. Build all targets by running make. To build only host, master, or module targets, cd into the respective directory (generated by the cmake command above) and execute make. In this case, you can just cd into master and execute make.
  5. This will generate the appropriate .uf2 binaries, which can be flashed by dragging onto the mount.

Building and Flashing Module Boards

The module boards do not have a USB receptacle. You must use SWD in conjunction with a debug probe. We recommend the official Raspberry Pi Debug Probe ($12), or a Pico flashed with the Picoprobe firmware.

Instructions are available in /ide. This is how you might do it after setting up Picoprobe, OpenOCD, etc:

  1. Follow the steps listed in "Building and Flashing Master Boards" to generate the binary for the module boards.
  2. Connect SWDIO and SWCLK from debug probe to the SWD headers above the flash on the module board (labeled on rear silkscreen).
  3. Connect a common ground between the Picoprobe and the module board.
  4. Snap the module board to a powered master board (alternatively, supply 3V3 through the female header).
  5. If you are using WSL, pass-through the Picoprobe in Powershell using usbipd.
  6. Use the 'Prototroller Flash' task in VSCode, or execute the following command, where joystick-module.elf is the name of the ELF executable generated previously:
    text
    sudo openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program build/module/joystick-module.elf verify reset exit"

If all went well, the module board should be flashed. You can safely remove the SWD wires and set the debug probe aside.

Documentation for the official Raspberry Pi Debug Probe: https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html

Alternatively, here is an excellent tutorial to setting up and using Picoprobe if you have a Pico available: https://github.com/robotdad/piconotes

Roadmap

  • Proof of Concept Build
  • Basic Master/Module Firmware
  • Basic Host HID Drivers
  • Basic Component Support
  • Prototype Build
  • Interconnect Design
  • Module Board Design(s)
  • Master Board Design
  • Chassis/Module Enclosure Designs
  • Advanced Firmware
  • Advanced HID Drivers
  • Advanced Component Support
  • Finalized Firmware
  • Prototroller Artifact
  • Stretch: Wireless Support
  • Stretch: Power Optimization
  • Stretch: More types of modules

Ideas for future modules: Trigger, D-Pad, Accelerometer, Gyroscope, Rounded Buttons. Could also do some cool things non-gaming related, such as an IR blaster and Bluetooth TX/RX modules. Adding new types of modules only requires the firmware and custom backpack.

Acknowledgements

Thank you to our stakeholder Carsten Thue-Bludworth for his infinite wisdom. His assistance keeps the project grounded and evolving in the best way possible.

Thank you to Dr. Blanchard and the UF CpE Capstone program for direction and usage of lab space.

Thank you to the Raspberry Pi community for the hardware and software that made this project possible.

Thank you to Phil's Lab on YouTube for the excellent courses and tutorials on hardware design.

Thank you to user testing participants for valuable feedback. Their insights and suggestions have helped us refine our design and ensure that our final product meets the needs and expectations of its intended users.

Thank you to families, friends, and loved ones for their unwavering support and encouragement. Their belief in our abilities and commitment to our success has been a constant source of motivation and inspiration.

Parts

83
QtyValueFootprintReferences
20Conn_01x06_Maleprototroller_footprints:Mag_Pogo_6P_P2.2mm_FemaleM0, M1, M2, M3, M4, M5, M10, M11, M12, M13, M14, M15, M16, M17, M18, M19 +4
13TestPointTestPoint:TestPoint_Pad_2.5x2.5mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13
11100nCapacitor_SMD:C_0402_1005MetricC3, C4, C5, C8, C9, C10, C11, C14, C15, C16, C17
51kResistor_SMD:R_0402_1005MetricR1, R2, R3, R12, R13
449R9Resistor_SMD:R_0402_1005MetricR4, R5, R15, R16
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
310kResistor_SMD:R_0402_1005MetricR8, R11, R14
3SW_Pushprototroller_footprints:Switch_D6C40F1LFSSW1, SW2, SW3
210uCapacitor_SMD:C_0805_2012MetricC1, C2
21uCapacitor_SMD:C_0402_1005MetricC6, C7
227R4Resistor_SMD:R_0402_1005MetricR9, R10
227pCapacitor_SMD:C_0402_1005MetricC12, C13
25k1Resistor_SMD:R_0402_1005MetricR6, R7
274HCT154PW,118Package_SO:TSSOP-24_4.4x7.8mm_P0.65mmU4, U5
1ABLS-12.000MHZ-B4-Tprototroller_footprints:XTAL_ABLS-12.000MHZ-B4-TY1
1Conn_01x03_MountingPinConnector_JST:JST_SH_BM03B-SRSS-TB_1x03-1MP_P1.00mm_VerticalJ1
1Conn_01x04_MaleConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1LED_RGBprototroller_footprints:LED_Cree-UHD111AD1
1NCP1117-3.3_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U1
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU2
1USB_C_Receptacle_USB2.0Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2
1W25Q16JVSSIQPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU3

Questions

How big is the Master board PCB?

It measures 156 × 156 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Master board use?

83 parts, built around the SC0914(13), W25Q16JVSSIQ, NCP1117LPST33T3G-MS and C0402X7R100-104KNE-CT. 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 Master board KiCad files?

From the roboryman/prototroller repository on GitHub, at the commit this page was made from: the board is schematics/master_board/master_board.kicad_pcb and its schematic schematics/5_32_decoder/5_32_decoder.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Master board design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from roboryman/prototroller

1
  • 2 layers30 × 30 mmModule board, the printed circuit board in 3D

    Module board

    roboryman/prototroller

    A full-stack modular controller that is feature-rich, usable, responsive, and robust. Can be used for any HID-compliant purpose, but we focus on developing swappable modules that can form customizable gamepads.

    29 parts9MIT

Similar boards

  • 4 layers100 × 100 mmRpi pico kit, the printed circuit board in 3D

    Rpi pico kit

    999matej999/pico-kit-pcb

    198 parts1GPL-3.0
  • 4 layers78 × 89 mmZbook, the printed circuit board in 3D

    Zbook

    VinnieT1/zbook

    170 parts
  • 4 layers77.2 × 86.4 mmMad RP2040, the printed circuit board in 3D

    Mad RP2040

    Cimos/etchy

    Fast, trustworthy PCB visual and geometric diff tool (Rust). Successor to gerber-diff.

    117 parts1Apache-2.0
  • 2 layers90 × 100 mmLCC Booster, the printed circuit board in 3D

    LCC Booster

    TechModelRailroadClub/System4

    84 parts2Apache-2.0
  • 6 layers139.7 × 88.9 mmIMX6-BareBones, the printed circuit board in 3D

    IMX6-BareBones

    a1wolfe/iMX6-BareBones

    i.MX 6ULL Open Source Development Board

    558 parts
  • 4 layers100 × 79 mmESP32 Interface, the printed circuit board in 3D

    ESP32 Interface

    dennowiggle/ESP32_Interface

    Facilitate learning the Z80 Retro! hardware and software.

    114 parts1LGPL-2.1
  • 4 layers54 × 64 mmCard debug board-3, the printed circuit board in 3D

    Card debug board-3

    oresat/oresat-flatsat

    All things for the OreSat flatsat

    101 parts1
  • 4 layers99 × 64 mmWSPR ease, the printed circuit board in 3D

    WSPR ease

    alanmimms/WSPR-ease

    Easy WSPR transmitter using ESP32C3 and not much else.

    182 parts1MIT