这时钟项目一年前完成的。 这是一个新项目的开始,该项目可能会变成某种功率监视器。
这是 1990 年左右老式示波器上的两个波形的图片。
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>旋转一度使图像 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 版主板。 这是版本 0 板,在 240x320 2.8 英寸显示屏和额外的板上显示电压正弦波。 瓶盖用于刻度;看黄色圆圈中的小电容器。 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 板时测试 WiFi 连接表明,每秒 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.非常快。
即使每秒 60 次,也低于 1%。 我可以在 esp32 上运行 FFT。 然后,可能只发送前 N 个频率段和幅度,而不是发送完整的波形。 需要考虑一系列权衡。