以前、デスクトップPCのPCIe スロットに挿して使うPCリモート起動基板を眺めていた時、PCが起動しているかを PCIe の3.3Vから検出するのに、NPNトランジスタを介していることに気づきました。 GPIO で電圧のHi/Loを検出する際、単なる抵抗による分圧ではなく、こうした半導体を用いて分離 保護 する利点について、実際に MOSFET を使って実験してみました。
市販のPCリモート起動基板を解析
この基板がPCIeスロットで使っているのは次の3つのピンのみです。
- 3.3Vaux : PCの起動状態によらず、コンセントに繋がっている限りは恒久的に給電。
- 3.3V : PCが起動している時のみ電圧がかかる。
- GND
この3.3V端子を辿ると、GPIOインターフェイスICとおぼしきICへ、トランジスタを介して繋がっていることがわかります。
「J3Y」と言う表記のこの半導体は、海外ではよく使われる汎用NPNトランジスタ、S8050です。PCIeの3.3Vをベース抵抗を介してベースへ印加して、GPIO入力に繋がるエミッタ〜コレクタ(GND)間をスイッチングすることで、PCの電源が入ったかどうかを判別しています。
電圧が掛かっているかどうかをGPIOで検出するのであれば、単に抵抗で分圧すれば済むのですが、もしも高い電圧が掛かった場合を考えると、こうした半導体による簡易的なアイソレーションが必要なのですね。
MOSFETで回路設計
この基板の構成をベースに、MOSFETを使って同様の回路を考えてみました。
普段あまり気にせず約束事のように配置する、MOSFETやトランジスタのベース(ゲート)抵抗や、ベース・エミッタ(ゲート・ソース)間抵抗の役割について、良い機会なので以下の記事であらためて確認させて頂きました。
ブレッドボードに再現
設計を終えたので早速ブレッドボードに組んでみます。MCUとして使うESP-01Sを以前製作したブレッドボード向け開発ボードに載せて、ブレッドボードに挿しました。またMOSFETには、SOT-23パッケージのAO3400をDIP変換板に載せた物を使います。写真では見にくいかもしれませんが、ゲート抵抗とゲート・ソース抵抗はチップ品を変換板上に実装済なので、ブレッドボード上で追加するのは、プルアップ用の抵抗のみです。
ESP EasyのGPIO設定
ESP Easyを焼いたESP-01Sを起動しブラウザからアクセスします。Hardware Settingページを開くと、デフォルトではI2Cインターフェイスが2本のGPIOに割当られてしまっているので、I2Cを無効にしてからGPIO-0を次のように設定します。
1 |
GPIO-0 : Input Pullup |
試験結果
実際のPCIeスロットを想定し、まずは3.3Vを印加してみて、GPIOステータスの変化を見てみます。ESP Easyで最も簡単にGPIOの状態を見るには、ToolsページのPin State Bufferが良いでしょう。
初期状態ではプルアップしてあるのでHi、電圧を印加するとLoを示します。
続いていじわる試験として、印加する電圧を5Vさらに12Vも試してみましたが、問題無く設計通りの動作をしてくれました。PC電源ON状態がGPIOのLoになりますが、以前、ESP Easyのダッシュボード機能でカスタムページを作った時と同じ要領で、ステータスアイコンを表示させるようにすれば良いでしょう。
今回のMOSFETによるGPIO入力の保護を、今後のPCリモート起動基板の自作に活かしたいと思います。