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

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

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

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

つかうもの

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

ESP32

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

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

MOSFET IRF520

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

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のデューティー比を変えることができます。

/**
 * @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 で公開中です。ぜひこちらの動画もご参考になさってみてください。

記事に関するご質問などがあれば、お問い合わせ までご連絡ください。
関連記事