DC/DC转换器建模技术比较
资料描述
此示例演示如何使用各种DC/DC转换器建模技术。 控制子系统包含PWM发生器。 该模型包含三个转换器:
-具有理想开关的转换器-为实现高细节,该型号采用理想开关,采样周期为10微秒。
-具有平均开关的转换器-为了实现高细节,即使采样周期为50微秒,该模型也使用具有平均PWM信号的平均开关。
-具有平均开关和填充因子的转换器—为了更多地增加采样周期并作为理想的平均转换器工作,该模型使用平均开关和填充因子信号而不是PWM信号,采样
模型
模拟结果
加载模型:
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 = "电流,A", bottom_margin=5Plots.mm)
plot!(sim_time, i1_3, label = "填充系数", title = "i1", size = (800,450))
负载电流图(i2):
plot(sim_time, i2_1, label = "完美的开关", xlabel = "时间,从", left_margin=5Plots.mm)
plot!(sim_time, i2_2, label = "平均开关", ylabel = "电流,A", bottom_margin=5Plots.mm)
plot!(sim_time, i2_3, label = "填充系数", title = "i2", size = (800,450))
负载电压图(v2):
plot(sim_time, v2_1, label = "完美的开关", xlabel = "时间,从", left_margin=5Plots.mm)
plot!(sim_time, v2_2, label = "平均开关", ylabel = "电压,V", bottom_margin=5Plots.mm)
plot!(sim_time, v2_3, label = "填充系数", title = "v2", size = (800,450))
考虑的建模技术可以应用如下:
-详细模型-用于开发的最后阶段或用于[KPM节奏]上的实时模拟(https://engee.com/community/ru/catalogs/projects/kpm-ritm-bystryi-start )使用Fpga。
-平均PWM平均模型是精度和仿真速度之间的折衷。 它可以在设备和控制系统的开发阶段使用,也可以使用中央处理器在KPM节奏上进行实时模拟。
-平均填充因子模型是最快的建模方法,但在瞬态方面也不太准确。 它可以在设备和控制系统的开发阶段使用,也可以使用中央处理器在KPM节奏上进行实时模拟。
模拟结果与Simulink中的类似模型的比较。
该模型与Simulink[DC-DC转换器模型保真度比较]中的示例类比开发(https://www.mathworks.com/help/sps/ug/dc-dc-converter-model-fidelity-comparison.html )。 模型的外观:
来自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 = "电流,A")
负载电流比较(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 = "电流,A")
负载电压比较(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 = "电压,V")
.png)
.png)
.png)
.png)
.png)
.png)