交流电压表
在本例中,我们将演示如何利用瞬时电压传感器构建一个用于测量交流电压的电压表模型。
模型描述
标准的交流电压表可以基于各种不同的原理,将瞬时信号(交流)转换为稳定的读数。
通常情况下,当输入正弦波时,此类电压表的输出值预期为信号的有效值,即 (其中 为正弦波的振幅)。 在测量其他波形的信号时,需要引入校正系数。
假设我们面前有一个电压表,其读数与输入信号的振幅成正比(情况并非总是如此,有时读数与其功率成正比)。 电压发生器ControlledVoltage 接收某个可变的控制信号,而传感器Voltage 则返回在模型步长设置所指定的时间点测得的瞬时值。
.png)
该模型的输入为波形可变的信号(默认情况下为正弦波),该信号与一个确定其振幅的阶跃信号相乘。 阶跃信号会将信号发生器的振幅瞬间从 1 V 提升至 5 V。
.png)
Цифровой вольтметр 模块同样由一个伪装的子系统实现。在其设置中可以指定平滑窗口的大小,这将影响电压表读数变化的平滑程度。
.png)
简而言之,该电压表的工作原理是检测信号的振幅,并显示该振幅除以 的数值。
运行模型
在运行模型之前,我们特意将发生器设置为正弦波模式,通过调用Генератор сигналов 模块内的某个组件来实现。
# 如果模型尚未打开,则从文件中加载
if "ac_voltmeter_simple" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/ac_voltmeter_simple.engee");
end;
engee.set_param!( "ac_voltmeter_simple/Генератор сигналов/Signal Generator", "WaveForm"=>"sine" )
data = engee.run( "ac_voltmeter_simple" )
plot(
plot( data["u"].time, data["u"].value, label="信号的瞬时值" ),
plot( data["y"].time, data["y"].value, label="电压表的读数" ),
layout = (2,1)
)
如我们所见,在测量振幅为1的正弦波时,电压表返回的数值约等于0.707 或 。
让我们验证一下,如果向电路输入锯齿波(sawtooth )或方波脉冲(square ),会发生什么情况。
engee.set_param!( "ac_voltmeter_simple/Генератор сигналов/Signal Generator", "WaveForm"=>"sawtooth" )
data = engee.run( "ac_voltmeter_simple" )
plot(
plot( data["u"].time, data["u"].value, label="信号的瞬时值" ),
plot( data["y"].time, data["y"].value, label="电压表的读数" ),
layout = (2,1)
)
锯齿波信号的有效值为 ,也就是说,振幅为1的锯齿波信号的有效值为0.578 。
但在图表中,我们可以看到电压表仍显示0.707 。该数值源于其工作原理,这会导致测量中出现方法误差。
只要知道输入信号的波形,就可以通过乘以相应的系数来轻松补偿这种误差的影响。
结论
如果需要,可以在AnyMath中创建电压表模型,其精度可精确到指针惯性或分段指示器。还可以单独实现整流器、直流电源及其他元件。
但如果建模的目的是为了演示众所周知的方法误差,则可以通过基础库中的模块引入这些误差,而我们也正是这样做的。