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はゲートのスレッショルド電圧が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を動かす必要があります。ロジックレベル変換モジュールの使い方は ロジックレベル変換モジュールの使い方|Arduino・ESP32・ラズパイ で詳しく解説してます。
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 で公開中です。