この記事はキーボード #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の実装も変わっているかもしれません。ご注意下さい。


最初にまとめ


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
こちらへのコミットもお待ちしています!


この記事は箱付きLainhsgwが書きました。
明日はfoostanさんの記事です。お楽しみに!