Сравнение техник моделирования AC/DC преобразователей
Сравнение техник моделирования AC/DC преобразователей
Описание модели
В этом примере показано, как использовать различные техники моделирования AC/DC преобразователей. Модель содержит три преобразователя:
-
Преобразователь с идеальными переключателями — для достижения высокой детализации в этой модели используются идеальные переключатели и защитные диоды, период дискретизации — 10 мкс.
-
Преобразователь с усреднёнными переключателями — для достижения высокой детализации даже при периоде дискретизации 50 мкс в этой модели используются усреднённые переключатели с усреднёнными сигналами ШИМ.
-
Преобразователь с усреднёнными переключателями и модуляцией синусоиды — для большего увеличения периода дискретизации и работы в качестве идеального усреднённого преобразователя в этой модели используются усреднённые переключатели и сигнал синусоиды вместо сигналов ШИМ, период дискретизации — 100 мкс.
Уровень детализации настраивается путем изменения значений параметра Тип переключателей. Использование более детализированной модели повышает точность результатов, но также замедляет моделирование.
Модель
Результаты моделирования
Загрузка модели:
model_name = "power_converter_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["vabc1"].time;
# вектора записанных сигналов
va1 = stack(results["vabc1"].value)'[:,1];
va2 = stack(results["vabc2"].value)'[:,1];
va3 = stack(results["vabc3"].value)'[:,1];
va_en = hcat(va1,va2,va3);
ia1 = stack(results["iabc1"].value)'[:,1];
ia2 = stack(results["iabc2"].value)'[:,1];
ia3 = stack(results["iabc3"].value)'[:,1];
ia_en = hcat(ia1,ia2,ia3);
iDC1 = results["iDC1"].value;
iDC2 = results["iDC2"].value;
iDC3 = results["iDC3"].value;
iDC_en = hcat(iDC1,iDC2,iDC3);
va1 = stack(results["vabc1"].value)'[:,1];
va2 = stack(results["vabc2"].value)'[:,1];
va3 = stack(results["vabc3"].value)'[:,1];
va_en = hcat(va1,va2,va3);
График токов в фазе А на стороне нагрузки:
using Plots;
gr();
plot(sim_time, ia1, label = "Идеальные переключатели", xlabel = "Время, с", left_margin=5Plots.mm)
plot!(sim_time, ia2, label = "Усреднённые переключатели", ylabel = "Ток, А", bottom_margin=5Plots.mm)
plot!(sim_time, ia3, label = "Модуляция синусоиды", title = "ia", size = (800,450))
График напряжений фазы А на стороне нагрузки:
plot(sim_time, va1, label = "Идеальные переключатели", xlabel = "Время, с", left_margin=10Plots.mm)
plot!(sim_time, va2, label = "Усреднённые переключатели", ylabel = "Напряжение, В", bottom_margin=5Plots.mm)
plot!(sim_time, va3, label = "Модуляция синусоиды", title = "va", size = (800,450))
Токи потребляемые преобразователями со стороны постоянного тока:
gr()
plot(sim_time, iDC1, label = "Идеальные переключатели", xlabel = "Время, с", left_margin=5Plots.mm)
plot!(sim_time, iDC2, label = "Усреднённые переключатели", ylabel = "Ток, А", bottom_margin=5Plots.mm)
plot!(sim_time, iDC3, label = "Модуляция синусоиды", title = "iDC", size = (800,450))
Рассмотренные техники моделирования можно применять следующим образом:
- Детальная модель — применяется для финального этапа разработки или для моделирования в реальном времени на КПМ РИТМ с использованием ПЛИС.
- Усреднённая модель с усреднением ШИМ — компромиссный вариант между точнотью и скоростью моделирования. Можно применять на этапе разработки устройства и системы управления или для моделирования в реальном времени на КПМ РИТМ с использованием центрального процессора.
- Усреднённая модель с модуляцией синусоиды — самый быстрый способ моделирования, но и менее точный с точки зрения переходных процессов. Можно применять на этапе разработки устройств и систем управления или для моделирования в реальном времени на КПМ РИТМ с использованием центрального процессора.
Сравнение результатов моделирования с аналогичной моделью в Simulink.
Модель разработана по аналогии с примером в Simulink Power Converter Model Fidelity Comparison. Внешний вид модели:
Сигналы из модели Simulink были заранее записаны и сохранены в mat файлы. Загрузка данных из mat файлов:
using MAT
data = matread("$(@__DIR__)/iDC.mat")
iDC = data["iDC"]';
data2 = matread("$(@__DIR__)/ia.mat")
ia = data2["ia"]';
data3 = matread("$(@__DIR__)/va.mat")
va = data3["va"]';
Сравнение токов в фазе А на стороне нагрузки
n = 1; # номер преобразователя сверху вниз
p1 = plot(ia[:,1], ia[:,n+1], label = "Simulink", title = "ia")
plot!(p1, sim_time, ia_en[:,n], label = "Engee", left_margin=15Plots.mm)
p2 = plot(ia[:,1], ia_en[:,n] - ia[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Ток, А")
Сравнение напряжений фазы А на стороне нагрузки:
n = 1; # номер преобразователя сверху вниз
p1 = plot(va[:,1], va[:,n+1], label = "Simulink", title = "va")
plot!(p1, sim_time, va_en[:,n], label = "Engee", left_margin=15Plots.mm)
p2 = plot(va[:,1], va_en[:,n] - va[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Напряжение, В")
Сравнение токов потребляемых преобразователями со стороны постоянного тока:
n = 1; # номер преобразователя сверху вниз
p1 = plot(iDC[:,1], iDC[:,n+1], label = "Simulink", title = "iDC")
plot!(p1, sim_time, iDC_en[:,n], label = "Engee", left_margin=15Plots.mm)
p2 = plot(iDC[:,1], iDC_en[:,n] - iDC[:,n+1], label = "Ошибка", bottom_margin=5Plots.mm)
plot(p1, p2, layout=(2,1), size = (800,450), xlabel = "Время, с", ylabel = "Ток, А")