の時計プロジェクト1年前に終わった。 これは新しいプロジェクトの始まりであり、ある種のパワーモニターになる可能性があります。
これは、1990 年頃の古いスコープでの 2 つの波形の写真です。
Sine wave is volts, pulse is amps正弦波はボルト、パルスはアンペア
単位とスケールが正しい場合、ボルト * アンペアの積分が負荷によって使用されている実際の電力になります。 目で見てそれを実行したところ、47ワットが得られました。 これはテスト中のデバイスなので、これは少し残念でした。
30W CFL bulb30W CFL電球
それが白熱電球であれば、ボルトとアンペアは非常によく似た波形となり、きれいに整列します。 しかし、今日の電子機器のほとんどは、電圧サイクルの一部の間に電力を必要とします。
もっと見る...私のノート
current: peak is 85 mv on 30 ohms. e/r=i, .085/30 = .0028 amp
x500 -> 1.4Amp
That max current is when Volts = 4, current ramps to zero as volts ramps to 6.
The volts are actually (xformer ratio 230/8.6 no load) x26.75, so 4*26.75 = 107V to 6*26.75 = 160.5V
the ramp is about 1/4 of the cycle.
treat the sine wave as a linear ramp too.
begin of ramp is .0028A * 107V
end of ramp is 0.0A * 160V
average is 1.4A * 133.5V = 186.9 volt-amps (watts)
but only 25% duty cycle
187/4 = 47W
これらの数値はすべて、画面やデータシートに記載されていない推定値です。 以下に一部が変更されます。
いくつかのポイントをデジタル化するために使用した JSL は次のとおりです。 データ配列は最初は入力されていませんでした。それが私の答えです。 これは使い捨てコードです。私はショートカットして、最初と最後のポイントに特別な意味を持たせました。さらにその下にあります。
もっと見る...
img = New Image( "z:/scope.jpg" );
img << rotate( 1 );
{nx, ny} = img << size;
New Window( "", gb = Graph Box( framesize( 900, 600 ) ) );
volts=[ 24.6814218645205 25, 39.4366197183099 58.0851063829787, 42.186452045607
65.531914893617, 44.1985244802146 69.3617021276596, 46.2776659959759
72.6595744680851, 48.692152917505 73.2978723404255, 51.5090543259557
72.6595744680851, 56.8075117370892 61.3829787234043, 74.6478873239437
25.8510638297872];
amps=[ 42.713423397528 50.5777501131734, 43.1254191817572 62.5531914893617,
43.7865286959854 59.4881167949298, 45.0384848775191 58.3055681303757,
45.8433138513621 55.4454504300589, 46.8908690236658 53.6853779990946,
48.4238765928907 51.1827750113173, 50.1229599821149 50.7702580353101,
51.7102615694165 50];
gb[framebox(1)]<<ADDGRAPHICSSCRIPT></ADDGRAPHICSSCRIPT>この 1 度の回転により、画像 xy が画面と整列します。
Scope traces as image in a JMP graph. The tiny black square boxes on the traces are the handles.スコープ トレースを JMP グラフの画像として表示します。 トレース上の小さな黒い四角いボックスはハンドルです。
最初と最後の電圧ポイントで全サイクルを定義し、最初と最後の電流ポイントでパルスの長さを定義して、ポイントを所定の位置にドラッグした後、これを使用しました。
もっと見る...
vmax = Max( volts[0, 2] ); // sine top
vmin = Min( volts[0, 2] ); // sine bottom
vrange = vmax - vmin; // sine range
amax = Max( amps[0, 2] ); // similar for pulse
amin = Min( amps[0, 2] );
arange = amax - amin;
minx = Min( volts[0, 1] ); // length of sine cycle
maxx = Max( volts[0, 1] ); // because point 1 and 9 at begin and end
pulselength = amps[9, 1] - amps[1, 1]; // length of 1 of 2 pulses
pulseduty = 2 * pulselength / (maxx - minx); // 2 pulses per cycle
dt = pulselength / 16384; // small dt improves answer
n = 0; // count the dt intervals
sum = 0;
For( t = amps[1, 1], t < amps[9, 1], t += dt, // step thru the pulse
y = Interpolate( t, volts[0, 1], volts[0, 2] ); // get the volts
v = 125 * 1.414 * (2 * (y - vmin) / vrange - 1); // map the volts
y = Interpolate( t, amps[0, 1], amps[0, 2] ); // get the amps
a = 1.4 * ((y - amin) / arange); // map the amps
sum += a * v; // watts for this dt
n += 1;
);
sum = sum / n;
sum = sum * pulseduty;
Show( sum );
取得するため
合計 = 25.8513297218601;
少し考え直す必要がありました。変圧器の明確に定義されていない巻数比やスコープの古い校正を使用するのではなく、家の電圧が 125V rms であると仮定し、1.414 係数を使用して正弦波が一致するピークツーピーク電圧を取得しました。 それは十分に近いようです。 次に、ESP32 にポイントを直接デジタル化させます...
頑張ってね。 ESP32 は、FFT 周波数領域サンプルを JMP グラフにストリーミングしています。 60Hz が圧倒的に支配的な周波数であり、最初のいくつかの奇数高調波がそれに続きます。
バージョン 0 ボードは年末直前に到着し、その目的を果たしました。 明日はバージョン 1 ボードがリリースされる予定です。 これは、240x320 2.8 インチ ディスプレイ上の電圧正弦波を示すバージョン 0 ボードと追加のボードです。 ボトルのキャップは目盛用です。黄色の丸の中にある小さなコンデンサに注目してください。 PCB ベンダーがそれをマウントします。絶対に無理だと思います。
The display is mounted to the red card, which plugs in to a connector mounted to the vertical row of holes at bottom left-center.ディスプレイは赤いカードに取り付けられており、左下中央の垂直方向の穴の列に取り付けられたコネクタに差し込まれます。
バージョン 1 ボードを待っている間に Wi-Fi 接続をテストすると、このコンピューターが実行する必要がある他のすべての機能を備えた持続可能なデータ速度は 1 秒あたり 40K ~ 50K バイトであることがわかります。 電圧チャネルと電流チャネルの両方を確認したいので、デジタル化された波形ごとに約 20KB/秒になります。 ある時点でデータに対して FFT を使用したいと考え、バッファ サイズについて考え始めました。 FFT は 2 の累乗サイズを非常に好みます。 いくら? 以下にテストコードを示します。
dt = New Table( "Untitled", "invisible", New Column( "size" ), New Column( "time" ) );
dt << New Column( "factors",
character,
formula(
primes = [2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257
263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571
577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733
739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907
911 919 929 937 941 947 953 967 971 977 983 991 997 1009];
start = size;
ip = 1;
q = primes[ip];
result = "";
While( start > 1,
If( Mod( start, q ) == 0,
result = result || Char( q ) || ",";
start = start / q;//
, //
ip += 1;
q = primes[ip];
If( q * q > size, Break() );
)
);
If( start > 1,
result = result || Char( start )
);
result;
)
);
For( i = 2, i <= 2 ^ 19, i += 1,
x = 0;
x = J( i, 1, Random Uniform() );
start = HP Time();
FFT( {x} );
end = HP Time();
dt << addrows( 1 );
dt:size[N Rows( dt )] = i;
dt:time[N Rows( dt )] = (end - start) / 1e6;
If( i == 10,
dt << Graph Builder(
Size( 1709, 424 ),
Show Control Panel( 0 ),
Variables( X( :size ), Y( :time ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 0 ), Marker Drawing Mode( "Normal" )}
)
)
);
Wait( .1 );
);
If( Mod( i, 100 ) == 0,
Wait( 0 )
);
);
テーブルは次のようになります。
2 is great,3 and 5 nice, maybe 7.2 は素晴らしく、3 と 5 も素晴らしく、おそらく 7 です。
きれいなグラフが作成されます。
The fast buffer sizes, near the bottom, don't have large factors.下部付近の高速バッファ サイズには大きな係数はありません。
9500 付近の奇妙なポイントの山には何が入っているのでしょうか? 選択し、サブセット化し、見てみましょう...
Bigger factorsより大きな要因
1024 または 2048 のサンプル バッファを使用すると、JMP でリアルタイム ダッシュボードを作成できるようです。
Very fast.とても早い。
1秒間に60回でも1%未満です。 esp32 で FFT を実行する可能性があります。 次に、完全な波形を送信する代わりに、上位 N 個の周波数ビンと振幅だけを送信することもあります。 考慮すべき多くのトレードオフ。