IoTデバイスの消費電流は、無線送信、センサー読み出し、スリープといった動作状態によって変化します。 どの状態が消費エネルギーを支配しているかを調べるには、平均電流だけでなく、時間に沿った電流の変化を記録する必要があります。

瞬時電力を求める場合は、電流と同じ時刻の電圧も必要です。 オシロスコープなら二つの波形を同時に観測できますが、持ち出して現在値を確認する用途や、長時間記録する用途には大がかりです。 そこで、2チャンネルを同時に測定し、OLED表示とブラウザ記録を選べる50 mm角の測定器を作りました。

完成したMCP3911 2チャンネル電圧/電流測定器

OLEDによるハンディ計測とWebブラウザによる詳細解析の2モード

測定器には、配線や現在値をその場で確認する機能と、時間変化を記録して解析する機能の両方が必要でした。 それぞれに別の測定器を用意すると、入力回路と測定条件も二重に管理することになります。

この基板では、同じADC出力をOLED表示とブラウザ記録の両方に使用します。 USB未接続時は、STM32C011が取得した二つの現在値を128 × 64のOLEDへ表示します。 ブラウザ接続時は、測定値をFT234XD経由でPCへ送り、時間波形、FFT、統計値、演算結果として表示します。

ハンディ計測中の波形は基板内に保存されません。 波形を後から確認する場合は、測定前にブラウザを接続して記録を開始します。

ブロック採用した部品、方式役割
ADCMCP39112チャンネルの差動電圧を同時変換
制御STM32C011F6ADC制御、表示、データ送信
デバイス表示128 × 64 OLEDPCなしで現在値を確認
USBシリアルFT234XD、USB Type-C1.5 Mbaudのシリアル通信
バッテリー保護回路付き1セルLiPoUSB未接続時の電源
充電MCP73831USB Type-CからLiPoを充電
解析ダッシュボードReact + Viteブラウザ上で記録、演算、FFT、CSV処理

2基の独立ADCによる2チャンネル同時変換

電圧と電流から瞬時電力を求めるには、二つの値を同じ時刻に測定する必要があります。 入力回路の位相差を観測する場合も、チャンネル切替による時間差は測定誤差になります。

MCP3911は2基のADCを内蔵し、両チャンネルを同時に変換します。 今回は16 MHzのMCLK、PGA 1倍、OSR 4096とし、変換速度を976.5625 samples/sに設定しました。 標本間隔は約1.024 msで、ADCからは各チャンネルの24-bit符号付き整数を読み出します。

AMCLK = 16 MHz
DMCLK = AMCLK / 4 = 4 MHz
DRCLK = DMCLK / 4096 = 976.5625 Hz

ADCコードからADC入力ピン間の差動電圧への換算には、次の式を使います。

Vdiff = code × 1.2 / (2^23 × 1.5 × PGA)

係数1.5は実測による補正値ではなく、MCP3911の伝達関数に含まれる値です。 基板端子とADC入力の間には1 kΩと330 kΩの抵抗網があるため、定量測定では信号源インピーダンス、シャント抵抗の精度、配線抵抗を含めて校正する必要があります。 移動平均や指数平滑化はファームウェアで行わず、24-bitの測定値をホストへ送ります。

DDD基板規格と50 mm角の基板設計

EAGLEで設計した50 mm角2層基板のレイアウト

DDDでは、今後製作する基板の外形と取付位置を共通化するため、独自の基板規格を定めました。 外形は50 mm × 50 mmの角丸とし、直径3.2 mmの取付穴を四隅へ配置します。 穴の中心は、隣接する二辺からそれぞれ4 mmの位置です。

この測定器は、DDD基板規格の外形寸法と取付穴を採用する最初の公開作例です。 現在公開しているEAGLEデータでは、Dimensionレイヤーの角が直角のままです。 角丸外形は次の基板改版で反映します。

基板は2層で、右側に四つの測定端子と入力フィルター、中央にMCP3911とSTM32、左側にUSB Type-Cコネクター、下側にLiPo充電回路を配置しました。 各入力には1 kΩの直列抵抗、0.1 µFのコンデンサー、GNDへの330 kΩ抵抗があります。

MCP3911の内蔵1.2 V基準とPGA 1倍で精度が規定される差動入力範囲は、約−0.6〜0.6 Vです。 これとは別に、四つの入力端子を基板GNDに対して−1〜1 Vの範囲に収める必要があります。 入力は絶縁されていないため、商用電源や高電圧へ接続できません。

電圧測定時は、TH1–TH2間のR1とTH3–TH4間のR2を未実装とします。 電流測定時は、測定電流、必要な分解能、許容損失に合わせてシャント抵抗を実装します。 測定できる電流範囲は、選択したシャント抵抗によって変わります。

LiPo充電回路の設定抵抗は2 kΩで、公称充電電流は約500 mAです。 バッテリーには500 mAの充電を許容する保護回路付き1セルLiPoを使用し、CN1の極性を接続前に確認します。 また、充電終止電圧はMCP73831の品種によって異なるため、実装する完全型番をバッテリー仕様に合わせて確定する必要があります。

MCP3911、STM32、USB、充電回路を含む回路図

エラー検出付き固定長バイナリフレーム

テキスト形式は実装しやすいものの、途中から受信を始めた場合の再同期や、欠落、破損の検出に追加の処理が必要です。 UARTでは、1フレームを20 byteの固定長バイナリデータとしました。

オフセット長さ内容
02同期語 A5 5A
21プロトコルバージョン
31OLED表示状態
42シーケンス番号
64デバイス時刻(ms)
104Channel 0
144Channel 1
182CRC-16/CCITT-FALSE

同期語でフレーム先頭を探し、シーケンス番号で受信フレームの欠落を数え、CRCで破損を検出します。 ブラウザは500 msごとにキープアライブを送ります。 キープアライブが2秒間途絶えると、STM32はデータ送信を止めてOLED表示へ戻ります。

インストール不要の解析用Webダッシュボード

時間波形、統計値、演算ラインを表示したWebダッシュボード

ダッシュボードはGitHub Pagesで公開しており、専用アプリをインストールする必要はありません。 対応ブラウザでページを開き、Connectを押してFT234XDのシリアルポートを選択すると記録を開始できます。

デスクトップ版ChromeとEdgeではWeb Serialを使います。 Android版Chrome向けにはFT234XD用のWebUSB接続を実装していますが、現時点では実機未検証です。 iPhoneとiPadは、Web SerialとWebUSBを使用できないため対応していません。

ADCは常に976.5625 samples/sで動作します。 画面のSample rateを下げてもADC設定は変えず、UARTへ送るフレームを整数分周で間引きます。 シリアル受信とグラフ描画を分離し、受信レートを維持したまま表示更新を最大30 Hzに抑えました。

FFTは最大4096点を使い、DC成分を除去してHann窓をかけた片側RMSスペクトラムを表示します。 保持データ全体または選択範囲をCSVに保存し、同じダッシュボードへ読み込んで再解析できます。

IoTデバイスの消費電力を求める測定構成

本基板へ一般的な3.3 Vまたは5 Vの電源電圧を直接入力することはできません。 消費電力を求めるには、電源電圧を既知の定数として扱うか、外部分圧回路でChannel 0の入力条件に収めます。

安定化された3.3 V電源を既知の定数として扱い、Channel 1で0.1 Ωのローサイドシャント抵抗を測る場合、電流と瞬時電力は次の式になります。

current = channel1 / 0.1
power = 3.3 * channel1 / 0.1

電源電圧の変動も同時に測る場合は、Channel 0へ倍率Kの外部分圧回路を接続します。

load_voltage = channel0 * K
current = channel1 / R_shunt
power = channel0 * K * channel1 / R_shunt

外部分圧回路を含むすべての入力端子は、差動約−0.6〜0.6 V、対GND−1〜1 Vの条件を満たす必要があります。 シャントの接続方向によってChannel 1が負になる場合は、端子を入れ替えるか式の符号を反転します。

ダッシュボードは、演算ラインの現在値、平均値、最小値、最大値、Peak-to-peak、時間積分を表示します。 電力の時間積分から、動作周期ごとの負荷側消費エネルギーを比較できます。 電池寿命を見積もる場合は、これに電池容量、放電特性、電源変換効率、電源回路の待機電流を加味します。

低周波オーディオ回路の位相差観測

2チャンネルの同時変換は、オーディオ回路の入力と出力を比較するときにも使えます。 Channel 0で入力波形、Channel 1でアンプやフィルターの出力波形を測れば、チャンネル切替による時間差を含まない二つの波形を同じ時間軸に表示できます。

ダッシュボードは位相差を自動計算しません。 正弦波の周波数をf、二つの波形の時間差をΔtとすると、位相差の大きさは次の式で求められます。

|phase| = 360° × f × |Δt|

進みと遅れは、どちらの波形が先に同じ位相点へ到達したかで判定します。 ダッシュボード上で時間差を読み取るか、選択範囲をCSVに保存して外部の解析プログラムで計算します。

標本間隔は約1.024 msです。 時間差を1サンプル単位で読む場合、位相角の刻みは10 Hzで約3.7度、100 Hzで約36.9度になります。 補間や正弦波フィッティングを実装していないため、一般的なオーディオ帯域全体の位相解析には適しません。 十分に低い周波数で、アンプやフィルターの入出力波形を比較する用途を想定しています。

適用範囲と測定上の制約

この基板は、オシロスコープや絶縁計測器の代わりではありません。 入力は非絶縁で、差動電圧と対GND電圧の両方に制約があります。

変換速度は976.5625 samples/sで、ナイキスト周波数は約488.28 Hzです。 サブミリ秒の電流ピークは捕捉できず、ナイキスト周波数以上の信号は折り返して観測される可能性があります。 必要に応じて、測定対象に合った外部アナログローパスフィルターを追加します。

回路図、EAGLE基板データ、STM32CubeIDEプロジェクト、WebダッシュボードはMIT Licenseで公開しています。