« ESP32-SOLO-1を使う | トップページ | LTspiceでフォノイコライザシミュレーション »

2021年8月11日 (水)

シングルコアESP32-SOLO-1とクロックダウンと低消費電力化について 11/6追記

前回予告したとおり、シングルコアのESP32-SOLO-1と従来のESP32(デュアルコア)の比較において、
低消費電力化の検証を行ったので、その報告をする。

【20211106追記】
この記事をあげた当初、電池持ちに関し「実稼働で35日」と記載したが、これは初期バージョンの数値で、現行バージョンでは再現しないため、比較対象とはせずに参考値とする。現行品ではESP32ノーマル品(デュアルコア)で18日程度。
初期バージョンと現行品の主な違いは次のとおり。
・ソフトに初期設定モードと、タイムサーバーによるsleep時間補正機能を追加。
・初期設定モード追加に伴い、SW1,JP1,LED,R2,R3,R4を追加。
これらの変更は消費電流にはほとんど影響を与えないだろうと考えていたが、実際には稼働日数35日→18日に短縮した。
●ESP32(ノーマル品)→ESP32-SOLOに変更した場合、実稼働18日→25日に改善した。(1.39倍)


1.測定に使ったWIFI気象計の概要
検証に使った回路は図1のとおりで、これは一定時間(実運用は900秒)毎に温度、湿度、気圧を測定し、測定結果をWIFIのUDPと、WIFI越しのFTPサーバーに送信する気象計だ。1回の測定、送信に要する時間は10秒前後で、測定、送信が終わったら次のタイミングまでDeepSleepするようになっている。ソフト開発はArduino。

Weathercheckersch
図1.今回の検証に使用したWIFI気象計回路図


今回の測定では図1に示すとおり、外部の電源から3.3VPを与え、直列抵抗Rsの両端電圧をオシロで観測し消費電流を算出した。
実際には、電源として3.7V400mAhのリチウムポリマ電池にTPS63000という昇降圧スイッチングレギュレータICを用いた3.3V電源回路を付加して運用しており、その際のレギュレータ消費電流IQはおよそ55μA。
回路図中、J1は書き込みおよびモニタ用のシリアル入出力で通常時は未使用、J2は書き込み時に使用するタクトスイッチでこれも通常時は未使用、LEDのD1とSW1およびJP1は設定時に使用するが運転中はオープン(未使用)、U1のBME280は温湿度気圧センサで、これはI2Cで接続していて、I2Cのプルアップ抵抗は各10kΩがモジュール側に実装されている。

このWIFI気象計の動作フローは次のとおり。

①Sleepから目覚める
②初期設定
③フラッシュメモリから動作設定を読込
④WIFI接続 → 接続ができるまで1秒ごとに10秒までリトライ、接続不可なら設定時間のsleepに入る
⑤温湿度気圧をBME280から取得、電池電圧をADCから取得
⑥NTPから現在の年月日時間を取得
⑦上記取得データをUDP送信
⑧上記取得データをファイル化してFTPサーバーに送信
⑨設定時間(=900秒)のsleepに入る

DJ HIGO宅のベランダに設置した気象計の送信データが見たい方はこちら
ただし、現在は設定時間1800秒で運用している。


2.測定条件
次の4通りについて消費電流の測定を行った。
①従来のESP32でCPUクロック240MHz動作
②従来のESP32でCPUクロック80MHz動作
③ESP32-SOLO-1でCPUクロック240MHz動作
④ESP32-SOLO-1でCPUクロック80MHz動作

3.測定結果
測定結果を表1に示す。測定内容の詳細については後述する。
動作時の測定電流の単位はミリアンペア・秒とした。これは電池持ちと平均電流の計算をしやすくするため。
たとえば、900mAsecであれば、これが900秒ごとに発生した場合は平均で900mAsec/900sec=1,つまり平均電流は1mAである。

表1.測定結果(20210818DeepSleep電流差し替え
Deepsleep

①DeepSleep電流
DeepSleep時の回路電流は、従来のESP32、ESP32-SOLO-1はほぼ同じだった。

②従来のESP32の動作電流
・クロック240MHzと80MHzでは差が10%以下であった。ただし、後述するが80MHzでは接続リトライのためか3.7秒ほど時間が余計にかかっているため、その影響で差が少ない可能性あり。

③ESP32-SOLO-1の動作電流
・クロック80MHzでは240MHzの75%程度に消費電流が減少している。
・クロック80MHzでの消費電流は従来のESP32(240MHz)にくらべ32%減となっており、明らかに効果が認められる。


4.測定データ
実際の測定データを以下に示す。

①DeepSleep電流波形
図2に従来のESP32、図3にESP32-SOLO-1のDeepSleep電流波形を示す。

Esp32sleep
図2.従来のESP32のDeepSleep電流波形
検出抵抗10kΩで検出。55mV/10kΩ=5.5μA


Esp32solosleep
図3.ESP32-SOLO-1DeepSleep電流波形
50mV/10kΩ=5μA

②動作電流波形
従来のESP32の240MHz、80MHzそれぞれの動作電流波形を図4、図5に、
ESP32-SOLO-1の240MHz、80MHzそれぞれの動作電流波形を図6、図7に示す。

20210811esp32_240mhz
図4.従来のESP32の240MHz動作電流波形
長いヒゲ状のピーク電流は無視した。櫛状の73mAの部分はデュティ1/3程度と仮定している。


20210811esp32_80mhz
図5.従来のESP32の80MHz動作電流波形
動作時間が240MHzの場合とくらべて3.7秒多い。WIFI接続のリトライなどが原因か。


20210811esp32solo240mhz
図6.ESP32-SOLO-1の240MHz動作電流波形


20210811esp32solo80mhz
図7.ESP32-SOLO-1の80MHz動作電流波形


5.考察
①リチウムポリマ電池による実動作時間
以上の測定結果による条件で、400mAhのリチウムポリマ電池で900秒ごとに動作させた場合の理論稼働時間は、

a. 従来のESP32でクロック240MHzの場合
・動作電流979mAsec、レギュレータIQ=55μA、Sleep電流5.5μA、測定間隔900秒とすると、平均電流Iav(mA)は
Iav=979/900 + 0.055  + 0.0055 = 1.148 (mA)
・400mAhリチウムポリマ電池での稼働時間Dt(h)は
Dt=400 / 1.148 = 348(h)=14.5(日)
と計算できる。
ところが実際にこの条件で動作させたところ、およそ35日の稼働となった。
原因としては、今回の測定精度、とくに動作波形の読み取り精度が甘いこと、また、400mAhの電池に対して放電終止電圧を何ボルトに設定するかによっても変わる。実際の稼働ではレギュレータの働きにより2.1V程度まで動作していた。(20211106削除)
実機による稼働時間は、
試験機①    18日
試験機②    18日
だった。

b.ESP32-SOLO-1でクロック80MHzの場合
上記測定結果によれば、ESP32-SOLO-1で80MHzで駆動した場合は665mAsecであり、消費電流は従来のESP32(240MHz)よりおよそ3割減が見込まれる。上述した実稼働日数35日に対して3割増とすれば45日程度の稼働日数となるが、これは現在実動検証中だ。(20211106削除)
上記試験機②をESP32-SOLO-1に差し替えて実測した稼働時間は、
試験機②(ESP32-SOLO-1に差し替え) 25日(3.9割増し)

②ESP32の動作クロック変更方法
ESP32の動作クロック変更は、Arduinoのsetup()で
int ret = setCpuFrequencyMhz(240);
とすればよい。()内にはクロック周波数(240,160,80,40,20,10)が使用できるが、今回は40MHz以下では動作しなかったため、下限を80MHzとした。初期値は240MHz。

【結論】
ESP32ノーマル品(デュアルコア)とESP32-SOLO-1(シングルコア)では、ディープスリープ電流には差がなかったが、実稼働時の消費電流には差があり、今回評価したWIFI気象計では、ESP32(デュアルコア、クロック240MMz)からESP32SOLO(シングルコア、クロック80MHz)に変更することで電池持ちが計算上3割、実測では3.9割改善した。
よって、クロック速度やマルチコアよりも消費電流が優先される用途には、ESP32-SOLOを80MHzで使用すると効果が期待できる。

| |

« ESP32-SOLO-1を使う | トップページ | LTspiceでフォノイコライザシミュレーション »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« ESP32-SOLO-1を使う | トップページ | LTspiceでフォノイコライザシミュレーション »