ESP32マイコンの推奨電源電圧範囲は2.3〜3.6V。リチウムイオン電池の定格電圧は3.7Vなのでリチウムイオン電池一本でESP32を十分駆動可能だが、リチウムイオン電池直結だとマイコンを壊す恐れがあるためLDOを挟む必要がある。今回は手持ちの幾つかのLDOを使ってリチウムイオン電池からESP32への給電を試してみた。
LDOについて
リチウムイオン電池からESP32など3.3V駆動のマイコンへの電源供給にはDCDCコンバータという選択肢も無くはないのだが、リチウムイオン電池の電圧範囲がマイコンの推奨電圧範囲とかなり重なっておりLDOを使った方が全体的な効率の面で有利だ。LDOとはLow Drop Outの略で、入出力電圧差が小さいリニアレギュレータのこと。
LDOのブロック図
下はXC6202というLDOのデータシートから拝借した内部回路のブロック図で、LDOの回路としては典型的な構成。基準電圧と出力電圧をコンパレータで比較してMOSFETを制御するような仕組みとなっている。

LDOの入出力電圧差について
LDOの入力電圧と出力電圧の関係は通常以下のようになる。
- 入力電圧が定格電圧+⊿V以上の時→出力電圧=定格電圧
- 入力電圧が定格電圧+⊿V未満の時→出力電圧=入力電圧-⊿V
下は上記XC6202の3V定格出力タイプの入出力電圧特性グラフ。出力電流が1mAの時は⊿Vが殆ど0だが、出力電流が増加するにつれて⊿Vも増加し100mA出力時は⊿Vが250mVとなる。

上の等価回路を見れば分かる通りVinとVoutの間にはMOSFETが挟まっているだけなので、MOSFETがオンすれば入出力が(MOSFETのオン抵抗を挟んで)ほぼ直結状態となる。⊿Vは要するにMOSFETのオン抵抗による電圧降下であり、それ故出力電流に比例して値が大きくなるというわけだ。つまり、LDOの挙動をざっくりまとめると以下のような感じ。
- 入力が定格電圧未満→内部のMOSFETがオンして入出力で回路が直結される
- 入力が定格電圧以上→電圧リミッタが働き、出力が定格電圧に張り付く
ESP32への電源供給の条件
ESP32のデータシートで”Power Scheme”の節を確認すると、ESP32への供給電圧範囲は2.3〜3.6Vとの記載がある。
ESP32のデータシートには絶対最大定格が3.6Vとの記載もあり、これは「供給電圧が3.6Vを超えると壊れるよ」という意味だから、満充電状態のリチウムイオン電池などを直結すると3.6Vを超えてマイコンを壊す。このため、LDOの「高圧側では定格電圧に張り付き、低圧側では入出力が直結される」という特性は非常に都合が良く、LDOを介してESP32へ給電することでリチウムイオン電池の容量を効率よく使い切ることが出来る。
一方ESP32データシートの”Power Scheme”の節には電圧以外にも「500mA以上」という電流の条件も挙げられている。普段ESP32を使っていると電流はせいぜい数十mA程度しか流れないイメージがあるのだが、ESP32は無線(WiFi, Bluetooth)を有効にするとピーク時の消費電流が数百mAに跳ね上がるため非力なLDOだと使い物にならない。
ESP32で利用可能な3.3V LDO
手持ちの3.3V出力LDOを幾つか試した結果を下の表にまとめる。「最大電流」と「入出力電圧差」はいずれもデータシートから拾った値。入出力電圧差は出力電流に依存するので、値に対応する出力電流も併記してある。
いずれのLDOでもESP32の起動は問題なく行えたが、WiFiをOnすることが出来たのはXC6222のみという結果だった。最大電流や入出力電圧差の性能的にXC6222が頭一つ出ている感じだが、XC6222はAliExpressで取扱が無いのが残念なところ(他は実際全てAliExpressで購入した)。
品番 | 最大電流 | 入出力電圧差(@出力電流) | ESP32起動 | ESP32 WiFi |
---|---|---|---|---|
LP2985 | 150mA | 280mV(@150mA) | ○ | ✕ |
MCP1700 | 250mA | 178mV(@250mA) | ○ | ✕ |
XC6206 | 200mA | 250mV(@100mA) | ○ | ✕ |
XC6222 | 700mA | 120mV(@300mA) | ○ | ○ |
「WiFiをOnする」とはMicroPythonで以下のコードを実行してWiFiアクセスポイントを有効化させること。(このコードに関する詳細は過去記事を参照)
import network
ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid='HOGEHOGE',password='fugafuga',hidden=False)
ap_if.active(True)
上記コードによりWiFiをOnにすると消費電流が増えるため、非力なLDOでは電圧ドロップが大きくなって(或いはLDOの短絡保護が働いているのかも)ESP32の低電圧検出に引っかかり以下のメッセージを吐いて再起動してしまう。
Brownout detector was triggered
ESP32のリチウムイオン電池駆動の様子
下はESP32 DevkitCボードを使った回路をブレッドボード上に組み、18650リチウムイオン電池からLDO経由で回路に電源供給する様子の写真。3.3V LDOは変換基板にハンダ付けして写真右下の小さなブレッドボードに挿してあり、その出力をDevkitCの3V3端子に接続してESP32へ給電している。

ちなみに写真上側のブレッドボードに組んだのはMicroPythonでプログラムで動作する積算電流計で、詳細は別記事にまとめた。
右下小さなブレッドボードでLDOの隣はTP4056搭載のリチウムイオン充電基板。この充電基板についても別記事にまとめてある。
まとめ
リチウムイオン電池からESP32に給電するための3.3V LDOについて調べてみた。WiFiを使う場合は少し高性能なLDOが必要だが、ESP32を起動するだけなら200mAクラスの安価なLDOでも問題なく使える事がわかった。
ESP32をバッテリー駆動出来るようになったので、モバイルでのデータ測定など電源の無い所でのESP32マイコンの用途が広がる。色々活用していきたいと思う。
コメント