MOSFETによるGPIO入力の保護

投稿者: | 2021年7月13日

以前、デスクトップ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へ、トランジスタを介して繋がっていることがわかります。

図1.Computer Remote Boot Card基板拡大

図1.Computer Remote Boot Card基板拡大

「J3Y」と言う表記のこの半導体は、海外ではよく使われる汎用NPNトランジスタ、S8050です。PCIeの3.3Vをベース抵抗を介してベースへ印加して、GPIO入力に繋がるエミッタ〜コレクタ(GND)間をスイッチングすることで、PCの電源が入ったかどうかを判別しています。

図2.S8050 SOT-23 Pinout

図2.S8050 SOT-23 Pinout

電圧が掛かっているかどうかをGPIOで検出するのであれば、単に抵抗で分圧すれば済むのですが、もしも高い電圧が掛かった場合を考えると、こうした半導体による簡易的なアイソレーションが必要なのですね。

 

MOSFETで回路設計

この基板の構成をベースに、MOSFETを使って同様の回路を考えてみました。

図3.PCIe Power-On Detector回路図

図3.PCIe Power-On Detector回路図

普段あまり気にせず約束事のように配置する、MOSFETやトランジスタのベース(ゲート)抵抗や、ベース・エミッタ(ゲート・ソース)間抵抗の役割について、良い機会なので以下の記事であらためて確認させて頂きました。

 

ブレッドボードに再現

設計を終えたので早速ブレッドボードに組んでみます。MCUとして使うESP-01Sを以前製作したブレッドボード向け開発ボードに載せて、ブレッドボードに挿しました。またMOSFETには、SOT-23パッケージのAO3400をDIP変換板に載せた物を使います。写真では見にくいかもしれませんが、ゲート抵抗とゲート・ソース抵抗はチップ品を変換板上に実装済なので、ブレッドボード上で追加するのは、プルアップ用の抵抗のみです。

図4.ブレッドボードに組んだ様子

図4.ブレッドボードに組んだ様子

ESP EasyのGPIO設定

ESP Easyを焼いたESP-01Sを起動しブラウザからアクセスします。Hardware Settingページを開くと、デフォルトではI2Cインターフェイスが2本のGPIOに割当られてしまっているので、I2Cを無効にしてからGPIO-0を次のように設定します。

図5.Hardware Settings GPIO

図5.Hardware Settings GPIO

試験結果

実際のPCIeスロットを想定し、まずは3.3Vを印加してみて、GPIOステータスの変化を見てみます。ESP Easyで最も簡単にGPIOの状態を見るには、ToolsページのPin State Bufferが良いでしょう。

図6.ESP Easy Toolsページ

図6.ESP Easy Toolsページ

初期状態ではプルアップしてあるのでHi、電圧を印加するとLoを示します。

図7.ESP Easy GPIO Hi Lo Stsatus

図7.ESP Easy GPIO Hi Lo Stsatus

続いていじわる試験として、印加する電圧を5Vさらに12Vも試してみましたが、問題無く設計通りの動作をしてくれました。PC電源ON状態がGPIOのLoになりますが、以前、ESP Easyのダッシュボード機能でカスタムページを作った時と同じ要領で、ステータスアイコンを表示させるようにすれば良いでしょう。

 

今回のMOSFETによるGPIO入力の保護を、今後のPCリモート起動基板の自作に活かしたいと思います。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA