見出し画像

初めてのRP2040-zero設計とレベルシフト



はじめに

今回の新たな目標として
RP2040-zeroを使ってキーボードを設計する
というものを掲げました。容量が多いためvial化もしやすいという魅力もあり、ここ最近はRP2040-zeroやSEEED XIAOを使った設計が増えてきている印象です。
マイコンのお値段も安いしモゲない。ここ最近で2つ一気にモゲたり文鎮化したりしていたため、脱ProMicroを試みたいと思いました。

さらに今回の設計では
・マイコン本体をスイッチの裏面に配置する
・LEDテープをアニメーション付きで光らせる

という目標も設定しました。

・背面にRP2040-zeroを設置する

今まで組み立てたキットでは、マイコンのスペースが設けられており、そこにはスイッチを配置していないというものが多く見受けられました。
ただし自設計のものは配置場所に余裕がない場合が多く、またキーがみっちり詰まっているものが好きなため、キーの裏面に配置する術を身に着けたいと思いました。

そこでRP2040-zeroで使用するピンを左右に限定し、フットプリントの下部を消してキー裏に配置することにしました。左右もソケット式であれば一部のピンが使えなくなるのですが、今回はスイッチ直付けなので左右のピンがフルで使えます。

実際のkicad図です。下部のピンのフットプリントを削除しています。

使うピンを制限し、フットプリントを削除するというテクニックはTwitterで教えていただきました。ありがとうございます。


・LEDテープを光らせる

今回の山場です。LEDを光らせるには5V電源と5V信号とが必要になります。電源は5Vのピンに繋げばいいのですが、RP2040-zeroでは3.3Vの信号しか出ません。
3.3V直結であっても動く事例は多数あるのですが、スペック外での使用になります。そのため光らなかったり動作が不安定になる可能性も十分にあり、実際に不安定な動作になった経験もあります。

WS2812Bの最新版(V5)では3.3V信号に対応しているのですが、LEDテープだと使われているLEDが最新版(V5)なのかわからず、結局博打要素が出てきてしまいます。

始めは直結でお祈りしてもいいかと思いましたが、確実に光らせる技術を身に付けておきたいということと、博打に出るよりは堅実な方法をとった方が結果的にコストが下がる(金銭的にも労力的にも)のではないかと思い、レベルシフトに挑戦してみることにしました。

レベルシフトについては上記の記事が非常にわかりやすかったです。

簡単に言うと、3.3V信号を5V信号に変換するということです。右端の部分がレベルシフトの回路図になります。Rは抵抗、BSS138はトランジスタです。
設計したマクロパッドでは最終的にこのような回路図になりました。

右端の部分がレベルシフトの回路図

GP0から出た3.3Vの信号がレベルシフトされ、5Vの信号となってLEDへと繋がっています。これでLEDが安定して動くようになります。

実際の基板はこちらです。

写真だとR2の抵抗が560kΩになっておりますが、1kのものに交換したら無事に光りました。
部品を買うときの単位大切…

参考までに、使用した部品は下記のとおりです。
カーボン抵抗(炭素皮膜抵抗) 1/4W1kΩ
MOSFET 50V300mA BSS138
※どちらも秋月さんに飛びます

レベルシフトについてはSMKiJの皆様から丁寧に教えて頂き、今回の基板を完成させることが出来ました。本当に感謝の気持ちでいっぱいです。
また、こちらの記事も参考にさせて頂きました。



・ファームウェア作成

qmkを使う分には、ProMicroで作成する場合と基本の流れは変わりません。
Remap用のinfo.jsonも同じ要領で作成できました。

下記2冊を参考にしました。


・完成

完成したものがこちらです。ゲーム用の小さなマクロパッドです。grain9と名付けました。

綺麗なアンダーグロウです

今回の経験を活かして次の設計にも役立てていけたらなと思っています。

次の目標は
・レベルシフトして36キーのキーボードを作る
・ファームウェアをvialに対応させる
この辺りかなぁとぼんやり考えています。

最後までお読みくださり有難うございました。