ESP32で電力計を作るための予備試験

published_with_changes 更新日:

labelESP32 labelIoT label電力計

目次
  1. データのサンプリング方法
    1. キャリブレーション値
    2. 電流、電圧の換算式
      1. 貫通電流
      2. 電圧
    3. 測定可能な範囲
    4. サンプリング能力
  2. AC電圧の周波数測定
  3. 仮想グランドの調整
    1. 対策前
    2. 対策後
    3. 仮想グランドに出るノイズの原因は5V電源
      1. PCのUSBポート
      2. ダイソーのDCアダプタ
      3. iphoneのDCアダプタ
  4. 予備試験(電圧、電流測定)
    1. 測定回路
    2. 電流波形
    3. 電流特性
    4. 電圧特性

データのサンプリング方法

キャリブレーション値

前報でまとめたキャリブレーション値を再度載せておきます。ADCはanalogRead()の値です。

CT1CT2電圧検出
トランス
備考
KCT = k・r/N [rms]13.823/100012.979/1000
定義:Eo = KCT x Io
KCT = k・r/N [p-p]1.414 x
13.823/1000
1.414 x
12.979/1000
KVT = Vo / Vi [rms]102.2/1.032定義:Vo = KVT x Vi
ADC / Eb = 4096 / Eb2.2447入力電圧(mV)に対する
analogRead()値の感度
Eb [mV]1825ESP32のAtt -6dBのとき利用可能な
アナログ入力電圧(mV)

電流、電圧の換算式

貫通電流

出力電圧の式を変換すると次の式になります。示すのはCT1の場合です。最終的には実験的に測定結果の合わせ込み(係数掛け)をするつもりなので、とりあえずはCT1もCT2も同じキャリブレーション値を使って進めます。

I0=EoKCT=Vi1.414KCT    =11.414×13.823×ADC2.2447I_{0}=\dfrac{E_{o}}{KCT}=\dfrac{\dfrac{V_{i}}{1.414}}{KCT}\\ ~~~~=\dfrac{1}{1.414\times 13.823}\times \dfrac{ADC}{2.2447}

KC=1.414×13.823×2.2447KC=1.414\times 13.823\times 2.2447 とおけば、

I_{0}=\dfrac{ADC}{KC}\tag{1}

電圧

V0=KVT×Vi    =102.21.032×ADC2.2447V_{0}= KVT \times V_{i}\\ ~~~~=\dfrac{102.2}{1.032}\times \dfrac{ADC}{2.2447}

ピーク値で表すため、KV=1.414×102.21.032×2.2447KV=1.414\times \dfrac{102.2}{1.032\times 2.2447} とおけば、

V_{0}={KV} \times {ADC}\tag{2}

測定可能な範囲

ESP32のAtt -6dBのとき利用可能な電圧は、前述したのように100mVから1925mVの1825mVです。これを仮想グランドを基準にして正負に振り分け、正負の利用できる電圧と電流を計算すると下記の表になります。正負を均等に振り分けるためには、仮想グランドの電圧は3.3Vの中点ではなく30%程度になります。100kΩと47kΩで分圧しました。

ADC min仮想
グランド
ADC max
analogRead()021354096bytes
ESP32入力電圧 Vi10410551929mV
電圧変化幅 δV-9510874mV
測定可能な電流-23021A rms
測定可能な電圧-1330122V rms

サンプリング能力

ESP32のADCサンプリングについてデータシートには、RTC controllerで200ksps(kiro samples per second)と出ています。RTCとはRealtime Clockで、ESP32のADCはデフォルトでRTC contorllerで動いているようです。

毎秒最大で200,000サンプルを得られるという意味だと思います。AC100V電源の周波数は拙宅では60Hzです。サンプリングは電流2ch、電圧2ch、仮想グランド電圧1ch、電源周波数(次項参照)1chの合計5chなので、1チャンネルあたり1サイクルでサンプリングできる最大値を求めると次の計算になり、十分な能力があると言えます。

200,000 / ( 60 x 5 ) = 667 samples

別の見方として、サンプリングに要する時間から検討してみます。200kspsとは1サンプリングあたり、1/200k = 5μsecで行うという計算ですが、ネットで情報を探すと11μsecあたりが実力のようです。この場合、最大90kspsになって、1サイクルあたり375samplesのサンプリング数になります。1サイクルあたり100個サンプリングするとしても、まだゆとりがあるので、ここは問題ないと思います。

AC電圧の周波数測定

ネットを徘徊していると興味深い記事に出会いました。AC100Vの電源周波数の測定をされてます。これを組み込んでみたくなりました。
Arduinoで商用電源周波数を測定(ESP32編)

Arduinoで商用電源周波数を測定(ESP32編)

◆まえがき電源周波数測定の話の続きです。前回は Arduino NANO (ATmega328P) を使いましたが 、今回はESP32でやってみます。ただ、簡単に出来ると思っていたのに思わぬ苦戦を強いられました。◆電源周期の周期の測定方法前の記事では、電源の周期測定の方法として micros() の値を参照する方法と、タイマーカウンタを使う二つの測定方法を試しました。タイマーカウンタを使った方が精度が高い測定が出来るのですが、残念ながら...

引用元を参考にして、下記の回路を組んで周波数を測定してみました。電圧波形の整形には引用元に倣いシュミットトリガ74HC14を使いました。

交流の正負電圧を測るため100kΩ抵抗を2つで分圧し(下記注記参照)、仮想グランドを作っています。トランスの出力は2系統に分け、上部のGPIO34は電圧測定用で、仮想グランドを基準に測定します。下部のGPIO36は周波数周期の測定用で、真のグランドを基準に測定します。

(注記)分圧抵抗について
前項では仮想グランド電圧を1055mVにしたと書きましたが、電源の周波数を測定を試したのは、それより前の段階です。このときはまだ、3.3Vを2等分で使い1650mVの状態です。

電源周波数測定の回路

1CH黄色がシュミットトリガで整形した電圧波形で、2CH青が生の電圧波形です。オシロのDCレンジで波形を見ています。周波数の測定は黄色の周期をmicros()で読み込み、逆数の周波数にします。

1ch:整形後の電圧(DC) 2ch:生の電圧(DC)


測定用のスケッチは引用元の"20210303AcFreqLogToAmbient.ino"をモディファイして利用させていただきました。次の図に示すように電源周波数と電源電圧の変動をとらえることができました。

電源周波数と電圧の時系列波形

仮想グランドの調整

対策前

正負の特性を測定するため、電源電圧3.3Vを抵抗分圧で仮想グランドにしました。はじめは上述の「電源周波数測定の回路」に示すように引用のブログに載っていたローパス効果を考えた分圧のやり方を使ったのですが、電源電圧計測用のトランスの影響をそのまま受け、次に示す図のように非常に大きな電圧変動が発生してしまいました。

黄色の電源電圧と同じように青の仮想グランド電圧が60Hzで変動しています。赤は黄色から青を引いた仮想グランドからの偏差です。この偏差から瞬時の電圧を求めるのですが、このままではうまくいきそうにありません。

1ch:トランス2次電圧(DC) 2ch:仮想グランド電圧(DC)

次の図は黄色がクランプセンサの電流で青が仮想グランド電圧です。貫通電流が無い条件です。電源測定用のトランス電圧は回路につなげていません。つまり、電流測定用のクランプセンサ以外何もない条件ですが、貫通電流の影響を受けて仮想グランドが変動しています。

仮想グランドの変動が大きいことに加えノイズもかなり乗っています。黄色と青の偏差である赤色線が画面範囲の80mVを飛び出す時もあります。

1ch:CT電流(AC) 2ch:仮想グランド電圧(AC)

対策後

脈動の吸収用に470uFのコンデンサを電源側とグランド側に入れることで安定した波形になりました。実状は基板とケースは写真のようにもう作ってしまったので、コンデンサを入れる余裕しかありませんでした。



大きな変動は無くせましたが、まだ300mVp-p程度のノイズは残っています。
1ch:CT電流(DC) 2ch:仮想グランド電圧(DC) 赤:偏差

仮想グランドに出るノイズの原因は5V電源

下記に挙げる3種類の5V電源で比較してみました。iphoneのDCアダプタが最もノイズが少ないです。さすがです。

PCのUSBポート

[PC] 1ch:仮想グランド電圧(DC) 2ch:トランス2次電圧(DC)

ダイソーのDCアダプタ

[Daiso] 1ch:仮想グランド電圧(DC) 2ch:トランス2次電圧(DC)

iphoneのDCアダプタ

[iphone] 1ch:仮想グランド電圧(DC) 2ch:トランス2次電圧(DC)

予備試験(電圧、電流測定)

測定回路

仮想グランドは、3.3 x 47 / ( 47 +100 ) = 1.055 V で設定しました。

電流波形

CTセンサーを逆相につけて、同じ貫通電流を1CH(黄色)と2CH(青色)で測定しました。キャリブレーション値は前述したようにCT1とCT2ともに同じ値の13.823を使って測定します。

負荷はドライヤです。クランプ式のテスター読みで送風:0.46A、cool:6.37A、hot : 11.54Aの電流が流れます。波形を見るとcoolは半波整形で出力されています。hotは全波で出しています。

hot波形を見ればよく分かりますが、2CHは1CHの80%程度の出力電圧です。原因は前にも書きましたが、CTセンサを落としてコアが割れたので、磁束が下がったことが原因だと思います。2CHの低下の割合は前報で測定したCTセンサの出力特性の差とずいぶん違います。恐らく、割れたコアがずれて磁束が変わったのだと思います。

Io = 0 A

Io = 0.46 A

Io = 6.37A

Io = 11.54 A

電流特性

電流の時系列波形を示します。ここでもCTセンサの出力差が顕著にみられます。また、貫通電流が無い時でもCTセンサには0.2Aほどのわずかな出力がみられます。

スケッチは前報で紹介した引用元に載っているものを2センサ用に変更して使いました。



テスター電流との関係をグラフ表示します。2つのセンサーで傾きは異なるのですが、どちらもリニアリティはあるので、補正係数をかければ精度を合わせることができます。ただし、割れたコアが動かないように工夫しなければなりません。


このデータを使いCT1、CT2にそれぞれ補正係数を掛けてみたものを示します。ほぼ同じ特性にすることができました。

ただし、CT2についてはコアが動かないように細工してから、再び測定する必要があります。下記の数値を具体的に説明すれば、CT2はコア割れによって磁束が減ったので感度を1.24倍してあげる必要があるという意味になります。

CT1CT2
ゼロ偏差0.1650.153
補正係数0.9861.24


電圧特性

同時に計測した電圧の時系列波形です。負荷が高まると電圧の低下がみられます。




Powered by Blogger | Designed by QooQ

keyboard_double_arrow_down

keyboard_double_arrow_down