ATmega32U4の全GPIOピンを引き出して使えるようにしたブレークアウトボードを製作しました。
ATmega32U4は、Arduino LeonardoやPro Microといった市販されている既存ボードで使われている事でもおなじみのUSB機能が使えるMCU(マイコンチップ)です。
Arduinoから電子工作を始めた私としては扱いやすく、これまで製作した自作基板でもよく使っています。
またATmega32U4(Pro Micro)は自作キーボードの製作で使われているのもよく目にします。
QMKといったキーボード用のファームウェアを書き込みPCと接続することによりキーの入力やマウス操作といったUSB機能が簡単に使えるのが特徴です。
最近自作キーボードの世界にも興味を持ち、自分で設計した自作キーパッドの製作でも使いました。
これまで自作基板の製作等で結構な頻度で使っているATmega32U4なんですが、その製作過程においてブレークアウトボード的なものがあるとテスト環境で便利に使えそうだなと考えていました。
そこでATmega32U4の全てのGPIOピンを引き出して使えるようにしたシンプルなボードを製作してみることにしました。
目次
ATmega32U4の全GPIO端子が使えるブレークアウトボードの製作!
ATmega32U4を使ったテストをする際にArduino LeonardoやPro Microといった既存ボードは便利に使えます。
しかしこれらボードを使って自作基板のテスト回路などを組む際に少し不便に感じることがあります。
ATmega32U4は合計25本(または26本)のGPIOピン(入出力端子)を使うことが出来るのですが、Arduino Leonardoでは20本、Pro Microでは18本しか引き出されていません。
ボードサイズの問題やArduinoとの互換性、またTX/RX LEDの点灯制御用にGPIOピンが割り振られたりしているためです。
大抵の用途では問題になることはあまりありませんが、既存ボードではATmega32U4の全てのGPIO端子が使えるわけではないので、例えば自作基板の製作で既存ボードでは引き出されていないGPIOピンを使いたい場合や自作キーボードの製作ではさらに多くのGPIOピンが必要となる場合などのテスト環境では面倒となる場面が出てきます。
これにより何度か不便な思いをしたので、ATmega32U4の全GPIOピンを引き出して使えるようにしたシンプルなブレークアウトボードを製作してみることにしました。
ATmega32U4のGPIO端子(入出力端子)について
こちらはATmega32U4チップのピンアウト図です。
5V駆動の44ピンのマイコンチップとなり電源周りの端子(VBus/VCC/GNDなど)やUSB端子と接続するデータライン(D+/D-)、また外部クリスタル(16MHz)を接続する端子などを省くと合計25本(または26本)のGPIO端子を使うことが出来ます。
既存のArduino LeonardoやPro Microでは先述の理由によりこれら全てのGPIOピンを使うことが出来ないため、今回ATmega32U4の全てのGPIO端子を引き出して使えるようにしたボードを製作することに・・・
ボードのCADイメージ
ブレークアウトボードなのでGPIO端子のラベルを見やすくし、かつブレッドボードやユニバーサル基板を使ったテスト回路を組む際に使いやすくなるように最終的に50mm×40mmのボードサイズにしました。
このサイズならI/Oラベルを見やすく取り、またテスト環境で想定できる以下必要な機能や端子を搭載してもコンパクトなボードとしてまとめることが出来ます。
- ATmega32U4で使える全てのGPIOピンを引き出す
- リセット端子の設置
- ICSP端子の設置
- I2C端子の設置
①ATmega32U4で使える全てのGPIOピンを引き出す
ボードサイズが大きくなりすぎるとテスト環境では使いにくくなってしまうので、上記必須となる機能を取り入れGPIOラベル(ポート番号)をある程度大きく取り見やすくなるような配置にしてボードサイズを決めました。
②リセット端子の設置
Pro Microではリセット端子は付けられていませんが(RST端子をGNDに落とすことにより可能)、テストボードとしてはあった方が便利なのでリセットスイッチを設置しました。
③ICSP端子の設置
ICSP端子はブートローダーの書き込みに使われる端子です。
ATmega32U4では、PB1(SCL)/PB2(MOSI)/PB3(MISO)/RESETピンがこれにあたります。
ATmega32U4チップは出荷時にDFUブートローダーが書き込まれているようなのでそのままUSB端子からスケッチやファーム等を書き込むことが出来るのであまり使用頻度は高くありませんが、ATmega32U4には数種のブートローダーがありテストボードとしては専用端子としてあった方が便利そうです。
ブートローダーの破損等によりUSB端子を接続してもPCに認識されなくなることは稀に起こります。
例えば自作キーボードで使用するファームウェアの書き込みでQMK Toolboxを使用することがありますが、書き込み途中で何らかのトラブルがあるとブートローダーが破損して再度書き込む必要が出てくる場合もあるので、当初スペース的な問題でカットしようかと思っていたICSP端子を設置しておくことにしました。(そのためRST端子はカットしています)
④I2C端子の設置
ATmega32U4のI2C端子は、PD0(SCL)/PD1(SDA)になります。
上記ICSP端子(SPI)同様にPD0/PD1はGPIO端子として引き出しているので使用する場合はそちらに接続してもいいのですが、OLEDディスプレイといったI2Cデバイスを接続しやすいように電源(5V/GND)とともに専用端子として設置しました。
自作キーボードのディスプレイのテストをしたい場合などでも便利に使えそうです!
以上、これら端子を設置してATmega32U4の全GPIO端子が使えるコンパクトなブレークアウトボードとして綺麗にまとまったと思います。
回路構成
上記を踏まえ全体の回路構成はこのようにしました。
細かい部分は省きますがザックリと見ておきます。
以下ATmega32U4のデータシートも参照して下さい!
ATmega32U4の電源供給
USB端子のVBUS(5V)からATmega32U4の駆動に必要な電源供給をVBUS/VCC/UVCC/AVCCから行います。
Ucap端子には1μFのコンデンサを入れておく必要があります!
(データシートより)
“Ucap capacitor should be 1µF (±10%) for correct operation”
またデータシートにはVBUSラインに10μFのコンデンサを入れることが推奨されているようです。
(データシートより)
“A 10µF capacitor is highly recommended on VBUS line”
上記回路では4.7μFと100nF(0.1μF)のバイパスコンデンサを入れています。
クリスタル
外部発振器を取り付けたATmega32U4の動作クロックは16MHzになります。
XTAL1/XTAL2ピンに16MHzのクリスタルと22pFのコンデンサを取り付けます。(コンデンサの値はデータシートを参照)
HWB(Hardware Bootloader Activation)機能を有効にする
リセット後にブートローダーが起動するようにするにはHWB機能を有効にする必要があります。
そのためにPE2(HWB)ピンはプルダウンさせています。
このPE2端子は汎用I/O端子として使うことも出来ますがHWB機能を有効にするため常にプルダウンさせているので、実質ATmega32U4で使えるGPIOピンの数は全部で25本ということになります。
USBデータライン
Type-C端子の仕様によりVBus端子から5Vを取り出すためにデバイス側のCC1/CC2端子は5.1kΩの抵抗でプルダウンしておきます。
またUSBのデータライン(D+/D-)にはデータシートに指示があるように直列に22Ωの抵抗を接続しておきます。
(データシートより)
“Serial resistors on USB Data lines must have 22Ωvalue (±5%)”
以上がATmega32U4の基本接続になります。
基板の発注
基板の製造はJLCPCBに発注しました。
このサイズの基板なら送料込み(OCS NEPを選択)で500円ほどで製造してもらうことができ、7~10日ほどで手元に届きます。
他社と比べ圧倒的にコスパが高いのがJLCPCBを利用する最大の利点です!
基板データ(ガーバーファイル)をダウンロードできるようにしておきます。
何かの参考になればと思います。
ATmega32U4 Breakout Board(Gerber)
基板発注時の項目の選択は特記すべきところは特になく、以下のように発注しました。
今回私は表面仕上げに金メッキ加工(ENIG)を選択しましたが、これは追加料金がかかるオプションなので通常の[HASL]を選択すれば格安で製造できます。
またJLCPCBでは基板の任意の位置に基板製造番号が入ってしまうのを削除するこれまで有料だったオプションが無料で出来るようになったので、[PCB上のマーク]は[マーク削除]を選択するのがいいと思います。
以上の選択で配送方法にOCS NEPを選択すれば、送料込みで500円ほどで発注することが出来ます。
今回ステンシルも一緒に発注しました。(プラス7ドルのオプション料金がかかります)
実装方法にもよりますが、リフローでパーツ実装を行う際にはステンシルがあると便利です。
JLCPCBでの基板発注方法はこちらの記事で詳しくまとめているのであわせて見て頂ければと思います。
パーツの実装
今回他の基板や3Dプリントパーツを同梱で発注したので発注から到着まで10日程かかりました。
基板単体での発注ではOCSでも1週間前後で届くと思います。
パーツの実装はミニリフロー装置MHP50を使いました。
PD電源による駆動ができコンパクトで非常に便利なミニリフロー装置です。
MHP50に関してはMHP30の記事に後ほど追記しておきます。
リフローによる実装は一発OKでした。
ピンヘッダー&ピンソケットを取り付けて完成です!
手はんだよりも早くて効率が良く、綺麗にパーツを実装する事が出来るのがリフローによる実装のポイントです!
動作確認
ATmega32U4チップは出荷時にDFUブートローダーが書き込まれているので、実装後はそのままPCとUSBケーブルで接続するだけで使えます。
現在製作している40%サイズの自作キーボードのファームウェア作成用テスト回路に接続して使ってみました。
作成したQMKファームウェアを書き込み問題なく動作させることが出来ました。
テスト環境でこのようなATmega32U4ブレークアウトボードがあると便利に使えますね!
使用パーツ一覧
今回使用したパーツの一覧です。
パーツ | 定数 | 入手先 |
抵抗 (0603) | R1/R6 10kΩ R2/R3 5.1kΩ R4/R5 22Ω R7 1kΩ | AliExpress |
コンデンサ (0603) | C1/C2 22pF C3/C5 0.1μF C4 4.7μF C6/C7 15pF C8 1μF | AliExpress |
ダイオード | D1 1N5819WS(SOD-323) | AliExpress |
端子 | J1 Type-C端子 J2-J8 ピンヘッダー or ピンソケット | AliExpress / 秋月電子 |
LED (0603) | LED1 | AliExpress |
リセットスイッチ | SW1 3×4×2.5mm(SMD) | AliExpress |
マイコンチップ | U1 ATmega32U4(QFP) | AliExpress / 秋月電子 |
クリスタル | Y1 16MHzクリスタル (SMD-3225) | AliExpress |
自作RP2040ブレークアウトボードの製作
今回製作したATmega32U4ブレークアウトボードは自作キーボードの製作過程でも使えるように考えて作ったのですが、自作キーボードではRaspberry Pi PicoやRP2040-Zeroといったボードが使われることも多いと思います。
これらボードはマイコンチップにRP2040が使われています。
今回製作したATmega32U4ブレークアウトボードと同様なコンセプトでRP2040ブレークアウトボードも以前製作しています。
興味ある方は、こちらもあわせて見て頂ければと思います。
また自作キーボード製作で使うことを想定するとこのようなキーマトリクスのテストが出来るボードと組み合わせるとさらに便利に使えると思います。
製作が完了したらこちらも後日記事を追記しておきます。
最後に!
これまで ATmega32U4を使ったテスト等で既存ボードでは使えないGPIOピンがありPCB化する時に使用するピンを変えたりと不便に利感じることがこれまで何度かありました。
簡単なものなので何度か作ろうとは考えていたのですが・・・自作キーボードの製作も始めるようになり、これはやはり自作しておくと便利そうだということで今回製作するに至りました。
このような特定のマイコンチップ用のブレークアウトボードはこれまで結構な数作っていますが、既存ボードに入っている余計な回路や接続といったものがないためテスト環境では便利に使えるのでオススメです!
素晴らしい記事をありがとうございます。大変勉強になりました。
私もこの基板を作成してみたいと思っております。
そこで1点相談なのですが、JLCPCBのPCBAを使って発注してみたいと思っており、
BOMとCPLファイルをKiCadなどで作成する必要があります。
もし可能でしたら、KiCadのデータを共有いただくことは可能でしょうか。
ご検討の程よろしくお願いいたします。