真の実効値(TrueRMS)の計算
前回の記事でCTからの交流信号をADS1015で変換できることは確認したため、いよいよCTの入力を電圧(電流)値として取り込む方法を考えます。
今回計測対象とするのは交流信号のため、実効値・最大値・平均値といった概念が必要になります*1。
予備試験として手近な機器の電流波形をCTを使って観測したところ、特に省電力の機器ほど波形のゆがみが大きく、中でも安物のスイッチング電源はもはやサイン波とも言えない代物が多いことが分かりました。これらの測定で、波形が正弦波であると仮定する平均値方式ではまともな計測結果が期待できません。
よって、真の実効値(TrueRMS)と呼ばれる方式にチャレンジしようと思います。
テクトロニクスの資料によれば
電流の実効値は、電流の二乗平均平方根で求められます。
だそうです。RMS: Root Means Square たるゆえんですね。
https://download.tek.com/document/55Z_29828_0_3.pdf
以下の数式で表される通り、真の実効値は瞬時値の二乗の総和をサンプル数で割り(=平均値)、平方根を取ればいいわけです。
試しにを0~360°観測したと仮定してRMSをExcelで計算してみたところ、0.707が得られました。完全なsin波であれば振幅の最大値は実効値の倍なので、振幅±1の時の実効値はとなることから、正しい値になっていそうです。
サンプリング速度
商用電源の周波数は地域によって50または60Hzですので、1周期は以下です。
ADS1016の最大サンプリング速度は3300サンプル/secなので、1周期あたりのサンプル数は以下です。
なので、
- 50Hz地域なら20.0ms以内に66回以上サンプリング
- 60Hz地域なら16.6ms以内に55回以上サンプリング
できれば、少なくともADS1015の最大サンプリング能力を使い切ることができるはずです。これが電流波形のサンプリングとして十分かはわかりませんが。。
このことから、最初はタイマ割込みを使って303μS毎に読み込みをかける処理を考えたのですが、I2C通信にもタイマ割込みを使っている?らしく、割り込みをさせると正常に動作できなくなる問題が起きました。I2C通信の間は割り込みをかけない処理にしたり、関係しそうな変数をvolatileで宣言したりと少し試行錯誤してみましたが、単純に解決できそうになかったため、最終的には一定時間の間できるだけサンプルを取る方式に変えています。
CTの選定と特性
今回使う予定のCTは、台湾DER EE社製の分割型CT SCT-10です。80Armsまで計測可能で、秋月電子でも扱いがあります。
https://ja.deree.com.tw/sct-10-split-core-ct.html
電流センサー(CTセンサー・変流器) 80A Φ10mm 分割型 SCT-10: 計測器・センサ・ロガー 秋月電子通商-電子部品・ネット通販
数年前にこの制作をリサーチしたときはU_RD社製CTL-10-CLSが候補だったのですが、このDER EE製SCT-10は見た目からスペックまでそっくりです。実物を比較していないのですがOEMなのでしょうか・・・?
超小型クランプ式交流電流センサ(φ10/80Arms)[仕様] | 株式会社ユー・アール・ディー
CTの出力電圧は、以下の式で求められます。
ここで
SCT-10は巻き数3000で、今回は負荷抵抗に100Ωを選定しました。結合特性は比較的特性の良好な小電流部分でしか使わないため1で計算します。
フルスケール20Armsを目標にすると、最大の出力電圧は約±0.95V程度となりそうです。したがって、ADS1015のPGAゲインは±1.024V(4倍)を選べばいいでしょう。
(急に登場したですが、貫通電流はRMSなので、この公式だとも実効値になります。なのでp-pを求めるには倍する必要があると思ってます。違いますかね?)
電圧(電流)の分解能
ADS1015の出力値は、0x7FF0(32752)~ 0x8000(-32752)になります。・・が、ADコンバータ分解能は12bitのため16bitのうち末尾4桁は常時0なので、実際には0x7FF(2047)~0x800(-2048)の4096ステップ()になります。
入力 | 測定値(16bit) | 測定値(12bit) |
+1.024V | 0x7FF0 (32752) | 0x7FF (2047) |
0V | 0x0000 (0) | 0x000 (0) |
-1.024V | 0x8000 (-32752) | 0x800 (-2048) |
PGAゲインを4倍にしてフルスケール±1.024Vとすれば、最小分解能1bitあたり0.5mVになります。先ほどのCTの出力電圧の式を用いると、
となり、十分な分解能が取れそうです(あくまで分解能で、精度はまた別の話)。100V電源であれば×100で1.5W単位ですね。
まとめ
現在検討している電力計は以下で実現できそうです。
- ADS1015のPGAを4倍に設定し、CTセンサSCT-10を負荷抵抗100Ωで差動入力させる
- 1サイクルあたり55または66回以上サンプリングする
- サンプリングした値の二乗平均平方根を求める
- 求めた値に0.5mVを乗じて、実効電圧 Vrms (mV)を求める
- より を使って実効電流を求める
- 電圧100Vをかけて皮相電力(VA)にする。力率は考慮しない(できない)ので、これを有効電力(W)として扱う
次はこれを実装してみます。
*1:このあたりは計測器メーカなどが分かりやすい解説をしている記事が多数あるため本稿では割愛します