« ワットチェッカー的なものを自作する (その2) | トップページ | Ubuntuアップグレード (12.04 → 14.04.1) でgrubトラブル »

2014年8月13日 (水)

ワットチェッカー的なものを自作する (その3)

前回の記事ではADE7753の基本的な動作確認まで行ってみた。すんなり動いたような書き方をしているが、実際は結構手こずっている。

一応動いているようだが何かおかしい。そんな状況でしばらく悩んでいた時期がある。解決してしまえば「なんだ、そんな事だったんだ」と言うようなものばかりだ。答えの多くはデータシートの中に埋もれていたが「どこにも書いていないが、こうでなければおかしい」と推理せざるを得ないものもあった。

今回の記事で参照している「データシート」は特に断らない限りこのページリンクからダウンロードできるものだ。記事で引用した図などの出所もここである。

/*-----------  -----------*/

SPIのタイミング

データシートにちゃんと書いてあることなので読まなかった私がいけないのだが、これは結構はまった。

Spi_timing

書き込みアクセスに落とし穴は特に無い。SCLKは最大10MHzまでOKだが、データバイトを1つ送り込むのに少なくとも4μsかけなければいけない (t6)。2MHzより速いクロックだと待ち時間を調整しなければならないが、簡単にはできない場合もあるからSCLKを2MHz以下で使うようにするのが間違いない。

問題は読み取りアクセスだ。

WAVEFORMレジスターを読む場合を除き、コマンドバイトを送り終えてから最初のデータバイトを読み始めるまでに4μs以上待つ (t8) 必要がある。ただしWAVEFORMレジスターを読む場合の待ち時間は500ns以上で良い。また2番目以降のデータバイトを読む前の待ち時間 (t10) は最短50nsあれば良いからSCLK=10MHzで連続読出ししてもOKのはずだ。

Linuxのspidevドライバーを使った場合だと全体のスピードを変えるのがが唯一可能な調整手段である。またどのくらいのスピードにすればよいか、オシロなどを使って確かめないと分からない。

Gpib0000

BBBではSCLKを187.5kHz以下にする必要があった。SCLKの最大値の約1/50と遅い。しかしLinuxのユーザーモードで動くプログラムにミリ秒未満の速いレスポンスはそもそも望めないことを考えればこの程度でも遅過ぎることは無いと思う。

BBBの場合spidevドライバーを使うとSCLKは48MHzを2のべき乗で割った周波数、つまり48、24、12、6、3、および1.5MHzさらに750、375、187.5kHzからspeed_hzパラメーターに指定された値を超えない一番高い周波数が選ばれる。つまり375000よりも小さな値をspeed_hzパラメーターに設定すればよい、と言うこと。375000以上の値を設定すると待ち時間が3μs程度になってしまい、ギリギリアウトだ。なお187.5kHzよりも低いSCLKも使えると思うが、最低どこまで下げられるか調べていない。

このタイミングの制約を守らなかった場合ADE7753が返してくるデータバイトが化ける。化けたのが計測値データだと動作上あり得る範囲の値が返ってくる場合が多々ある。こうなるとアナログ的なデータ取扱の問題を真っ先に疑うからデジタル的にデータが化けたと気付くのには時間がかかり、問題が長期化してしまう。また化けたのがSTATUSレジスターだった場合、制御の挙動が非論理的になり、正直訳の分からない状況に陥る。

結局何かの拍子にふと「タイミングは足りてたっけ」と思い当たったのが解決のキッカケだった。理詰めだけでは泥沼から抜け出せなかったかもしれない。

マイクロコントローラーやPRUを使ってSPIインターフェイスのハードウエアを直接制御できれば任意の待ち時間を設けるのは容易だ。それによりADE7753の仕様が許す最も速い動作が可能になる。最大のサンプルレート27.9kspsでWAVEFORMレジスターを読み取る場合を考えてみよう。

Waveform_read

図に記入した想定に基づくなら読み込んだデータの処理に充てられる時間は、

t3 = 35.8 – (0.5 + 4 + 0.5 + 0.5) – 7tB = 30.3 – 84/SCLK

と表すことができる。SCLKはMHz単位のSPIクロックだ。ADE7753が許容する最大値10MHzを使うとt3は21.9μs確保できる。しかし1μs確保するのでも2.9MHz以上のクロックを使わないと間に合わない。WAVEFORMレジスター読み取りアクセスはコマンドバイトとデータバイト間の待ち時間の最小値を500nsにすることで3.5μs条件が緩和されている訳だが、それでもなかなか厳しい。

楽観的に余計な待ち時間がほとんど入らないと想定してもこの結果だ。WAVEFORMレジスターを読む場合、少しでも余計に時間がかかるようだとタイミングの制約を守るのがすぐに難しくなってしまう。

 

ADE7753使いこなしのキモ

以下の3点について順に触れていきたい。

  • 一部の測定機能を有効にするための設定
  • アナログ信号のレベル調整
  • 得られるデジタルデータをアナログ信号の値に換算する方法

ADE7753にはゲイン調整できる箇所が多数ある。この設定を変えるとデジタルデータとアナログ値の対応関係が変わるわけだが、ゲイン調整が必要になる場合がそんなにあるとは思えない。この記事ではディフォルト設定で得られたデジタルデータをアナログ値に換算する方法を考える。

アナログ的なレベル調整とADCの入出力特性には誤差とドリフトが必ずある。これらは個体差を生じるので、部品の公差を超える確度を求めると個別に校正が必要になる。しかし一旦デジタル信号に変換された後の処理で個体差が出るとは考えにくい。クロックや信号周波数の影響はあるが、これらの影響の出方まで含めると全ての個体に共通の関数で表せるはずだ。クロックと信号の周波数が同じなら、デジタル信号処理について一連の換算係数が定数として得られるはずである。

なお前述以外に以下の事が必要になる場合もあるが、今回の記事では触れない。

  • オフセット誤差をキャンセルする設定
  • ゲインを変更する設定
  • アラーム機能を使うための設定

 

一部の測定機能を有効にするための設定

リセット後のディフォルト状態ではマトモに使えない測定機能がある。

変更が必要な設定 影響を受けるデータと対応策
IRQENレジスターのWSMPビット ・ディフォルトの0だとWAVEFORMレジスターが更新されない。
・波形データを使うときは1に設定する。
  (割り込みを使わない場合でも設定が必要)
LINECYCレジスター ・ディフォルトの0xFFFF=65535だとサイクル平均値の更新間隔が長過ぎる。
  (サイクル平均値: LAENERGY、LVAENERGY、およびLVARENERGY)
  (ディフォルト更新間隔: 50Hzで約11分、60Hzでも約9分)
・更新間隔を例えば1秒にするには50Hzでは0x64 (10進の100)、60Hzでは0x78 (10進の120) に設定する必要がある。

 

アナログ信号のレベル調整

アナログ信号はADE7753が適正に取り扱えるレベルに調整する必要がある。「適正に取り扱えるレベル」はピーク値がフルスケールを超えず、なおかつ小さ過ぎないレベルである。

まず易しい方の電圧信号を考えてみよう。リセット後のディフォルト状態、すなわちPGAゲイン1、ADCのフルスケール0.5Vの場合を想定する。この場合ADE7753のアナログ入力のフルスケールは±0.5Vだ。ADCは入力電圧±0.794Vに相当するコードまで出力可能だが、仕様に定められているのは±0.5Vまでである。これは電流チャネルについても共通だ。

電圧信号が易しいのは想定すべき変動幅が狭い (広く取っても50~150Vrms) からである。また波形歪も少なく、特に定常的にピーク値が大きくなる方向の波形歪は稀なので、正弦波で考えておいて多少の余裕を持たせれば済む。商用電源電圧が150Vrpmの時のピーク値がフルスケールの80% (余裕20%) になるようにしてみよう。電圧の減衰比をRとすると、

R x 150 x 1.414 = 0.8 x 0.5 → R = 0.001886

またこの条件で商用電源電圧が定格時のADE7753入力のピーク値は、

0.001886 x 100 x 1.414 = 0.267V

である。

データシートの試験回路では R = 1/601 = 0.001664 で、商用電源の定格電圧110Vrmsの時の入力ピーク値は0.259Vと余裕約22%だ。また前回記事に掲載した私の回路は部品入手の都合から R = (11/100) x 1/52 = 0.002115、商用電源電圧が定格時の入力ピーク値が0.299Vで余裕は約10%と少なめだが、商用電源電圧の変動幅を150Vまで見ているので実際に問題が生じる恐れは低い。

ADE7753は有効電力測定のダイナミックレンジが1:1000だとされている。電圧は有効電力の主な変化要因ではないので、これはすなわち電流測定のダイナミックレンジだ。従って商用電源電圧が定格時に電圧測定のフルスケールに対して多少余裕を取ってもダイナミックレンジを狭める原因にはならない、と言うことらしい。

電流信号が電圧より難しいのは、著しく歪んだ波形に対応する必要があるからだ。

1rms

赤のプロットは定格電力10WのLED電球の電流波形実測値をrms値が1になるよう調整したものだ。正弦波の場合ピーク値は1.414だが歪のある波形では3を超えていて、理論的にこれはいくらでも大きくなり得るから厄介である。

ADE7753が扱える最大の電流信号はピーク値で決まってしまうので、歪の無い波形のrms値で妥当な値になるようにレベル調整しておいて、歪のある電流波形ではピーク値がフルスケールに収まる範囲が測定可能範囲とせざるを得ない。この場合ピーク値がフルスケールを超えそうになったらアラームを発するようにすべきだ。これはピーク値がフルスケールを超える信号を測ると大きな誤差を生じるが、歪のある電流波形だと測定値は歪の無い波形の測定範囲内に収まってしまう場合が多いと考えられるからである。

最大測定電流を無歪正弦波で15Armsとして、その時のピーク入力電圧がフルスケールの80%になるようにする。負担抵抗まで含めた電流トランスの変換係数をK [V/A] とすると、

K x 15 x 1.414 = 0.8 x 0.5 → K = 0.01886

私の回路では二次巻き数1,000回の電流トランスと負担抵抗20Ω (100Ω2本と33Ωを並列接続) を組み合わせているから K = 0.02 で、余裕は約15%である。また前掲グラフの歪電流波形だと約8Armsが限界だ。LED電球を50個つないだ場合に相当する。しかし消費電力がある程度以上大きい器具はPFCを装備するなどして力率を改善するようになってきている (数十W以上? 定格44WのLEDシーリングライトはPFC装着している模様) ので、単一の器具でこの状況になることはあまり考えられない。

 

ブロックダイアグラムを整理する

デジタルデータとアナログ値の対応関係を考える準備として、ADE7753の信号処理の流れを整理しておく。

データシートのブロックダイアグラム (Figure 1) から調整箇所を取り除いて簡略化し、本質的な動作が分かり易いようにしてみた。またSPIでアクセスできるレジスターの値がどのような処理で決まるのか分かるようにもしてみた。

Ade7753_new_bdg

これ以降信号を識別する際に参照する目的で図中にラベルを紫色で記入した。

 

デジタルデータをアナログ信号の値に換算する方法 -- 電流チャネル

元々のアナログ値は電流だが、ADE7753に入力される電圧に変換された値で考える。デジタルデータは無次元なのでアナログ信号値への換算係数の単位は [V] だ。ADC出力データについてこの単位で考え、それ以外のデータはADC出力など上流側のデジタル値を基準とした比率にした。こうしておけば校正の際にはADC出力データをアナログ値に換算する係数だけを調整すれば済むはずである。

ピーク値がちょうどフルスケールの正弦波をアナログ入力に与えた場合のデジタル値をデータシートから拾ってまとめてみた。

Ichanneldwg


関連する値をまとめると以下のとおりである。

Ichannelwvf

信号/データ ラベル ピーク値 rms 換算係数
アナログ入力 Ai1 0.500 [V] 0.354 [V]
ADC/HPF1出力 Di1 0x2851EC = 2642412 0x1C82B3 = 1868467 Ai1/Di1 = 1.892e-7 = 0.7937x2-22 [V]
IRMS Di2 0x1C82B3 = 1868467 Di1/Di2 = 1.0

波形データからrms値を計算する部分でスケーリングの変化は無いようだ。2の指数表示の値を併記したのは固定小数点で計算して桁合わせする場合に便利なように考えたつもりである。

 

デジタルデータをアナログ信号の値に換算する方法 -- 電圧チャネル

電圧チャネルADCの出力にはLPF1が入った経路があり、50Hzと60Hzで減衰量が異なる。また波形データからrms値を計算する部分でスケーリングが変わっている。

Vchanneldwg

表示されているLPF1出力データは60Hzの場合である。0x2581と0x2518の2種類あるが、本文と突き合わせると0x2581の方はtypoらしい。しかし別途示されているLPF1の伝達関数を使って計算した結果も合わない。

Vchannelformula

式(5)の値は0.919で合っているが、0.919 x 0x2852 ≈ 9486 = 0x250E で微妙に異なる。違いは0.1%程度なのでどちらを使っても大勢に影響は無い。それなら50Hzについても式(5)を使うので、60Hzには0x2518ではなく0x250Eを使うことにした。50Hzでは0x25F9である。

なお上に掲載したFigure 54に示されているようにLPF1を通ることで電圧波形の位相が50Hzで19.7°、60Hzでは23.2°遅れる。これはWAVEFORMレジスターでアクセスできる電圧波形データに影響するので、他の波形データと組み合わせて使う場合は位相差を補正する必要がある。

rms値計算の部分の扱いは、データシートに図示された通りピーク値0x2518の正弦波のrms値が0x17D338と計算されると考え、前述のように計算して求めたLPF1出力データのピーク値を同じ割合でrms値に換算した。これで良いはずである。

信号/データ ラベル ライン
周波数
ピーク値 rms 換算係数
アナログ入力 Av1 0.500 [V] 0.354 [V]
ADC出力 Dv1 0x2852 = 10322 0x1c83 = 7299 Av1/Dv1 = 4.844e-05 = 0.7936x2-14 [V]
LPF1出力 Dv2 50Hz 0x25F9 = 9721 Dv1/Dv2 = 1.062
60Hz 0x250E = 9486 Dv1/Dv2 = 1.088
VRMS Dv3 50Hz 0x1863BC = 1598396 Dv1/Dv3 = 4.566e-03 = 1.169x2-8
60Hz 0x17CCCC = 1559756 Dv1/Dv3 = 4.680e-03 = 1.198x2-8
VRMS = (0x17D338 / 0x2518) x Dv2

ADE7753では商用電源周波数により換算係数が異なる部分がこれ以外にもある。製品化するのであれば商用電源周期をPERIODレジスターから求め、それに応じて係数を選ぶ処理が必要である。

電流の場合はスケーリング1.0だったので省いたが、ここでLPFを通った後の波形データやrmsデータからアナログ値を得る方法について説明しよう。電圧波形データが0x1023の場合のADE7753入力端子のアナログ電圧は、

4.844e-5 x 1.062 x 0x1023 = 0.2125V

である。関連するすべての換算係数を掛け合わせればよい。アナログ信号の減衰比が正確に 0.002115であるなら、商用電源ラインの電圧は、

0.2125 / 0.002115 = 100.5V

となる。実際にはADCの換算係数にアナログ信号の減衰比を含ませて、

電圧ADC換算係数 = 4.844e-5[V] / 0.002115[V/V] = 0.02290 [V]

として、校正の際はこの係数を調整すればよい。電流についても同様に、

電流ADC換算係数 = 1.892e-7[V] / 0.02[V/A] = 9.460e-06 [A]

である。また前回の記事で天下り的に提示したアナログ値からIRMSおよびVRMSレジスターの値を導く係数との関係は、

  • IRMS = (1 / 電流ADC換算係数) x 電流値 = 105708 x 電流値 [A]
  • VRMS = {1 / [電圧ADC換算係数 x (Dv1/Dv3)]} x 電圧値 = 9564 x 電圧値 [V] (50Hz)
  • VRMS = {1 / [電圧ADC換算係数 x (Dv1/Dv3)]} x 電圧値 = 9331 x 電圧値 [V] (60Hz)

前回の記事で提示した係数は順に 105695、9572、および9342だった。若干差異があるが、電流は端数処理の違いの影響、電圧はそれに加え60Hzのフルスケール正弦波のVRMSデータ値を今回計算した0x17CCCCではなくデータシートに記載されていた0x17D338を使っていたことが原因である。

 

デジタルデータをアナログ信号の値に換算する方法 -- 有効電力

有効電力の換算はすべてデジタルデータ同士の換算である。

Pactive

データシートではWAVEFORMレジスターでアクセスできる値とAENERGYレジスターなどでアクセスできる積算電力値に使われる値が違うことになっているが、私が実際のデバイスで確認したところ同じ値だった。

データ ラベル ピーク値 平均値 換算係数
電流波形 Di1 0x2851EC = 2642412
電圧波形 Dv1 0x2852 = 10322
瞬時電力 Dp1 0x19999A = 1677722 0xCCCCD = 838861 Di1xDv1/Dp1 = 1.626e04 = 0.9923x214
有効電力 Dp2 0xCCCCD = 838861 Dp1/Dp2 = 1.0

具体的な使い方を示した方が分かりやすいだろう。有効電力 = 係数 x Dp2のデータ値、とした場合、

係数 = 電流ADC換算係数 x 電圧ADC換算係数 x (Di1xDv1/Dp1) x (Dp1/Dp2) = 3.522e-03 [W]

である。値は50Hzの場合だ。関係する係数をすべて掛け合わせればよい。

 

デジタルデータをアナログ信号の値に換算する方法 -- 皮相電力とリアクティブ電力

皮相電力とリアクティブ電力の換算には、有効電力に対するスケーリングを使う。

Energyscaling

スケーリングの定義がすぐには理解できず少し悩んだ。商用電源周波数50Hzで積分器を使わない場合を例にすると、以下のように定義されている。

  • PF=1で有効電力100Wの時にDp2データ値が十進の1000だったとする。
  • PF=1なので皮相電力は100VAだ。この時皮相電力データDp3の値は1000 x 0.848 = 848になる。
  • 別の場合に電流波形にひずみが無くPF=0で皮相電力100VAだったとする。上の例同様にDp3=848だ。
  • PF=0なのでリアクティブ電力は100VARだ。この時リアクティブ電力データDp4の値は848 ÷ 0.848 x 0.347 = 347になる。

今までと同じようにスケーリング値に対応したフルスケールデータの値を探すと、困ったことに上の表と矛盾する数字が見つかった。

Appearent

この数字からスケーリング値を計算すると、

0xAD055 / 0xCCCCD = 0.845

Figure 73は60Hzの場合なのでTable 10では0.827となっている値である。違いが2%を超えているのでどちらかが間違っているはずだ。実際のデバイスで確認するとTable 10の方が正しいようである。

今までと同じ方式の換算係数はスケーリング値の逆数になる。

データ ラベル ライン周波数 換算係数
皮相電力 Dp3 50Hz Dp2/Dp3 = 1/0.848 = 1.179
60Hz Dp2/Dp3 = 1/0.827 = 1.209
リアクティブ電力 Dp4 50Hz Dp2/Dp4 = 1/0.347 = 2.882
60Hz Dp2/Dp4 = 1/0.289 = 3.460

 

「リアクティブ電力」は無効電力ではない

今回の記事ではデータシートに記載されていた「Reactive power」をカタカナ表記の「リアクティブ電力」にした。「Reactive power」は無効電力だとされる場合があるが、それは正しくないからである。

電流波形に歪が無い場合に限りReactive power = 無効電力で正しい。しかしこれは特別な場合であって、電流波形に歪のある場合も含めた一般的な条件では成立しない。

電圧波形にひずみが無く電流波形にひずみがある場合を考える。

  • v(t) = V cos ωt
  • i(t) = Σn[ In cos(nωt + φn) ] = Σn{ In [cos(φn) cos(nωt) – sin(φn) sin(nωt)] }

φnは電流の基本波および高調波の電圧波形に対する位相差である。この場合の皮相電力、有効電力、および無効電力は、

  • 皮相電力 = ½ V  [Σn( In2 )]½
  • 有効電力 = ½ V I1 cos φ1
  • 無効電力 = ½ { (V I1 sin φ1)2 + Σn=2,3...[ (V In)2 ] }½

電流波形が歪んでいる場合、有効電力に寄与するのは基本波の電圧波形と同相の成分だけだ。ADE7753が測っているリアクティブ電力は無効電力の最初の項、つまり電圧波形と90°位相がずれた電流の基本波成分によるものである。

数式よりもベクトルで図解した方が分かり易いと思う。有効電力をP、リアクティブ電力をQ1、無効電力のリアクティブ電力以外の部分をQDとすると、

Distortion


ここでVAは皮相電力、VA1はその内基本波成分である。またQDは電流波形の歪成分による無効電力で、大きさ (絶対値) は½ { Σn=2,3...[ (V In)2 ] }½ だが、以下の関係を利用して測定値から求めることができる。

VA2 = P2 + Q12 + QD2 → QD = (VA2 – P2 – Q12)½

ADE7753でリアクティブ電力が測れるようになっているのはこれが目的だと思う。ちなみにADE7753からリアクティブ電力測定機能を省いたADE7763があり若干安価に入手できる。

実際には電圧波形にも歪があるが、これも考慮するのはかなり複雑な問題になる。通常電流波形の歪に比べると僅かなので、多くの場合無視しても問題ないはずだ。

 

電力の積算とサイクル平均

電力関係のデータは積算形式で提供されている。有効電力はLPFで平滑化した瞬時値をWAVEFORMレジスターでアクセスできるが、これは常時使うためのものではない。

Power_accumulation

電力信号データは49ビットのレジスターに積算され、その内上位24ビットがアクセスできる。そう言う事ならFigure 63は上のようにするのが正しいのではないかと思う。電力信号データをp(tn)とすると、ここで行っているのは、

AENERGY = { Σn[ p(tn) ] } >> 25

「>>25」は25ビット右算術シフトである。225で割って端数を切り捨てるのに等しい。ただしこの場合の「端数切捨て」は数直線上で左側直近の整数値を取るfloor関数である。1.5は1になるが-1.5は-2になる。

標準クロック3.579545MHzの場合Δt = tn+1 - tn = 1.117μsなので、時間の単位を秒とした場合に等価な連続系表現に書き直すには25ビット右シフトの代わりに係数 1 / (225 x 1.117e-6) = 0.02668を使う。

AENERGY = floor [ 0.02668 ∫ p(t) dt ]

つまりこの係数の逆数がAENERGYからWAVEFORM (Dp2) への換算係数だ。ただしこれは積算時間1秒の場合の値なので、換算係数の一般的な表現は積算時間に反比例する形になる。またAENERGYは時間 [s] の次元を持つので、係数の次元は [1/s] である。私が確認した結果では、この係数は皮相電力およびリアクティブ電力も共通で良いようである。

データ 換算係数
AENERGY Dp2/AENERGY = 1/0.02668/T = 37.48/T [1/s]
VAENERGY Dp2/VAENERGY = 1/0.02668/T = 37.48/T [1/s]
VARENERGY Dp2/VARENERGY = 1/0.02668/T = 37.48/T [1/s]
・T は積算時間 (単位: 秒)
・積算時間2秒なら係数は18.74になる

49ビットのレジスターはフルスケール信号が継続的に入力されると約6分でオーバーフローするので、それよりも短い時間間隔で読み出して記録し、リセットする必要がある。

これに対して「Line Cycle Energy Accumulation Mode」、今回は私が勝手に「サイクル平均」と意訳したモードでは、商用電源電圧のゼロクロスに同期して自動的に積算値の記録とリセットを行う。

Linecycle

動作の概念は以下の通りだ。

Linecycle_ope

LAVENERGY、およびLAVRENERGのデータを作る処理も同じである。なおデータシートのFigure 71にLAVRENERGYの積算レジスターは50ビット長の様に記載されているが、リアクティブ電力はサイクル平均の値しか提供されていないので、レジスター長が実際どうなっているか気にせず前述のスケーリング値を使って換算すれば良いはずである。

「Line Cycle Energy Accumulation Mode」はW、VA、またはVar単位の電力値について、商用電源の周期とLINECYCレジスターに設定した値で決まる期間の積算値をゼロクロスに同期して計算している。毎回積算するサンプル数は同じだ。一定数のサンプルの合計値は平均値と同じ意味である。従ってサイクル平均と呼ぶことにした。

このモードの最大の利点は積算する時間が短くても電力データの瞬時値に現れるリップルがほぼ完全に取り除けることだ。ゼロクロス周期の整数倍の期間の積算値を計算する処理は、フーリエ変換するとリップル周波数にノッチのあるsincフィルター特性になるからである。また特に定期的なデータの読み取り・記録とリセットを行わずに直近の電力データをすぐ読みに行けることも利点である。

ただし以前の値が読み取られたかどうかにかかわりなく一定時間ごとに更新されてしまう点に注意が必要である。また商用電源周期はそれなりに正確・安定だが、水晶発振器に比べれば見劣りすることも考慮する必要がある。これらの点は長い期間の積算電力を求めようとすると問題になる場合があるのではないかと思う。

また電力データの分解能は積算時間に反比例することにも注意が必要だ。積算時間が短いと細かい刻みの値が採れない。前回の記事の回路の場合、電力値データの最小単位 (各レジスター値のLSB分解能) は以下のとおりである。

データ ライン周波数 LSB分解能
AENERGY
LAENERGY
50Hz 0.13/T [W]
60Hz 0.13/T [W]
VAENERGY
LVAENERGY
50Hz 0.16/T [VA]
60Hz 0.16/T [VA]
VARENERGY
LVARENERGY
50Hz 0.38/T [Var]
60Hz 0.46/T [Var]
・T は積算時間 (単位: 秒)

積算期間1秒では0.1W刻みの表示を行うのに十分な分解能が無い、と言うことである。データ処理で好きなだけ小数点以下の桁数を増やすことは可能だが、それは見かけだけだ。ADCのMissing codeのように飛び飛びの値しか現れない現象が出る。積算時間を長くするか、さもなければPGAゲインを上げる等の対策が必要だ。あるいは移動平均、例えば過去10秒間の積算値を1秒毎に計算する方法もアリだろう。

 

今回のまとめ

あまり読み易くないデータシートと格闘してここまで解明するのに結構時間がかかった。不明な点は実際にデバイスを動かして調べるのが一番確実である。

次回はBBBのPRUを使ってADE7753からデータを取り込む方法を紹介しようと思っている。

|

« ワットチェッカー的なものを自作する (その2) | トップページ | Ubuntuアップグレード (12.04 → 14.04.1) でgrubトラブル »

BeagleBone Black」カテゴリの記事

趣味」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/60143718

この記事へのトラックバック一覧です: ワットチェッカー的なものを自作する (その3):

« ワットチェッカー的なものを自作する (その2) | トップページ | Ubuntuアップグレード (12.04 → 14.04.1) でgrubトラブル »