この記事はキーボード #1 Advent Calendar 2020の6日目の記事です。
キーボード #2 Advent Calendar 2020もあります。
5日目の記事はe3w2qさんの PCBでの多色表現の解説と2UキーマクロパッドMX2U!を作った話 でした。
Contents
この記事では
Casasagiの開発から得た知見として、ARMマイコン STM32F072C8T6を使用したスプリットキーボードの回路や動作とQMK Firmwareの実装についてATMEGA32u4(pro micro)との差を中心に解説します。
開発中のキーボードのため、間違えた情報が混ざっているかもしれませんし、QMK Firmwareの実装も変わっているかもしれません。ご注意下さい。
最初にまとめ
- 基本的にはATMEGA32u4(Pro Micro)の回路と同じ
- USBの5V電源から3.3Vにする必要がある
- USBの信号線に抵抗は要らない
- シリアルLED(WS2812b互換のSK6812MINI)を使うなら
- QMK Firmwareのドキュメント WS2812 Driver を読む
- プルアップ抵抗で5Vに吊る
- スプリットの通信は
- QMK Firmwareのドキュメント ‘serial’ Driverを読んで、’serial’ Driverを使う
- プルアップ抵抗で5Vに吊る
- EEPROMはMCU内のFlash領域を使ったエミュレーションが使える
- QMK Firmwareのドキュメント EEPROM Driverを読む
- お好みで外付けEEPROMをi2cで繋いでおく
Casasagiについて
SMKiJ Discord内にて共同で設計中のオーソリニアスプリットキーボードです。
MCUにSTM32F072を採用してarmを使った分割キーボードのリファレンス設計を目指して開発しています。
- 片手7列4行オーソリニア配列
- MCUはSTM32F072C8T6
- 外付けEEPROM搭載
- キーごとのバックライトLEDにSK6812MINI-E
- トレイケースにもサンドイッチケースにも優しい設計
オープンソースハードウェアとして公開中です。
設計情報のリポジトリ https://github.com/Self-Made-Keyboards-in-Japan/Casasagi
現在、テスト基板による各機能の動作確認が終わり、最終試作としてアルファ版の基板を発注する段階です。
この記事内ではpcb/casasagi_left/
内の回路図や基板データを使って解説します。
回路図全体のPDF https://github.com/Self-Made-Keyboards-in-Japan/Casasagi/blob/master/pcb/casasagi_left/casasagi_left.pdf
動作電圧
ATMEGA32u4は動作電圧が5V
ですが、STM32F072では3.3V
が必要なため、USB電源の5V
から3.3V
へ降圧するための回路を載せないといけません。
Casasagiではリニアボルテージレギュレータ(ロードロップレギュレータ/LDOとも呼ばれます)を用いた回路を構成しています。
左右間で送る電源やRGBLEDのために5Vも準備してあります。
USB周り
STM32F072では、USB信号(D+/D-)上に直列に入っている終端抵抗(pro microだと22Ωあたり)が内蔵されているので省いています。
バックライトLED
CasasagiではすべてのキーごとにバックライトLEDとしてSK6812MINI-Eを実装出来るようにしています。
シリアルLEDの電源と信号レベル
WS2812bやSK6812MINI(-E)などのシリアルRGB LEDは電源に5V、データに5Vレベルの信号を接続して制御します。
前述したようにSTM32F072では3.3V動作となるため、3.3V信号を出力することが基本となり、3.3V→5Vの変換回路が必要です。
ところが、STM32F072では対応したピンのプッシュプル出力とオープンドレイン出力を切り替えることが可能です。
Casasagiではオープンドレイン出力を使用して5Vの信号を出力できるようにプルアップ抵抗(R108)を介して5Vに接続しています。
(参考) プッシュプル出力とオープンドレイン出力について
以下のサイトが大変簡潔でわかりやすく書かれています
https://www.aimo.co.jp/work-blog/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E5%87%BA%E5%8A%9B%E3%81%A8%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E5%85%A5%E5%8A%9B/
シリアルLEDの制御(QMK Firmware)
STM32上で動くQMK Firmwareでは、MCU上のハードウェア機能を応用してシリアルLEDにデータを送信するためのライブラリが実装されています。
詳しくはQMK Firmwareのドキュメント WS2812 Driverを参照してください。
CasasagiではSPIを使った送信方法を採用しています。(PWMだとうまく動かないみたいでした)
スプリットの通信
STM32を採用すると、MCU上のUARTモジュールを使った半二重通信を用いて左右間の通信が出来ます。
こちらもQMK Firmwareのドキュメント ‘serial’ Driverに詳しい解説があります。
シリアルLEDと同じく、ピンをオープンドレイン出力に指定してプルアップ抵抗経由で5Vに繋ぎ、左右間の通信は5Vで行います 。(電源も5V)
STM32ではデータシートに記載があれば3.3Vだけでなく5Vを入力できる5Vトレラントとしてピンを使用することが出来ます。
EEPROM
STM32F072には内蔵のEEPROMがありません。そのため、QMK Firmwareで実装されているMCUのFlashを使ったエミュレーションを利用するか、外付けのEEPROMを用意する必要があります。
こちらも詳しくは、QMK Firmwareのドキュメント EEPROM Driverを参照して下さい。
Casasagiではi2c接続のシリアルEEPROMを用意しています。外部に容量の大きいEEPROMを用意すると、たくさんのレイヤーを用意したり、マクロで長い文字列を取り扱えるため、使いみちが広がります。(EEPROMは数十円で手に入るので安い)
i2c接続のためプルアップ抵抗を用意するのを忘れずに。
終わりに
Casasagiはまだ開発中ですが、良きタイミングでグループバイを考えています。
ご興味のある方は是非、Self-Made Keyboards in Japan Discordに参加してチャンネルを覗いてみて下さい。
また、副産物として、kicad用のライブラリを整備しています。
https://github.com/Self-Made-Keyboards-in-Japan/SMKiJ_keyboard
こちらへのコミットもお待ちしています!