概要
中国のKPrepublic から xd87 80% Custom Keyboard Kit を購入した。ASKeyboardをUSB版に改装したときのように、オリジナルのNICOLA(親指シフト)キーボードを作る素材として使う。
80%キーボードとは、フルキーボード(104キーボード)からテンキー部分を除いたキーボードのことでTKL (テンキーレス)キーボードとも表現されている。60%や40%キーボードのキットもあるのだけど、編集用のキーや矢印キー、ファンクションキーのあるオーソドックスさに惹かれてこのサイズにした。今使っているRealForce91とほぼ同じ大きさ、キー構成になる(ただし、ANSI配列)。
xd87キットは、 Keyboard-Layout-Editor や TKG(TMK Keymap Generator)を使うことで、ファームウェアのプログラミングやビルド方法を意識することなくキー配置をカスタマイズし、キーボードマイコンのフラッシュメモリに書き込めるようになっている。TKGについてはこちらの掲示板にまとめられている。また、QMK ファームウェアを使った例もGitHubに数多く上がっている。
ご注意
この記事は、個人として購入した XD87 PCBの回路構成などを含んでいますが、それらは独自に調査した内容であり、正確さを保証するものではありませんし、明らかな誤りを含んでいるかもしれません。同じ製品でも、購入時期によって構成が異なっているかもしれません。
キットの内容
XD87キーボードキットにはいくつかオプションがあって、全部入り(PCB、 ケース、 スタビライザ、スチール製のスイッチプレート、キースイッチ、LED、USBケーブル)のものや、PCBのみ、スイッチプレートのみなどいろいろ。今回は、PCB、 ケース、 スタビライザ、スチール製スイッチプレート を含んだキットを選択した。別途注文したキースイッチやキーキャップと合わせ、送料込みの総額が $140ほど(1万5千円強)だった。
キースイッチをプレートに装着したり、PCBにスタビライザを固定したり、キースイッチやLEDをハンダ付けして組み立てていくわけだが、組み立てるための手順書や回路図は含まれていない。自分で調べてやってくれということだと思うので、回路構成も含めた調査メモを残すことにした。
PCB
とてもきれいなPCB (プリント基板) という印象。
表面にはスイッチ取り付け位置が印刷されており、配置のカスタマイズも幅広くできるようになっている。このPCBとスチール製のスイッチプレートで採用できるキー配置は、上記のKPrepublicのページに掲載されている。
NICOLAキーボードにすることが目的なので、スペースキーが分割できることがこのPCBを選んだ大きな理由の一つである。右側矢印キーの上あたりには、キーボードを持ったネコ?のパターンが。
裏面にはマイコン ( ATmega32u4 )の他に、全キースイッチ用のチップダイオード(COL→ROW方向)、キーキャップのバックライトLED用の電流制限抵抗、そしてアンダーグロー用のRGB LED ( たぶんWS2812B) も実装済だった。こういった表面実装部品を手ハンダしなくて済むのはとても助かる。PCBの細部やマトリックス回路については後述する。
KPrepublic のページには、「RGBアンダーグローLEDは未実装なので自分でハンダ付けしてね」といったことが書いてあるのだけど、今回届いたものはすでに実装されていた。もともとアンダーグローは要らないと思っていたのだけど、実装済なので利用することにする。
スタビライザー
キットに含まれていたキーキャップ用のスタビライザーは以下がすべて。
- ポスト : 12 (6キー分)
- ステム : 13 (6キー分とおまけ?)
- ワイヤ : 7u × 1、 6.25u × 1、 2u × 4。スペースキーは一個として合計で5キー分。
2uのスタビライザーは、左右のShiftキー (2.25uと2.75u)、Enterキー (2.25u) 、BackSpaceキー (2u) で使えということだろう。
PCBにも、このサイズのスタビライザを固定するための大小の穴が開けてある。なお、2uより小さいキーにはスタビライザが不要なので考慮されていない。
スペースキーを分割 (3u × 2 ) して使うときにそなえて、3u用スタビライザーを2つ付けるための穴はPCBにちゃんと開いている。ただ、3uスタビライザー自体はこのキットには含まれていないから、3uのキーキャップとともに別途入手する必要がある。
スイッチプレートとケース
キースイッチを固定するスイッチプレートは厚さが約1.2mm、それなりに重さもありしっかりしている。キーボードを叩いた衝撃を受け止める役割なので安心できる。ケースは上蓋と下側に分かれていて、はめ込み式で固定する。
PCBにスイッチプレートを載せてみると以下のような具合になる。
PCBにスイッチプレートを載せただけならば、最上段のEscキーとF1キーの間にあるスイッチポジションも有効に活かせるようになっているし、右下あたりの矢印キーの部分も6キー配置できる(ふつうは上下左右の4キー)。それにネコも見えている。
ただ、PCBに用意されているISP (In-System Programming) ポートのランドがほとんど見えなくなってしまうのがとても残念(RESETとGNDだけが見える)。
ここにケースの上蓋を被せると以下のようになる。
残念ながら、3つのスイッチポジションはふさがれてしまうし、ネコも見えなくなってしまう。今回は塗装してもいいかなと思って白いケースを選択したが、黒いケースも選べる。
ケース下側にはUSB typeCコネクタが実装された小基板がネジ止めされている。赤いケーブルをPCB裏面のJ2コネクタに接続することで、ATmega32u4が外界とつながる。
ケース裏側のUSB端子取り付け部。プラグのスリーブがあまり長いとまずいかもしれない。
ケースを閉めてPCBやスイッチプレートを固定するときには、上蓋側エッジにあるツメをバシバシバシッと下側の凹部にはめ込んで固定するようになっており、ネジ止めではない。こういう固定方法は、ツメを折る確信を持ちながら開け閉めすることになるから、個人的には好ましく思えない。
中国から届いた時点で、ケース内にPCBとプレートが収められ、いくつかあるツメの半分ほどが下側に掛かった状態だったのだけど、さっそく折りそうでちょっとビビった。
ケースの見た目の安っぽさと開け閉めのやりにくさが、このキットの一番の弱点に感じる。完成後はケースを開けなくて済むように用心しなくては。
動作確認
PCBの動作確認をどうやったものかと考えながら、プリントパターンを見たり、導通チェッカーをピーピー言わせたりしながら回路や動作を確認した。
すでにTMKファームウェアが書かれていた
まずはUSBケーブルでPCのUSB3.0ポートにつないでみた。するとWindows10がXD87というデバイスを見つけてキーボードとしてセットアップしてくれた。
デバイスマネージャを開いてみると、以下のとおり。
VID = 0xCDCD 、PID = 0x8787 というUSBデバイスが追加されていた。これはTMKでよく使われているパターンのようなので、おそらくTMKファームウェアが書き込み済ということだろう。
「バスによって報告されるデバイスの説明」という項目をみると、XD87と書いてあるから間違いない。
どうやら、出荷時点でマイコンのフラッシュにはHIDデバイスとして必要な機能がちゃんと書き込まれているようである。素の(出荷状態の)ATmega32u4を期待していたので、チェックは簡単になる反面ちょっとがっかりした。
リセットするとDFUデバイスが出現
PCB表側の右寄り (DeleteとEndの間) にはISPポートがある。
ISPポートは以下のような構成になっていると思われ、ISPプログラマと接続すれば、ブートローダーやヒューズの書き換えも可能だろう。
スイッチプレートと上蓋を被せた状態でも、この位置のキーキャップを抜けば、外部リセットは簡単にかけられるようになっている。SPI関連のその他のポートは、残念ながら隠れてしまうのだが。
で、写真でRSTとなっている2つのランドをピンセットでショートさせてみると、デバイスマネージャに libusb-win32.devices / ATmega32U4 というデバイスが出現した。
このデバイスのVIDとPIDは0x03EBと0x2FF4であり、バスによって報告されるデバイスの説明の内容は、ATm32U4DFU となっている。つまり、ATmega32U4の出荷時に書き込まれているDFUブートローダー相当の何かが稼働したということだろう。DFU (Device Firmware Upgrade) ブートローダーの機能や内容については、Microchip社が公開している USB DFU Bootloader データシートを参照のこと。なお、PC側のプログラムを使わずにDFUブートローダーモードを終了させるには、USBケーブルを抜いてやるしかないと思う。
今回接続したPCにはAtmel Flip とともに libusbを導入済みだったので、すんなりDFUデバイスが見えた。これらを導入していないPCで試したところ、最初はATm32U4DFUデバイスを見つけるものの、ドライバの導入に失敗して「不明なデバイス」となってしまう。DFUデバイスクラスの仕様はUSB.orgで規定されているとはいえ、Windows10には組み込まれていないようである。
DFUブートローダーをもつデバイスのファームウェアを書き換えるようなときは、Microchip社のAtmel Flipのページからダウンロードしてドライバーを導入すればよいだろう。Atmel Flip自体が古いソフトウェアなので、jre 1.5とか使っているのがちょっと困りものだが。
Atmel Flipを使ってテスト用のプログラムを書き込んだ話は次回以降に。
アンダーグロー用RGBLED
USBケーブルを接続した時点で、PCB裏面に全部で14個実装されているアンダーグロー用RGB LEDがすべて点灯していた。
RGB LEDは、ただ電源を与えただけで点灯するようなものでないし、実装時に熱で壊れてしまうこともあるが、このPCBではオーケーのようである。ただ、PCBの裏側向きに光っても、実使用時に何か効果があるんだろうか。
おそらくこんな具合の回路になっているようだ。RGB1のDOはRGB2のDINにつながっており、全部で14個が数珠つなぎになっている。PCB上にはテスト用または拡張用と思われるランドも用意されている。
WS2812Bだとすると、RGB全色を遠慮気味に光らせたとき一個あたり10mA程度流れるから、点灯時に合計約140mA、消灯していても全部で10mA弱 (一個あたり700~800μA) は電流を消費する。
回路図に示したR6には0Ωのチップ抵抗が実装されていた。アンダーグローは余計だと思ったら、R6を除去してしまえばいいだろう。
バックライト用LED
工作用の机に転がっていた使い古しのLEDを、足を広げてPCBに挿してみたところ、ちょっと暗いがちゃんと点灯した。
今回テストに使ったLEDは、電子工作定番の3mm赤LED (SLP-9118C-51H) のはずで仕様上のVFが1.7~2.8V (実測で約1.9V)、光度が8~20mcdというもの。派手に光らすならもっと高輝度のものを使った方がよさそうである。
キースイッチ枠内の上側2つのスルーホールがバックライト用LEDのためのもので、四角いランドがアノード (+)側になっている。すべてのランドを試したわけではないが、この機能も大丈夫そうである。
バックライト用LEDの配線をおっていくと、上の写真にあるQ1に行き着く。Q1から出た配線は電流制限用抵抗を介してLEDのアノード側に接続されているから、たぶん以下のような回路構成になっている。
Q1はPチャンネルMOS FETと思うのだけど型番は不明。
PD0がロジックLのとき、LED用の抵抗には+5Vかかるはずなので、LEDに流れる電流は IF = (5 – VF) / 330 A ということになり、たとえば VF=2.1V のLEDを使うならば約8.8mA流れることになる。バックライトLEDを87個装着したならば約766mAということになるから、Q1にはその程度をソースできる能力はあるのだろう。
CapsLockインジケーター
またCapsLockキーの位置には、バックライト用とは別にCapsLockインジケータ用のスルーホールが開けてある。ここにもLEDを挿してみた。
同じPCにつないでいる別のキーボードでCapsLock操作を行っている場面を動画にした。PCからのロック状態の通知も、CapsLockインジケータも問題ない。ただ、Scroll LockやNum Lock用のLEDの取り付けは考慮されていないので、これらが必要なら別の方法を考える必要がある。
おそらくこんな回路になっているので、CapsLockインジケータを点灯させるには、PE2ポートをLOWにしてやれば良さそうである。PE2はHWB (HardWare Boot)端子でもある。おそらく、マイコンのHWBEヒューズがプログラムされており、HWBが抵抗R3を介してプルダウンされているから、ISPポートでのリセット操作でブートローダーが開始しているのだろう。
(最初の投稿時は、CapsLock LEDの回路が間違ってました。差し替えました)。
キースイッチ用回路の確認
PCBを表側から見たとき、各キー位置での回路接続は以下のような具合になっている。
赤い線が列、青い線が行の接続を表しており、キースイッチの端子は、青○と橙○に配置する。同じ列のランドは単純に接続しているので結線状況は簡単に分かるが、行側はダイオードを挟んでいるからスイッチ部分だけで導通を確認していくのは無理だろう。
とりあえず、各キー位置にあるスルーホールにピンセットを突っ込んでショートさせ、スイッチが押されたフリをすることでスイッチマトリックスの確認を行った。
あらかじめPCでメモ帳か何かを開いておき、この写真のようにすることで、ooooooooooooooooo と入力された。同じ操作をいろいろなスイッチ位置に対して行ってみたところ、試したスイッチは期待した動作(キー入力)をしてくれた。ファームウェアが書き込み済なので、こういうチェックは簡単である。
ただ、初期状態のファームウェアではコードを生成しないキーもあるし、Enterキー周りやSpaceキー周りなど、やたらと穴が開いていてややこしい部分もある。
キースイッチのマトリックス
調査の結果、このPCBのキースイッチマトリックスは、こんな具合になっているようである。
スイッチマトリックスは6行×17列構成で最大102キーまで。行と列の交点にスイッチがあるのでSW1~SW102となるが、スイッチ用のパターンがない交点もあるから抜けている番号もある。
そして、スイッチ番号とPCB上のスイッチ位置との関係はこの図のようになっているようだ。同じ番号のスイッチは、同じ列と行に接続されている。
Enterキー周り
xd87 PCBでは、ANSIスタイルの横長のEnterキーと、日本語キーボードにあるようなISOスタイルのEnterキーを選択できる。そのため、Enterキーの周辺にはスイッチ用やスタビライザ用の穴がたくさん開けてある。
ANSIスタイルの横長 (2.25u ) のEnterキーを使うときにはSW64の右隣のSW65にスイッチを配置することになり、SW64はふさがれてしまう。SW65(中央)のスイッチ用スルーホールは、ISOスタイルのキーキャップのためのスタビライザー穴でかなり削られている。ハンダ付けできないわけではないだろうし、だめなら他のSW65の接点に結線すればいいので問題はないだろう。
ISOスタイルのキーキャップを使うときには、スイッチは上右側のSW65に横向きに置くことになるのだろう。そのときはSW48がふさがれるがSW64は利用できるはず。
スペースキー周り
このPCBでは、3通りの大きさのスペースキー(7u, 6.25u, 6u)が選択できるし、3uサイズを2つ並べることもできる。7uを使うときには左右どちらかにオフセットすることもできる。そのためスペースキー周りにも穴がたくさん開いている。
3u × 2の場合は両端のSW91とSW94を使うことになるが、大きなスペースキー1個だけならば、中央3箇所あるSW94のいずれかを使うことになるのだろう。そのうちの中央のSW94だけ、スイッチの2本の端子と、列と行の接続が他と違っている(キースイッチは回路を閉じるだけのものなので、なんの影響もないが)。
きょうのまとめ
動作確認の結果、全体として何も問題がないことが分かった。
メカニカルキーボードが欲しいというより、どういう作りなのかが知りたいと思って購入したので、値段の分だけいろいろと調べてしまった。
キースイッチのマトリックスとスイッチ番号については、目視と導通確認だけで追っていくのが面倒になり、閉じられているスイッチの番号を出力するテストプログラムを作って利用した。
次回は、Arduino IDEで書いたテストプログラムをAtmel Flipで書き込んだ話などになる予定で、なかなか組み立てまで進まない。