⌨️

純正Pro Microと互換機の電源の罠

2021/01/23に公開3

TL;DR

  • SparkFunの純正Pro Microを分割自作キーボードに利用する際には注意が必要
    分割自作キーボードの子機側のコントローラーとして使うのには適さない。親機側としては問題なく使えるどころか推奨できる。
  • Pro Micro互換機は電圧VCCに5V未満しか出力されないケースが見られる
    手持ちの互換機はすべて該当した。
    • バスパワーのUSBハブおよび子機側に純正Pro Microを利用すると電力不足により子機側が正常に機能しない場合がある
    • セルフパワーのUSBハブで利用した場合は4.0~4.6V程度で動作している[1]

Pro Microってなに?

Pro Microとは自作キーボード勢にはお馴染みのマイクロコントローラーモジュールで、キーボードのスイッチの電気的な信号をUSBキーボードとしての信号へと変換するのに一般的に使われています。

もともとPro MicroはArduino Leonardoの小さな互換機としてSparkFunが開発・発売したのですが、その際に回路図などのハードウェア設計情報をCC BY-SA 4.0で公開しました

結果として値段の安い互換機が多く発売されるに至り、入手性が良く追加ハードなしでUSB HIDつまりUSBキーボード等として利用可能なことからコンスルー(スプリングピンヘッダ)と合わせて日本の自作キーボードで界隈では特にポピュラーなマイコンモジュールとなっています。

Pro Micro互換機の入手先例

Type-C版Pro Micro

狭い用途ながらも広く普及しているPro Microですが、USBの接続端子がmicroであり設計された6年前ならいざ知らず現在では若干時代遅れと言わざるを得ません。そんな折、秋葉原の千石電商にフラッと立ち寄った私はUSB Type-Cコネクタを持つSparkFun Qwiic Pro Micro (DEV-15795)を見かけ「これを使えば自作キーボードをUSB-C化できるんじゃないか」と考え購入しました。

当時の手持ちの分割キーボードCorne Chocolateに繋いで簡単に試した限りでは、DEV-15795は正常に機能してUSB-C化に成功し満足しました。しかし単にUSB-C化を試したかっただけなので常用はしませんでした。安くはないしもったいないですからね。もっと良い使いどころがあるはずです。

その後、独自設計の自作キーボード基板を試作しいろいろ試す際に再度DEV-15795を利用する中で不審な挙動に遭遇し、そこからPro Microの互換機を含む各バリエーションにおける挙動の違いに興味を持ち調べるに至りました。


(独自設計の自作キーボードYUIOP27/試作の基板)

調査内容と結果

調査時に使った機材を以下に列挙しておきます。

すべてのPro Micro及び互換機(オリジナル版、Type-C版、青板、黒板)は、親機としてはまったく問題なく正常に機能しました。

また各キーボードショップで購入した互換機(青板、黒板)は子機としてもまったく問題なく正常に機能しました。

子機としてのType-C版の調査

問題は子機としてType-C版を接続した際に、子機ではなく親機として振舞ったことから発覚しました。なお以後の親機は基本的に黒板です。QMK Firmwareを調査したところ回路図内のVBUSで判定していることがわかります。VBUSはV_USBに接続されているので、USBハブに接続され電力が供給されていることがコレに該当します。以下には参考までにType-C版の回路図の該当箇所を抜粋引用します。


そこで子機V_USBとGND間の電圧をテスタで計測したところ4.3Vでした。また子機・親機ともにVCCとGND間の電圧を計測したところ、こちらは4.6Vです。差が0.3V程度ですのでこれでは確かに親機として認識されます。

しかし回路図にはコレを説明できる構造が見出せません。VCCはジャンパを通じてRAWに接続され、RAWはV_USBと繋ぐダイオードのカソード側にあるため、それでもVCCに電圧が発生する理由が電子回路の知識に乏しい私にはわかりません。しかし事実として電圧はかかっているので何かしらの合理的な理由が存在するのでしょう。ともあれ今は納得して調査を続けましょう。


なお子機側のType-C版のUSBコネクタをUSBハブのオフ状態のポートに接続すると安定して子機として判定されるようになりました。この時のV_USBとGND間の電圧は2V前後でした。

子機としてのオリジナル版の調査

オリジナル版も子機として接続すると親機として認識されました。回路図を参考にUVCCとGND間の電圧を計測すると、VCCの電圧と同じ4.6Vでした。ただしこちらは理由が明白です。以下に抜粋した電源部分の回路を見ると、SJ1は5Vのボードであるためクローズしています。結果VCCはクローズしたSJ1とフューズを通じてUVCCに接続されます。ダイオードはありますがアノード側であるため機能しません。以下に該当回路図を抜粋引用します。

なおこの状態で子機側のUSBコネクタをUSBハブのオフ状態のポートに接続したところ、USBハブに搭載されているLEDがオフ状態にも関わらず点灯しました。完全に逆流してます。これを実際に見て理解した瞬間、思わず笑いがこぼれてきました。いや全然嬉しくない状況ではありますが。


(オリジナル版のPro Microの写真。右上のJ1=SJ1相当がハンダでクローズしているのが見て取れる)

純正Pro Microに共通する特徴と次に浮かぶ疑問

つまりSparkFunの純正のPro Microはどちらも「VCCから電源を供給することは想定していない」ということです。あくまでもUSBからの5Vの供給を受け正しく機能する前提だという解釈が妥当そうです。これは言い換えると「分割自作キーボードにおいてTRRSケーブルを通じて子機側として利用することは推奨されない」となります。とはいえそもそも純正品は安くないのでType-C版を親機として使うことはあっても、子機側として使う動機は極めて薄いでしょう。

なおオリジナル版もType-C版も親機として利用した=USBから5Vを供給した場合、VCCには5.0Vがキッチリ出力されます。USBハブの電源ラインと直結していますから、粗悪なUSBハブを使いでもしない限り5.0Vが出力されるのは当然です。

ここまでを踏まえると2つの新たな疑問が芽生えてきます。

  1. どうしてPro Micro互換機は子機として使えるのか?
  2. どうしてPro Micro互換機を親機とした場合のVCCは4.6Vなのか?

互換機であるゆえにオリジナルと同様に子機として使い物にならないのでは、と考えるのが自然でしょう。また互換なのであれば親機として利用した場合のVCCは5.0Vになってしかるべきです。でも少し考えるとこの2つの疑問には1つの共通したある原因があるのではと推測されます...

親機としての互換機(青板)の調査

互換機には5Vの電圧レギュレーターが搭載されSJ1はオープンなのでは?

電圧レギュレーターという電子部品は入力された電力を一定の電圧にして出力するものです。純正Pro Microでは2つの回路図に示されている通り3.3Vを出力するレギュレーターが使用されています。親機として動作しているType-C版の該当箇所にテスタをあてたところ確かに3.3Vが計測できました。

では互換機のほうを見ていきましょう。次の写真は青板ですが黒板もほぼ同じで、また以下の調査結果も同じでした。

写真の中央から右より、赤のマーカーで囲った部品が電圧レギュレーターです。また右上のオレンジのマーカーで囲った部分がSJ1に相当するジャンパーです。確かにオープンで繋がっていません。これであれば子機として利用した際にはVCCはUVCCに繋がらず、VBUSは期待通りにLoになり子機として判定されます。

一方で電圧レギュレーターの入出力の電圧を測定すると、入力が5Vであるのに対し出力は4.6Vでした。電圧レギュレーターは一定の電圧を出力する部品ですが必ず電力喪失が発生します。通常は目的の電圧よりも高い電圧を投入することで目的の電圧を取り出します。互換機のケースでは入力電圧が目的電圧と同じため、電力喪失分が0.4Vの電圧降下を招いているのではないかと推測できます。しらんけど。

とりあえず互換機の電圧レギュレーターは型番も読み取れず、これ以上の調査は電子回路素人には無理そうなので、電圧降下の量が妥当であるかを検証することは諦めました。少なくとも前述の疑問が肯定されたことでヨシ!としましょう。

互換機をバスパワーで動かす調査

余談になりますが互換機をUSBハブのセルフパワーではなくバスパワーで動かすと、レギュレーターの出力は3V付近まで低下しました。バスパワーではUSB電源の電圧は5Vですが、電力は100mAに制限されるようです。結果として電圧レギュレーターが正しく機能できる電力を大幅に下回り、この電圧まで下がってしまったと考えられます。

この3V付近という電圧は絶妙でPro MicroのMCU(CPU)であるATMEGA32U4の動作自体はできるのですが、搭載された16MHzでの動作は安定しないということになりました。したがってバスパワーで互換機を親機側とし子機側にオリジナル版を接続した場合、子機側に搭載したOLEDが途中から正しく描画されないといったような不具合を確認できました。

要点のまとめ

本記事の最後に要点をまとめましょう。

純正Pro MicroはUSB電源で利用しましょう。VCCでの駆動を想定していないため、分割自作キーボードの子機側としての利用は推奨されません。しかし互換機とは異なりVCCにキッチリ5Vが出力されるため親機側としての利用には一考の余地があります。またどうしても子機側として使いたいという場合は子機判定にQMK Firmewareの#define SPLIT_USB_DETECTを利用できます。

#define SPLIT_USB_DETECT

This option changes the startup behavior to detect an active USB connection when delegating master/slave. If this operation times out, then the half is assume to be a slave. This is the default behavior for ARM, and required for AVR Teensy boards (due to hardware limitations).

(https://docs.qmk.fm/#/feature_split_keyboardから引用)

互換機を利用する際は周辺機器の電圧要件に注意しましょう。互換機のVCCは5.0V未満である場合がありえます。電圧要件が5Vでタイトな機器を接続する場合はVCCではなくRAWを利用すると良いでしょう。自作キーボードで多数のLEDを利用する場合、その明るさがこの影響を受ける可能性が特に高いでしょう。LEDすべてが高速に点滅するなどの場合、VCCの電圧・電力が足りているか確認し、必要に応じて最大の明るさRGBLIGHT_LIMIT_VALを低めに制限すると改善すると推測されます。

以上「純正Pro Microと互換機の電源の罠」でした。

脚注
  1. 基本的には4.6Vで動作していました。電圧が下がるのは50個以上のLEDを明るさ高めで点灯した時です。 ↩︎

Discussion

MURAOKA TaroMURAOKA Taro

互換機のケースでは入力電圧が目的電圧と同じため、電力喪失分が0.4Vの電圧降下を招いているのではないかと推測

これもしかしたらもともと4.6Vの電圧レギュレーターを使ってる可能性がありました。根拠はATMEGA32U4の最大動作速度が16MHz/4.5Vになってることと、4.6Vの電圧レギュレーターが存在することと、この手の電子回路設計では偶然動くようなものを作らないこと、くらいが挙げられます。

Monzo_NMonzo_N

こんにちは。通りすがりのハードウェア系エンジニアです。
1)ダイオードはショットキーバリアダイオードという種類なので、電流量は大したことないですが、逆流します。まったく逆流しないものではないです。
2)一般的にディジタルデバイス入力のHigh/Lowの閾値は電源電圧の半分あたりにあります。このデバイスを5Vで使っている場合に閾値は2Vあたりになります。なので、4.3Vでも4.6VでもHighです。
3)レギュレータのドロップ電圧(入力に対する出力電圧の差)は純正品のMIC5219で最大0.5Vとなっています(定格ギリギリまで電流を流したとき0.5V。電流が少なければ電圧低下は小さい)。互換品デバイスでもほぼ同じでしょう。なので普通に5Vのレギュレータを使って、0.4V落ちていると考えるのが妥当と思われます。