サイトロゴ

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

著者画像
Toshihiko Arai

はじめに

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

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

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

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

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

ピン名称 役割
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での配線も理解できますね?

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

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

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

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);
}

関連記事