ロジックレベル変換モジュールの使い方|Arduino・ESP32・ラズパイ

ロジックレベル変換モジュールの使い方|Arduino・ESP32・ラズパイ

この記事ではロジックレベル変換モジュールの使い方を解説いたします。ArduinoやESP32、ラズパイなどでI2Cデバイスを取り扱うときに、信号レベルがミスマッチな場合にロジックレベル変換モジュールを使って5V信号を3.3Vに降圧したり、3.3V信号を5V信号へ昇圧できます。

つかうもの

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

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

Amazonで購入したこちらのロジックレベル変換モジュールを使用します。

ESP32

この記事ではESP32を例に解説いたします。

MOSFET IRF520

そもそもロジックレベル変換モジュールを使ってみるきっかけとなったのは、MOSFETのIRF520をESP32のGPIOで制御するためでした。IRF520はゲートのスレッショルド電圧が4Vと高めで、ESP32のGPIO出力では電圧が足りずうまく動作しなかったのです。

▼ 以前ラズパイでもIRF520を扱いましたが、ラズパイのGPIOは3.3V出力のはずですがなぜか直結で制御できてました。

MOSFETでなくても、お困りのI2Cデバイスを使ってもらっても構いません。

その他

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

ロジックレベル変換モジュールの使い方

ロジックレベル変換モジュールの各ピンの役割

こちらは私が購入したロジックレベル変換モジュールの基板の拡大写真です。

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

各ピンの役割は次のとおりになってます。

ピン名称 役割
HV1 レベルHチャネル1
HV2 レベルHチャネル2
HV 5V
GND 0V, GND
HV3 レベルHチャネル3
HV4 レベルHチャネル4
LV1 レベルLチャネル1
LV2 レベルLチャネル2
LV 3V3
GND 0V, GND
LV3 レベルLチャネル3
LV4 レベルLチャネル4

4チャネル分の信号を変換できます。素子にはMOSFETが使われているようです。LVにLOW信号の電源3.3Vを繋ぎ、HVにHIGH信号の電源5Vを繋いでおきます。GNDは共通で繋ぎます。

ESP32とロジックレベル変換モジュールの配線図

実際にESP32とロジックレベル変換モジュールを配線させた図です。ここではMOSFETを使ってますが、4ch分ありますのでI2Cでの配線もお分かりいただけるかと思います。

ESP32とロジックレベル変換モジュールの配線図
ESP32とロジックレベル変換モジュールの配線図

オシロスコープで波形の確認

実際に出力信号をオシロスコープで確認してみました。LV1とHV1を比較したところ、確かに3.3Vが5V信号へ変換されています。

オシロスコープで3.3Vと5Vの信号波形の確認
オシロスコープで3.3Vと5Vの信号波形の確認

ESP32のI2Cのクロック周波数はデフォルトで100kHzが使われるようですので、100kHzのPWM信号で確認してみました。5V変換後の立ち上がりは丸みを帯びてますが、これでもI2C通信は可能なのだと思います。

オシロスコープで100kHzのPWM信号の確認
オシロスコープで100kHzのPWM信号の確認

PWM(100kHz)のプログラミング例

先ほどオシロスコープで確認するために作ったPWM信号のソースコードは次のとおりです。ご参考になさってみてください。

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

// PWMが使える端子は限られている
#define PWM_PIN 33
#define PWM_FREQ 100000 // 100kHz -> default I2C clock freq
#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() {
    ledcWrite(PWM_CHANNEL, 128); // duty 50%
    delay(15);
}
記事に関するご質問などがあれば、お問い合わせ までご連絡ください。
関連記事