Skip to content

niw/mfk60

Repository files navigation

mfk60

60% ANSI Layout Split Keyboard. mfk60 is My First Keyboard, 60%.

mfk60

  • A split keyboard that has 60% ANSI Layout.
  • Swappable Gateron Low-Profile MX keycap compatible switches.
  • Thin design as MacBook Pro.
  • USB-C interface.
  • Fully customizable with QMK firmware and VIA configuration.

Overview

mfk60 is built with 4 layered boards, the top plate, middle plate, primary PCB where the entire circuit exists, and bottom plate.

Each board is designed in separated KiCad project due to limitation of KiCad which project can have only one board design. Each layer board design contains both left and right designs.

  • sym-lib-table, fp-lib-table are shared for additional symbol and footprint for all PCBs.
  • Library contains additional symbols and footprints to KiCad.
  • mfk60.kicad_* is the primary PCB of the keyboard.
  • mfk60_*_plate.kicad_* are the each board layered with the primary PCB.
  • bin contains tooling scripts.
  • mfk60_keyboard-layout.json is key layout file for Keyboard Layout Editor.

Photos

mfk60 1 mfk60 2 mfk60 3 mfk60 4

Build

Since mfk60 is built with multiple KiCad projects, there are tooling scripts to make the process easier.

Overview

  • mfk60_keyboard-layout.json to set the key layout.
  • make apply_layout to apply the key layout to the primary PCB.
  • bin/prepare_plate_board.py to sync the primary PCB and other layered board.
  • make panelize to produce panelized boards that has frame and mouse bites.
  • Produce Gerber files and BOM manually from KiCad projects for each board.

Prerequisite

The board and tooling scripts are implemented by using KiCad 7.0.10 on macOS.

Please use KiCad 7.0.10 (or later, which is not tested.)

It should work on the other platform, however, you may need to use KICAD_PYTHON_PATH to set where KiCad python exists if it's not macOS or KiCad is installed on the different path as like following.

env KICAD_PYTHON_PATH=/path/to/kicad/python bin/python.sh bin/update_plate_board.py

Each board is using symbols and footprints served from KiKit, which is referenced from .venv library installation. Thus, to open these PCB files, first need to install KiKit library. To install KiKit, simply run bin/kikit.sh.

Set key layout

Edit key layout on Keyboard Layout Editor, export the layout to mfk60_keyboard-layout.json then use apply_layout goal to sync mfk60_keyboard-layout.json to the primary PCB.

make apply_layout

Of course, it will invalidate existing PCB design, thus changing key layout causes A LOT of work downstream.

Sync layered boards

To sync Edge Cut and footprint positioning between the primary PCB and the layered boards, use bin/update_plate_board.py with bin/python.sh.

bin/python.sh bin/update_plate_board.py

Add frame and panelize

To produce final panelized projects with frame, use panelize make goal.

make panelize

This goal produces mfk60*_panelized.kicad_* files. It adds frame, mouse bites and moves JLCJLCJLCJLC text onto the frame, where is replaced with order number by JLCPCB.

Panelized projects are final data that can be used to produce production Gerber data. Recommend to use Fabrication Toolkit for JLCPCB but not limited ot it.

KiKit

Due to multiple reasons as described below, this project is using forked version of KiKit. bin/kikit.sh is automatically installs forked version of it in .venv, therefore it's opaque to you.

KiCad and Python Bindings

As of day this document is written, KiCad 7.0.10 and prior version has a not well-known "behavior" (or simply say, a bug) in its Python binding generated by Swig.

Due to this issue, released KiKit will not work properly and may crash. The forked version of it contains a workaround for this behavior.

Multiple Polygons

Each layered board has both left and right ones, therefore each outline is represented as multiple polygons. However, original KiKit is not considering such multi polygon design and failed to extract interior polygons which causes an error while panelizing such data.

Firmware

Use forked QMK branch where contains the keyboard configuration.

qmk compile -kb niw/mfk60 -km default

It also works with VIA. Use via keymap and load via.json for a draft definition in design tab enabled in settings.

qmk compile -kb niw/mfk60 -km via

About

60% ANSI Layout Split Keyboard. mfk60 is My First Keyboard, 60%.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published