Skip to the content
2 layers307.2 × 80.4 mmTs52k, the printed circuit board in 3D

TS52K 4-row Oyayubi Shift keyboard

Size
307.2 × 80.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
150
Nets
114
Pads
578
Tracks, vias
2,520, 178
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
1 Jul 2023
Updated
3 Nov 2026

Overview

Ts52k is an open-source printed circuit board by sadaoikebe, from the sadaoikebe/ts52k repository on GitHub. It is a 2-layer board of 307.2 × 80.4 mm with 150 parts on 114 nets, routed with 2,520 tracks and 178 vias.

It is built around the RP2040, W25Q128JVSIQ and H5VU10U, with the OC2EL89CJO-113YLC-12M and TS-1187A-B-A-B among its other parts. Its parts include 56 diodes, 19 capacitors, 15 resistors, 3 ICs and 2 connectors. It belongs with the RP2040 boards of this library.

Main components

5

README

README.md

TS52K — Revision 0.2

親指シフト(NICOLA配列)を前提に設計した、52キーの自作キーボードです。ハードウェア(回路・基板・ケース)一式をオープンソースで公開しています。

解説記事: 親指シフトキーボードを作った話

特徴

  • 親指シフト専用設計 — かな入力だけでなく、英数レイヤーも親指シフトで打てる配列
  • 52キー + ロータリーエンコーダ — 50%サイズに親指キーを確保したレイアウト
  • QMKベース — ファームウェアはQMKで構築
  • JLCPCBで発注できる基板 — PCBA(部品実装込み)を想定した設計
  • FDM 3Dプリンタで出力できるケース — 特殊な設備なしで製作可能

Revision 0.2

Revision 0.2 は RP2040 を搭載した現行版です。回路・基板の設計と配置・配線は完了しており、既存のケースとプレートを共通で使用します。

キーマトリクスは 6 列 × 10 行です。KiCad 10 の検査結果は、DRCエラー・未接続・回路図との不一致が0件、シルク関連の警告が25件、ERCエラー・警告が0件です。JLCPCB 向けのガーバー・BOM・実装座標を同梱しています。基板や回路図を変更した場合は再生成してください。

基板レイアウトと編集上の注意も参照してください。


リポジトリ構成

text
pcb/     KiCad 10 プロジェクト(回路図・基板・専用ライブラリ)
         PLACEMENT.md — RP2040版の基板レイアウトガイド
case/    FreeCAD ソース、3Dプリント用 3MF、プレート加工用 DXF

pcb/ はプロジェクト内にシンボル・フットプリントを同梱しているため、クローンするだけで KiCad から開けます(外部ライブラリへの依存は KiCad 標準ライブラリのみ)。

ライブラリ内容
MX_Only.prettyCherry MX キースイッチのフットプリント(1U〜3U、7種)
ts52k.kicad_symキースイッチ、USB-Cレセプタクル、USB用ESD保護素子のシンボル
rp2040.kicad_sym / .prettyRP2040 のシンボルとフットプリント
tag-connect.kicad_sym / .prettyTag-Connect TC2030 のシンボルと旧ローカルフットプリント(J2にはKiCad標準を使用)

回路の構成

text
USB-C (J1) ─┬─ VBUS 5V ─┬─→ TPS7A2433 (U3) ─→ 3.3V ─┬─→ RP2040 IOVDD
            │           │                            ├─→ フラッシュ (U4)
            │           │                            └─→ 発振器 (X2)
            │           └─ D91 (H5VU10U) ─→ GND
            └─ D+/D− ───┬─→ 22Ω ──→ RP2040 USB
                        └─ D89/D90 (H5VU10U) ─→ GND

発振器 (X2) ── 12MHz ──→ RP2040 XIN ──→ 内蔵PLL ──→ 133MHz / 48MHz(USB)

RP2040 ─ QSPI (22Ω×5) ──→ W25Q128JVS (U4)   起動時にここからコードを読む
       │                    └─ CS ─ 10kΩ↑3V3、1kΩ ─ SW1 ─ GND(BOOTSEL)
       ─ GPIO ×16 ──────→ キーマトリクス(回路図)
       ─ GPIO ×2 ───────→ ロータリーエンコーダ A/B相
       ─ SWD ───────────→ Tag-Connect (J2)

Raspberry Pi Pico のリファレンス設計をおおむね踏襲しつつ、キーボード向けに変更を加えた構成です。

J1 — USB-Cレセプタクル(HRO TYPE-C-31-M-12)

USB 2.0 専用の16ピン品です。フル24ピンのType-Cから USB 3.x 用の高速差動ペアを省いたもので、キーボードに 3.0 の帯域は不要なため、安価で実装しやすいこれを使っています。

Type-C は裏返して挿してもピン配置が上下反転するだけで使えます。これに対応するため、D+ を A6/B6 の両方に、D- を A7/B7 の両方に接続しています。VBUS と GND も複数ピンを束ねて電流容量を確保しています。

CC1/CC2 はそれぞれ 5.1kΩ で GND に落としています。ホストはこの抵抗値を見て「相手はデバイス側」と判定し、VBUS に 5V を供給します。この抵抗がないと電源が入りません。

SBU1/SBU2(オーディオ・DisplayPort 用の予備線)は未接続です。

シールド(SH)は GND に接続しています。

USB D+/D− の直列抵抗 R7/R8 は、QSPI にも使う 22Ω・C25092 に共通化しています。JLCPCB の Basic 部品を使い、少量 PCBA で部品種と段取り費を増やさないための意図的な選択です。Raspberry Pi の RP2040 設計資料は 27Ω を指定しており、本基板の 22Ω はその値からの設計上の変更です。USB 信号品質と互換性の実測はまだ行っていません。

D89・D90・D91 — USB ESD保護

U2を個別のESD保護素子3個へ置き換えています。D89・D90・D91はいずれも H5VU10U / C22395519 で、それぞれD−・D+・VBUSを保護します。各素子の1番を信号またはVBUS、2番をGNDに接続します。JLCPCB 部品情報

フットプリントはすべてKiCad標準の Diode_SMD:D_SOD-882D です。ESDとUSB信号品質は未測定です。JLCPCB向け出力は現在の基板から生成しています。

U3 — TPS7A2433DBVR(LDOレギュレータ)

USB の 5V を 3.3V に変換する 200mA・SOT-23-5 のLDOです。TI TPS7A2433DBVR / C2866134 を使用し、EN(3番)をINに接続してUSB給電時に有効にします。NCの4番は放熱のためGNDへ接続します。入力コンデンサC3は4.7µF・25Vの0603、C69335です。

U5 — RP2040(MCU)

デュアルコア Arm Cortex-M0+、133MHz、QFN-56(7×7mm)。

U5の端子パッド幅は 0.20 mm、中央GNDパッド内には 穴径0.30 mmのビア4個があります。このパッドとビアは、JLCPCBの2層・1 ozで製造・実装できる設計と判断しています。同様の条件でJLCPCBに発注された基板の実例は、パッド寸法・製造実例を参照してください。パッド幅や中央パッド内ビアを理由に、ガーバー出力を止める必要はありません。

電源系統が特徴的です。 RP2040 は内部に 1.1V のLDOレギュレータを内蔵しており、VREG_VIN(44) に 3.3V を入れて VREG_VOUT(45) から出た 1.1V を、DVDD(23, 50) で自分に戻して入れるという構成をとります。基板側では 1V1 ネットにパスコンを置くだけです。RP2040 ハードウェア設計資料

text
+3V3 ──→ VREG_VIN (44) ──→ [内蔵1.1Vレギュレータ] ──→ VREG_VOUT (45)
                                                            │
                                                          1V1ネット
                                                            │
                                                      DVDD (23, 50)
ピン接続用途
IOVDD ×6+3V3IOバッファ電源
ADC_AVDD+3V3ADCアナログ電源
USB_VDD+3V3USBトランシーバ電源
VREG_VIN+3V3内蔵レギュレータ入力
VREG_VOUT1V1内蔵レギュレータ出力
DVDD ×21V1コア電源入力
TESTENGND製造テスト用。データシート通り接地
EPADGNDQFN裏面サーマルパッド

RUN(26) は 10kΩ で 3.3V にプルアップし、コンデンサで電源投入時のリセット遅延を作っています。Tag-Connect の RESET から引き下げることもできます。

X2 — OC2EL89CJO-113YLC-12M(12MHz 発振器モジュール)

RP2040 の標準構成は「水晶振動子 + 負荷容量2個」ですが、この基板は発振回路を内蔵した完成品モジュールを使っています。部品点数が減り、負荷容量の調整も不要になる代わりに、コストは水晶より高くなります。

XOUT(21) を未接続にしているのがこの構成の目印です。外部から完成したクロックを注入する場合、XIN だけを駆動し XOUT は開放にするのが正しい使い方です。

EN は 10kΩ で 3.3V にプルアップして常時イネーブルにしています。

12MHz は RP2040 の要求仕様で、内蔵PLLがここから 133MHz のシステムクロックと 48MHz の USB クロックを生成します。USB は周波数精度に厳しいため、ここは妥協できません。

U4 — W25Q128JVS(QSPIフラッシュ)

128Mビット = 16MB のシリアルフラッシュ。

RP2040 にはプログラム用の内蔵フラッシュがありません。 起動時にこのチップからコードを読み出して実行(XIP)するため、これが無いと何も動きません。

データ線4本を並列に使う Quad SPI で接続し、各線に 22Ω の直列抵抗を入れてリンギングと EMI を抑えています(Raspberry Pi Pico には無い追加です)。/CS は 10kΩ でプルアップし、電源投入直後にフラッシュが誤ってコマンドを受け取らないようにしています。

16MB は QMK には余裕のある容量です(Pico は 2MB)。現在の C97521 は JLCPCB Basic ですが、小容量品との価格差や PCBA の段取り費は注文時の見積もりで確認してください。

J2 — Tag-Connect TC2030-IDC-NL(書き込み・デバッグ端子)

SWD 接続用のフットプリントです。コネクタ部品は実装しません。 基板上はランドと位置決め穴だけで、専用のポゴピンケーブルを押し当てて接続します。

ピン番号は TC2030-CTX(Cortex 用ケーブル)と同じです。1 が 3.3V、2 が SWDIO、3 が RESET、4 が SWCLK、5 が GND、6 は SWO で未接続です。

"NL" は No Legs の意味で、基板を貫通する固定爪用の穴が不要なタイプです。押さえている間だけ導通するので、書き込み時は手で保持するか治具を使います。

完成品にピンヘッダが飛び出さず、ケースに穴も不要なため、外観と厚みを損ないません。

キーマトリクス

回路図では col1〜col6 と row1〜row10 の計 16本の GPIO で、52個のキースイッチとロータリーエンコーダの押し込みスイッチ、合計53接点を読み取ります。各ダイオードは同じ向きで、カソードが row 側です。

ネットGPIO
col1 〜 col622, 12, 6, 13, 14, 15
row1 〜 row52, 4, 16, 18, 20
row6 〜 row103, 5, 17, 19, 21
エンコーダ A相 / B相0 / 1

GPIO7〜11 と GPIO23〜29 の計12本は未使用です。エンコーダの押し込みスイッチは col6 のマトリクスに含まれます。ファームウェアも新しいマトリクスに合わせる必要があります。

SW1 — BOOTSEL ボタン

RP2040 は起動時に QSPI_SS が Low だと USB マスストレージのブートローダに入り、UF2 ファイルをドラッグ&ドロップで書き込めるようになります。SW1 はそのためのボタンで、QSPI_SS_N を 1kΩ(R14) 経由で GND に落とします。

SW1 は XKB TS-1187A-B-A-B / C318884 の上押し式タクトスイッチです。基板の裏面に実装し、裏面側から基板に向かって押します。本体は 5.1 × 5.1 mm、高さは約 1.5 mm です。押しやすさとケース底板との隙間は実物で確認してください。リセットボタンではありません。

抵抗を挟むのは Raspberry Pi Pico と同じ理由です。

  • 通常動作中は RP2040 が CS を High に駆動しているため、抵抗なしでボタンを押すと 3.3V を直接 GND に短絡してしまう
  • 10kΩ(R2) のプルアップとの分圧で 3.3V × 1/11 ≒ 0.3V となり、確実に Low と判定される

書き込み手段は2通りあります。

方法手順
UF2(SW1)SW1 を押しながら USB 接続 → ストレージとして認識 → UF2 をコピー
SWD(J2)Tag-Connect ケーブルを当てて書き込み。デバッグもこちら

ロータリーエンコーダ

SW2 は型番未確定の EC11 互換品を想定しています。A/B 相は R15/R16(各 10kΩ)で 3.3V にプルアップし、C19/C20(各 100nF)を GND へ接続しています。R15/R16 は R2/R3/R4 と同じ C25744(0402WGF1002TCE、0402)に共通化しています。コンデンサはエンコーダ近くに配置しています。

RP2040 の内蔵プルアップは 50〜80kΩ なので、100nF だけを組み合わせると時定数は 5〜8ms になります。外付け 10kΩ により約 1ms に短縮し、内蔵プルアップだけの場合より入力インピーダンスも下げます。内蔵プルアップを併用すると約 0.83〜0.89ms です。RP2040 データシート

外付け抵抗による追加電流は、接点が閉じた相ごとに約 0.33mA、両相が閉じていると最大約 0.66mA です。本基板の 5V→3.3V LDO を含めると、USB 入力での追加消費電力は直流分で最大約 3.3mW になります。停止位置で接点が閉じていれば待機中も消費します。

この値は、元の内蔵プルアップだけの構成より入力を強くし、消費電流と部品共通化も考慮した初期値です。参考の Alps EC11E15244B2 が規定する抵抗負荷での最低動作電流 1mA は満たさず、型番未確定の互換品の接触信頼性を保証するものではありません。また、現在の回路はコンデンサを接点へ直接接続しており、プルアップ抵抗はコンデンサの放電電流を制限しません。ファームウェアで A/B 相の遷移を検証し、採用部品の仕様と実機の回転試験で確認します。Alps の仕様とフィルタ例

部品リスト

基板実装部品(JLCPCB PCBA を想定)

部品型番 / 値数量パッケージ
MCURP2040 / C20401QFN-56 7×7mm
フラッシュW25Q128JVSIQ / C975211SOIC-8 5.3mm
発振器OC2EL89CJO-113YLC-12M / C2763696413.2×2.5mm 4pin
LDOTPS7A2433DBVR / C28661341SOT-23-5
USB D+/D−・VBUS ESD保護H5VU10U / C223955193DFN1006-2L 1.0×0.6mm
USB-CHRO TYPE-C-31-M-12 / C1659481SMD端子・スルーホール固定脚
BOOTSELボタンTS-1187A-B-A-B / C3188841上押し、5.1×5.1×1.5mm
ダイオード1N4148W / C8159853SOD-123
抵抗22Ω / C2509270402
抵抗10kΩ / C2574450402
抵抗1kΩ / C1170210402
抵抗5.1kΩ / C2318620603
コンデンサ1µF / C52923150402
コンデンサ4.7µF / C2373310402
コンデンサ4.7µF / C6933510603
コンデンサ0.1µF / C152520402

Basic 部品を優先しますが、すべてが Basic ではありません。在庫、部品区分、段取り費を含む価格は注文時に確認してください。Tag-Connect J2 は基板上の接点と穴だけで、部品を実装しません。USB-C J1 と SW1 は JLCPCB の実装対象です。

BOOTSELボタンはケース設計にも関わります。 ケースに押下用の穴を開けるか、底板を外して押す前提にするかを確認してください。

手付け・機構部品

部品ソース数量備考
キースイッチAliEx / 淘宝 / 自キ専門店52お好みの打鍵感で。Kailh Box 白軸がおすすめ
ロータリーエンコーダ—1Alps EC11E 互換、押し込みスイッチ付き
2u スタビライザーAliEx / 淘宝 / 自キ専門店3PCBマウント
3u スタビライザーAliEx / 淘宝 / 自キ専門店1PCBマウント
キーキャップAliEx / 淘宝 / 自キ専門店1セット3u と 2.75u の親指キーが必要
ケース ふた3Dプリント1FDM で出力可能
ケース 底板3Dプリント1FDM で出力可能
定位板(プレート)レーザーカット1t=1.5mm 真鍮。できるだけ重い金属が良い
ヒートセットインサートAliExpress8M3 × 6mm × 4.6mm。長さは6mmでなくても可
M3 円頭六角ボルト—86mm
クッション—12Poron / EVA フォーム、2mm厚 × 2mm × 87mm
ゴム足—4〜—

キースイッチの内訳: 1U ×39、1.25U ×5、1.5U ×2、1.75U ×2、2.25U ×2、2.75U ×1、3U ×1


ファームウェア

QMK ベースのファームウェアは別リポジトリで管理しています。

https://github.com/sadaoikebe/qmk_firmware/tree/master/keyboards/ts52k

公開済みの ts52k キーボード定義は ATmega32U4 用です。Revision 0.2 では、RP2040と本基板の 6 列 × 10 行のマトリクスに対応したファームウェアが必要です。


組み立て手順

1. 部品の確認

部品リストの通り揃っているか確認します。

2. スタビライザーの取り付け

ここが一番の要注意ポイントです。 ちゃんと嵌っていないと、後の工程で気づいたときに大幅な手戻りになります。基板にスタビライザーを取り付けたら、爪がしっかりロックされているか1つずつ確認してください。

3. ロータリーエンコーダの取り付け

4. プレートとキースイッチの取り付け

プレートを貫通させて、まず四隅のキースイッチから固定します。四隅が決まるとプレートと基板の位置が安定するので、残りが入れやすくなります。

5. Poron フォームの貼り付け

6. ケースへのヒートセットインサート挿入

半田ごてで温めながら、まっすぐ押し込みます。斜めに入ると取り返しがつかないので、少しずつ確認しながら進めてください。

7. ケースの組み立て


開発環境

  • KiCad 10.0 以降

回路図を編集する場合、以下の点にご注意ください。

Tools → Update Symbols from Library は慎重に実行してください。 KiCad 標準ライブラリ側で Memory_Flash:W25Q128JVS のピン位置が変更されているため、そのまま更新すると U4 が全ネットから外れます。U4 は意図的に古いキャッシュ定義のまま維持しています。

また、フィールド関連のオプション(Update/reset field text など)を有効にすると、電源シンボルの Value が書き換わってネット名が変わる可能性があります。

Tools → Update PCB from Schematic では Link footprints using reference designators をオフのままにしてください。 フットプリントは Unique ID で回路図と紐付いています。古い基板との参照名の重複を使って紐付けると、異なる部品が対応付けられることがあります。

基板を編集する場合は、pcb/PLACEMENT.md の「やってはいけないこと」を先に読んでください。配線やビアの一括削除は、現行ネットとの接続を確認せず実行しないでください。編集後はベタを再充填し、DRC と製造データを作り直します。

GUI を開かずに状態を確認するには:

sh
kicad-cli sch erc                                   -o erc.rpt ts52k.kicad_sch
kicad-cli pcb drc --schematic-parity --refill-zones -o drc.rpt ts52k.kicad_pcb

現在、ERC は 0件、schematic parity も 0件です。


ライセンス

Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)

複製・改変・再配布が可能です。ただし以下の条件が付きます。

  • 表示(Attribution) — 作者のクレジット表示、ライセンスへのリンク、変更の有無の明示が必要です
  • 非営利(NonCommercial) — 商用目的での利用はできません

Parts

150
QtyValueFootprintReferences
53DDiode_SMD:D_SOD-123D2, D11, D12, D13, D14, D16, D17, D18, D20, D21, D22, D23, D25, D26, D27, D29 +37
39MX-NoLEDMX_Only:MXOnly-1U-NoLEDMX11, MX12, MX13, MX16, MX17, MX18, MX20, MX21, MX22, MX25, MX26, MX27, MX29, MX30, MX31, MX33 +23
151uCapacitor_SMD:C_0402_1005MetricC2, C4, C6, C7, C8, C9, C10, C12, C13, C14, C15, C16, C17, C18, C21
722Resistor_SMD:R_0402_1005MetricR7, R8, R9, R10, R11, R12, R13
510kResistor_SMD:R_0402_1005MetricR2, R3, R4, R15, R16
5MX-NoLEDMX_Only:MXOnly-1.25U-NoLEDMX5, MX9, MX14, MX81, MX82
3H5VU10UDiode_SMD:D_SOD-882DD89, D90, D91
20.1uCapacitor_SMD:C_0402_1005MetricC19, C20
25.1kResistor_SMD:R_0603_1608MetricR5, R6
2MX-NoLEDMX_Only:MXOnly-2.25U-NoLEDMX4, MX65
2MX-NoLEDMX_Only:MXOnly-1.75U-NoLEDMX3, MX75
2MX-NoLEDMX_Only:MXOnly-1.5U-NoLEDMX2, MX64
11kResistor_SMD:R_0402_1005MetricR14
14.7uCapacitor_SMD:C_0402_1005MetricC5
14.7uCapacitor_SMD:C_0603_1608MetricC3
1HRO_TYPE-C-31-M-12Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1MX-NoLEDMX_Only:MXOnly-2.75U-ReversedStabilizers-NoLEDMX60
1MX-NoLEDMX_Only:MXOnly-3U-ReversedStabilizers-NoLEDMX23
1OC2EL89CJO-113YLC-12MOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmX2
1RP2040rp2040:IC57_RP2040U5
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW2
1TC2030_IDC_NLConnector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_VerticalJ2
1TPS7A2433DBVRPackage_TO_SOT_SMD:SOT-23-5U3
1TS-1187A-B-A-Brp2040:SW_Tactile_XKB_TS-1187A_5.1x5.1mmSW1
1W25Q128JVSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU4

Similar boards

  • 4 layers70 × 50 mmMotor power poc, the printed circuit board in 3D

    Motor power poc

    Galacs/motor-power-poc

    A POC PCB to test circuit electrical protections and motor control schemes

    165 parts
  • 4 layers29 × 42 mmRollxoxo shim, the printed circuit board in 3D

    Rollxoxo shim

    Galacs/rollxoxo-shim

    Shim pcb to allow remote control of rollxio garage door via wifi or bluetooth

    72 parts
  • 2 layers28.3 × 28.5 mmStepTracker, the printed circuit board in 3D

    StepTracker

    tas-miley/PCB-Wearable-Health-Tracker

    PCB design to run the Wearable Health Tracker firmware project.

    42 parts
  • 2 layers82.6 × 94.6 mmCharging circuit, the printed circuit board in 3D

    Charging circuit

    vacuumsens/pcb

    KiCad PCB design projects for VacuumSens.

    270 parts
  • 2 layers26.5 × 34.4 mmPicoLoaderNSB, the printed circuit board in 3D

    PicoLoaderNSB

    makeo/PicoLoader

    A cheap and easy to install modchip for the Nintendo GameCube!

    45 parts320GPL-2.0
  • 4 layers142 × 119.7 mmQMTech MiSTeX, the printed circuit board in 3D

    QMTech MiSTeX

    MiSTeX-devel/MiSTeX-hardware

    Hardware for MiSTeX

    247 parts73
  • 2 layers475 × 139.9 mmSkogaslider main pcb, the printed circuit board in 3D

    Skogaslider main pcb

    skogaby/skogaslider

    Firmware, CAD, and PCB files for the skogaslider, an RP2040-based controller to simulate Chunithm's gameplay experience

    175 parts18MIT

Questions

How big is the Ts52k PCB?

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

What parts does the Ts52k use?

150 parts, built around the RP2040, W25Q128JVSIQ, H5VU10U and OC2EL89CJO-113YLC-12M. 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 Ts52k KiCad files?

From the sadaoikebe/ts52k repository on GitHub, at the commit this page was made from: the board is pcb/ts52k.kicad_pcb and its schematic pcb/rp2040.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ts52k design in my own project?

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