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などの明るさを調光できるのです。
開発環境
この記事で作業を行なった開発環境はこちらになります。
項目 | バージョン |
---|---|
ラズパイ | 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のセットアップは、 Raspberry Pi zero WHをモニター・キーボードなしで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の使い方は、次の通りです。
- ゲートの電位を約4V以下にすると、ドレイン-ソース間は絶縁される。
- ゲートの電位を約4V以上にすると、ドレイン-ソース間は導通される。
下図のMOSFETの動作のように、ゲート電圧によってスイッチのような働きをするのです。
3〜4Vあたりで動作変化する電圧のことを閾値(しきいち)と呼びます。入力されたゲート電圧と閾値の関係によって、ドレイン-ソース間のオンオフが決まります。また、ゲートの抵抗値はたいへん大きいので、わずかな電流を流せばすみます。よって、Raspberry Piのようなデジタルピンの出力電流でも、高負荷なデバイスを制御できるというわけです。
ちなみに、MOSFETでは高速にそのスイッチをオンオフすることが可能です。ですから、PWM制御の素子として、非常によく使われてます。ここでもPWM制御を行なっていきますが、PWMについての詳しくは オペアンプ1個でつくる!PWMジェネレータ をご覧ください。
Raspberry PiとMOSFETとPWM制御
それでは実際に、Raspberry PiとMOSFETを使ってPWM制御を行なってみましょう。
Raspberry Piの配線
回路図と配線図をこちらに示します。
LEDの部分はお手持ちの高負荷なデバイス(LEDライトやモータなど)に置き換えてください。
また、制御対象(高負荷デバイス)にしようする電圧は、Raspberry Piとは別から供給してください。Raspberry Piが不安定になる可能性があるからです。図中のGPIO14ピンとMOSFETのゲートの間の1kΩの抵抗は、保護用に入れてみましたが無くても構いません。
PWM制御のプログラム
Raspberry Piの配線ができたところで、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ライトが明るくなったり暗くなったりします。ちなみに、Raspberry Piを使わなくてもPWM信号を作ることができます。詳しくは オペアンプ1個でつくる!PWMジェネレータ に書きました。
以上で、Raspberry PiとMOSFETとPWM制御の説明はおわりとなります。ほかにも、PWM制御をつかって遊んでみましたので、こちらの記事もあわせてご覧ください。