可控晶闸管T123-200带冷却器O123
此交互式脚本显示了一种开发和测试带有T123-200功率晶闸管和O123冷却器的单相晶闸管稳压器模型的方法。 该材料适用于工程师和学生,他们在Engee建立电力电子物理模型,并希望将模块的参数与设备的护照数据、热计算和脉冲相位控制算法联系起来。 使用模型示例 VT.engee 考虑了晶闸管细节级别的选择、开态损耗的计算、热路的选择、RL负载的合理性、RC保护电路、去耦门控制电路和SIFU子系统。 代码单元执行控制分析计算,在不更改源文件的情况下运行模型,并绘制电流、电压、平均值和调整特性。 公式和计算过程基于数据集和参考文献.
1. 模型构建的方法
功率晶闸管控制器模型的开发不是从块的选择开始,而是从任务的物理边界的选择开始。 在教育和工程设置中,方便将模型分为四个部分:功率电路,控制电路,同步和相位控制系统以及热回路。 这种分离重复了真实器件的结构:能量通过晶闸管和负载的阳极-阴极转移,通过单独的低功率通道引入控制脉冲,并且通过外壳和散热器从半导体结构
在Engee中,为功率晶闸管选择了一个块 Thyristor,不是一个完美的钥匙。 原因很基本:计算需要保持电流、控制电流和电压、开路压降、热端口和表格式VAC。 理想的密钥有利于算法的逻辑验证,但它不能提供正确的损耗和温度。 [Engee文档](https://engee.com/helpcenter/stable/cn/fmod-electrical-semiconductors/thyristor.html )明确指出块 Thyristor 它可以通过等效晶体管电路或开态VAC表进行参数化;该表对于工业设备的passport模型更方便,因为它更接近passport[8]的图表。
功率部分作为感性负载上的受控整流而构建。 电感不允许瞬时电流损失,因此模型需要一个带有二极管的自由通支路。 RC电路与晶闸管平行放置,作为开关浪涌阻尼器和限制电压变化率的元件。 . 晶闸管的导热口连接散热器和介质的导热质量。
在这个例子中,我们将组装以下示意图:
密钥K1在此用理想的半导体密钥代替。 К,由脉冲相位控制系统控制。
2. 从晶闸管的尺寸到块参数
护照数据首先被转换为模型实际使用的一组参数。 对于T123-200,计算要求:一个重复电压类 、开路状态的平均电流和电流 和 ,保持电流 、控制参数 和 、开路状态的阈值电压 ,动态电阻 ,转变的限制温度 、热阻 和 .
电压等级是根据具有裕量的闭合晶闸管上的最大电压来选择的。 对于网络 幅度等于
第6类 对于这样的网络是不够的,因此模型具有 ,对应于T123-200-16版本。 这为网络峰值和反复出现的过电压提供了裕量。
打开状态由表格依赖项设置 . 护照给出了VAX的图表,因此,您需要从中选择几个点并输入 I_on_vector 和 V_on_vector. 如果只有线性近似可用,请使用
该近似值用于功率半导体器件损耗的参考计算;它也在Gost R IEC61800-4-2012的附录C中给出了开路晶闸管中的损耗[4]。
3. 损耗和控制脉冲的计算
开路状态下的平均损耗功率由平均和有效电流值估计:
第一项描述条件阈值压降时的损耗,第二项描述VAC内阻处的欧姆损耗。 对于初始评估,在最大转变温度下取值,因为热计算必须是保守的。
控制电路必须保证控制电极的电流高于额定电流 . 在实际计划中,储备是因为 它取决于温度,设备的传播和脉冲的形状。 这种技术使用验证
对于源 ,解锁电压 和连续抵抗 估计电流为
它更高 .
因此,在模型中,控制脉冲通过具有源,键,变压器,二极管和电阻器的真实电气分支供应,而不是控制电极电路中的直接逻辑信号:该方法保留了控制电流的
4. O123晶闸管散热器模型的参数化
模型中的散热器根据护照进行参数化。 如果需要动态热图像,重要的是不要用通常的恒定热阻替换散热器:护照指定了质量,材料和热阻以及块 Радиатор 在Engee中,您不仅可以设置静态散热,还可以设置热容量。
O123护照基本资料:
| 参数 | 指定;指定 | 意义 |
|---|---|---|
| 额定功率损耗 | ||
| 自然冷却过程中的热阻 | ||
| 强制冷却时的热阻 | ||
| 散热器重量 | ||
| 铝合金的比热容 |
动态特性
散热器的质量直接从护照上取下: . 该材料规定为耐腐蚀铝合金,因此可以接受典型值。
散热器容量:
瞬态热过程需要此参数。:超过 在相同的功率耗散下,散热器温度升高的速度越慢。
稳态的参考点
热阻的公式:
因此,额定功率和自然对流时的温差:
此点用作构建块的表格依赖关系的参考点。 Радиатор: , .
自然对流的幂律模型
对于自然空气冷却,通过功率依赖来近似热流是很方便的:
对于自然对流,指标取 . 比率 位于参考点:
之后,散热器在选定的温度矢量下输出的功率计算为
该模型使用矢量 . 这组点便于表格参数化:它复盖低、中和接近标称散热器过热,而不会用不必要的点使模型过载。
替代线性估计
对于控制,您可以将幂律模型与线性模型进行比较。:
线性模型通过原点并假定恒定的热阻。 功率模型更好地反映了自然对流,其中传热强度随过热而变化。 因此,对于块 Радиатор 使用表格向量 根据幂律计算,并且线性估计仍然是控制的。
#=
散热器o123的参数化。
此单元格重复计算输入到散热器块的参数:
质量、比热容、温降矢量和功率输出矢量。
功率依赖性用于自然对流;放弃线性模型
作为恒定热阻的基准。
=#
using Printf
# O123的护照参数
P_nominal = 120.0 # 功率损耗,W
Rth_natural = 0.71 # 自然冷却时的热阻,°C/W
Rth_forced = 0.212 # 强制冷却时的热阻,°C/W
mass = 2.0 # 散热器重量,公斤
cp_aluminum = 900.0 # 铝合金比热容,J/(kg*K)
println("散热器o123的主要参数:")
println("重量:<质量kg")
println("比热容:<cp_铝J/(kg*K)")
println("额定功率:<P_nominal W")
println("热阻,自然冷却:<Rth_natural°C/W")
println("热阻,强制冷却:>Rth_forced°C/W")
# 模型的动态部分:热容量设置加热的惯性。
heatsink_heat_capacity = mass * cp_aluminum
println()
println("===动态特性===")
println("散热器重量: ", mass, " 公斤")
println("比热容: ", cp_aluminum, " J/(公斤*K)")
println("散热器容量: ", heatsink_heat_capacity, " J/K")
# 来自额定功率和Rth的自然对流的参考点。
delta_T_nominal = P_nominal * Rth_natural
println()
println("===参考点的计算===")
println("额定功率P= ", P_nominal, " 星期二")
println("热阻Rth= ", Rth_natural, " °C/W")
println("温差ΔT=P*Rth= ", round(delta_T_nominal, digits=2), " K")
println("参考点:(ΔT= ", round(delta_T_nominal, digits=2), " K, Q = ", P_nominal, " 星期二)")
# 对于自然对流,我们使用幂律Q=k*ΔT^n。
n = 1.25
k = P_nominal / (delta_T_nominal^n)
println()
println("===功率依赖参数===")
println("N=的指数 ", n)
println("系数k= ", round(k, digits=4))
println("公式:Q= ", round(k, digits=4), " * ΔT^", n)
# 向量ΔT对应于模型中辐射器的表格参数化。
delta_T_vector = [10.0, 30.0, 50.0, 70.0, 90.0]
Q_vector = [k * (dT^n) for dT in delta_T_vector]
println()
println("===用于模型参数化的向量===")
println("温差矢量ΔT,K:")
println(delta_T_vector)
println("输出功率q,W的矢量:")
println(round.(Q_vector, digits=1))
println()
println("数值表:")
println("<ΔT,K<Q,W<")
println("├───────┼─────────┤")
for (i, dT) in enumerate(delta_T_vector)
@printf("│ %6.1f │ %7.1f │\n", dT, Q_vector[i])
end
# 验证:在参考点,功率模型应返回P_nominal。
Q_check = k * (delta_T_nominal^n)
error = abs(Q_check - P_nominal)
println()
println("===检查计算===")
println("在ΔT= ", round(delta_T_nominal, digits=2), " K:")
println(" 估计功率Q= ", round(Q_check, digits=2), " 星期二")
println(" 额定功率= ", P_nominal, " 星期二")
println(" 错误率= ", round(error, digits=4), " 星期二")
println()
println("="^60)
println("模型的汇总参数")
println("="^60)
println("参数化方法:表格依赖性Q(ΔT)")
println("对流类型:自然")
println("向量ΔT,K:[", join(round.(delta_T_vector, digits=1), ", "), "]")
println("向量Q,W:[", join(round.(Q_vector, digits=1), ", "), "]")
println("散热器重量: ", mass, " 公斤")
println("比热容: ", cp_aluminum, " J/(公斤*K)")
# 线性模型仅用于与非线性自然对流进行比较。
Q_linear = [dT / Rth_natural for dT in delta_T_vector]
println()
println("===线性模型进行比较===")
println("热阻Rth= ", Rth_natural, " °C/W")
println("线性模型的向量Q,W:")
println(round.(Q_linear, digits=1))
println()
println("△ΔT,K△q幂律,W△Q线性,W△")
println("├───────┼─────────────────┼────────────────┤")
for (i, dT) in enumerate(delta_T_vector)
@printf("│ %6.1f │ %15.1f │ %14.1f │\n", dT, Q_vector[i], Q_linear[i])
end
string(
"Cth=", round(heatsink_heat_capacity; digits=1),
" J/K; delta_T_nom=", round(delta_T_nominal; digits=2),
" K; Q_vector=", join(round.(Q_vector; digits=1), ","),
)
5. 电气和控制单元的计算
网络源由幅度而不是电流值设置。:
由 期等于
需要RL负载来演示具有电流连续性和相移的模式。 通过感应电阻、阻抗模量和电磁时间常数来估计其参数:
为 和 我们得到 , , . 该时间常数表征负载电路中瞬态过程的动力学。 需要一个串联电阻的续流二极管(反向二极管),以保护功率电路免受可控硅闭合时感性负载电流突然变化造成的损坏。
RC电路具有时间常数
该电路为晶闸管电路中的动态过程设置阻尼路径。
空气的热质量使用公式计算
可能需要这个来模拟多边形环境的惯性。
6. 脉冲相位控制系统
SIFU是作为一个同步延迟从主电压转换到零。 座 Пересечение уровня 突出显示半周期的开始, RS-триггер 产生持续时间为 ,由块定义 Транспортное запаздывание,而 Переменное временное запаздывание 将释放力矩转移到控制角度设置的值。
在模型中设置角度:
限制器 Насыщение 设置可接受范围 . 对于当前正弦波,实际范围为 因此,下限不会使信号失真,而是在不同的赋值幅度下保护模型。 角度与延迟的关系:
由 这给出了一系列延迟 . 选择这种结构而不是任意脉冲发生器,因为它保留了相位控制的主要特性:打开时刻总是从电源电压的相位计算,而不是从独立的时钟计算。
7. 启动模型前的分析计算
下一个代码单元执行护照,电气和热值的控制计算。 在电池中检查网络幅值、晶闸管损耗、总热阻、过渡温度估计、RL负载参数、RC电路、虹吸延迟范围和控制电流储备。
此单元格无法访问 VT.engee 在数值建模之前,它需要作为初始数字的工程检查。
#=
这里只收集分析估计。 他们的目标是快速检查。,
在启动模型之前就护照数据和块参数达成一致。
公式本身包含在上面的文本中,下面留下了数字替换。
=#
# 护照和模型参数的计算
using Printf
f = 50.0
T = 1 / f
U_rms = 600.0
U_peak = sqrt(2) * U_rms
ITAVM = 200.0
ITRMS = 315.0
UT0 = 1.05
rT = 1.17e-3
P_TAV = UT0 * ITAVM + rT * ITRMS^2
Rth_jc = 0.080
Rth_ch = 0.020
Rth_ha_nat = 0.710
Rth_ha_forced = 0.212
Rth_ja_nat = Rth_jc + Rth_ch + Rth_ha_nat
Rth_ja_forced = Rth_jc + Rth_ch + Rth_ha_forced
T_ambient = 25.0
Tj_est_nat = T_ambient + P_TAV * Rth_ja_nat
Tj_est_forced = T_ambient + P_TAV * Rth_ja_forced
R_load = 6.0
L_load = 5e-3
X_L = 2*pi*f*L_load
Z_load = sqrt(R_load^2 + X_L^2)
tau_load = L_load / R_load
Rs = 100.0
Cs = 1e-4
tau_snubber = Rs * Cs
alpha_min = 90.0 - 82.0
alpha_max = 90.0 + 82.0
delay_min = alpha_min * T / 360
delay_max = alpha_max * T / 360
Vgate_source = 15.0
VGT = 3.5
IGT = 0.20
R2 = 7.0
Rg = 10.0
Ig_est = (Vgate_source - VGT) / (R2 + Rg)
rows = [
("网络周期T", T, "与"),
("Vm网络幅度", U_peak, "在"),
("ITAVM/ITRMS的晶闸管损耗", P_TAV, "星期二"),
("Rthja是自然的", Rth_ja_nat, "K/W"),
("Rthja强迫", Rth_ja_forced, "K/W"),
("自然冷却下的Tj评级", Tj_est_nat, "°C"),
("强制冷却的tj等级", Tj_est_forced, "°C"),
("负载感性电阻XL", X_L, "嗡"),
("负载阻抗模块|Z/", Z_load, "嗡"),
("加载时间常数L/R", tau_load, "与"),
("RC电路时间常数", tau_snubber, "与"),
("最小SIFU延迟", delay_min, "与"),
("最大SIFU延迟", delay_max, "与"),
("栅极控制电流估计", Ig_est, "但是"),
("库存至3*IGT", Ig_est / (3*IGT), "一次"),
]
for (name, value, unit) in rows
@printf("%-46s = %12.6g %s\n", name, value, unit)
end
string("U_peak=", round(U_peak; digits=2), " V; P_TAV=", round(P_TAV; digits=2), " W; Ig/(3IGT)=", round(Ig_est/(3IGT); digits=3))
8. 模型的程序启动和数据准备
下一个代码单元加载现有模型 VT.engee,暂时限制开放会话中的计算时间,启用必要端口的日志记录,开始建模并将结果转换为图形的数组。
限制 StopTime 以前 由于模型中设置了一个固定的步骤,因此它是出于实际原因而引入的。 并且接收到的大量积分会对与模型交互的便利性产生负面影响。
#=
启动模型。
该单元执行三个任务:准备环境。,
运行现有的Engee模型并将结果转换为数组。
=#
include("$(@__DIR__)/useful_functions.jl")
# 在上传之前,我们关闭同名模型,以免混合不同启动的结果。
try_close_model(model_name)
model_path = resolve_existing_file(model_file)
model = engee.load(model_path; force=true)
engee.open(model)
# 我们只记得状态栏中报告的初始设置。
original_stop_time = safe_model_param(model, "StopTime", "")
original_fixed_step = safe_model_param(model, "FixedStep", "")
original_solver = safe_model_param(model, "SolverName", "")
status_message = ""
# 当前会话中计算的时间限制。 不保存模型文件。
safe_set_model_param!(model, "StopTime", string(simulation_stop_time))
# 当前会话中的信号的临时记录。 不保存原始模型文件。
log_ports = [
"正弦发生器/1",
"电压传感器/1",
"电流传感器/1",
"偏移量/1", # 加热单元的温度从K转换到°C后
]
for port in log_ports
safe_set_log(port)
end
# 我们在配置日志记录后运行模型;Engee结果被读取为一组命名信号。
results = engee.run(model)
# 我们提取三个关键信号:打开角度,负载电压和负载电流。
(angle_xy, angle_key) = get_signal(results, ["alpha", "的正弦波发生器。1", "的正弦波发生器。主输出", "正弦波发生器"])
(vload_xy, vload_key) = get_signal(results, ["Vload", "的电压传感器。卸货,卸货", "的电压传感器。1", "的电压传感器。v_out"])
(iload_xy, iload_key) = get_signal(results, ["Iload", "电流传感器。卸货/卸货", "电流传感器。1", "电流传感器。i_out"])
# 在可视化之前,我们将瞬时信号细化到1000点。
t_alpha, alpha = thin(angle_xy[1], angle_xy[2]; max_points=max_plot_points)
t_v, vload = thin(vload_xy[1], vload_xy[2]; max_points=max_plot_points)
t_i, iload = thin(iload_xy[1], iload_xy[2]; max_points=max_plot_points)
# 我们计算一个网络周期的平均值,并将结果细化.
v_avg_full = moving_average_by_time(vload_xy[1], vload_xy[2], network_period)
i_avg_full = moving_average_by_time(iload_xy[1], iload_xy[2], network_period)
t_vavg, v_avg = thin(vload_xy[1], v_avg_full; max_points=max_plot_points)
t_iavg, i_avg = thin(iload_xy[1], i_avg_full; max_points=max_plot_points)
try_close_model(model_name)
9. 电流和电压波形
下面的代码单元绘制了两个基本图形:瞬时负载电压和瞬时负载电流。 使用这些示波图,检查晶闸管以相位延迟打开,感性负载电流不会立即停止,并且振幅在预期范围内。
# 该单元显示相位控制后的瞬时波形。
p1 = plot(t_v, [vload, iload]; label=["Vload" "Iload"], xlabel="t,与", ylabel="U,B;I,A", title="负载电压和电流", legend=:topright, size=(800, 400))
period = 600:800
p2 = plot(t_v[period], [vload[period], iload[period]]; label=["Vload" "Iload"], xlabel="t,与", ylabel="U,B;I,A", title="负载电压和电流", legend=:topright, size=(800, 400))
plot(p1, p2; layout=(2, 1), size=(800, 400))
10. 平均值与开口角的比较
下一个代码单元将网络周期内平均的电压和电流与打开角的信号进行比较 . 平均是在滑动窗口模拟的前一个单元格中执行的 ,即对于网络的一个周期 . 这样的图形不显示单独的切换边缘,而是负载对角度变化的缓慢调整反应。
# 在此,将周期的平均值与缓慢变化的打开角进行比较。
p3 = plot(t_vavg, [v_avg, alpha]; label=["平均(Vload),20毫秒窗口" "alpha"], xlabel="t,与", ylabel="Uavg,In;alpha,deg", title="平均电压", legend=:topright)
p4 = plot(t_iavg, [i_avg, alpha]; label=["平均(Iload),20毫秒窗口" "alpha"], xlabel="t,与", ylabel="Iavg,A;阿尔法,deg", title="平均电流", legend=:topright)
plot(p3, p4; layout=(2, 1), size=(800, 400))
11. 调整特性
下一个代码单元绘制平均输出值对打开角的依赖性。 起始点由索引丢弃 40:end 以减小计算开始时瞬态的影响。 此图便于工程输出:增加时 受控整流器的平均电压和电流减小,当角度减小时,它们增大。
# Alpha坐标中的图表显示了负载调整特性。
plot(alpha[40:end], [v_avg[40:end], i_avg[40:end]]; label=["Vload" "Iload"], xlabel="阿尔法,冰雹", ylabel="Uavg,B;Iavg,A", title="调整特性", legend=:topright, size=(800, 400))
12. 晶闸管外壳的温度
在模型的热部分,绝对温度传感器连接到晶闸管和散热器的热节点,单元 Смещение 将结果从开尔文转换为摄氏度。 因此,下图应读作外壳/接触热节点的温度,而不是晶体的温度。 连接用于估计转变温度
这里 它取自模拟, -晶闸管耗散的热功率, -结壳体的额定热阻。 如果是所需的转变温度,则将相应的内部热输出添加到模型中或通过损耗和 .
下一个代码单元从仿真结果中提取温度信号,将点的数量限制为 max_plot_points 它绘制了两条曲线:外壳的绝对温度和相对于初始值的过热度。 在短时间内 图形通常增长缓慢,因为散热器O123具有较大的热容量 . 这样的结果在物理上是预期的:电气过程以毫秒为单位建立,而热过程在更长的时间内发展。
# 该单元提取并绘制晶闸管外壳/热节点的温度。
# 名称列表已保持扩展,因为Engee可以通过行的名称返回信号。,
# 块名称或自动生成的端口名称。
(temp_xy, temp_key) = get_signal(results, [
"temp_VT_C",
"tempC",
"偏移。温度_c",
"偏移。1",
"偏移。主输出",
"绝对温度传感器。1",
])
t_temp, temp_case = thin(temp_xy[1], temp_xy[2]; max_points=max_plot_points)
temp_rise = temp_case .- first(temp_case)
p_temp1 = plot(
t_temp,
temp_case;
label=temp_key,
xlabel="t,与",
ylabel="Tcase, °C",
title="晶闸管外壳的温度",
legend=:topright,
)
p_temp2 = plot(
t_temp,
temp_rise;
label="ΔTcase",
xlabel="t,与",
ylabel="ΔT, °C",
title="壳体相对于初始值的过热",
legend=:topright,
)
plot(p_temp1, p_temp2; layout=(2, 1), size=(800, 400))
书目列表和参考来源
- 罗扎诺夫余。 K.,Ryabchitsky M.V.,Kvasnyuk A.A.[电力电子:大学教科书](https://www.studentlibrary.ru/book/ISBN9785383010235.html 莫斯科:梅出版社,2016年。
- Chizhenko I.M.,Rudenko V.S.,Senko V.I.转型的基本原理техники.
- Herman-Galkin S.G.MATLAB6.0中半导体系统的计算机仿真。 圣彼得堡:KORONA print,2001。
- GOST R IEC61800-4-2012.速度控制的电力驱动系统。
- Grebennikov V.V.特征研究тиристоров
- 赛米控丹佛斯。 应用手册电源Semiconductors.
- 恩吉。 软件脚本管理。
- 恩吉。 Thyristor.
- 恩吉。 散热器。
- 护照
Тиристор T123-200 datasheet.pdf. - 护照
Охладитель О123 datasheet.pdf.
.png)
.png)
.png)
.png)