Сообщество Engee

Сравнение техник моделирования DC/DC преобразователей

Автор
avatar-ilyaberdyshevilyaberdyshev
Соавторы
avatar-daniil_timofeevdaniil_timofeev
Notebook

Сравнение техник моделирования DC/DC преобразователей

Описание

В этом примере показано, как использовать различные техники моделирования DC/DC преобразователей. Подсистема управления содержит генератор ШИМ. Модель содержит три преобразователя:

  • Преобразователь с идеальным переключателем — для достижения высокой детализации в этой модели используется идеальный переключатель, период дискретизации — 10 мкс.
  • Преобразователь с усреднённым переключателем — для достижения высокой детализации даже при периоде дискретизации 50 мкс в этой модели используется усреднённый переключатель с усреднённым сигналом ШИМ.
  • Преобразователь с усреднённым переключателем и коэффициентом заполнения — для большего увеличения периода дискретизации и работы в качестве идеального усреднённого преобразователя в этой модели используется усреднённый переключатель и сигнал коэффициента заполнения вместо сигнала ШИМ, период дискретизации — 100 мкс.

Модель

dc_dc_fidelity_1760347884361.png

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

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

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

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

results = engee.run(model_name);

Для импорта результатов моделирования было заранее включено логирование необходимых сигналов и заданы их имена. Преобразуем результаты моделирования из переменной results:

# вектор времени симуляции
sim_time = results["i2_1"].time;
# вектора записанных сигналов
i2_1 = results["i2_1"].value;
i2_2 = results["i2_2"].value;
i2_3 = results["i2_3"].value;
i2_en = hcat(i2_1,i2_2,i2_3);
i1_1 = results["i1_1"].value;
i1_2 = results["i1_2"].value;
i1_3 = results["i1_3"].value;
i1_en = hcat(i1_1,i1_2,i1_3);
v2_1 = results["v2_1"].value;
v2_2 = results["v2_2"].value;
v2_3 = results["v2_3"].value;
v2_en = hcat(v2_1,v2_2,v2_3);

График тока, потребляемого преобразователем (i1):

using Plots;
gr();
plot(sim_time, i1_1, label = "Идеальный переключатель", xlabel = "Время, с", left_margin=5Plots.mm)
plot!(sim_time, i1_2, label = "Усреднённый переключатель", ylabel = "Ток, А", bottom_margin=5Plots.mm)
plot!(sim_time, i1_3, label = "Коэффициент заполнения", title = "i1", size = (800,450))
No description has been provided for this image

График тока нагрузки (i2):

plot(sim_time, i2_1, label = "Идеальный переключатель", xlabel = "Время, с", left_margin=5Plots.mm)
plot!(sim_time, i2_2, label = "Усреднённый переключатель", ylabel = "Ток, А", bottom_margin=5Plots.mm)
plot!(sim_time, i2_3, label = "Коэффициент заполнения", title = "i2", size = (800,450))
No description has been provided for this image

График напряжения на нагрузке (v2):

plot(sim_time, v2_1, label = "Идеальный переключатель", xlabel = "Время, с", left_margin=5Plots.mm)
plot!(sim_time, v2_2, label = "Усреднённый переключатель", ylabel = "Напряжение, В", bottom_margin=5Plots.mm)
plot!(sim_time, v2_3, label = "Коэффициент заполнения", title = "v2", size = (800,450))
No description has been provided for this image

Рассмотренные техники моделирования можно применять следующим образом:

  • Детальная модель — применяется для финального этапа разработки или для моделирования в реальном времени на КПМ РИТМ с использованием ПЛИС.
  • Усреднённая модель с усреднением ШИМ — компромиссный вариант между точнотью и скоростью моделирования. Можно применять на этапе разработки устройства и системы управления или для моделирования в реальном времени на КПМ РИТМ с использованием центрального процессора.
  • Усреднённая модель с коэффициентом заполнения — самый быстрый способ моделирования, но и менее точный с точки зрения переходных процессов. Можно применять на этапе разработки устройств и систем управления или для моделирования в реальном времени на КПМ РИТМ с использованием центрального процессора.

Сравнение результатов моделирования с аналогичной моделью в Simulink.

Модель разработана по аналогии с примером в Simulink DC-DC Converter Model Fidelity Comparison. Внешний вид модели:

izobrazhenie.png

Сигналы из модели Simulink были заранее записаны и сохранены в mat файлы. Загрузка данных из mat файлов:

using MAT
data = matread("$(@__DIR__)/i2.mat")
i2 = data["i2"]';
data2 = matread("$(@__DIR__)/i1.mat")
i1 = data2["i1"]';
data3 = matread("$(@__DIR__)/v2.mat")
v2 = data3["v2"]';

Сравнение тока, потребляемого преобразователем (i1):

n = 1; # номер преобразователя сверху вниз
p1 = plot(i1[:,1], i1[:,n+1], label = "Simulink", title = "i1")
plot!(p1, sim_time, i1_en[:,n], label = "Engee", left_margin=20Plots.mm)
p2 = plot(i1[:,1], i1_en[:,n] - i1[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Ток, А")
No description has been provided for this image

Сравнение тока нагрузки (i2):

n = 1; # номер преобразователя сверху вниз
p1 = plot(i2[:,1], i2[:,n+1], label = "Simulink", title = "i2")
plot!(p1, sim_time, i2_en[:,n], label = "Engee", left_margin=15Plots.mm)
p2 = plot(i2[:,1], i2_en[:,n] - i2[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Ток, А")
No description has been provided for this image

Сравнение напряжения на нагрузке (v2):

n = 1; # номер преобразователя сверху вниз
p1 = plot(v2[:,1], v2[:,n+1], label = "Simulink", title = "v2")
plot!(p1, sim_time, v2_en[:,n], label = "Engee", left_margin=15Plots.mm)
p2 = plot(v2[:,1], v2_en[:,n] - v2[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Напряжение, В")
No description has been provided for this image