

Machine Controller
64 Slot Break In Machine for MX Style Switches
- Size
- 43.1 × 37.7 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 84
- Nets
- 86
- Pads
- 314
- Tracks, vias
- 424, 206
- Pours
- 248
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 31 May 2024
- Updated
- 18 Jun 2024
Overview
Machine Controller is an open-source printed circuit board by FinnKrass, from the FinnKrass/MX-Break-In-Machine repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 4-layer board of 43.1 × 37.7 mm with 84 parts on 86 nets, routed with 424 tracks and 206 vias.
It is built around the RP2040, SDB628 and W25Q16JVUXIQ, with the AP33772DKZ, SS34B and SSM3J340R,LF among its other parts. Its parts include 26 capacitors, 21 resistors, 6 diodes, 6 connectors and 5 ICs. It belongs with the RP2040 boards of this library.
Main components
6RP2040
LQFN-56(7x7)12bit 133MHz 30 LQFN-56(7x7) Microcontrollers (MCU/MPU/SOC) ROHSRaspberry PiMicrocontrollers (MCU/MPU/SOC)SDB628
SOT-23-6-40℃~+85℃ 1 1.2MHz 100uA、1.6mA 28V 2A 2V~24V Adjustable Boost Boost Built-in No SOT-23-6 DC-DC Converters ROHSSHOUDINGDC-DC ConvertersW25Q16JVUXIQ
USON-8-EP(2x3)-40℃~+85℃ 100,000 cycles 10uA 133MHz 16Mbit 2.7V~3.6V 20 Years 3ms SPI USON-8-EP(2x3) NOR FLASH ROHSWinbond ElecNOR FLASHAP33772DKZ
WQFN4040-24WQFN4040-24 USB PD ROHSDiodes IncorporatedAC-DC Controllers And RegulatorsSS34B
SMBSMB Schottky Diodes ROHSJSMSEMISchottky DiodesSSM3J340R,LF
SOT-23F1 P-Channel 1W 2.2V 30V 45mΩ@10V 492pF 4A 6.2nC@4.5V SOT-23F MOSFETs ROHSToshibaMOSFETs
README
README.mdMX Style Switch Break In Machine
Repository is still a work in progress!
A unique take on the switch break in machine intended to streamline the process and maximise outcomes. Useful for those who want to improve the sound and feeling of MX style keyboard switches that come scratchy/inconsistent from the factory.

Table of Contents:
Background
This project started when I first fell in love with Cherry MX Black's. I wanted a way to break in the switches for all of my builds, but had absolutely no understanding of electronics and CAD at the time, so took it upon myself to learn how to use Fusion360 and eventually design a circuit. Once the design had come together, I started selling broken in switches with a fleet of these machines running around the clock, which helped me vet the design and iron out any problems as well as optimize certain things to make the labor involved with operating and maintaining the machines easier. I worked on this project on and off over about a year and was planning to sell the machines themselves once they were in a state I was proud of, but some life events got in the way, so I've decided to work back and open source it for others to enjoy as much as I have.
Features
The machine is quite rugged, I've had customers request their switches broken in for 2.5 million + actuations and the machines have handled that no problem. For good measure, I give them 1 hour break every 12 hours, and have had machines comfortably surpass total lifetime actuations of 75 million. This isn't guaranteed of course, it depends on a plethora of variables, including materials used to print, print profiles, the motor manufacturer, bearing quality etc. Regardless, here is a list of features:
-
Linear bearings (inspired by Feng Studio's machine)
- Eliminate plastic on plastic friction
- Ensure the pistons remain aligned, applying even force on all switches
-
Full capacity (64 switches) off centre operation.
-
Noise reducing plates
- The biggest issue I had with the machines was the noise. To fix that, rear plates were integrated into the design that would be printed in a flexible material (95A TPU) to dampen the noise produced by the switches colliding with the back walls and pistons.
- An off centre version of this was introduced later on. There are two models for this; one which attaches to the piston, and one which rests against the back wall. The intention is to operate in off centre at all times.
-
USB Power Delivery compatible controller & power supply.
-
128x64 OLED display for information on progress.
-
Actuation counter with programmable profiles to disable/enable the motor after x number of actuations. Currently programmed to turn off after 250,000 actuations to ensure an even distribution of off centre actuations on all 4 sides.
-
Two speeds can be selected via a switch on the PCB.
-
Rugged 24V motor, capable 564 actuations/minute. (Faster is not recommended)
-
Non-volatile flash memory, will recall number of actuations recorded in the event of power loss.
Here are a few video's showing off the operation. Video A, Video B.
Some older video's of their operation can be found here and here.
To-Do
-
Finalise documentation
-
User guide and tips on operating the machine
-
General clean up, more coherent structure.
-
-
Acceptable print tolerance specifications
-
Piston bearing socket tolerance calibration print
-
PCB BoM optimisations (more details in PCB doc)
-
PCB BoM sheet for mouser to automate adding to cart (should be done very soon)
References & Thanks
The individual who helped me most requested not to be named, but a deep thank you goes out to them for the help they have provided me and continue to provide to the community. Their help is the reason I became more interested in the intricacies of electronics, and that passion has continued far beyond this project now.
Kee Keen's open source break in machine helped me greatly in the beginning, definitely check it out if you're interested in the roots of this project!
Parts
84| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C8, C9, C10, C11, C12, C13, C14, C15, C16, C18, C19, C24 |
| 6 | 22uF | Capacitor_SMD:C_0805_2012Metric | C1, C3, C6, C20, C21, C22 |
| 5 | 1uF | Capacitor_SMD:C_0603_1608Metric | C7, C17, C23, C25, C26 |
| 5 | 5K1 | Resistor_SMD:R_0603_1608Metric | R11, R12, R13, R20, R21 |
| 4 | 10k | Resistor_SMD:R_0603_1608Metric | R3, R4, R9, R10 |
| 4 | GND | TestPoint:TestPoint_THTPad_1.5x1.5mm_Drill0.7mm | TP5, TP7, TP8, TP9 |
| 3 | 10K | Resistor_SMD:R_0603_1608Metric | R2, R6, R17 |
| 3 | MountingHole | Finn-Lib:M2_Screw_PTH | H1, H2, H3 |
| 2 | 1N4148 | Diode_SMD:D_SOD-323F | D3, D4 |
| 2 | 1k | Resistor_SMD:R_0402_1005Metric | R5, R8 |
| 2 | 22uF | Capacitor_SMD:C_0603_1608Metric | C4, C5 |
| 2 | 27R | Resistor_SMD:R_0603_1608Metric | R14, R15 |
| 2 | 78171-0002 | Finn-Lib:Molex_Pico-EZmate_78171-0002_1x02 | J4, J7 |
| 1 | 100R | Resistor_SMD:R_0603_1608Metric | R16 |
| 1 | 10m | Resistor_SMD:R_0603_1608Metric | R19 |
| 1 | 12MHz | Finn-Lib:OSC_CSTNE12M0G520000R0 | Y2 |
| 1 | 1uF | Capacitor_SMD:C_0805_2012Metric | C2 |
| 1 | 22uH | Finn-Lib:TDK-VLS5045-5x5.3x4.5 | L1 |
| 1 | 29K | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 39K | Resistor_SMD:R_0805_2012Metric | R7 |
| 1 | 3K8 | Resistor_SMD:R_0603_1608Metric | R18 |
| 1 | 3V3 | Finn-Lib:Keystone_5000-5004_Miniature | TP4 |
| 1 | AP33772 | Finn-Lib:QFN50P400X400X80-25N-D | U4 |
| 1 | AP7370-33W5-7 | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | BTN_R | Finn-Lib:SW_SPST_TL3342 | SW4 |
| 1 | BTN_UR | Finn-Lib:SW_SPST_TL3342 | SW3 |
| 1 | BZX84C22-7-F | Package_TO_SOT_SMD:SOT-23-3 | D1 |
| 1 | Conn_01x03 | Connector_JST:JST_SH_BM03B-SRSS-TB_1x03-1MP_P1.00mm_Vertical | J5 |
| 1 | Conn_01x03 | Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical | J3 |
| 1 | Conn_01x05 | Finn-Lib:Molex_Pico-EZmate_78171-0004_1x04-1MP_P1.20mm_Vertical | J2 |
| 1 | LED | LED_SMD:LED_0603_1608Metric | D2 |
| 1 | PUSB3FS4Z | Finn-Lib:DFN2510A-10 | D6 |
| 1 | RP2040 | Finn-Lib:RP2040-QFN-56 | U5 |
| 1 | SDB628 | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | SS34B | Diode_SMD:D_SMB | D5 |
| 1 | SSD1306 | Finn-Lib:Display_128x64_096_I2C | Brd1 |
| 1 | SSM3J340R | Finn-Lib:SOT-23-3F | Q1 |
| 1 | SW_Push | Connector_PinHeader_2.00mm:PinHeader_1x02_P2.00mm_Vertical | SW2 |
| 1 | SW_SPDT | Finn-Lib:SW_Slide_1P2T_CK_OS102011MS2Q | SW1 |
| 1 | Thermistor_NTC | Capacitor_SMD:C_0402_1005Metric | TH1 |
| 1 | USB_C_Receptacle_USB2.0 | Finn-Lib:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J6 |
| 1 | V_{in} | Finn-Lib:Keystone_5000-5004_Miniature | TP6 |
| 1 | V_{out} | Finn-Lib:Keystone_5000-5004_Miniature | TP2 |
| 1 | V_{s} | Finn-Lib:Keystone_5000-5004_Miniature | TP1 |
| 1 | W25Q16JVUXIQ | Finn-Lib: USON-8_2x3x0.6mm | U2 |
Similar boards
- 4 layers20.6 × 51.1 mm

- 2 layers208 × 130 mm

- 4 layers117.5 × 73 mm

- 2 layers55 × 100 mm

- 2 layers72 × 121 mm

Teebeutel
entropia/Teebeutel-Hardware
Teebeutel (eng. Teabag) is an electronic, Entropia themed con-badge for the GPN20, featuring an ESP32 microprocessor running micropython.
201 parts1 - 2 layers77 × 77 mm

- 2 layers58 × 68.5 mm

FS1--ATmega32U4
libertathiest/fs10-atmega32u4-monitor
A standalone USB monitor and configuration tool for the FCI FS10 Flow Switch, built around the ATmega32U4 on an Arduino Leonardo–compatible board.
73 parts - 2 layers85.8 × 77.5 mm

Questions
How big is the Machine Controller PCB?
It measures 43.1 × 37.7 mm and has 4 copper layers, 1.6 mm thick.
What parts does the Machine Controller use?
84 parts, built around the RP2040, SDB628, W25Q16JVUXIQ and AP33772DKZ. 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 Machine Controller KiCad files?
From the FinnKrass/MX-Break-In-Machine repository on GitHub, at the commit this page was made from: the board is PCB/Machine-Controller.kicad_pcb and its schematic PCB/Machine-Controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Machine Controller design in my own project?
Its repository publishes it under the CERN-OHL-S-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).