マイコンでMOSFETを使う一番簡単な方法

マイコン/Arduino

ESP32やPIC、AVRなどのマイクロコントローラーは直接大きな負荷をドライブできないので必要に応じてトランジスターなどをスイッチとして使用する必要があります。

今回はMOSFET(金属酸化膜半導体電界効果トランジスタ)を使用してスイッチングを行う方法を紹介します。細かな原理や注意事項、各定数の選び方などは他に任せて、ここではとりあえず”使える”ことを目指します。

今回は3.3V駆動のマイクロコントローラーESP32C3を使用し、5V電源でLEDをドライブします。
負荷がLEDではなくモーターなどの場合は逆起電力への対策等が必要です。今回は簡略化のためにそれらは省いています。また、後で述べますが、特にPchMOSFETでハイサイドスイッチを構成する場合はFETの耐圧に注意する必要があります。FETによるスイッチングについては他サイト等を参照して原理をよく理解して使用してください。
以下の紹介する回路とArduinoスケッチに関しては手元で実際に組んで動作確認(LEDが点滅するか)までは確認しています。

ハイサイドスイッチとローサイドスイッチ

負荷に対してスイッチを+側にいれる構成をハイサイドスイッチ、-側に入れる構成をローサイドスイッチと呼びます。

通常のスイッチであれば特に意識せず好きな方に設定すればよいのですが、MOSFETの場合はそれぞれの構成で使用するMOSFETの種類が異なります。基本的に以下の組み合わせのいずれかで使用します。

  • ハイサイドスイッチ : Pch MOSFET
  • ローサイドスイッチ : Nch MOSFET
それぞれメリットデメリットがありますが、MOSFETをスイッチとして使用する場合はNch MOSFETでローサイドスイッチとする場合が多いです。
私個人の気分的にはハイサイドスイッチの方が気持ちが良いのですが、厄介事が多いので実際にはローサイドスイッチにしてしまうことが多いです。

ハイサイドスイッチの例(非推奨)

PchMOSFETは次のような特性でスイッチのON/OFFができます。スイッチがONのときソースからドレインに向かって電流が流れます。

  • ゲート-ソース間電位が0の時OFF
  • ゲートの電位がソースの電位よりも一定値(Vth)以上低くなるとON

非常に雑な説明ですがまずはこれだけ覚えてください。

回路図中のR1(10kΩ)は、R2に接続されたGPIOに何もつながっていない時、ソース-ゲート間の電圧を一定に保つためのものです(プルアップ)。なお、GPIOを”何もつながっていない”状態にするためには通常の出力モードではなく、Hi-Z(ハイインピーダンス)に対応したモードを使います。詳しくは以下にスケッチを載せますので参考にしてください(全く難しくありません)。

ここで、R2に接続されたGPIOの端子をGNDに落とした場合、ゲート電位は約0.5Vになりソース電位の5Vよりも約4.5V低くなります。今回選択したPchMOSFET(東芝2SJ681)のVthは0.8~2.0VですのでON状態となるはずです。

PchMOSFETを使った一番簡単なハイサイドスイッチの例
上記回路の場合、GPIOに5Vが印加されてしまいます。私がテストした短い時間ではマイコンが壊れるということはありませんでしたができれば避けるべき回路ですね。3.3V駆動のESP32のGPIOに5Vを印加しても良い(5Vトレラント)かどうかはっきりしないためです。
PchMOSFETでハイサイドスイッチを構成する場合はゲートドライバを使用するのがベターです。
マイコンで簡単にMOSFETを使う方法(2)
マイコンでスイッチとしてFETを使用する方法を紹介します。 前回の構成に簡易的なゲートドライブ回路を組み込んでより実用的な回路をなるべく簡単に紹介します。

注意

このような使い方をする場合、注意しなければならないのはゲートソース間の電圧(VGSS)です。例えば東芝の2SJ681ではVGSSの絶対最大定格は±20Vです。上記回路ではゲートを0Vまで落とす仕様になっていますので、言い換えれば負荷をドライブする電圧は絶対に20V以下でなければならない、ということになります。
2SJ681で20V以上の電圧を使用したい場合にはゲート周りの回路に工夫が必要になります。これがハイサイドスイッチの面倒事です。
ちなみに1kΩに設定しているR2のゲート抵抗ですが、これは無くても動作します。ただ、MOSFETの故障モードは基本的に”ショート”なので、万が一MOSFETが故障した場合、本来LEDをドライブするはずの5V電源がESP32のGPIOに直結され大電流がESP32のGPIOに流れ込む可能性があります。ただ、大きすぎるとスイッチング速度の低下と消費電力(スイッチング損失)の増大を招きます。たまにしかON/OFFしないような用途であればシビアに考える必要はありません。
抵抗値の選定については他所にゆずります。(逃げ口上)

Arduinoのスケッチ例

void setup()
{
 //Pin設定 オープンドレイン
 pinMode(4, OUTPUT_OPEN_DRAIN);
}

void loop()
{
 digitalWrite(4, HIGH);//ハイインピーダンス状態
 delay(200);
 digitalWrite(4, LOW);//GNDに落とす
 delay(200);
}
OUTPUT_OPEN_DRAINはESP32系のみで使用可能です。

使用した部品についてメモ(例)

PchMOSFETとしては東芝の2SJ681を選びました。
秋月電子通販コード:108358

ローサイドスイッチの例

次にNchMOSFETを使用したローサイドスイッチの例です。東芝の2SK4017を選択しました。

NchMOSFETは次のような特性でスイッチのON/OFFができます。スイッチがONのときソースからドレインに向かって電流が流れます。

  • ゲート-ソース間電位が0の時OFF
  • ゲートの電位がソースの電位よりも一定値(Vth)以上高くなるとON

ESP32のGPIOの出力が0になればゲート電位もソース電位も0なのでMOSFETはOFFになります。

ESP32のGPIOの出力を3.3Vにした場合、ゲート電圧は約3Vになります。2SK4017のVthは1.3~2.5VですのでMOSFETはONになります。

また、ESP32のGPIO出力については、ローサイドスイッチの場合は通常のデジタル出力でOKです。

NchMOSFETを使った一番簡単なローサイドスイッチの例

こちらの方法はゲートソース間には基本的にはESP32で駆動している以上の電圧はかからないため、ドライブ電圧が高くても気にする必要はなく、使いやすいです。(負荷をドライブする電圧がゲートにつながっていないから)

Arduinoのスケッチ例

void setup()
{
 //Pin設定
 pinMode(4, OUTPUT);
}

void loop()
{
 digitalWrite(4, HIGH);
 delay(200);
 digitalWrite(4, LOW);
 delay(200);
}

使用した部品についてメモ(例)

NchMOSFETとしては東芝の2SK4017を選びました。

NchパワーMOSFET 60V5A 2SK4017(Q): 半導体 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作NchパワーMOSFET 60V5A 2SK4017(Q)秋月電子通商 電子部品通信販売

秋月電子通販コード:107597

まとめと注意

いかがだったでしょうか。今回はMOSFETをマイコンで使う最もシンプルな方法を紹介しました。繰り返しも含まれますが、以下の点に注意してください。

  • モーターなどの誘導性負荷を使用する場合には上記回路では危険です。
  • Vthについて”データシートの値を参照して〇VだからMOSFETはON”などと記述していますが実際にはドレインソース間電圧等でも変化しますので注意してください。
  • 例で示した抵抗値等は適当に定めたものですので各自の目的や仕様に合わせて変える必要があることも覚えておいてください。
  • MOSFETの選定の際にはドレインソース間の耐電圧や最大電流などの定格にも注意してください。
  • NchとPchで電流の向きやピンアサインなどが紛らわしいですが、ドレインが負荷側と思っておけば間違いにくいです。(ドレイン接地回路というのはまた別のお話)

最後に、MOSFETはバイポーラトランジスタなどよりもはるかに静電気に弱く、簡単に壊れてしまいますので本記事アイキャッチに設定したような写真撮影(フリースを着ながら布製マウスパッドの上に並べた)は危険なのでやめましょう(笑)

(追記)PchMOSFETでゲート-ソース間の耐圧などを考慮した改良型の回路はこちらです。

有識者の方へ
ここにこんな部品を1個追加するともっと安定するよ!とか、ここは絶対ダメ!などありましたら是非コメント欄へご意見などを残していってください。

コメント