Skip to the content
2 layers149.5 × 99.1 mmPacificSound, the printed circuit board in 3D

Custom Column Stagger Split Keyboard

Size
149.5 × 99.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
56
Nets
59
Pads
689
Tracks, vias
868, 18
Pours
4
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
25 Jan 2022
Updated
13 Feb 2022

Overview

PacificSound is an open-source printed circuit board by RobK-0, from the RobK-0/PacificSound_SplitKeyboard repository on GitHub. It is a 2-layer board of 149.5 × 99.1 mm with 56 parts on 59 nets, routed with 868 tracks and 18 vias.

Its parts include 22 diodes, 22 switches, 1 IC and 1 connector. It belongs with the keyboards and input boards of this library.

README

README.md

PacificSound_SplitKeyboard

Custom Column Stagger Split Keyboard

This keyboard is an initial attempt at making a custom ergonomic column stagger split keyboard. It was the result of wanting to design a column stagger keyboard that operated using the STM32F4XX development boards (BlackPill). The generation of the PCB contained here was a result of a PCB promotion that offered free prototypes so long as they fit within 150mm X 100mm so I rearranged things to fit in. Rotary encoder positions were included (because why not...) and are hooked up to the timer channels so that they can be put in encoder mode and rely on the STM hardware and software to keep track of the encoders. All three encoders have separate lines. The PCBs are reversable and the plan was to make the switch footprints as compatible with switch variants as possible (for soldering, not hot swap). Although I only have MX type switches so that's all I've tested with so far. I also wanted to be sure I could make use of the SPI capability on these boards to (theoretically) be able to maximize data transfer between the halves and limit inefficiency and latency. The plan is also to explore the use of DMA for fast transfers and FreeRTOS for scheduling. In prototypint I explored QMK compatible setups but I did not like the idea of using these boards with a less efficient serial communication when they are capable of more. So then I explored creating code using the STM software and compilation and I figured I could play around with the creation of some basic firmware. So there is no proper firmware for this keyboard. Due to the use of SPI the boards are not compatible with QMK (to the best of my knowledge).

PCB Photo

Right Half Completed Photo

Left Half Completed Photo

Mistakes Were Made

The first mistake made was the use of pin B2. Although I was not planning on having compatibility with QMK, I initially used QMK on one half to test it for any issues. I discovered that the use of pin B2 as a row pin caused QMK to trigger all keys in a column whenever a key connected to that row was pressed. I checked a breadboard setup with a single key attached and it gave the same issue. The issue was consistent accross several MCUs so I concluded it was an issue with using pin B2 as a row pin with column to row diodes. B2 is a board hardware pin for booting and, as such, it has an pulldown resistor on the BlackPill. My guess is that this pulldown resistor causes problems. The issue is easily fixed in the firmware I have written. The rows are used as output lines and the columns are used as input lines. The columns are set in the code to have the internal pull-up resistors enabled so that they all normally sense high. The rows are all normally set to high. Then during the matrix sweep the rows are sequentially pulled low and the columns are read to detect any low signals (a pressed switch will pull the column line low). But if I were updating the design I would not use pin B2 as a row line since it is not necessary as there are other pins available.

The next issue I discovered was with the ethernet jack (RJ45). In my efforts to squeeze into the free prototype space I moved the jack inboard and rotated it. The orientation of the jack means that the locking tab on the cable is up against the PCB and is not accessible to depress for removal of the cable. In order to remove a cable something must be slid between the locking tab and the PCB and then lifted up (eg a guitar pick). If I were updating this design I would either move the jack over to the edge (likely requires widening the PCB) or do an edge cut up to the face of the jack. Presently the traces from the ethernet jack run directly along where the cable comes in so they would need to be rerouted even if just the additional cutaway was added.

The last update I would do (that I know of at the moment) is I would connect the USART TX and RX as I've heard that people have gotten that working in QMK (although I didn't have much luck with it when I tried). This, along with fixing the B2 pin issue, should open it up for use with QMK instead of requiring custom firmware. There are 8 conductors in the RJ45 jack. I wanted SPI communication (needs 3 lines although I hooked up the NSS line even though it's not needed) and power and ground are, of course, required. I doubled up on power and ground lines but, if I hadn't done that, there would have been spare lines in the ethernet cable for USART.

Firmware

A simple set of example firmware code files are contained in the Firmware folder. I have the keyboard now functioning in a basic capacity with some layers. This code was created using the STM Cube IDE software. The USB HID files that are included (HID Class in Middlewares) when the code is generated in the software (after configuring the MCU for use as a USB HID device) are set to a default of being a mouse. These need to be changed to make the device a keyboard. The "usbd_hid.h" and "usbd_hid.c" must be updated for the compiled code to be a keyboard. A quick internet search should show what the necessary changes are. I have only included the main code files where I have added in my code for my basic split keyboard setup that is presently working.

A python script is also included for generating keycode vectors from more standard form text keycode arrays. The keycode vectors can then be copied into the firmware main files. These vectors are used for interpreting the keyboard matrix and sending codes to the computer. Modifiers are stored in a separate vector. So some keys can be represented by a key in the keycode vector and a modifier in the modifier vector. Eg. an exclamation can be sent by a single key that has the keycode 1 in the keycode vector and right or left shift at the same position the modifier vector.

One last thing, for development on these boards I have found using the ST Link to be very valuable. I have not had much luck with the DFU bootloader on these BlackPill boards so any uploading of code without the ST Link would have been very frustrating. Also, the ST Link allows for debugging of the code while it's running on the BlackPill boards so that is very useful. I used the official ST Link V3 Mini for development and uploading code.

Parts

56
QtyValueFootprintReferences
22DPacificSound:D_TH_SMDD1, D2, D3, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22 +6
19SW_PushPacificSound:MX_ALPS_PG1350_noLedSW1, SW2, SW3, SW4, SW5, SW6, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW20, SW21 +3
8M2PacificSound:MountingHole_2.2mm_M2_PadH1, H2, H3, H4, H5, H6, H7, H8
3Rotary_Encoder_SwitchPacificSound:MX_ALPS_PG1350_RotarySW18, SW19, SW22
18P8CPacificSound:GMX-SMT2-S-88J1
1Conn_02x20_Counter_ClockwisePacificSound:BlackPillU1
1M2PacificSound:RightSideArtH9
1M2PacificSound:LeftSideArtH10

Similar boards

  • 2 layers90 × 38 mmLCD OLinuXino-5TS Rev.B, the printed circuit board in 3D

    LCD OLinuXino-5TS Rev.B

    OLIMEX/OLINUXINO

    OLINUXINO is Open Source / Open Hardware, low cost from EUR 24 Linux Industrial grade Single Board Computer capable to operate -25+85C

    56 parts1.5k
  • 2 layers50.4 × 48.4 mmDistortion, the printed circuit board in 3D

    Distortion

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    56 parts915
  • 2 layers27 × 24.7 mmKawaiiSD, the printed circuit board in 3D

    KawaiiSD

    mackieks/Kawaii

    Tiny, beautiful metal Wii keychain

    56 parts374
  • 2 layers123.9 × 94.4 mmRoba L, the printed circuit board in 3D

    Roba L

    kumamuk-git/roBa

    56 parts363GPL-3.0
  • 2 layers120.6 × 85.5 mmKLOTZ, the printed circuit board in 3D

    KLOTZ

    GEIGEIGEIST/KLOTZ

    KLOTZ is 34 keys column-staggered split keyboard. It uses an encoder and three status LEDs on each side.

    56 parts287GPL-3.0
  • 2 layers136 × 91.7 mmOne, the printed circuit board in 3D

    One

    ergonautkb/one

    Ergonaut One is an open-source ergonomic wireless split mechanical keyboard designed by Ergonaut Keyboards.

    56 parts210CERN-OHL-P-2.0
  • 2 layers78.5 × 69 mmKicad cpu board, the printed circuit board in 3D

    Kicad cpu board

    matthewcieplak/super-sixteen

    Code and schematics for the Super Sixteen Eurorack sequencer

    56 parts171
  • 2 layers45 × 45 mmAeroq Hardware v3, the printed circuit board in 3D

    Aeroq Hardware v3

    EnriqueNeyra/Aeroq

    An Indoor Air Quality Monitor Powered by ESP32, SCD40, and SEN54

    56 parts130

Questions

How big is the PacificSound PCB?

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

What parts does the PacificSound use?

56 parts. 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 PacificSound KiCad files?

From the RobK-0/PacificSound_SplitKeyboard repository on GitHub, at the commit this page was made from: the board is KiCad/PacificSound.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the PacificSound design in my own project?

Its repository states no licence, so its author keeps all rights: ask RobK-0 before reusing the design.