省電力系の設定を計測してみました。
現時点の情報ですので最新情報はM5StickC非公式日本語リファレンスを確認してください。
概要
USB接続のテスターを利用して、消費電流を計測しています。供給電圧は5Vですので、内部的にDCDCなどを経由してロスがでています。
充電機能は基本的にAXP経由で止めていますが、止めても少しだけ流れています。また、動作時の温度などで消費電流が変わる気がしますので絶対値ではなく、オプションを変更した場合の増減値を参考値として利用してください。
測定値は瞬間電流を目でみて記録していますので、精度は低いです。
CPU周波数
周波数(MHz) | 消費電流(mA) | 増減(mA) |
240 | 95.5 | 0.0 |
160 | 82.1 | -13.4 |
80 | 74.4 | -21.1 |
40 | 65.7 | -29.8 |
20 | 60.5 | -35.0 |
10 | 59.0 | -36.5 |
標準が240MHzで、下げた場合の消費電流の推移です。10と20だとほとんど差がないんですね。
スリープ
状態 | 消費電流(mA) | 増減(mA) |
電源OFF | 13.3 | 0.0 |
DeepSleepEXT0WakeUp | 17.0 | 3.7 |
DeepSleepEXT1WakeUp | 17.2 | 3.9 |
DeepSleepTimerWakeUp | 17.8 | 4.5 |
DeepSleepTouchWakeUp | 17.0 | 3.7 |
DeepSleepULPWakeUp | 17-33 | – |
LightSleepEXT0WakeUp | 18.4 | 5.1 |
LightSleepEXT1WakeUp | 18.2 | 4.9 |
LightSleepGPIOWakeUp | 18.3 | 5.0 |
LightSleepTimerWakeUp | 18.2 | 4.9 |
LightSleepTouchWakeUp | 18.2 | 4.9 |
LightSleepULPWakeUp | 18.2-19.3 | – |
WAKE | 98.8 | 85.5 |
ソースコードはGitHubのサンプルを利用しています。DeepSleepとLightSleepはもっと差があると思いましたが、こんなに差が少ないんですね。
ULPは動作していないときには省電力ですが、起動時には結構電力使っていました。LightSleepは増減が少なかったのですが、DeepSleepは非常に電力使っていたのでちょっと気になります。
スリープ設定
状態 | 消費電流(mA) | 増減(mA) |
標準 | 17.0 | 0.0 |
PERIPH OFF | 17.0 | 0.0 |
SLOW_MEM OFF | 16.8 | -0.2 |
FAST_MEM OFF | 16.8 | -0.2 |
ALL OFF | 16.8 | -0.2 |
下記コードを使って設定値をコメントアウトしながら計測しました。GPIOをPULLUPやHIGH設定にしていないので、周辺機器を切っても電流に差はありませんでした。
メモリはどちらかを切ると消費電流が下がりましたが、両方切っても変わらない謎の動きです。
void setup() { esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH , ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_start(); } void loop() { }
AXPスリープ
状態 | 消費電流(mA) | 増減(mA) |
通常 | 99.7 | 0.0 |
AxpSleep | 67.9 | -31.8 |
AXPのスリープです。主に画面への電源供給が止まります。画面の明るさを7とかにしたのとそれほど変化がなかったです。
まとめ
スリープの消費電流の結果が意外でした。GPIOのpinModeを変更した場合や、通信をした場合の計測もしていきたいと思います。
コメント
いつも参考にしております。
さて、現在、私は M5StickCplus2を用いて、内蔵バッテリーで
長時間稼働させるプロジェクトに取り組んでおります。
1. WiFiを使用する
2.日に数回、1分間程度動作し、動作完了後は deep_sleepする
4. Aボタンで起床させる
5. 省エネ化の為、80MHzで動作させる
このように動作させても2日程度しか動作しません。USBケーブル
にUSB電流計測器を挿入し、スリープには0mAになること、240MHz
動作に比べ、80MHzでの動作は省エネであることは確認しました。
後は何ができるでしょうか。アドバイスをいただけると
ありがたいです。
省電力は難しいですよね
可能であればPPK2を利用した電流測定がこのましいです
ただ内蔵バッテリーがあるので、厳密な測定は結構大変です
あと80MHzも測定が難しいのですがスポット的にWi-Fiを利用する場合には240MHzで接続と通信を早く終わらせて切断した方が総利用電力は少ない可能性があります
本当はディープスリープよりは電源オフがこのましいのですが、Plus2だと左側のボタンかRTCを使ったタイマー起動しかサポートしていません
あとは環境によるのですが、電源接続のあるESP32を近くにおけるのであればPlus2からより省電力のESPNOWを利用して、電源接続のあるESP32がWi-Fi接続をするなどの回避策もあります
Plus2は省電力よりなのですが、バッテリーでの稼働はそこまで強くないのでCapsule+LCDユニットとか、Station-Batとかの方がこのましいかもしれません
たなかまさゆき さん、アドバイスに感謝申し上げます。
電源OFFが望ましいのは同意ですが、電源スイッチの操作は結構面倒です。
初めて使う方はONに出来ない気がします。
とりあえず、モバイルバッテリーに接続して使うことにしました。
M5StickCPlus2は小さすぎるので、モバイルバッテリーと組でちょうど
よい大きさ(重さ)になると考えることにします。
USB端子か5V INから電源供給することでも起動できたと思います
省電力用の設計をすると普通に使うときに不便になったりと、なかなかぴったりのボードがないんですよね