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

はじめに
この記事ではロジックレベル変換モジュールの使い方を解説いたします。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() {
(PWM_PIN, OUTPUT);
pinMode(PWM_CHANNEL, PWM_FREQ, PWM_BIT);
ledcSetup(PWM_PIN, PWM_CHANNEL);
ledcAttachPin}
void loop() {
(PWM_CHANNEL, 128); // duty 50%
ledcWrite(15);
delay}
関連記事
- ESP32でMOSFETを使ったPWM制御 (IRF520)
- ArduinoでマイクロサーボモータSG90の使い方
- Arduinoと可変抵抗でLEDの明るさ制御
- ADコンバータADS1115の使い方【ESP32・Arduino】
- 電磁弁とESP32で水道のオンオフを制御してみた