Raspberry PiでMOSFETを使おう
はじめに

こんなこと、やります。 - MOSFETの使い方を学ぶ - Raspberry PiでMOSFET(IRF520)の使い方 - PWM信号でLEDライトの明るさをコントロールする
LEDは100均のものを使ってみました。100均のLEDライトは、分解すると高輝度白色チップLEDが10個入ってます。

Raspberry Piのデジタルピンの出力電流は数十mAが限界ですので、10個ものLEDを点灯させようとするとちょっと無理があります。 そこで、MOSTETの登場です。 MOSFETはいわば電流増幅器ですから、複数のLEDやモータなどの高負荷なデバイスをドライブできます。またPWM信号を使えば、負荷にかける電力を変えることができます。つまり、LEDなどの明るさを調光できるのです。
ちなみに、MOSFETの読み方は「モスフェット」や「モスエフイーティー」と読みます。
開発環境
この記事で作業を行なった開発環境はこちらになります。
項目 | バージョン |
---|---|
ラズパイ | Raspberry Pi zero WH |
OS | Raspbian 9.13 |
Python | 2.7.13/3.7.0 |
MOSFET | IRF520 |
LED | USB電源LEDライト(100均) |
Raspberry Piの選択
この記事では、マイコンボードに Raspberry Pi zero WH を使用しました。みなさんは、お好きなラズパイやArduinoなどをお使いください。Raspberry Piの操作は、MacのターミナルからSSHでリモート操作します。SSHのセットアップは、 をご覧ください。
MOSFETの選択
また、MOSFETは IRF520 を使用しました。NチャンネルにMOSFETで端子配置に気をつければ、他のものでも代用可能です。温度に気をつければ、ドレイン電流を6A〜9Aほど流すことができます。
100均LEDライト
冒頭でも述べましたとおり、100均のLEDライトは10個のLEDが内蔵されていました。配線を調べてみると、次の回路図のようになってました。

10個のLEDはそれぞれ並列に接続されていて、2つの4.7Ωのチップ抵抗(並列)を介して電源へつながってます。抵抗をわざわざ並列にしているのは、抵抗の最大消費電力をオーバーしないようにするためかと思われます。ちなみに、チップ抵抗の読み方は をご覧ください。
また、LEDライトを5V電圧で点灯させたときの消費電流を計測してみたところ、全体では640mAの電流が流れていました。よって、1つあたりのLEDで64mAの電流が必要となります。また、LEDのVF(順方向電圧)は3.4V程度でした。

MOSFET(IRF520)の使い方
それでは、MOSFET IRF520 の使い方を解説していきます。
IRF520の端子配置
まず、 IRF520のデータシート を確認しますと、端子配置は左からゲート(G)、ドレイン(D)、ソース(S)です。

ゲートのスレッショルド電圧は4Vです。Raspberry PiのGPIO出力電圧は3.3Vなので本来はIRF520をそのまま制御することはできないはずです。しかしなぜかギリギリ制御できてしまいました。ものによっては制御できなかったり不安定ですので、ロジックレベルシフターなどを使って信号を3.3Vから5Vに昇圧してお使いになることをお勧めします。
他のMOSFETをお使いの場合は、端子配置がちがう場合がありますのでご注意ください。
MOSFETの使い方
MOSFETの使い方は、次の通りです。
- ゲートの電位を約4V以下にすると、ドレイン-ソース間は絶縁される。
- ゲートの電位を約4V以上にすると、ドレイン-ソース間は導通される。
下図のMOSFETの動作のように、ゲート電圧によってスイッチのような働きをするのです。
3〜4Vあたりで動作変化する電圧のことを閾値(しきいち)と呼びます。入力されたゲート電圧と閾値の関係によって、ドレイン-ソース間のオンオフが決まります。また、ゲートの抵抗値はたいへん大きいので、わずかな電流を流せばすみます。よって、Raspberry Piのようなデジタルピンの出力電流でも、高負荷なデバイスを制御できるというわけです。
ちなみに、MOSFETでは高速にそのスイッチをオンオフすることが可能です。ですから、PWM制御の素子として、非常によく使われてます。ここでもPWM制御を行なっていきますが、PWMについての詳しくは をご覧ください。
IRF520はNチャンネルのMOSFETです。MOSFETには極性があり、NチャンネルのMOSFETではドレインからソースへ電流が流れるように負荷をかけることにご注意ください。
Raspberry PiとMOSFETとPWM制御
それでは実際に、Raspberry PiとMOSFETを使ってPWM制御を行なってみましょう。
Raspberry Piの配線
回路図と配線図をこちらに示します。


LEDの部分はお手持ちの高負荷なデバイス(LEDライトやモータなど)に置き換えてください。
また、制御対象(高負荷デバイス)にしようする電圧は、Raspberry Piとは別から供給してください。Raspberry Piが不安定になる可能性があるからです。図中のGPIO14ピンとMOSFETのゲートの間の1kΩの抵抗は、保護用に入れてみましたが無くても構いません。
Raspberry PiでPWM信号を作るには、ソフトウェアPWMとハードウェアPWMがあります。ソフトウェアPWMよりハードウェアPWMのほうが精度が高いです。ただし、ソフトウェアPWMはどのデジタルピンでも使用できるのに対し、ハードウェアPWMはGPIO18とGPIO19のみが対応します。またこれらのピンは、ヘッドフォン端子から音声を出力するのに使用されるため、音声出力時は使用できません。
PWM制御のプログラム
Raspberry Piの配線ができたところで、Pythonでプログラムを書いてLEDを調光してみましょう。
from gpiozero import PWMLED
from time import sleep
import numpy as np
= PWMLED(14)
LED = 0
LED.value = 0.5
frequcency = 3.0 / 4.0 * 2.0 * np.pi # スタート時のvalueを0にするため位相をズラしている
phase = 100.0
sample_rate = 1.0 / sample_rate
duration = frequcency * 2.0 * np.pi / sample_rate
d_phase
while True:
= (np.sin(phase) + 1) / 2.0
value = value
LED.value = phase + d_phase
phase if phase > 2.0 * np.pi:
= phase % (2.0 * np.pi)
phase sleep(duration)
プログラムの解説
gpiozero
と numpy
は、pip
などでインストールしてください。PWMLED
関数を使うと、PWMのデューティ比を簡単に変えることができます。プログラムを実行すると、こちらの動画のようにLEDライトが明るくなったり暗くなったりします。

関連記事
- ESP32でMOSFETを使ったPWM制御 (IRF520)
- Arduinoと可変抵抗でLEDの明るさ制御
- オペアンプ1個でつくる!PWMジェネレータ
- デジタル信号におけるRCローパスフィルタ
- 低周波で使えるAM変調回路(トレモロ・リングモジュレータ)