暖房をファンヒータから200Vのエアコンに変えてから、ブレーカが良く落ちるようになりました。契約電流が40Aなのに、湯沸ポット、コーヒーメーカー、電子レンジ、こたつなどを一斉につい使ってしまうので、仕方がありません。注意喚起の意味でこの商品をつけてみたのですが、電流表示がないのと更新が12秒間隔なので、いまいち使い勝手が良くありません。そこで目的に合った電流計を作ろうと思いました。
春めいてきたのでエアコンはほとんど電力を食わないようになってきたので、電流計が活躍するのは来シーズンの冬になります。
EMS 100J |
ネットで情報を集めていると、下記の記事に目がとまりました。解説的で、なんとなくわかった気持ちになります。電流計ではなく、電圧も測る電力計です。これをまねてみることにしました。元になったのはこちらのようです。消化しきれませんが、とても詳しく書かれている記事もあります。
主要部品
電流センサー
原理、出力電圧
CT方式電流センサの測定原理(AC専用)
引用元:HIOKI 電流センサの原理と技術情報
出力電圧の計算式
Eo=K・r/N ・Io
Eo:出力電圧………(Vrms)
K :結合係数
Io :貫通電流………(Arms)
r :外付負荷抵抗…(Ω)
N :巻数…………(ターン)
において(K=1)が理想CTとなります。
実際には、励磁電流・漏洩磁束・透磁率の変化など、諸々の要因により、CTの結合度は変化します。これを一括してCTの結合係数(K値)と定義し、使用条件により変化する様子を表したものが、結合係数特性図です。〔図-6〕〔図-7〕
この特性図から各CTの使用範囲・精度・直線性などが、より正確に把握できます。
動作原理
図3に示すように、変圧器は1次側と2次側の巻き数比に応じて、1次側に加えた交流(V1)を2次側で任意の電圧や電流に変換することができます。特に電流に変換することを目的としたものを「変流器」と言います。
図3 変圧器の原理
クランプメーターはこれを応用したもので、例えば図4のように1次側の巻数を1回として、2次側の巻数を20回とすれば、1次側に100Aの電流が流れれば、2次側には5Aの電流が流れます。
図4 変流器の原理
引用元:marutsu クランプメータの基礎と使い方
STC-013-050
購入したCTセンサーはSTC-013-050(仕様は50A/1V)です。ネットを探す限り外付負荷抵抗 r や巻数Nの情報はありません。上述の「出力電圧の計算式」で示す結合係数は外付負荷抵抗の大きさに影響を受けるようです。ネットを探索すると、下記のような2V/50Aの特性も出てきます。何が何だかわかりません。だからちゃんと測定してみます。測定結果(貫通電流とCTセンサ出力電圧)
貫通電流はクランプ式テスターUT210E(精度2.5%:2A/20Aスケールで0.05A/0.5A)で測定した実効値です。CTセンサ出力電圧はオシロスコープで実効値を読み取りました。また、カットオフ周波数72Hz(C=47uF, R=47Ω)のCRローパスフィルタを入れています。負荷はドライヤ、PC電源、LED電球などです。スイッチング電源のACアダプタでは波形がスパイク状になるので使用しませんでした。
このグラフの傾きが出力電圧の式における K・r/N になります。
一方、STC-013-050の出力電圧の仕様は 1V/50A = 20(mV/A) ですが、1Vをピーク値と解釈すれば、実効値表現で、20 / 1.41 = 14.2 (mV/A)ですから、この場合の結合係数Kは14.2 / 14.2 = 1.0 です。
同じように数字を当てはめると、CT2の結合係数は K=0.935 になりました。実はCT2は落下させてコアを割ってしまいました。きれいに合わせて組みましたが、その影響が出ていると思います。幸い特性はリニアなのでCT2は実験的に補正して使います。
測定時の波形を示します。3波形ともドライヤ負荷で見たものです。比較的きれいな波形です。2CH(青色)がCT1、1CH(黄色)がCT2です。やはりCT2が低めの値が出ています。
Io = 0.26 A |
Io = 6.36 A |
Io = 11.3 A |
AC電圧センサー
無負荷時の実測で、2次側Output 33Vp-p, 11Vrmsでしたので、下記の分圧回路で分圧させます。図は上記引用の”Arduinoで電力を計測し、スマートメーターのデータで検証する - Qiita”からお借りしました。
結果波形 上1CH:分圧 下2CH:input 電圧 |
ESP32 アナログ入力
ADCの特徴
- VDD 3.3Vを4096分割
- 精度は良くない。ゼロ点にオフセットあり。
- 2チャンネルのADCがある。ADC2はwifiと一緒には使えない。
今回は頭の整理を含めて、ADCの特性を測定してみます。各GPIOに0から3.3Vの電圧を加え、その時のanalogRead()の値をシリアルモニタで読み取ります。ADCには4段階のアッテネーション(ATT)があるので、それぞれで測定します。
GPIOによるバラツキがあるのかを調べる狙いもあって、下図のようにして、使用するGPIO32~35の4つのADCを同時に測定ました。3.3Vをボリュームで分圧させて、0V~をADCピンに入力しています。
// ESP32 ADC特性測定スクリプト #define TestPin0 32 // 測定するピンを指定 #define TestPin1 33 // 測定するピンを指定 #define TestPin2 34 // 測定するピンを指定 #define TestPin3 35 // 測定するピンを指定 // サンプリング用バッファ long VASamples[4]; void setup() { Serial.begin(115200); analogSetAttenuation(ADC_0db); // アッテネーターを設定 // analogSetAttenuation(ADC_2_5db); // analogSetAttenuation(ADC_6db); // analogSetAttenuation(ADC_11db); // pinMode(TestPin, ANALOG); } void loop() { VASamples[0] = 0; VASamples[1] = 0; VASamples[2] = 0; VASamples[3] = 0; for (int i = 0; i < 1000; i++) { // 1000回測定して //d += analogRead(TestPin); VASamples[0] += analogRead(TestPin0); VASamples[1] += analogRead(TestPin1); VASamples[2] += analogRead(TestPin2); VASamples[3] += analogRead(TestPin3); } Serial.print( ( VASamples[0]+500) /1000);// 四捨五入して平均値をシリアルに出力 Serial.print('\t'); Serial.print( ( VASamples[1]+500) /1000); Serial.print('\t'); Serial.print( ( VASamples[2]+500) /1000); Serial.print('\t'); Serial.println( ( VASamples[3]+500) /1000); Serial.print('\t'); delay(10000); }
ATT 0dBの時の測定データを一例に示します。ノイズの影響なのか値がばらつくので1000個のデータを平均しています。個々のGPIOではバラツキがないことが分かりました。
各々のGPIOのデータをグラフに表します。GPIO間でバラツキがなくすべてが一点のマークに集約されています。ATTによりゲイン(勾配)が異ななることや入力電圧の上下に制限があることがわかります。下側の制限は上記のESPRESSIFの資料によるとVrefと言うようです。この資料には測定可能な範囲も書かれていました。
減衰
測定可能な入力電圧範囲
ADC_ATTEN_DB_0
100 mV〜950 mV
ADC_ATTEN_DB_2_5
100 mV〜1250 mV
ADC_ATTEN_DB_6
150 mV〜1750 mV
ADC_ATTEN_DB_11
150 mV〜2450 mV
0dBの特性は2500mV付近に変曲点がありますが、他のATTでは変曲点がなく1次式で表現できます。Rー2乗値が1でリニアリティがとても高いと言えます。
各々の部品の特性が得られたので、キャリブレーション値を整理しておきます。GPIOのanalogRead()の値をADCと表現しました。また、Ebは今回実験的に求めた値で、ATTをー6dBに選んだ時の12bit(4096bytes)に相当する電圧幅を表します。