ラズパイでMOSFETを使おう
こんなこと、やります。
- MOSFETの使い方を学ぶ
- Raspberry PiでMOSFET(IRF520)の使い方
- PWM信号でLEDライトの明るさをコントロールする
はじめに
LEDは100均のものを使ってみました。100均のLEDライトは、分解すると高輝度白色チップLEDが10個入っています。
ラズパイのデジタルピンの出力電流は数十mAが限界ですので、10個ものLEDを点灯させようとするとちょっと無理があります。
そこで、MOSTETの登場です。
MOSFETはいわば電流増幅器ですから、複数のLEDやモータなどの高負荷なデバイスをドライブできます。またPWM信号を使えば、負荷にかける電力を変えることができます。つまり、LEDなどの明るさを調光できるのです。
開発環境
この記事で作業を行なった開発環境はこちらになります。
項目 | バージョン |
---|---|
ラズパイ | Raspberry Pi zero WH |
OS | Raspbian 9.13 |
Python | 2.7.13/3.7.0 |
MOSFET | IRF520 |
LED | USB電源LEDライト(100均) |
ラズパイの選択
この記事では、マイコンボードにRaspberry Pi zero WHを使用しました。みなさんは、お好きなラズパイやArduinoなどをお使いください。ラズパイの操作は、MacのターミナルからSSHでリモート操作します。SSHのセットアップは、Raspberry Pi OSのインストール - モニター・キーボードなし、SSH接続するまでをご覧ください。
MOSFETの選択
また、MOSFETはIRF520を使用しました。NチャンネルにMOSFETで端子配置に気をつければ、他のものでも代用可能です。
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となっています。ラズパイのGPIO出力電圧は3.3Vなので本来はIRF520をそのまま制御することはできないはずです。しかしなぜかギリギリ制御できてしまいました。ものによっては制御できなかったり不安定だったりすると思いますので、ロジックレベルシフターなどを使って信号を3.3Vから5Vに昇圧してお使いになることをお勧めしておきます。
MOSFETの使い方
MOSFETの使い方は、次の通りです。
- ゲートの電位を約4V以下にすると、ドレイン-ソース間は絶縁される。
- ゲートの電位を約4V以上にすると、ドレイン-ソース間は導通される。
下図のMOSFETの動作のように、ゲート電圧によってスイッチのような働きをするのです。
3〜4Vあたりで動作変化する電圧のことを閾値(しきいち)と呼びます。入力されたゲート電圧と閾値の関係によって、ドレイン-ソース間のオンオフが決まります。また、ゲートの抵抗値はたいへん大きいので、わずかな電流を流せばすみます。よって、ラズパイのようなデジタルピンの出力電流でも、高負荷なデバイスを制御できるというわけです。
ちなみに、MOSFETでは高速にそのスイッチをオンオフすることが可能です。ですから、PWM制御の素子として、非常によく使われています。ここでもPWM制御を行なっていきますが、PWMについての詳しくはオペアンプ1個でつくる!PWMジェネレータをご覧ください。
ラズパイとMOSFETとPWM制御
それでは実際に、ラズパイとMOSFETを使ってPWM制御を行なってみましょう。
ラズパイの配線
回路図と配線図をこちらに示しておきます。
LEDの部分はお手持ちの高負荷なデバイス(LEDライトやモータなど)に置き換えてください。
また、制御対象(高負荷デバイス)にしようする電圧は、ラズパイとは別から供給してください。ラズパイが不安定になる可能性があるからです。図中のGPIO14ピンとMOSFETのゲートの間の1kΩの抵抗は、保護用に入れてみましたが無くても構いません。
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)
プログラムの解説
gpiozero と numpy は、pipなどでインストールしておいてください。PWMLED 関数を使うと、PWMのデューティ比を簡単に変えることができます。プログラムを実行すると、こちらの動画のようにLEDライトが明るくなったり暗くなったりします。
ちなみに、ラズパイを使わなくてもPWM信号を作ることができます。詳しくはオペアンプ1個でつくる!PWMジェネレータに書きました。
以上で、ラズパイとMOSFETとPWM制御の説明はおわりとなります。ほかにも、PWM制御をつかって遊んでみましたので、こちらの記事もあわせてご覧ください。