sako_DIY が 2021年05月23日06時09分36秒 に編集
初版
タイトルの変更
PPK2を用いた高精度な電子回路の消費電流測定
タグの変更
電子工作
IOT
電流計
Arduino
RaspberryPi
ESP32
本文の変更
# 概要  ここ数年、電子工作界隈にはIoTの流れがきていて、電子回路+ネットワークが簡単に扱える物が沢山増えてきています。 IoT機器において重要な要素の1つとして、省電力であることが挙げられます。 特に、電池で動作するIoT工作だと動作する時間を計算するのに、消費電力がどのぐらいなのか測定して計算する必要があります。 しかし、そういった省電力機器の消費電流測定は、一筋縄で行かないことが多いのです。 # なぜIoT機器の消費電流測定が難しいのか 電池駆動のIoT機器の多くは、間欠動作をすることにより、消費電力を抑えている機器が多いです。 1日に1回起動し、あとはスリープして消費電流を抑える。 1時間に1回、1分に1回、10秒に1回......。 機器によって様々ですが、常に一定の消費電流であることのほうが少ないです。  また、 IoTデバイスの起動時とスリープの消費電流は、大幅に違います。 ESP32を例に取ると、上の写真を見れば分かる通り、 起動時に突入電流が、約1A近く流れ、その後、100mA~400mAで位置していますが、 deepsleep機能を用いてスリープさせると、なんと**約10μA程度**まで抑えることができます。 もっと省電力向きなマイコンだと数百nAレベルまで抑えられるそうです。 駆動時とスリープ時の電流の差が、1000倍以上なんてことはザラです。 ==短時間で、1000倍以上レンジの変化する電流の測定は、一般的な電流計(テスター等)だと不可能に近いです。== ほか選択肢として、オシロスコープが挙げられますが、高いですよねオシロスコープ。ほしいです(小声) # そんなときにはPPK2(パワープロファイラキットII)を使おう PPK2とはNordic Semiconductor社の販売している、動的消費電力の計測を目的としたハードウェアです。 [https://www.nordicsemi.com/Software-and-tools/Development-Tools/Power-Profiler-Kit-2](https://www.nordicsemi.com/Software-and-tools/Development-Tools/Power-Profiler-Kit-2) @[youtube](https://www.youtube.com/watch?v=B42lPvkUSoc) ++Nordic Semiconductor社は、超低電力(ULP) ワイヤレスチップを製造販売している会社で、有名なものとしてBLEマイコンのnRFシリーズがあります。 最近発売されたApple AirTagやMAMORIO等にそのnRFシリーズが使われているそうです。++ PPK2の特徴は以下のとおりです。引用元([https://www.mouser.jp/new/nordic-semiconductor/nordic-power-profiler-kit-2/](https://www.mouser.jp/new/nordic-semiconductor/nordic-power-profiler-kit-2/)) > ・カスタムボードに加えてすべてのNordic DKで瞬時および平均電流を計測 >・0.8V~5.0V (ソフトウェア構成式)の可変電源電圧範囲 >・最大1A電流計測 >・最小200nAまでの正確な測定 >・最小0.2µAの分解能 >・100kS/sサンプリング速度 >・最適な分解能を確実にする5通りの電流計測範囲の間での自動スイッチング >・±20%より優れた測定精度(平均電流計測) >・他のアプリケーションへのシンプルな移植が可能になるUSB通信 >・計測解析のためのデスクトップ・アプリケーション >・リアルタイム電流計測ディスプレイ >・ローエンド・ロジック・アナライザ・サポート用の8つのデジタル入力 >・デスクトップのパワープロファイラ・アプリ用のnRF Connectを介したサポート >・後処理を目的とした計測データのエクスポート まとめると、IoT機器のダイナミックに変化する電流の測定に対応、リアルタイムで確認でき、電源供給もでき、計測データのログを取りエクスポート さらに、8つのデジタル入力簡易ロジアナ付き。 至れり尽せりっていう感じですね。 ## 値段及び入手先 これだけの機能がついていて、値段は**約10,000円**です。 安いと思うか高いと思うかは、人それぞれだと思いますが、少なくとも私はお買い得だと感じました。 私はdigikeyで購入しました、ほかにもMouserでも扱っているようです。 **[digikey](https://www.digikey.jp/product-detail/ja/nordic-semiconductor-asa/NRF-PPK2/1490-NRF-PPK2-ND/13557476) [mouser](https://www.mouser.jp/ProductDetail/Nordic-Semiconductor/nRF-PPK2?qs=hd1VzrDQEGilgnS3iQ3EVw%3D%3D)** たまたま在庫切れのタイミングで注文してしまい、約1ヶ月待たされました。 # ハード ハードは以下の写真のとおりです。  **1 .USB電源専用入力** 電源入力用のUSB端子です。 接続しなくても動きますが、後述するソースメーターモード(PPK2から電源供給)で400mA以上使用する場合は、接続することが望ましいです。 **2. 電源SW** PPK2の電源SWです。 **3.USBデーター/電源入力** PPK2とPCとの通信用ポート **4.電流測定用端子類** GND:グランド VIN:外部電源入力(電流計モードのみで使用) VOUT:電源出力端子 **5.デジタル入力ピン** 8入力のデジタル入力ピン、簡易ロジアナとして使える。 # ソフトウェア PPK2はPCに接続して使用します。 その際に使用するソフトは、Nordic Semiconductor社の開発ツールソフトnRFConnectに含まれている、**Power Profiler**というアプリケーションを使用します。 ダウンロード先 nRF Connect for Desktop [https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-desktop#infotabs](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-desktop#infotabs)  インストール後起動し、**Power Profiler**をinstallしましょう。 インストールするとOpenが押せるようになります。  ここでPPK2をPCに接続すると左上SELECT DEVICEから選べるようになります。  データロガーモードのみ軽く解説します。 **1.MODE選択** **Souce meter/Ampere meter:** ソースメーターモードと電流計モードの選択 ソースメーターモードは、PPK2のVOUTから電源を供給します。供給した電流を測定できます。 電流計モードは、測定したい回路にPPK2のVIN-VOUTを直列につなぐことで電流計として使用できます。 **Set supply voltage :** ソースメーターモードにて供給する電圧を指定します。(0.8V~5V) **Enable power output :** ソースメーターモードにて、電源出力のON/OFFができます。 **2.サンプリングパラメーター設定** データーロガーモードのパラメータ設定です。 **XXXXXX samlpes per second:** 1秒間に測定する回数を指定できます。1回/秒~最大10万回/秒 まで指定できます。 **samlpes for XXX seconds:** ログを取る最大時間を指定します。 上記2つの設定によりログのデータ容量が計算され表示されています。 **3.スタート** 押すと測定がスタートします。 **4.Display Options** 右のグラフへの表示オプション設定です。 **Timestamp:** 右の測定グラフにタイムスタンプが表示されます。 **Digital channels:** PPK2のデジタル入力端子の情報を表示するかの設定です。 **5.Save Export/Screenshot** **Save Export:** ロギングしたデータをCSV等で保存できます。 **Screenshot:** グラフ部分のスクリーンショットが撮れます。 **6.DATALOGGER/REAL-TIME/ABOUT** **DATALOGGER:** データロガーモード、測定した電流をロギングできます。 **REAL-TIME:** リアルタイムモードにすると、測定データーがリアルタイムで表示されます。オシロスコープのように使用できます。 **ABOUT:** ソフトウェアバージョンや、PPK2の情報が見れます。 **7.グラフ** **LOCK Y-AXIS:** 縦軸を固定できます。大きく電流変化する場合は、固定したほうが見やすいです。 **10ms/100ms/1s/3s/10s/1min:** 横軸の時間を変更できます。 **LIVE VIEW:** OFFにするとグラフの描画更新を止める事ができます。 **電流グラフ:** マウスドラッグで移動、マウスホイールで拡大縮小できます。 **WINDOW:** グラフに表示されている領域の平均電流、最大電流、時間、充電量(電流✕時間)が表示されます。 **SELECTION:** SHIFTを押しながらマウスドラッグで選択した領域の平均電流、最大電流、時間、充電量(電流✕時間)が表示されます。 **8.デジタル入力** PPK2のデジタルに入力されたデジタル信号が表示できます。 表示するポートは、DIsplay Optionsで変更できます。 **8.ログ出力** ログが表示されます。 # Arduino (Nano)の消費電流を測定してみる ATMEGA-328Pの搭載された5V仕様のArduino NanoにサンプルスケッチのBlinkを書き込んで測定してみます。 接続は以下の通り、ソースメーターモードで測定するため、VOUTとArduinoのVIN、LOGICPORTのD0をArduinoD13ピンに接続します。  ```arduino:Lチカ #define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } ``` Power Profilerの設定は、 ・ソースメーターモード(5V) ・100000 samples per second ・Digitalcannels を0のみ表示 に設定しました。 PPK2で測定した結果は以下の通りです。  起動後1秒毎に電流が変化する様子が確認できると思います。 また下部のデジタル入力表示もそれに合わせて変化しています。 次にLチカ部を拡大2周期分選択してみます。  LEDON時の消費電流が約17mA LED OFF時の消費電流が約14.5mA 平均して**15.53mA**であることが確認できます。 もし5V 2000mAhのバッテリーが存在して、このシステムを動作させた場合 2000[mAh]/15.53[mA]=128.78[h]=5.37[day] ということで、約5日弱動作すると概算できました。 ++実際は、使用するバッテリーの時間率、電圧変化を考慮する必要があるため、この計算通りにはなりません++ # RaspberryPi picoの消費電流を測定してみる Raspberripi pi picoにCircuitPythonで内蔵LEDでLチカさせてGP25ピンの電流を測定してみます。 接続は以下の通りです。VOUTからPICOのVSYSへ、GP25はピンアウトされていないようなので、LOGICPORTは未接続です。  ```arduino:Lチカ(CircuitPython) from machine import Pin import time while True: led = Pin(25, Pin.OUT) led.value(1) time.sleep(1) led.value(0) time.sleep(1) ``` Power Profilerの設定は、 ・ソースメーターモード(5V) ・100 samples per second ・Digitalcannels 非表示 に設定しました。 PPK2で測定した結果は以下の通りです。  拡大すると、  LEDON時の消費電流が約21.5mA LED OFF時の消費電流が約20.5mA 平均して**20.89mA**であることが確認できます。 # ESP32の消費電流を測定してみる ESP32([ESPr® Developer 32](https://www.switch-science.com/catalog/3210/))では3パターン測定してみようと思います。 ・ただのLチカ ・待ち時間にdeepsleepしてLチカ ・deepsleepしたままulp(コプロセッサ)でLチカ 回路は3パターンとも同じで以下のとおりです。VOUTは3V3端子に、内蔵LEDがないため、D13にLEDを接続しています。 fritzingライブラリをお借りしました。[DEKOのアヤシいお部屋。](https://ht-deko.com/)  Power Profilerの設定は、 ・ソースメーターモード(**3.3V**) ・100 samples per second ・Digitalcannels D0のみ表示 に設定しました。 **1. まずただのLチカ** ```arduino:Lチカ #define LED_PIN 13 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } ``` 測定結果は以下の通り、  平均電流は**38.83mA**となりました。 **2. 1秒間待つ間deepsleep。** ```arduino:Lチカ(deepsleep wait) #include "driver/rtc_io.h" #include "esp_deep_sleep.h" RTC_DATA_ATTR int bootCount = 0; void setup() { bootCount++; rtc_gpio_init(GPIO_NUM_13); rtc_gpio_set_direction(pin_led,RTC_GPIO_MODE_OUTPUT_ONLY); if( bootCount% 2){ rtc_gpio_set_level(pin_led,0); }else{ rtc_gpio_set_level(pin_led,1); } esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); esp_sleep_enable_timer_wakeup(1000000); esp_deep_sleep_start(); } void loop() { } ``` 測定結果は以下の通り、  プログラムの仕様上約1.1秒ごとのLチカになってしまいましたが、 平均電流は**6.07mA**となりました。 **3. deepsleepしたままulp(コプロセッサ)でLチカ** ++~勉強中しばしおまちください~++ # 最後に 実際に購入して使ってみて、計測可能な電流が1Aまでというのが多少ネックなると思っていましたが、省電力デバイスに限っての使用では十分な機能でした。 特に、ソースメーターモードで0.8V~5Vを自由に可変できる機能が、3.3V系マイコン、5V系マイコン両方で使用できる為とても便利に感じました。 自分の作ったデバイスの詳細な消費電流を知りたい方は、ぜひ使ってみてはいかがでしょうか。 ++本投稿の情報の利用、内容によって、利用者にいかなる損害、被害が生じても、著者は一切の責任を負いません。ユーザーご自身の責任においてご利用いただきますようお願いいたします。++