Документация Engee
Notebook

Вольтметр переменного напряжения

В этом примере мы покажем, как из датчика мгновенного значения напряжения сделать модель вольтметра для измерения переменного напряжения.

Описание модели

Стандартные вольтметры переменного напряжения могут опираться на самые различные принципы для преобразования мгновенного сигнала (переменного) в стабильные показатель.

Чаще всего в качестве выходного значения такого вольтметра, при подаче синусоиды на входе, ожидается получение действующего значения сигнала, равного $U_д = U_m / \sqrt 2$ (где $U_m$ – амплитуда синусоиды). При измерении сигнала другой формы нужно вводить поправочные коэффициенты.

Предположим, что перед нами вольтметр, показания которого пропорциональны амплитуде входного сигнала (это не всегда так, иногда показания пропорциональны его мощности). Генератор напряжения ControlledVoltage получает некоторый переменный управляющий сигнал, а сенсор Voltage возвращает нам мгновенное значение, измеренное в моменты времени, заданные настройками шага модели.

image.png

Модель принимает на входе сигнал изменяемой формы (по умолчанию, синусоидальный), умноженный на ступенчатый сигнал, который определяет его амплитуду. Ступенька мгновенно повышает амплитуду генератора сигнала с 1 до 5 В.

image.png

Блок Цифровой вольтметр тоже представлен маскированной подсистемой. В ее настройках можно указать размер сглаживающего окна, что скажется на плавности изменения показаний вольтметра.

image.png

Устройство данного вольтметра, говоря упрощенно, предусматривает нахождение амплитуды сигнала и отображению величины, равной амплитуда деленной на $\sqrt 2$.

Запуск модели

Перед запуском модели мы специально выставляем генератор в синусоидальный режим, обращаясь к одному из компонентов внутри блока Генератор сигналов.

In [ ]:
# Если модель еще не открыта, загрузим из файла
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" )
Out[0]:
Dict{String, DataFrame} with 2 entries:
  "u" => 2001×2 DataFrame…
  "y" => 2001×2 DataFrame
In [ ]:
plot(
    plot( data["u"].time, data["u"].value, label="Мгновенные значения сигнала" ),
    plot( data["y"].time, data["y"].value, label="Показания вольтметра" ),
    layout  = (2,1)
)
Out[0]:

Как мы видим, при измерении синусоиды амплитудой 1, вольтметр возвращал значение, приблизительно равное 0.707 или $1 / \sqrt 2$.

Приверим, что будет, если подать на вход схемы значение пилообразной формы (sawtooth) или прямоугольные импульсы (square).

In [ ]:
engee.set_param!( "ac_voltmeter_simple/Генератор сигналов/Signal Generator", "WaveForm"=>"sawtooth" )
data = engee.run( "ac_voltmeter_simple" )
Out[0]:
Dict{String, DataFrame} with 2 entries:
  "u" => 2001×2 DataFrame…
  "y" => 2001×2 DataFrame
In [ ]:
plot(
    plot( data["u"].time, data["u"].value, label="Мгновенные значения сигнала" ),
    plot( data["y"].time, data["y"].value, label="Показания вольтметра" ),
    layout  = (2,1)
)
Out[0]:

Действующее значение пилообразного сигнала равно $U_m/1.73$, то есть пилообразный сигнал амплитудой 1 имеет действующее значение 0.578.

Но на графике мы видим, что вольтметр по-прежнему возвращает нам 0.707. Это значение обусловлено его принципом работы, из-за которого в измерениях появляется методическая погрешность.

Зная форму входного сигнала, эффект этой погрешности легко компенсировать путкм домножения на соответствующий коэффициент.

Заключение

При желании, в Engee можно создать модель вольтметра с точностью до инерции стрелки или до сегментных индикаторов. Отдельно реализовать выпрямитель, устройство постоянного тока и прочие элементы.

Но если цель моделирования состоит в том, чтобы продемонстрировать хорошо известные методические погрешности, их можно ввести при помощи блоков базовой библиотеки, что мы и сделали.

Блоки, использованные в примере