ラズパイでMOSFETを使おう

 

こんなこと、やります。

  • MOSFETの使い方を学ぶ
  • Raspberry PiでMOSFET(IRF520)の使い方
  • PWM信号でLEDライトの明るさをコントロールする

# ラズパイでMOSFETを使おう
# ラズパイでMOSFETを使おう

はじめに

LEDは100均のものを使ってみました。100均のLEDライトは、分解すると高輝度白色チップLEDが10個入っています。

100均LEDを分解
100均LEDを分解

ラズパイのデジタルピンの出力電流は数十mAが限界ですので、10個ものLEDを点灯させようとするとちょっと無理があります。

そこで、MOSTETの登場です。

MOSFETはいわば電流増幅器ですから、複数のLEDやモータなどの高負荷なデバイスをドライブできます。またPWM信号を使えば、負荷にかける電力を変えることができます。つまり、LEDなどの明るさを調光できるのです。

ちなみに、MOSFETの読み方は「モスフェット」や「モスエフイーティー」と読みます。

開発環境

この記事で作業を行なった開発環境はこちらになります。

項目バージョン
ラズパイRaspberry Pi zero WH
OSRaspbian 9.13
Python2.7.13/3.7.0
MOSFETIRF520
LEDUSB電源LEDライト(100均)

ラズパイの選択

この記事では、マイコンボードにRaspberry Pi zero WHを使用しました。みなさんは、お好きなラズパイやArduinoなどをお使いください。ラズパイの操作は、MacのターミナルからSSHでリモート操作します。SSHのセットアップは、キーボードなしのラズパイをMacで初期設定、SSH環境構築をご覧ください。

MOSFETの選択

また、MOSFETはIRF520を使用しました。NチャンネルにMOSFETで端子配置に気をつければ、他のものでも代用可能です。

100均LEDライト

冒頭でも述べましたとおり、100均のLEDライトは10個のLEDが内蔵されていました。配線を調べてみると、次の回路図のようになってました。

100均LEDライトの回路図
100均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)となっています。

MOSFET(IRF520)の端子割り当て
MOSFET(IRF520)の端子割り当て

他のMOSFETをお使いの場合は、端子配置がちがう場合がありますのでご注意ください。

MOSFETの使い方

MOSFETの使い方は、次の通りです。

  • ゲートの電位を約3V以下にすると、ドレイン-ソース間は絶縁される。
  • ゲートの電位を約3V以上にすると、ドレイン-ソース間は導通される。

下図のMOSFETの動作のように、ゲート電圧によってスイッチのような働きをするのです。

MOSFETの動作図
MOSFETの動作図

3Vあたりで動作変化する電圧のことを閾値(しきいち)と呼びます。入力されたゲート電圧と閾値の関係によって、ドレイン-ソース間のオンオフが決まります。また、ゲートの抵抗値はたいへん大きいので、わずかな電流を流せばすみます。よって、ラズパイのようなデジタルピンの出力電流でも、高負荷なデバイスを制御できるというわけです。

ちなみに、MOSFETでは高速にそのスイッチをオンオフすることが可能です。ですから、PWM制御の素子として、非常によく使われています。ここでもPWM制御を行なっていきますが、PWMについての詳しくはPWMジェネレータをオペアンプ1個でつくろう!をご覧ください。

IRF520はNチャンネルのMOSFETです。MOSFETには極性があり、NチャンネルのMOSFETではドレインからソースへ電流が流れるように負荷をかけることにご注意ください。

ラズパイとMOSFETとPWM制御

それでは実際に、ラズパイとMOSFETを使ってPWM制御を行なってみましょう。

ラズパイの配線

回路図と配線図をこちらに示しておきます。

MOSFETとLEDライトの回路図
MOSFETとLEDライトの回路図

ラズパイとMOSFETとLEDライトの配線図
ラズパイとMOSFETとLEDライトの配線図

LEDの部分はお手持ちの高負荷なデバイス(LEDライトやモータなど)に置き換えてください。

また、制御対象(高負荷デバイス)にしようする電圧は、ラズパイとは別から供給してください。ラズパイが不安定になる可能性があるからです。図中のGPIO14ピンとMOSFETのゲートの間の1kΩの抵抗は、保護用に入れてみましたが無くても構いません。

ラズパイでPWM信号を作るには、ソフトウェアPWMハードウェアPWMがあります。ソフトウェアPWMよりハードウェアPWMのほうが精度が高いです。ただし、ソフトウェアPWMはどのデジタルピンでも使用できるのに対し、ハードウェアPWMはGPIO18とGPIO19のみが対応となっています。またこれらのピンは、ヘッドフォン端子から音声を出力するのに使用されるため、音声出力時は使用できません。

PWM制御のプログラム

ラズパイの配線ができたところで、Pythonでプログラムを書いてLEDを調光してみましょう。

# -*- coding: utf-8 -*-
from gpiozero import PWMLED
from time import sleep
import numpy as np

LED = PWMLED(14)
LED.value = 0
frequcency = 0.5
phase = 3.0 / 4.0 * 2.0 * np.pi # スタート時のvalueを0にするため位相をズラしている
sample_rate = 100.0
duration = 1.0 / sample_rate
d_phase = frequcency * 2.0 * np.pi / sample_rate

while True:
    value = (np.sin(phase) + 1) / 2.0
    LED.value = value
    phase = phase + d_phase
    if phase > 2.0 * np.pi:
        phase = phase % (2.0 * np.pi)    
    sleep(duration)

プログラムの解説

gpiozeronumpy は、pipなどでインストールしておいてください。PWMLED 関数を使うと、PWMのデューティ比をカンタンに変えることができます。プログラムを実行すると、こちらの動画のようにLEDライトが明るくなったり暗くなったりします。

ラズパイとMOSFETでLEDライトをPWM制御
ラズパイとMOSFETでLEDライトをPWM制御

ちなみに、ラズパイを使わなくてもPWM信号を作ることができます。詳しくはPWMジェネレータをオペアンプ1個でつくろう!に書きました。

以上で、ラズパイとMOSFETとPWM制御の説明はおわりとなります。ほかにも、PWM制御をつかって遊んでみましたので、こちらの記事もあわせてご覧ください。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
人気のラズパイ
人気のラズパイ周辺機器
Raspberry Piのオススメ入門書
関連記事