ESP32でMOSFETを使ったPWM制御 (IRF520)

ESP32でMOSFETを使ったPWM制御 (IRF520)
ESP32でMOSFETを使ったPWM制御 (IRF520)

この記事では、ESP32とMOSFETを使ってPWM制御を行う方法を解説いたします。MOSFETはIRF520を使用しました。また、モデルとしてLEDライトを制御してみました。PWM制御はモーター速度の制御や、ヒーターの温度制御など色々と応用が効く技術です。

▼ 以前に同じことをRaspberry Piでも行いましたので、Raspberry Piの場合はこちらの記事をご覧ください。

つかうもの

この記事でつかうものをご紹介いたします。

ESP32

WayinTopさんから販売されているESP32を使用しました。技適マークも刻印されてますので、安心して国内で使えます。GPIOの役割図は 商品ページ に詳しく掲載されてます。

▼ WiFiやBluetooth接続が必要なければ、他のArduinoでも構いません。こちらの記事で色々な種類のArduinoをご紹介してます。

MOSFET IRF520

MOSFETはIRF520を使用しました。ドレインソース間の耐圧は100Vで、最大ドレイン電流は6A〜9A程度になってます(温度に依存)。

IRF520データシート

ロジックレベル変換モジュール

IRF520はゲートのスレッショルド電圧が4Vと高めで、ESP32のGPIO出力電圧は3.3Vですのでそのままだとずうまく動作しません。こちらのロジックレベル変換モジュールを使用して3.3V信号を5V信号に昇圧して制御します。

▼ ロジックレベル変換モジュールの詳しい使い方はこちらの記事をご覧ください。

その他

また、ブレッドボードやジャンプワイヤもあると便利です。

MOSFET IRF520の使い方

MOSFETを大雑把に説明すると、ゲート(G)に電圧をかけることでドレイン(D)ソース(S)間のスイッチをオンオフ制御できる阻止です。

MOSFET IRF520の動作
MOSFET IRF520の動作

IRF520はゲートのスレッショルド電圧が4V以上になってますから、たとえば5Vの信号でスイッチングできることになります。ArduinoですとGPIO出力が5VピークなのでIRF520を直接繋いで制御できますが、ESP32ですと3.3Vの出力電圧ですからそのまま繋いでもうまく動作しません。そこでロジックレベル変換モジュールを使って、3.3V信号を5Vへ変換してMOSFETを動かす必要があります。ロジックレベル変換モジュールの使い方は ロジックレベル変換モジュールの使い方|Arduino・ESP32・ラズパイ で詳しく解説してます。

ESP32とMOSFETを使ってPWM制御している様子

ここからは実際に作っている様子をご紹介いたします。

ESP32
ESP32
ロジックレベル変換モジュール
ロジックレベル変換モジュール
MOSFET IRF520
MOSFET IRF520

PWM制御では信号のデューティー比を変えることで電力を制御してます。こちらの写真はPWM信号のオシロスコープで波形を確認している様子です。写真では伝わりにくいですが、デューティ比を0%〜100%に可変してます。この記事の最後で、動画でも紹介してます。

デューティー比が100%に近い状態
デューティー比が100%に近い状態
デューティー比が0%に近い状態
デューティー比が0%に近い状態

PWM制御でLEDを調光するプログラミング例

次のソースコードは、ESP32を使ってPWM制御でLEDを調光するプログラミング例です。 ledcWrite 関数を使うことで簡単にPWMのデューティー比を変えることができます。

cpp
/**
 * @date 2022-12-20
 * @author Toshihiko Arai
 * @copyright https://101010.fun
 */
#include <Arduino.h>

// PWMが使える端子は限られている
#define PWM_PIN 32
#define PWM_FREQ 100
#define PWM_CHANNEL 0
#define PWM_BIT 8

void setup() {
    pinMode(PWM_PIN, OUTPUT);
    ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_BIT);
    ledcAttachPin(PWM_PIN, PWM_CHANNEL);
}
void loop() {
    for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {
        ledcWrite(PWM_CHANNEL, dutyCycle);
        delay(5);
    }
    for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {
        ledcWrite(PWM_CHANNEL, dutyCycle);
        delay(5);
    }
}

ESP32とMOSFETを使ってLEDを調光している動画

実際にESP32とMOSFETを配線し、プログラミングでLEDを調光している様子を動画にしてみました。YouTubeの アイデアノート channel で公開中です。

関連記事

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

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

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

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

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

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

関連記事