サイトロゴ

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

著者画像
Toshihiko Arai

はじめに

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

つかうもの

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

ESP32

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

WiFiやBluetooth接続が必要なければ、他のArduinoでも構いません。

MOSFET IRF520

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

IRF520データシート

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

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

MOSFET IRF520の使い方

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

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

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

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

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

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

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

/**
 * @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 で公開中です。

関連記事