11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【自作基板 / 自作キーボード】Pro Micro互換のRP2040ボード(Micro Pico)の製作。Pro Microを使った既存キーボードに入れ替えてRP2040化してみる!

こちらの記事の追記となります。
あわせて見て頂ければと思います。

【自作キーボード / 電子工作】自作キーボードで使われているPro Microに置き換えて使えるRP2040ボードの製作を考えています!

自作キーボードでよく使われているマイコンボードと言えば、Pro Microがまず挙げられると思います。
Pro MicroはUSB機能が付いたマイコンチップ(ATmega32U4)が使われたボードとなりArduino Leonardoの小型ボードとしての位置付けとなるもので、Arduinoや電子工作をやられている方ならご存じの方も多いと思います。

USB機能が付いた小型ボードなので自作キーボードでもよく使われているようですが、フラッシュ容量が32kB(内ブートローダーが2kBほど占有)と少ないため、例えばQMK/Vialといったキーマップ情報をマイコンボード内に格納するファームウェアを使う場合でフラッシュ容量がオーバーしてしまい、機能をカットするなどしないとコンパイルが通らないといったことが起こりがちです。

先日お気に入りのDisorder30というキーボードのOLED表示をカスタムしたVial対応ファームウェアを作成していたのですが、ディスプレイ表示部分のデータが増えたためフラッシュ容量がオーバーしてしまい・・・タップ機能をカットするなどしてなんとかコンパイルを通し対応させることが出来ました。

【自作キーボード】オープンソースで公開されている自作キーボード『Disorder30』を作ってみました!

Pro Microは少し古い世代のマイコンボードとなり、最近ではRaspberry Pi PicoやRP2040 ZeroといったマイコンチップにRP2040を使った小型ボードが安価で販売されるようになりました。
RP2040系のマイコンボードでは大きな容量のフラッシュが搭載されていてPro Microよりも安価なため、最近の自作キーボードで使われているのをよく見かけます。

そこで、Pro Microを使った既存のキーボードでマイコンボードを差し替えるだけでRP2040化することが出来るPro Micro互換ボードがあると便利そう・・・
ということで、Pro Microのボードサイズに合わせピンアウト等に互換性を持たせたRP2040ボードを製作してみることにしました!

Pro Micro互換のRP2040ボード(Micro Pico)の製作!

Pro Micro互換のRP2040ボードは、調べてみるといくつか販売されているようですね。

私がイメージしているものと一番近いものでは、SparkFunの『Pro Micro RP2040』があります。
Pro Microは元々SparkFun製のボードが本家・オリジナルのものとなり、SparkFunさんがPro Micro互換のRP2040ボードを販売されていることは承知していました。(画像引用)

しかしPro Microを使った既存の自作キーボードに差し替えて使うことを想定すると、ボードサイズを少し変更しないと使用しているケースによってはUSB端子が挿せない場合も出てきそう?・・・ということで自作してみることにしました。

Pro Micro互換のRP2040ボード『Micro Pico』コンセプト

今回製作したPro Micro互換のRP2040ボードは『Micro Pico』と名付けました。
名前なんてどうでもいいのですが、ボードコンセプトについてまず書いておきます。

ボードサイズの選定

Pro Microは先述の通りSparkFun製のボードが本家・オリジナルのものとなります。

この本家ボードのUSB端子は今ではもう古いMicroUSBとなっていることから、Type-C端子に変更された多くのPro Micro互換ボードが販売されています。

互換ボードなのでオリジナルボードとは基板寸法が若干異なり、そして製造するメーカーによってもそのサイズは様々です。
一般的に入手しやすいType-C端子になったPro Micro互換ボードの多くは、オリジナルのものより長手方向にボードサイズが数mmほど大きくなったものが多いようです。

今回製作したボードでは、そのボードサイズの選定が一番迷いました!
Pro Microが使われた既存のキーボードに差し替えるだけで使えるというコンセプトなので、ボードサイズ(USB端子の位置)が大きく変わってくると使っているケースによってはUSBケーブルが挿せないといったことも起こりそうです。

手元に電子工作用途で使っていたType-C端子になった互換Pro Microが10個ほどあったのでボードサイズを計測してみると、ほぼ36mm×18mmで作られたものが多いようでした。(製品によってはあえて小型に作られたものもあります)

実際にはType-C端子の先端は基板エッジよりも数mmほど突き出す形で実装されているものが多くなります。

そのため、ピンヘッダーとUSB端子先端との位置関係から今回製作したボードでは37.5mm×18mmのボードサイズで製作することにしました。

一般的なサイズの互換Pro Microボード(写真上)とUSB端子の位置関係が合う計算です。(写真下は本ボード)

逆挿しでもピンヘッダーが使えるようにする

自作キーボードではメイン基板の設計によりPro Microを逆挿しで実装することも多くなります。
逆挿しでマウントする場合に面倒となるのがピンヘッダーの取り付けです。

Type-C端子はPCB面から約3.2mmの高さがあるため逆挿しで基板に固定する場合、よく使われる一般的なピンヘッダーではハウジング部分の高さが2.5mmなので少し浮いた状態になってしまいます。

通常のピンヘッダーでも使えるようにミッドマウントタイプ(PCB埋め込み式)のType-C端子を使うことにしました。

この埋め込み式のType-C端子を使うと基板底面から0.8mmまたは1.6mm端子位置を下げる事が出来るので、逆挿しでマウントする場合も通常のピンヘッダーを使い固定が出来ます。

Pro Microを使ったキーボードのUSB端子部分のケース穴は互換ボード使うことを想定して寸法は比較的ルーズに作られていることが多いので、この端子位置が若干下がることによりケーブルが挿せないといったことはないかなと思います。

コンスルーでも使えるように

Pro MicroのI/Oピンのホールサイズは1mmで作られています。
ピンヘッダーをはんだ付けするには十分なホールサイズなのですが、取り外しが出来るようにコンスルーを使う場合は少し大きすぎます。

I/Oピンのホールサイズを0.85mmにしてコンスルーを使う場合にはんだ付けすることなく取り付けが出来るようにしました。

ボードを逆挿しで使う場合にミッドマウントタイプのType-C端子を使うことにより基板底面より端子位置を下げているので、通常のピンヘッダーや2.5mm高のコンスルーを使うことも出来ます。

逆挿しで使用する場合にファームウェアの書き込みもしやすいように基板背面に[BOOTSEL]パッドを付けているので、ピンセット等を使い短絡させればファームウェアの書き込みも行えます。

後に教えて頂いたのですが、QMKではリセットスイッチのダブルタップでファームウェア書き込みモードに移行することも出来るようですね。

キーボードのメイン基板にはリセットスイッチが大抵付けられているので、本基板を装着後、メイン基板側のリセットスイッチを使い書き込みモードにも出来ます!

VCC端子の電圧レベルの調整

Pro Micro互換のRP2040ボードを自作キーボードで使う場合、マイコンの駆動電圧が問題になってくることがあるかと思います。

Pro Microは5Vロジックのボードですが、RP2040では3.3Vとなっています。
キーマトリクス部分などその多くは問題になることはありませんが、RGB LEDを点灯させるためのGPIOピンのロジックレベルや駆動電圧はどうするか?

SK6812やWS2812BといったRGB LED、いわゆるNeoPixelを点灯させるための駆動電圧はデータシート上3.7V~5.3Vとなっています。
そのためRP2040を使った自作キーボードでLEDを点灯させる場合は5V(VBUSレベル)でLEDを駆動させ、データラインの信号は3.3V→5.0Vにレベルシフトして点灯させるのが一般的だと思います。

しかしPro Microを使った既存のキーボードに差し替えて使うわけなので追加で回路を入れることが出来ません。

NeoPixelの点灯にはデータシート上3.7V以上の駆動電圧が必要となりますが、小規模な場合(接続するLEDの数が少ない場合)3.3Vで駆動させても実際には動いてはくれるのですが・・・互換ボードとして作るなら対応させておきたいところです。

【自作キーボード / 電子工作】RP2040など3.3VマイコンでNeoPixel RGB LED(WS2812B / SK6812)を点灯させるには!

Pro Microを使ったキーボードではVCC端子からLEDの点灯に必要な電源供給(5V)を行うので、この端子電圧を調整することにしました。(LED以外もです)

電源電圧(VCC)に対してデータ信号のHighのしきい値は[0.7 × VCC]となります。
RP2040のGPIOピンは3.3V出力なので、HIGH信号が正しく認識されるためには「3.3V ≥ 0.7 × VCC」を満たすVCC電圧で、かつNeoPixelの駆動電圧の範囲に入っていればそのまま上手く駆動させることが出来そうです。

そこで本ボードではVCCの電圧レベルを4.4Vにしました。
これでRP2040の3.3Vロジックの信号でLEDを制御すれば問題ないということになり、LEDの接続数が多い場合でもチラツキや動作が不安定になるといった不具合も起きないと思います。

あとVCC端子から電源供給が必要となるよく使われるデバイスはOLEDディスプレイでしょうか。
SSD1306といったディスプレイは3.3V~5Vの駆動電圧に対応し(LDOが内蔵されている)、信号レベルは3.3Vなので問題ないと思います。

以上が本ボード『Micro Pico』くんのコンセプトとなります。
キーボードのハードウェア構成は様々なので全てを検証したわけではありませんが、Pro Microを使った既存のキーボードの多くで最小限のファームウェア修正のみでRP2040化出来ると思います。

ピンアウト

上記コンセプトのもと、Pro Microと互換性を持たせるためにボードのピンアウトはこのようにしました。
使用するマイコンチップが変わるためファームウェアの修正が必要となってきますが、GPIOピンの記述や使用するMCU名の変更といった最低限の修正で動かすことが出来ると思います。

Pro Microと互換性を持たせた配置になっていますが、電源に関係する2つのピンがPro Microとは少し異なります。

VCC端子電圧は4.4Vに変更

1つ目は[VCC]端子です。

先述のようにPro MicroのVCC端子は5Vが出力されますが、本ボードでは4.4Vとしています。

RAW端子は5V出力端子に変更

2つ目は[RAW]端子です。

このROW端子はPro Microではボードに搭載されたLDO前段に入り外部電源で駆動するための端子となります。
Pro Microが使われたキーボードでは基本的にPCと接続されたUSBケーブルから電源供給を行うのでこのROW端子を使うことはないと思いますが、本ボードでは5V出力端子としています。

未使用ピンとしてもよかったのですが、背面のパッドを短絡させることにより5V出力端子として使うことが出来るようにしています。(使わないと思いますが!)

あとジョイスティックといったアナログ入力(ADC)で使える端子は、Pro MicroではD4/D7/B4/B5/B6/F4/F5/F6/F7がハードウェア的に使えます。
対してRP2040ではGP26・GP27・GP28・GP29がADCで使える端子となっているため、Pro Microを使ったキーボードでもしF4/F5/F6/F7以外の端子を使いADC用途で使っている場合は対応出来ないことになるかと思います。

実際にPro Microを使ったキーボードをRP2040化してみる!

Pro Microが使われたキーボードに本ボードを差し替えて実際にRP2040化してみました。
Pro Microを使った場合だとタップ機能を無効にするなどしてなんとかQMK/Vialファームウェアのコンパイルが出来たDisorder30を使いテストしてみました。

Disorder30のメイン基板の構成は、キーマトリクス、ロータリーエンコーダー、そしてI2C制御のSSD1306 OLEDディスプレイという構成になります。

【自作キーボード】オープンソースで公開されている自作キーボード『Disorder30』を作ってみました!

基本的に使用するプロセッサーやブートローダー、GPIOピンの指定を変更するだけで対応出来ました!

プロセッサー / ブートローダーの変更

Pro Microではプロセッサーに[ATmega32U4]、ブートローダーに[caterina]が使われますがRP2040では変わってきます。

QMKのinfo.jsonファイル内の[processor]を[RP2040]、[bootloader]を[rp2040]に変更します。

GPIOピンの指定を変更

Pro MicroとGPIOピンのピン定義が変わってくるので変更します。
もう一度、本ボードのピンアウトを載せておきます。

それぞれ対応したピン定義(GP◯◯)に変更します。
Pro Microが使われたファームウェアで、例えばD3と定義されているならGP0といった具合に修正します。
Disorder30ではキーマトリクス部分やロータリーエンコーダーで使用するピンが定義されているので、対応するピン定義名に変更します。

OLEDディスプレイ

OLEDディスプレイを制御するI2C部分の記述は特に変更する必要はありませんでした。

Pro Microで使われるI2C端子(SDA-D1ピン/SCL-D0ピン)は、RP2040のデフォルト設定(I2C_DRIVER = vendor)ではハードウェアI2CとなるGP2/GP3が使われるので特にファームウェアを変更(追記)する必要なく動いてくれました。

以上、最小限のファームウェアの修正のみでRP2040化に対応することが出来ました。
プロセッサーやブートローダー、GPIOピンのピン定義部分を修正すれば基本的には対応出来ると思いますが・・・キーボードの構成は様々なので全ては検証出来ていません!

MEMO
Pro Micro(ATmega32U4)はAVRマイコンとなるのでAVRマイコン用のヘッダファイルや関数など、例えば #include <util/delay.h>といったAVR特有のものが使われている場合はその部分を修正する必要があります!

基板設計

ここからは基板設計から発注、パーツ実装の話など本ボード製作の話を書いていきます。

全体の回路構成はこのようになりました。

先述のようにType-C端子を使った互換Pro Microのサイズに合わせボードサイズは37.5mm×18mmとしています。

このサイズの基板に上記回路図にあるパーツを収めるのはなかなか厳しく、0402サイズのパーツをメインにしました。
そのため手はんだでの実装は難しく、リフローやヒートガンを使い実装することを想定しています。

そして今回初めてミッドマウントタイプ(PCB埋め込みタイプ)のType-C端子を使ったのですが、メーカーが推奨しているフットプリントを使うとドリル加工の精度が問題になるようです。
この部分のドリル(エンドミル)加工ですね!

JLCPCBの場合だと通常の加工だと基板外形公差は±0.2mmとなっていますが、オプションで±0.1mm公差を選択して以下のような形状で作り指示を出せば製造出来たというアドバイスを頂きました。

切削やドリル加工に関して私は全く知識がないのですが、メーカー推奨のフットプリント形状だと通常加工が難しくなる部分のようですね!

何パターンかこの部分のフットプリントを作りレビューに出したのですが、レビュー自体が完了せず・・・(システムエラーとなりキャンセルして何度か試しました)
サポートにも問い合わせましたが原因が分からず・・・

PCBWayに基板を発注

今回、PCBWayで発注することにしました。
PCBWayではレビューは問題なく即完了し通常発注することが出来ました。

届いた基板を確認するとドリル加工も問題なく仕上がっていました。
メーカー推奨のフットプリントを使用してPCBWayでは標準料金で製造することが出来ます。

今回製作したPro Micro互換のRP2040ボードの基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
何かの参考になればと思います。

PCBWayでの発注方法も少し見ておきます
ガーバーファイルをPCBWayのサイトにアップロードし項目を選択していくのですが、本基板に関しては加工オプションなど特に選択する必要なくデフォルトで選択されている項目を選んでおけば製造することが出来ました。

レジスト(基板カラー)やシルクはお好みの色を選択して下さいね!

あと有料オプション(1.5ドル)となりますが、[Remove product No]は[Yes(extra+$1.5)]を選択しておくのがいいと思います。
基板製造番号が入ってしまのを削除するオプションです。
小さな基板なので製造番号が任意の位置に入ってしまいI/Oラベル等見にくくなるのを防げます。

また本基板では0402サイズのパーツやRP2040、小さなフラッシュチップ(USON8)を使っているので手はんだでの実装は難しくなります。

リフローやヒートガンを使いパーツを実装することを前提にメタルマスク(ステンシル)も発注しました。
選択項目はこちらも特記すべきところはありませんが・・・

今回私の発注ミスでフレームワークタイプのステンシルを発注してしまいました。(枠ありメタルマスク)
なんとか実装出来ましたが、通常タイプのステンシルを発注しておきましょうね!

基板製造料金が5ドル、製造番号削除オプション1.5ドル、ステンシル料金が10ドル、そして配送方法にOCSを選択し、トータルコストは26ドルほどとなりました。

MEMO
本記事でご紹介しているPCBは表面処理に[無電解金フラッシュ(ENIG)]を選択したものとなります。(オプション料金がかかります)

PCBWayでの基板発注方法に関してはこちらの記事で詳しくまとめています。
あわせて見て頂ければと思います。

【PCBWay】初めてPCBWayで基板を発注してみました。ユーザー登録から基板発注までの手順をご紹介!

基板の到着

配送方法にOCSを選択し、発注から8日で手元に基板が届きました。
あれ?小さな基板の発注なのに、結構大きな梱包で届いたな・・・???
この時点でステンシルの発注を間違っていたことに気付きました!

フレームが付いたタイプのステンシルを見れたのはいい経験になりましたが・・・
機械実装や量産するわけではないので、通常のステンシルを発注しておいた方がいいですね!

そして今回一番心配だった埋め込みタイプのType-C端子エッジ部分ですが、綺麗に加工されていました。

この部分のフットプリントは何パターンか作ったのですが・・・
今回メーカー推奨の標準的なフットプリントを使い発注したのですが、特に問題なく、そして通常料金で製造出来るようなのでPCBWayさんの加工精度は高いようですね!

パーツの実装

それではパーツの実装です。
ステンシルはフレームを取り外しカットして使おうかとも考えましたが・・・

小さな基板に対してこのサイズなので位置合わせが面倒でしたが・・・何度かやり直し若干パッド位置からズレているものの綺麗にはんだペーストを塗布出来たと思います。

このサイズの基板にこれだけのパーツを入れると、リフロー後修正箇所が発生するとコテを入れるスペースが厳しいため修正作業が面倒になりそうな基板です!

パーツの実装はMHP50というミニリフロー装置を使いました。
自作基板の製作でいつも愛用している非常に便利なリフロー装置です。

【電子工作 / PCB】ミニリフロー装置『Miniware MHP50』を使ってみる!加熱性能や安全設計はMHP30から全て引き継がれ使い勝手がさらに向上した便利なリフロー装置です

今回0402サイズのパーツがメインとなり、RP2040やフラッシュチップはUSON8サイズのものを使っているためPCBA案件かな?とも思ったのですが、手実装でも問題なく出来ました。

MHP50ではリフロープロファイルを使い予備加熱や保持時間などを設定してリフロー出来るのですが、今回使った0402といった小さなパーツでも立ち上がってしまう(マンハッタン現象)も起きにくいようで、実装は比較的楽に出来ました。

キーボードに組み込み動作確認

Pro Microを使ったキーボード(Disorder30)からPro Microを取り外し本ボードに載せ替えてテストしてみました。
ファームウェアは先述の通り、RP2040用に微修正する必要があります。

キースイッチの動作やロータリーエンコーダーなど基本動作は問題ないようですが、OLEDが表示されない!
VCCラインの電圧レベルを調整したのでその影響か?
いや、基板設計前にそのあたりの動作テストもしているので動くはず・・・。

一旦バラしてオシロスコープで確認すると、どうやらI2Cで使われるピンの一つGPIO3の信号が来ていないようです。
RP2040から単に引き出しているだけのピンなので、はんだ不良が原因です。

今回間違ってフレームタイプの大きなステンシルが届いてしまったので、はんだ塗布が若干ズレていたのが気になっていましたが・・・
一応、RP2040チップ全てのピンを手はんだで修正していきました。

はい、OLEDも問題なく表示されました。
Pro Microを使ったキーボードをファームウェアの微修正のみでRP2040化出来ました。
やったね!

キーボードのハードウェア構成は様々なので全ての場合で対応出来るかは分かりませんが・・・
おそらく大抵の場合可能で、またメイン基板のハードウェア構成が分かれば対応出来るか否かも簡単に判別出来ると思います。

使用パーツ一覧

今回使用したパーツの一覧です。

パーツ定数入手先
コンデンサ
(0402)
C1/C2 1μF
C3/C4 15pF
C5~C15 100nF
AliExpress
ダイオードD1 M1(1N4001)SMDAliExpress
フューズ
(0603)
F1 500mAAliExpress
USB端子J2 Type-C端子(ミッドマウントタイプ)
16P 0.8mm or 16P 1.6mm
AliExpress
LED
(0402)
LED1 PWRランプ
※不要ならカット可
AliExpress / 秋月電子
抵抗
(0402)
R1/R2 5.1kΩ
R3/R4/R7 1kΩ
R5/R6 10kΩ
R8/R9 27Ω
AliExpress
タクトスイッチSW1/SW2 3mm×4mm×2mm 2P
※不要ならカット可
AliExpress
LDOU1 ME6211C33(SOT-23-5)AliExpress
フラッシュU2 W25Q16JVUXIQ(USON8)AliExpress / 秋月電子
MCUU3 RP2040AliExpress / 秋月電子
クリスタル(3225)Y1 12MHzAliExpress / 秋月電子

最後に!

Pro Microを使った自作キーボードを簡単にRP2040化出来れば便利なのに・・・
そこから自作互換ボードとして製作してみたのですが、これは便利ですね!

Pro Microを使ったキーボードは今後作ることはあまりないとは思うのですが・・・

オープンソースで公開されているもので作ってみたいなと思うものでもPro Microが使われていることから製作に躊躇しているものがいくつかあるのですが、RP2040として組めるなら製作後にファームウェアのカスタムなどもしやすいので、作ってみるのもいいかなとも考えています。

手元にあるPro Microを使ったキーボードではLily58 Proがありますが、このキーボードもOLED表示をカスタムしようとするとフラッシュ容量が・・・となっていたので、いずれRP2040化してみようと考えています。

コメントを残す