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

Дифференцирующее звено на операционном усилителе

В данном примере будет продемонстрировано моделирование дифференцирующего звена с помощью командного управления моделью в редакторе скрипта Engee, а также запуск модели из среды Simulink.

Модель дифференцирующего звена на операционном усилителе собрана с помощью библиотек электрических элементов. Электрические элементы представлены источником напряжения, сопротивлением, ёмкостью, а также идеальным операционнным усилителем.

Модель дифференцирующего звена (модель ssc_differentiator_op_amp.engee) :

image.png

Реализация запуска модели с помощью программного управления

using Plots
using MATLAB
using CSV
using DataFrames
using Statistics

gr();

mat"start_simulink"
mat"p = genpath('/user/start/examples'); addpath(p);"

Загрузка модели:

modelName = "ssc_differentiator_op_amp";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");

Запуск загруженной модели:

results = engee.run( modelName )
Dict{String, DataFrame} with 2 entries:
  "V2" => 2001×2 DataFrame…
  "V1" => 2001×2 DataFrame…

Загрузка и визуализация данных, полученных в ходе симуляции

Получение данных о напряжении, снимаемом с вольтметров:

DiffOpAmp_t = results["V1"].time;
DiffOpAmp_d1 = results["V1"].value;
DiffOpAmp_d2 = results["V2"].value;

Построение графика, описывающего изменение напряжения.

p_adc_da_e = plot(DiffOpAmp_t ,DiffOpAmp_d2 , legend = false)
plot!(DiffOpAmp_t ,DiffOpAmp_d1 , legend = false)
plot!(title = "Результаты моделирования в Engee", ylabel = "Напряжение, В", xlabel="Время, c")

interactive-scripts/images/physmod_demo_op_amp_differentiator/805e82ab9e003af8a410750be351e0fa4ea7b6dd

Такая же схема может быть промоделирована и в SimScape:

image.png

Запуск модели в Simulink и загрузка результатов в переменные:

mat"run_test_model('ssc_opamp_differentiator_demo');";
sl_diff_opamp_values = mat"SysOutput.Data";
sl_diff_opamp_times = mat"SysOutput.Time";

Вывод результатов моделирования в SimScape:

plot(sl_diff_opamp_times, sl_diff_opamp_values, legend = false)
plot!(title = "Результаты моделирования в Simulink", ylabel = "Напряжение", xlabel="Время, c")

interactive-scripts/images/physmod_demo_op_amp_differentiator/d794b2102da5434d1c2cb1bc84280af8c81d9e57

Наложим дифференцированные сигналы:

plot(DiffOpAmp_t ,DiffOpAmp_d1, label = "Engee")
plot!(title = "Сравнение результатов моделирования")
plot!(sl_diff_opamp_times, sl_diff_opamp_values, label = "Simulink")
plot!(legend = :outertopright,ylabel = "Цифровой сигнал", xlabel="Время, c")

interactive-scripts/images/physmod_demo_op_amp_differentiator/3ec8bcf64089a4e441616353f55b1696795f8464

Вывод

В данном примере было продемонстрировано моделирование дифференцирующего звена с помощью командного управления моделью в редакторе скрипта Engee, а также запуск модели из среды Simulink. Расчёты показали минимальную разницу в результатах при запуске симуляции в этих двух средах.

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