ロジックレベル変換モジュールの使い方|Arduino・ESP32・ラズパイ
この記事ではロジックレベル変換モジュールの使い方を解説いたします。ArduinoやESP32、Raspberry PiなどでI2Cデバイスを取り扱うときに、信号レベルがミスマッチな場合にロジックレベル変換モジュールを使って5V信号を3.3Vに降圧したり、3.3V信号を5V信号へ昇圧できます。
つかうもの
この記事でつかうものをご紹介いたします。
ロジックレベル変換モジュール
Amazonで購入したこちらのロジックレベル変換モジュールを使用します。
ESP32
この記事ではESP32を例に解説いたします。
MOSFET IRF520
そもそもロジックレベル変換モジュールを使ってみるきっかけとなったのは、MOSFETのIRF520をESP32のGPIOで制御するためでした。IRF520はゲートのスレッショルド電圧が4Vと高めで、ESP32のGPIO出力では電圧が足りずうまく動作しなかったのです。
▼ 以前Raspberry PiでもIRF520を扱いましたが、Raspberry Piの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での配線も理解できますね?
オシロスコープで波形の確認
実際に出力信号をオシロスコープで確認してみました。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);
}