Raspberry PiでMOSFETを使おう

こんなこと、やります。

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

# Raspberry PiでMOSFETを使おう
# Raspberry PiでMOSFETを使おう

はじめに

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

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

Raspberry Piのデジタルピンの出力電流は数十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の選択

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

MOSFETの選択

また、MOSFETは IRF520 を使用しました。NチャンネルにMOSFETで端子配置に気をつければ、他のものでも代用可能です。温度に気をつければ、ドレイン電流を6A〜9Aほど流すことができます。

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)の端子割り当て

ゲートのスレッショルド電圧は4Vです。Raspberry PiのGPIO出力電圧は3.3Vなので本来はIRF520をそのまま制御することはできないはずです。しかしなぜかギリギリ制御できてしまいました。ものによっては制御できなかったり不安定ですので、ロジックレベルシフターなどを使って信号を3.3Vから5Vに昇圧してお使いになることをお勧めします。

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

MOSFETの使い方

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

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

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

MOSFETの動作図
MOSFETの動作図

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

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

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

Raspberry PiとMOSFETとPWM制御

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

Raspberry Piの配線

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

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

Raspberry PiとMOSFETとLEDライトの配線図
Raspberry PiとMOSFETとLEDライトの配線図

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を調光してみましょう。

py
# -*- 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ライトが明るくなったり暗くなったりします。

Raspberry PiとMOSFETでLEDライトをPWM制御
Raspberry PiとMOSFETでLEDライトをPWM制御

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

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

関連記事

 
最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容です。ほかのArduino書籍と比べて図や説明がとてもていねいで読みやすいです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事