※本記事にはプロモーション(広告)が含まれています。
5V と 3.3V のレベル変換は、遅い片方向なら抵抗2本の分圧、I2C のような双方向なら FET(BSS138)、速い信号は専用 IC が基本です。つなぐ信号ごとのおすすめは早見表、選び方は3つの質問で決まります。
最近のマイコンは3.3V で動くものが多く、センサや表示器には5V で動くものがまだたくさんあります。この2つをつなぐときに出てくるのが、レベル変換回路です。
ネットで調べると「分圧でいい」「専用 IC を使う」「FET が定番」と、いろいろな答えが出てきます。どれも正しいのですが、向いている信号が違います。この記事では、4つの方式を図で比べ、どの信号にどれを使うかを決められるようにします。

5V と3.3V をそのままつなぐと何が困るのか:向きで違う
5V の出力を3.3V の入力に入れると、入力の上限を超えて壊れることがあります。反対に3.3V の出力を5V の入力に入れると、H と読んでもらえないことがあります。向きによって、困ることが違います。
信号には向きがあります。5V の部品から3.3V のマイコンへ送る向き(5V→3.3V)と、マイコンから5V の部品へ送る向き(3.3V→5V)です。
| 向き | 困ること | データシートで見る所 |
|---|---|---|
| 5V→3.3V | 3.3V の入力に5V が入り、壊れることがある | 受ける側の入力電圧の上限(推奨動作条件と絶対最大定格) |
| 3.3V→5V | 3.3V の H が、5V の部品に H と読まれないことがある | 5V 側の VIH(H と読む電圧の下限) |
つまり、レベル変換は「上の向きは届くか」「下の向きは超えないか」の2つの問題です。

3.3V→5V:5V 側の VIH に届くかを確かめる
3.3V の出力は H でも最大3.3V です。5V で動く HC 系の IC は H と読む電圧(VIH)が約3.5V なので届きません。HCT 系なら VIH が2.0V なので、3.3V のままで H と読めます。
VIH は「この電圧以上なら H と読む」という下限、VIL は「この電圧以下なら L と読む」という上限です。その間は、H と L のどちらに読むか決まりません。
| 受ける側 | VIH(H と読む下限) | 3.3V の H は |
|---|---|---|
| 5V の HC(SN74HC04) | 4.5V で3.15V、6V で4.2V(5V では約3.5V が目安) | 届かない・余裕がない |
| 5V の HCT(SN74HCT04) | 4.5〜5.5V で2.0V | 届く |
| 3.3V の LVC(SN74LVC1G07) | 3〜3.6V で2.0V | 届く |
同じ5V の IC でも、HC と HCT で VIH が違います。5V の部品に3.3V の信号を入れたいときは、その部品のデータシートの VIH を見ます。HCT のように VIH が2.0V 前後なら、レベル変換なしでつなげます。
つまり、3.3V→5V では、5V 側の VIH が3.3V より十分低いかどうかが分かれ目です。

5V→3.3V:入力電圧の上限で「5V トレラント」かを確かめる
5V を3.3V の部品の入力に入れてよいかは、データシートの推奨動作条件の「入力電圧 VI」と、絶対最大定格の入力電圧で確かめます。VI の上限が VCC までなら NG、5.5V まで書いてあれば5V を入れてよい(5V トレラント)部品です。
たとえば SN74HC04 の推奨動作条件は、入力電圧 VI が0〜VCC です。3.3V で使うと、入れてよいのは3.3V までです。
一方、SN74LVC1G07 は、VCC が3.3V でも入力電圧 VI が0〜5.5V と書かれています。絶対最大定格も−0.5〜6.5V です。このような部品は、5V の信号をそのまま受けられます。
マイコンは、同じ IC でもピンによって5V トレラントかどうかが違うことがあります。ピンの表と注意書きまで確かめます。
絶対最大定格と電気的特性の表の見分け方を、ダイオードの例で練習できる
つまり、5V→3.3V は「入力電圧の上限が5V 以上あるか」。書いていなければ、5V を入れない前提で考えます。

なぜ5V を入れると壊れるのか:入力の保護ダイオードに電流が流れる
多くの IC の入力には、静電気を逃がすための保護ダイオードが、電源(VCC)と GND に向けて入っています。3.3V の IC に5V を入れると、このダイオードを通って3.3V の電源へ電流が流れ込みます。
保護ダイオードは、入力の電圧が電源より高くなったときに、その分を電源へ逃がす「逃げ道」です。静電気のような一瞬のものを逃がすためのもので、ずっと電流を流す場所ではありません。
SN74HC04 のデータシートでは、入力の電圧が VCC を超えたときに流してよい電流(入力クランプ電流)を ±20mA までとしています。これは絶対最大定格の値で、ふだん使ってよい値ではありません。
5V の出力をそのまま入れると、電流を止めるものがないので、大きな電流が流れることがあります。抵抗を1本入れて電流を小さくしても、その電流は3.3V の電源へ押し込まれ、電源の電圧を持ち上げてしまうことがあります。
入力の保護ダイオードが静電気を電源や GND へ逃がすしくみがわかる
つまり、保護ダイオードを当てにした「抵抗1本」は、レベル変換の方式ではありません。

レベル変換回路の4方式:分圧・FET・専用 IC・オープンドレイン
レベル変換回路は、大きく4つの方式に分けられます。片方向か双方向か、どれくらい速い信号か、で選ぶ方式が変わります。
| 方式 | 向き | 速さ | 部品 | 向いている信号 |
|---|---|---|---|---|
| ① 分圧 | 5V→3.3V だけ | 遅い信号向け | 抵抗2本 | UART の RX など |
| ② FET | 双方向 | 400kHz の I2C まで | MOSFET 1個+抵抗2本 | I2C |
| ③ 専用 IC | IC による | 速い信号も | IC 1個 | SPI・速い信号 |
| ④ オープンドレイン | 片方向(上げも下げも) | プルアップしだい | バッファ IC+抵抗 | リセット・割り込みなど |
どの方式も、5V 側と3.3V 側の GND は共通にします。電圧は GND を基準にした高さなので、GND がつながっていないと変換できません。
つまり、「向き」と「速さ」の2つがわかれば、方式はほぼ決まります。

① 分圧:抵抗2本で5V を3.3V に下げる
分圧は、5V の信号を抵抗2本で分けて、3.3V 付近まで下げる方式です。10kΩ と20kΩ なら、5V×20k÷(10k+20k)=3.33V になります。5V→3.3V の片方向にしか使えません。
抵抗を2本、縦につなぎ、その真ん中から電圧を取り出します。電圧は、抵抗の大きさの比で分かれます。
5V×20kΩ÷(10kΩ+20kΩ)=5×20000÷30000=3.33V です。5V 側が5%高い5.25V になっても、5.25×20000÷30000=3.5V です。3.3V 側の入力の上限を超えないかを、データシートで確かめます。
H のときに抵抗に流れる電流は、5V÷30kΩ≒0.17mA です。電池で動く機器では、この電流も考えに入れます。
分圧の抵抗を E24 の値から選び、誤差まで見積もる手順がわかる
つまり、分圧は「下げる向きだけ」の、いちばん安い方法です。

分圧の弱点:抵抗が大きいと、速い信号の形がくずれる
3.3V 側の入力や配線には、小さな容量(電気をためる性質)があります。分圧の抵抗が大きいと、この容量に電気がたまるのに時間がかかり、速い信号では H と L まで届かなくなります。
分圧の出力から見た抵抗は、R1 と R2 の並列で、10kΩ と20kΩ なら6.67kΩ です。入力と配線の容量を25pF とすると、時定数は6.67kΩ×25pF≒167ns です(容量は計算用の例)。
| 抵抗 | 時定数(25pF の例) | H のときの電流 | 4MHz の SPI |
|---|---|---|---|
| 10kΩ・20kΩ | 167ns | 0.17mA | L(0.8V)まで下がらない |
| 1kΩ・2kΩ | 17ns | 1.67mA | H と L に届く |
115200bps の UART なら1ビットは8.68µs です。10kΩ・20kΩ でも、10% から90% まで上がる時間は約2.2×167ns≒0.37µs で、1ビットの5% もありません。遅い信号なら分圧で十分です。
抵抗を小さくすれば速くなりますが、そのぶん電流が増えます。数MHz の SPI のように速い信号には、分圧ではなく専用 IC を使うほうが確実です。
つまり、分圧は「遅い片方向の信号」向き。速さが要るなら、抵抗を小さくするより方式を変えます。

② FET 方式(BSS138):1本の線に MOSFET を1個
FET 方式は、N チャネルの MOSFET 1個と、両側のプルアップ抵抗で、双方向に電圧を変える方式です。ゲートを低いほうの電源(3.3V)、ソースを3.3V 側、ドレインを5V 側につなぎます。I2C の SDA と SCL に1個ずつ使います。
この回路は、NXP の資料(AN10441)で紹介されている、I2C 用の双方向レベル変換回路です。向きを決める信号が要らず、どちらの側から L にしても、もう一方へ伝わります。
両側のプルアップ抵抗が、それぞれの電源の電圧で H を作ります。3.3V 側は3.3V、5V 側は5V の H になるので、電圧が変わります。
MOSFET がゲートの電圧で ON・OFF するしくみと、ボディダイオードがわかる
つまり、FET 方式は「FET 1個と抵抗2本」で I2C の双方向を作る定番の回路です。

FET 方式の3つの状態:どちらが L にしても、両側が L になる
FET 方式は、だれも L にしないとき、3.3V 側が L にしたとき、5V 側が L にしたときの3つの状態で動きます。どの状態でも、両側の H と L がそろいます。
AN10441 は、この回路を Standard-mode(100kbit/s)と Fast-mode(400kbit/s)の I2C で使えるとしています。H に上がる速さは、両側のプルアップ抵抗と線の容量で決まります。
つまり、FET 方式は「L だけを伝え、H はそれぞれの側が作る」しくみです。I2C のオープンドレインと相性がよい理由がここにあります。

FET の選び方:しきい値電圧が低い側の電源より十分低いもの
FET 方式の MOSFET は、しきい値電圧 VGS(th)(ON になり始める電圧)が、低いほうの電源電圧より十分低いものを選びます。BSS138 の VGS(th) は0.8〜1.5V なので、3.3V なら余裕があります。
| 項目 | BSS138(onsemi)の値 | 意味 |
|---|---|---|
| VDS | 50V | ドレインとソースの間にかけてよい電圧 |
| ID | 0.22A | 流してよい電流(連続) |
| VGS(th) | 0.8〜1.5V(標準1.3V) | ON になり始めるゲートの電圧 |
| RDS(on) | 最大6Ω(VGS 4.5V) | ON のときの抵抗 |
②の状態では、ゲートとソースの間に3.3V がかかります。VGS(th) の最大1.5V より十分高いので、FET はしっかり ON になります。
低い側が1.8V だと、VGS(th) の最大1.5V との差が小さく、ON になりきらないおそれがあります。その場合は、もっと低い電圧で ON になる FET か、専用 IC を選びます。
ON のときの抵抗による電圧の上がり方は小さく、5V 側のプルアップが4.7kΩ なら、5V÷4.7kΩ≒1.06mA×6Ω≒6mV です(6Ω は VGS 4.5V のときの最大値なので目安)。
つまり、FET は「低い側の電源で確実に ON になるか」で選びます。

③ 専用 IC:向きの決め方で選ぶ
専用 IC は、向きを DIR ピンで決めるもの、向きを自動で見分けるもの、I2C 専用のものに分かれます。I2C には TXS0108E や PCA9306、プルアップのない速い信号には SN74LVC1T45 や TXB0108 を使います。
| IC(TI) | 向きの決め方 | 向いている信号 | データシートの値 |
|---|---|---|---|
| SN74LVC1T45 | DIR ピンで決める | 片方向の速い信号 | 各ポート1.65〜5.5V、3.3V→5V で420Mbps |
| TXB0108 | 自動(向きを検知) | SPI・UART(プッシュプル) | 外付けのプルアップは50kΩ より大きく |
| TXS0108E | 自動(プルアップ内蔵) | I2C も SPI も | オープンドレイン1.2Mbps・プッシュプル110Mbps |
| PCA9306 | 自動(スイッチ) | I2C・SMBus 専用 | 3.3V↔5V、Standard・Fast-mode |
TXS0108E と TXB0108 は、名前が似ていますが使い道が違います。TXB0108 のデータシートには、外付けのプルアップは50kΩ より大きくすること、I2C や1-Wire のようなオープンドレインの線には使わないことが書かれています。I2C には TXS0108E か PCA9306 を使います。
TXS0108E と TXB0108 は、A 側の電源(VCCA)を B 側(VCCB)以下にします。3.3V を A 側、5V を B 側につなぎます。
つまり、専用 IC は「I2C か、それ以外か」で、まず種類を分けて選びます。

④ オープンドレイン:出力を相手の電圧でプルアップする
オープンドレインのバッファ(SN74LVC1G07 など)を3.3V で動かし、その出力を5V へプルアップすると、3.3V の信号を5V の信号に変えられます。L は IC が作り、H はプルアップ抵抗が相手の電圧で作ります。
SN74LVC1G07 は、入力とオープンドレインの出力が5.5V まで使え、上げる向きにも下げる向きにも変換できると書かれています。3.3V で動かすと、入力の VIH は2.0V なので、3.3V のマイコンの H を読めます。
出力が L のときは、IC が線を GND へつなぐので約0V です。H のときは出力が手を離し、4.7kΩ のプルアップが5V へ引き上げます。
流れる電流は5V÷4.7kΩ≒1.06mA です。H へ上がる時間は、プルアップ抵抗と線の容量で決まり、20pF なら10% から90% まで2.2×4.7kΩ×20pF≒207ns です(容量は例)。
プルアップ抵抗が線を H にするしくみと、値の選び方の基本がわかる
つまり、オープンドレインは「L は IC、H は相手の電圧のプルアップ」で電圧を変える方法です。

レベル変換回路の選び方:3つの質問で決める
レベル変換回路は、Q1 そのままつなげるか、Q2 双方向か、Q3 5V→3.3V の遅い信号か、の3つの質問で選べます。
遅い信号の目安は、UART の115200bps(1ビット8.68µs)くらいです。MHz の SPI は、分圧ではなく専用 IC にします。
つまり、まず「変換しなくてよいか」を確かめ、変換するなら向きと速さで決めます。

レベル変換の早見表:つなぐ信号ごとのおすすめ
答えだけ知りたいときは、つなぐ信号から方式を引きます。決めたあとで、使う部品のデータシートで電圧と速さを確かめます。
| 信号 | 向き | おすすめの方式 |
|---|---|---|
| UART(5V→3.3V の RX) | 片方向・遅い | ① 分圧 10kΩ・20kΩ |
| UART(3.3V→5V の TX) | 片方向 | 5V 側の VIH が2.0V(HCT など)ならそのまま、ほかは④ |
| I2C(SDA・SCL) | 双方向 | ② FET(BSS138)か PCA9306 |
| SPI(数MHz) | 線ごとに片方向 | ③ 専用 IC(SN74LVC1T45 など) |
| リセット・割り込み | 片方向・遅い | ④ オープンドレイン(SN74LVC1G07) |
| 5V トレラントの入力 | 5V→3.3V | そのまま(データシートで確認) |
表は考え方の例です。実際には、使う部品の VIH・VIL・入力電圧の上限・最大の速さで決めます。
つまり、早見表で方式の見当をつけ、データシートで「本当に大丈夫か」を確かめます。

実物で確かめる:両側の H と L をテスターで測る
組んだら、信号を H にした状態と L にした状態で、3.3V 側と5V 側の電圧をテスターで測ります。両側とも、その側の電源の電圧と0V 近くになれば OK です。
| 測る所 | マイコンが H | マイコンが L |
|---|---|---|
| A(3.3V 側) | 約3.3V | 0.4V 以下 |
| B(5V 側) | 約5V | 0.4V 以下(FET の分だけ数mV 高い) |
つまり、テスターで「止まった H と L」を両側で確かめ、速い信号はオシロで波形を見ます。

よくある失敗4つ:方式の向き・IC の種類・FET の向き・逆流
レベル変換で多い失敗は、I2C に分圧を使う、I2C に TXB0108 を使う、FET の向きやゲートのつなぎ先を間違える、抵抗1本で保護ダイオードに頼る、の4つです。
失敗1:I2C に分圧を使った
分圧は5V→3.3V の片方向だけです。I2C は3.3V 側からも L にするので、5V 側へ L が伝わりません。I2C には FET 方式か、I2C 用の IC を使います。
失敗2:I2C に TXB0108 を使った
TXB0108 はプッシュプルの信号用で、外付けのプルアップは50kΩ より大きくするよう書かれています。I2C の2.2kΩ や4.7kΩ のプルアップとは一緒に使えません。TXS0108E か PCA9306 を選びます。
失敗3:FET の向きやゲートのつなぎ先が逆
ゲートは低いほうの電源(3.3V)、ソースは3.3V 側、ドレインは5V 側です。ゲートを5V につなぐと、3.3V 側に3.3V より高い電圧が出ることがあります。回路図と部品のピン配置(S・D・G)を照らし合わせます。
失敗4:抵抗1本と保護ダイオードに頼った
5V から抵抗1本で3.3V の入力に入れると、電流は保護ダイオードを通って3.3V の電源へ流れ込みます。電源が持ち上がって、ほかの部品の動きがおかしくなることがあります。4方式のどれかにします。
つまり、つなぐ前に「方式の向き」「IC の種類」「FET の向き」「逆流しないか」の4つを確かめます。


