

Ctrl M
Replacement controller for the famous IBM Model M keyboard based on the STM32F072 microcontroller. Supported by QMK.
- Size
- 171 × 50.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 39
- Nets
- 51
- Pads
- 168
- Tracks, vias
- 445, 52
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 24 Mar 2021
- Updated
- 12 Feb 2026
Overview
Ctrl M is an open-source printed circuit board by nuess0r, from the nuess0r/ctrl-M repository on GitHub. It is a 2-layer board of 171 × 50.5 mm with 39 parts on 51 nets, routed with 445 tracks and 52 vias.
It is built around the STM32F072CBT6, USBLC6-2SC6 and XC6206P332PR. Its parts include 13 connectors, 8 capacitors, 4 resistors, 3 ICs and 1 switch. It belongs with the keyboards and input boards and the STM32 boards of this library.
Main components
3STM32F072CBT6
LQFP-48(7x7)-40℃~+85℃ 1.65V~3.6V 128KB 12bit 12bit 16KB 32 Bit 37 48MHz ARM Cortex-M0 Built-in FLASH LQFP-48(7x7) Microcontrollers (MCU/MPU/SOC) ROHSSTMicroelectronicsMicrocontrollers (MCU/MPU/SOC)USBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)XC6206P332PR
SOT-89-3-25℃~+80℃ 1 160mV@(50mA) 250mA 3.3V 40dB@(1kHz) 7uA 8V Fixed Over Current Protection、Short Circuit Protection Positive SOT-89-3 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSUMWVoltage Regulators - Linear, Low Drop Out (LDO) Regulators
README
README.mdCtrl M Controller for Model M

This is a replacement controller for the famous IBM Model M keyboard based on the STM32F072 microcontroller. Goal is to get it upstream in QMK.
Work in progress, prototypes are working in Model M from 1989, there is a bug for the version from 1986 and test for other variants are outstanding.
Hardware
Controller based on a STM32F072 chip and designed with KiCAD.
To make the controller as flexible as possible there are four possible LED and earth cable connectors. Also the PCB can be cut into a smaller variant that fits the later IBM/Lexmark variant.
The four LED connector variants are:
J8 is a 12 pin connector is mounted for J8 for both LED and keyboard
J8 is a 8 pin connector and J9 is a 4 pin connector
J8 is a 8 pin connector and J12 is a 4 pin connector
J8 is a 8 pin connector and J10 is a 4 pin headerhttps://github.com/nuess0r/ctrl-M
To fill the gab between the USB connector and the case and also to make it easier to press the bootloader button a small plastic part (button_lever.amf) was designed with FreeCAD that can be 3D printed.
Software
https://github.com/nuess0r/qmk_firmware/tree/ctrl_m/keyboards/ctrl_m
Assembly Instructions
https://brain4free.org/wiki/doku.php/elektronik:ctrl_m#assembly_instructions
Parts
39| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 100n | Capacitor_SMD:C_0603_1608Metric | C2, C4, C5, C6, C7 |
| 4 | Conn_01x01 | Connector_Blade:Blade_6.3mm_Horizontal | J3, J4, J5, J6 |
| 3 | 120 | Resistor_SMD:R_0603_1608Metric | R2, R3, R4 |
| 3 | Fiducial_0.75mm_Mask1.5mm | Fiducial:Fiducial_0.75mm_Mask1.5mm | REF1, REF2, REF3 |
| 2 | 4.7u | Capacitor_SMD:C_0805_2012Metric | C1, C3 |
| 2 | Conn_01x04 | Connector_FPC_2.54mm:TE_5-520315-4_1x04_P2.54mm_Vertical | J9, J12 |
| 2 | MountingHole | MountingHole:MountingHole_4mm_Pad | H3, H4 |
| 2 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2 |
| 1 | 10n | Capacitor_SMD:C_0603_1608Metric | C8 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | Conn_01x04 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal | J10 |
| 1 | Conn_01x05 | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J11 |
| 1 | Conn_01x08 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J13 |
| 1 | Conn_01x12 | Connector_FPC_2.54mm:TE_6-520315-2_1x12_P2.54mm_Vertical | J8 |
| 1 | Conn_01x16 | Connector_FPC_2.54mm:TE_6-520315-6_1x16_P2.54mm_Vertical | J7 |
| 1 | Conn_ARM_JTAG_SWD_10 | Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical | J2 |
| 1 | MountingHole | MountingHole:MountingHole_2.1mm | H5 |
| 1 | STM32F072CBT6 | Package_QFP:LQFP-48_7x7mm_P0.5mm | U3 |
| 1 | SW_Push | Button_Switch_THT_narrow:SW_SPST_UK_B0205-G4.3-B-250 | SW1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | USB_B | Connector_USB:USB_B_OST_USB-B1HSxx_Horizontal | J1 |
| 1 | XC6206P332PR | Package_TO_SOT_SMD:SOT-89-3 | U2 |
The 37 most common of 39 parts.
Questions
How big is the Ctrl M PCB?
It measures 171 × 50.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Ctrl M use?
39 parts, built around the STM32F072CBT6, USBLC6-2SC6 and XC6206P332PR. 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 Ctrl M KiCad files?
From the nuess0r/ctrl-M repository on GitHub, at the commit this page was made from: the board is ctrl-m.kicad_pcb and its schematic ctrl-m.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Ctrl M design in my own project?
Its repository states no licence, so its author keeps all rights: ask nuess0r before reusing the design.
Similar boards
- 4 layers192 × 48 mm

- 2 layers80.2 × 106.3 mm

Ecsc21-badge
badgeteam/ecsc21-badge-public
Hardware design files for the ENISA ECSC21 badge (software coming later)
84 parts1MIT - 2 layers100 × 100 mm

- 2 layers391.2 × 166.5 mm

Takt11800
vuckale/takt11800
Replacement PCB for Cherry G80 11800/Compaq MX 11800 keyboard using QMK firmware and VIA
284 parts12CERN-OHL-S-2.0 - 4 layers228.2 × 80.6 mm

- 4 layers100 × 50 mm

Chronolog
slemanz/chronolog
STM32-based temperature data logger with RTC, NOR flash storage, LCD and Wi-Fi. Hardware and firmware.
95 parts5 - 2 layers216 × 100.5 mm

- 2 layers50 × 18 mm

Majestouch stm32
mbtech-nl/majestouch-stm32
Drop-in replacement controller for the full-size Filco Majestouch: STM32F072, QMK with NKRO over USB. KiCad 9 board, hand-solderable.
20 parts2MIT